Suxmx / nonebot_plugin_chatgpt_on_qq

基于chatGPT-3.5-turboAPI的nonebot插件
51 stars 9 forks source link
NoneBotPluginLogo

NoneBotPluginText

# 多功能ChatGPT插件 ✨基于chatGPT API的nonebot插件✨ pypi python

介绍

会话

配置

指令

安装

推荐使用 nb plugin install nonebot-plugin-chatgpt-on-qq 一键安装

如果使用pip安装需要手动将插件在pyproject.toml中加载

配置项

所有 必填的配置项,都可以不写进配置文件,如果这样做了,则这些配置项会取 默认值 中的内容,否则会取配置文件中写入的值,所以如果不清楚具体含义的可以直接不在配置文件中写入这些配置。

唯一 必填 的配置项只有 api_key ,如果你只有一个api_key,可以直接填写字符串,例如 api_key="sk-xxx..." ,如果你有多条key,可以填写字符串列表,例如 api_key=["sk-xxx...", "sk-yyy...", "sk-zzz..."]
注意:如果填写多条api key,配置文件中 api_key = ["sk-xxx...", "sk-yyy...", "sk-zzz..."] 最后一个key后面不能接逗号!
如果想要换行 在列表前后加上单引号!

api_key = '["sk-xxx...", 
 "sk-yyy...", "sk-zzz...",
 "sk-jjj..."]'

另外,如果在国内的话,代理虽然不是 必填 项,但是没有的话是无法连接到 openai 的,所以算是必填项,正向代理使用 openai_proxy ,例如 openai_proxy="127.0.0.1:1080" (前提是你有代理,这只是个例子)

customize_prefix 可以修改插件指令的公共前缀 默认是"/",可以修改成别的,或者直接使用空字符串 customize_prefix="" 则去掉这个前缀,建议设置为空字符串或者别的

部分非必填配置项介绍 `allow_private` 是否允许私聊触发插件 `at_sender` 回复是否@发送者 `key_load_balancing` 选项可以选择是否开启apikey的负载均衡,可以简单理解为是否每次从所有key中随机选一个进行使用,默认为否(即一直使用同一个 key 直到失效再切换下一个)
因为据说同一个 ip 不能同时调用多个apikey,尤其是短时间调用量很大的情况(不过个人没有测试过),所以默认为关闭负载均衡。如果想开启可能代理软件也需要多 ip 负载均衡或者自己做ip池(大概…
所以自己决定要不要开启吧~ `history_max` 和 `history_save_path` 是会话的全部历史记录,保存在本地;`chat_memory_max` 是会话与gpt交互时记忆的上下文最大聊天记录长度,实际上只是全部历史记录中的一部分,可以理解为他的记忆; `preset_path` 是预设模板存放的文件夹,一般不需要改动 `default_only_admin` 群组默认会话管理权限状态,默认为所有人均可创建管理会话
群组会话管理权限状态一共有两种:1、所有人均可以创建、管理会话;2、仅群主、管理员可以创建、管理会话,其余群员仅可加入对话
可以使用 `/chat auth on` 与 `/chat auth off` 指令切换会话管理状态,具体用法见下方指令介绍 `change_chat_to` 可以修改 `chat系` 指令 中的 "chat" 为自定义字符串,因为电脑版qq /chat xxx 会被自动转换成表情,所以支持自定义。比如 `change_chat_to="Chat"` 就可以让 `/Chat list` 触发 `/chat list` 指令 `customize_talk_cmd` 可以修改 `talk` 指令 中 "talk" 为自定义字符,因为 如果将公共前缀置空的话,"talk" 字符串比较常见可能容易引发误触,可以修改成其他的 比如 `customize_talk_cmd="gpt"` 可以让 `/gpt` 触发 `/talk` `auto_create_preset_info` 可以设置是否提示根据模板自动创建会话的信息,这条提示信息具体在用户不在任何会话时直接使用 `talk` 指令时触发,如果嫌太过频繁可以关闭。但只能关闭掉自动创建提示,主动创建会话仍旧有提醒。


所有配置项表格 | 配置项 | 必填 | 类型 | 默认值 | 说明 | |:-----------------------:|:--:|---------------|:------------------:|:-----------------------------------------------------------------------:| | api_key | 是 | str/List[str] | | 填入你的api_key,类似"sk-xxx...",支持多个key,以字符串列表形式填入,某个key失效后会自动切换下一个 | | allow_private | 否 | bool | true | 插件是否支持私聊,默认开启 | | at_sender | 否 | bool | true | 回复是否@发送者 | | | model_name | 否 | str | "gpt-3.5-turbo" | 模型名称,具体可参考官方文档 | | openai_proxy | 否 | str | None | 正向HTTP代理 (HTTP PROXY) | | timeout | 否 | int | 10 | 超时时间(秒) | | chat_memory_max | 否 | int | 10 | 设置会话记忆上下文数量,填入大于2的数字 | | history_max | 否 | int | 100 | 设置保存的最大历史聊天记录长度,填入大于2的数字 | | history_save_path | 否 | str | "data/ChatHistory" | 设置会话记录保存路径 | | openai_api_base | 否 | str |https://api.openai.com/v1| 其他api地址/反向代理 | | key_load_balancing | 否 | bool | false | 是否启用apikey负载均衡,即每次使用不同的key访问,默认为关,即一直使用一个key直到失效再切换 | | temperature | 否 | float | 0.5 | 设置使用gpt的理智值(temperature),介于0~2之间,较高值如`0.8`会使会话更加随机,较低值如`0.2`会使会话更加集中和确定 | | preset_path | 否 | str | "data/Presets" | 填入自定义预设文件夹路径 | | default_only_admin | 否 | bool | false | 群组默认会话管理权限状态,默认为所有人均可创建管理会话 | | change_chat_to | 否 | str | None | 因为电脑端的qq在输入/chat xxx时候经常被转换成表情,所以支持自定义指令前缀替换"chat" | | customize_prefix | 否 | str | "/" | 自定义命令前缀,不填默认为"/",如果不想要前缀可以填入空字符串 "" | | customize_talk_cmd | 否 | str | "talk" | 自定义和GPT会话的命令后缀,为了防止在去除前缀情况下talk因为常见而误触发可以自定义 | | auto_create_preset_info | 否 | bool | true | 是否发送自动根据模板创建会话的信息,如果嫌烦可以关掉,不过只能关掉自动创建的提示,主动创建的会一直有提醒 | | max_tokens | 否 | int | 1024 | 一次最大回复token数量 |


配置项示例 ``` api_key=["sk-xxx...", "sk-yyy...", ...] # 最后一个key后面不要加逗号,另外如果要多行则列表前后加单引号,参考上方介绍 at_sender=true key_load_balancing=false model_name="gpt-3.5-turbo" # 默认为gpt-3.5-turbo,具体可参考官方文档 temperature=0.5 # 理智值,介于0~2之间 openai_proxy="x.x.x.x:xxxxx" chat_memory_max=10 # 填入大于2的数字 history_max=100 # 填入大于2的数字 history_save_path="E:/Kawaii" # 填入你的历史会话保存文件夹路径,如果修改最好填绝对路径,不过一般不需要修改,可以直接删掉这一行 openai_api_base = "https://api.moonshot.cn/v1" # 其他api地址(需支持openai库) 如kimi / cloudflare workers,空字符串或留空都将不使用 timeout=10 preset_path="E:/Kitty" # 填入你的历史会话保存文件夹路径,如果修改最好填绝对路径,不过一般不需要修改,可以直接删掉这一行 allow_private=true # 是否允许私聊触发插件 default_only_admin=false change_chat_to="Chat" # 具体效果见上方介绍,如果不需要修改也可以直接删掉这一行 customize_prefix="/" # 具体效果见上方介绍,如果不需要修改也可以直接删掉这一行 customize_talk_cmd="talk" # 具体效果见上方介绍,如果不需要修改也可以直接删掉这一行 auto_create_preset_info=false # 具体效果见上方介绍,如果不需要修改也可以直接删掉这一行 max_tokens=1024 # 具体效果见上方介绍,如果不需要修改也可以直接删掉这一行 ```

基础指令

/chat help 获取指令帮助菜单
/chat auth 获取当前群会话管理权限状态
/chat auth on 设置当前群仅管理员可以管理会话
/chat auth off 设置当前群所有人均可管理会话
/talk <会话内容> 在当前会话中进行会话

/chat new 根据预制模板prompt创建并加入一个新的会话
/chat new <自定义prompt> 根据自定义prompt创建并加入一个新的会话
/chat json 根据历史会话json来创建一个会话,输入该命令后会提示你在下一个消息中输入json
/chat cp 根据当前会话创建并加入一个新的会话
/chat cp <id> 根据会话为模板进行复制新建加入(id为/chat list中的序号)

/chat del 删除当前所在会话
/chat del <id> 删除序号为的会话(id为/chat list中的序号)
/chat clear 清空本群全部会话
/chat clear <@user> 删除@用户创建的会话

/chat join <id> 加入会话(id为/chat list中的序号)
/chat rename <name> 重命名当前会话

/chat who 查看当前会话信息
/chat list 获取当前群所有存在的会话的序号及创建时间
/chat list <@user> 获取当前群查看@的用户创建的会话
/chat prompt 查看当前会话的prompt
/chat dump 导出当前会话json字符串格式的上下文信息,可以用于/chat json导入
/chat keys 脱敏显示当前失效api key,仅主人

指令表格 | 指令 | 权限 | 需要@ | 范围 | 说明 | |:-----------------------:|:---------------:|:---:|:------:|:-----------------------------------------:| | `/chat help` | 群员 | 否 | 私聊/群聊 | 获取指令帮助菜单 | | `/chat auth` | 群员 | 否 | 群聊 | 获取当前群会话管理权限状态 | | `/chat auth on` | 主人/群主/管理员 | 否 | 群聊 | 设置当前群仅管理员可以管理会话 | | `/chat auth off` | 主人/群主/管理员 | 否 | 群聊 | 设置当前群所有人均可管理会话 | | `/talk <会话内容>` | 群员 | 否 | 私聊/群聊 | 在当前会话中进行会话 | | `/chat new` | 群员 | 否 | 私聊/群聊 | 根据预制模板prompt创建并加入一个新的会话 | | `/chat new <自定义prompt>` | 群员 | 否 | 私聊/群聊 | 根据自定义prompt创建并加入一个新的会话 | | `/chat json` | 群员 | 否 | 私聊/群聊 | 根据历史会话json来创建一个会话,输入该命令后会提示你在下一个消息中输入json | | `/chat cp` | 群员 | 否 | 私聊/群聊 | 根据当前会话创建并加入一个新的会话 | | `/chat cp ` | 群员 | 否 | 私聊/群聊 | 根据会话为模板进行复制新建加入(id为`/chat list`中的序号) | | `/chat del` | 主人/群主/管理员/会话创建人 | 否 | 私聊/群聊 | 删除当前所在会话 | | `/chat del ` | 主人/群主/管理员/会话创建人 | 否 | 私聊/群聊 | 删除序号为的会话(id为`/chat list`中的序号) | | `/chat clear` | 主人/群主/管理员 | 否 | 私聊/群聊 | 清空本群全部会话 | | `/chat clear <@user>` | 主人/群主/管理员/会话创建人 | 否 | 私聊/群聊 | 删除@用户创建的会话 | | `/chat join ` | 群员 | 否 | 私聊/群聊 | 加入会话(id为`/chat list`中的序号) | | `/chat rename ` | 主人/群主/管理员/会话创建人 | 否 | 私聊/群聊 | 重命名当前会话 | | `/chat who` | 群员 | 否 | 私聊/群聊 | 查看当前会话信息 | | `/chat list` | 群员 | 否 | 私聊/群聊 | 获取当前群所有存在的会话的序号及创建时间 | | `/chat list <@user>` | 群员 | 否 | 群聊 | 获取当前群查看@的用户创建的会话 | | `/chat prompt` | 群员 | 否 | 私聊/群聊 | 查看当前会话的prompt | | `/chat dump` | 群员 | 否 | 私聊/群聊 | 导出当前会话json字符串格式的上下文信息,可以用于`/chat json`导入 | | `/chat keys` | 主人 | 否 | 私聊 /群聊 | 脱敏显示当前失效api key,仅主人 |


版本历史 ### 1.6.1 - 修改指令菜单显示不变BUG - 修改会话本地文件会加载权限文件的BUG - 新增APIKeyPool,减少使用失效API导致的时间浪费 - 新增查看失效key指令:`/chat keys` - 新增配置项:`at_sender` 默认为true,回复会@发送者 ### 1.6.0 - 私聊支持多会话 - 支持群组内权限管理,仅管理员可以创建删除会话 - 新增管理会话权限相关指令:`/chat auth`、`/chat auth on` 、`/chat auth off` - 新增管理会话权限相关配置项:`default_only_admin` 群组默认会话管理权限状态,默认为所有人均可创建管理会话


使用效果预览(已过时) ### 利用模板创建新的会话 ![image](https://user-images.githubusercontent.com/33772816/223602899-77ce2c3b-5d0f-40c2-8183-65e8447d9bec.png) ### 与bot进行对话 ![image](https://user-images.githubusercontent.com/33772816/223603028-4aeda385-6d29-4c67-b7b3-5295e7d6976b.png) ### 查看所有会话列表 ![image](https://user-images.githubusercontent.com/33772816/223603171-da174c03-ed0a-465d-9fa5-078ebee0602c.png) ### 加入其他会话 ![image](https://user-images.githubusercontent.com/33772816/223603352-d72309c8-4339-4630-9eb9-8bea855787d5.png) ### 删除会话 ![image](https://user-images.githubusercontent.com/33772816/223603427-146a70ae-7e47-404e-8f80-04c98380e5ba.png) ### 导出json ![image](https://user-images.githubusercontent.com/33772816/223603499-52a2893f-14a7-4d58-9b6d-e8b3b3760d3f.png) ### 导入json并创建会话 ![image](https://user-images.githubusercontent.com/33772816/223603594-126b4b7a-4184-4129-bd72-fce62a90da8e.png)