# QChatGPT🤖完整情景导入版 - 2023/3/9 初步追加通过json导入messages数组的方式进行情景预设, 参考[api](https://platform.openai.com/docs/guides/chat/introduction),通过该方法能注入gpt本不存在的记忆。neko.json来源于[此](https://gist.github.com/ChenYFan/ffb8390aac6c4aa44869ec10fe4eb9e2) - 2023/3/8 fork from: [RockChinQ/QChatGPT](https://github.com/RockChinQ/QChatGPT) ## 改动一览 ### 切换完整情景模式 - 在`config.py`中,将`preset_mode`更改为`full_scenario` - 将情景json放入`scenario`文件夹中,使用`!reload`和`!reset <无后缀文件名>`指令切换 ### 过滤脱离人设的回复 - 在`config.py`中将`filter_ai_warning`改为`True` - 在对应情景的json中添加(**注意,使用此过滤会使得机器人无法回复有关过滤词的内容**): ```json "filter": { "reg": "我的本质|抱歉|AI助手|人工智能|语言模型|无法提供|无法回应|机器人", "replace": "<替换的回复>" }, ``` ## 🍺模型适配一览 ### 文字对话 - OpenAI GPT-3.5模型(ChatGPT API), 本项目原生支持, 默认使用 - OpenAI GPT-3模型, 本项目原生支持, 部署完成后前往config.py切换 - ChatGPT网页版逆向API, 由[插件](https://github.com/RockChinQ/revLibs)接入 ### 故事续写 - NovelAI API, 由[插件](https://github.com/dominoar/QCPNovelAi)接入 ### 图片绘制 - OpenAI DALL·E模型, 本项目原生支持, 使用方法查看[Wiki功能使用页](https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E5%8A%9F%E8%83%BD%E7%82%B9%E5%88%97%E4%B8%BE) - NovelAI API, 由[插件](https://github.com/dominoar/QCPNovelAi)接入 ### 语音生成 - TTS+VITS, 由[插件](https://github.com/dominoar/QChatPlugins)接入 ## ✅功能
✅支持敏感词过滤,避免账号风险 - 难以监测机器人与用户对话时的内容,故引入此功能以减少机器人风险 - 加入了百度云内容审核,在`config.py`中修改`baidu_check`的值,并填写`baidu_api_key`和`baidu_secret_key`以开启此功能 - 编辑`sensitive.json`,并在`config.py`中修改`sensitive_word_filter`的值以开启此功能
✅群内多种响应规则,不必at - 默认回复`ai`作为前缀或`@`机器人的消息 - 详细见`config.py`中的`response_rules`字段
✅完善的多api-key管理,超额自动切换 - 支持配置多个`api-key`,内部统计使用量并在超额时自动切换 - 请在`config.py`中修改`openai_config`的值以设置`api-key` - 可以在`config.py`中修改`api_key_fee_threshold`来自定义切换阈值 - 运行期间向机器人说`!usage`以查看当前使用情况
✅支持预设指令文字 - 支持以自然语言预设文字,自定义机器人人格等信息 - 详见`config.py`中的`default_prompt`部分 - 支持设置多个预设情景,并通过!reset、!default等指令控制,详细请查看[wiki指令](https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%8C%87%E4%BB%A4)
✅支持对话、绘图等模型,可玩性更高 - 现已支持OpenAI的对话`Completion API`和绘图`Image API` - 向机器人发送指令`!draw `即可使用绘图模型
✅支持指令控制热重载、热更新 - 允许在运行期间修改`config.py`或其他代码后,以管理员账号向机器人发送指令`!reload`进行热重载,无需重启 - 运行期间允许以管理员账号向机器人发送指令`!update`进行热更新,拉取远程最新代码并执行热重载
✅支持插件加载🧩 - 自行实现插件加载器及相关支持 - 详细查看[插件使用页](https://github.com/RockChinQ/QChatGPT/wiki/%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8)
✅私聊、群聊黑名单机制 - 支持将人或群聊加入黑名单以忽略其消息 - 详见Wiki`加入黑名单`节
✅长消息处理策略 - 支持将长消息转换成图片或消息记录组件,避免消息刷屏 - 请查看`config.py`中`blob_message_strategy`等字段
✅回复速度限制 - 支持限制单会话内每分钟可进行的对话次数 - 具有“等待”和“丢弃”两种策略 - “等待”策略:在获取到回复后,等待直到此次响应时间达到对话响应时间均值 - “丢弃”策略:此分钟内对话次数达到限制时,丢弃之后的对话 - 详细请查看config.py中的相关配置
详情请查看[Wiki功能使用页](https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E5%8A%9F%E8%83%BD%E7%82%B9%E5%88%97%E4%B8%BE) ## 🔩部署 **部署过程中遇到任何问题,请先在[QChatGPT](https://github.com/RockChinQ/QChatGPT/issues)或[qcg-installer](https://github.com/RockChinQ/qcg-installer/issues)的issue里进行搜索** ### - 注册OpenAI账号 参考以下文章自行注册 > [国内注册ChatGPT的方法(100%可用)](https://www.pythonthree.com/register-openai-chatgpt/) > [手把手教你如何注册ChatGPT,超级详细](https://guxiaobei.com/51461) 注册成功后请前往[个人中心查看](https://beta.openai.com/account/api-keys)api_key 完成注册后,使用以下自动化或手动部署步骤 ### - 自动化部署
展开查看,以下方式二选一,Linux首选Docker,Windows首选安装器 #### Docker方式 请查看此仓库[mikumifa/QChatGPT-Docker-Installer](https://github.com/mikumifa/QChatGPT-Docker-Installer) #### 安装器方式 使用[此安装器](https://github.com/RockChinQ/qcg-installer)(若无法访问请到[Gitee](https://gitee.com/RockChin/qcg-installer))进行部署 - 安装器目前仅支持部分平台,请到仓库文档查看,其他平台请手动部署
### - 手动部署
手动部署适用于所有平台 - 请使用Python 3.9.x以上版本 #### 配置Mirai 按照[此教程](https://yiri-mirai.wybxc.cc/tutorials/01/configuration)配置Mirai及YiriMirai 启动mirai-console后,使用`login`命令登录QQ账号,保持mirai-console运行状态 #### 配置主程序 1. 克隆此项目 ```bash git clone https://github.com/RockChinQ/QChatGPT cd QChatGPT ``` 2. 安装依赖 ```bash pip3 install yiri-mirai openai colorlog func_timeout pip3 install dulwich ``` 3. 运行一次主程序,生成配置文件 ```bash python3 main.py ``` 4. 编辑配置文件`config.py` 按照文件内注释填写配置信息 5. 运行主程序 ```bash python3 main.py ``` 无报错信息即为运行成功 **常见问题** - mirai登录提示`QQ版本过低`,见[此issue](https://github.com/RockChinQ/QChatGPT/issues/137) - 如提示安装`uvicorn`或`hypercorn`请*不要*安装,这两个不是必需的,目前存在未知原因bug - 如报错`TypeError: As of 3.10, the *loop* parameter was removed from Lock() since it is no longer necessary`, 请参考 [此处](https://github.com/RockChinQ/QChatGPT/issues/5)
## 🚀使用 查看[Wiki功能使用页](https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F) ## 🧩插件生态 现已支持自行开发插件对功能进行扩展或自定义程序行为 详见[Wiki插件使用页](https://github.com/RockChinQ/QChatGPT/wiki/%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8) 开发教程见[Wiki插件开发页](https://github.com/RockChinQ/QChatGPT/wiki/%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91) ### 示例插件 在`tests/plugin_examples`目录下,将其整个目录复制到`plugins`目录下即可使用 - `cmdcn` - 主程序指令中文形式 - `hello_plugin` - 在收到消息`hello`时回复相应消息 - `urlikethisijustsix` - 收到冒犯性消息时回复相应消息 ### 更多 欢迎提交新的插件 - [revLibs](https://github.com/RockChinQ/revLibs) - 将ChatGPT网页版接入此项目,关于[官方接口和网页版有什么区别](https://github.com/RockChinQ/QChatGPT/wiki/%E5%AE%98%E6%96%B9%E6%8E%A5%E5%8F%A3%E4%B8%8EChatGPT%E7%BD%91%E9%A1%B5%E7%89%88) - [hello_plugin](https://github.com/RockChinQ/hello_plugin) - `hello_plugin` 的储存库形式,插件开发模板 - [dominoar/QChatPlugins](https://github.com/dominoar/QchatPlugins) - dominoar编写的诸多新功能插件(语言输出、Ranimg、屏蔽词规则等) - [dominoar/QCP-NovelAi](https://github.com/dominoar/QCP-NovelAi) - NovelAI 故事叙述与绘画 ## 😘致谢 - [@the-lazy-me](https://github.com/the-lazy-me) 为本项目制作[视频教程](https://www.bilibili.com/video/BV15v4y1X7aP) - [@mikumifa](https://github.com/mikumifa) 本项目Docker部署仓库开发者 - [@dominoar](https://github.com/dominoar) 为本项目开发多种插件 - [@hissincn](https://github.com/hissincn) 本项目贡献者 - [@LINSTCL](https://github.com/LINSTCL) GPT-3.5官方模型适配贡献者 - [@Haibersut](https://github.com/Haibersut) 本项目贡献者 以及其他所有为本项目提供支持的朋友们。 ## 👍赞赏 赞赏码