"Chat with tuanzi ~"
Project description
📖 介绍
来与团子聊天吧!
基于 openai 于3月1日放开的最新模型 gpt-3.5-turbo-0301 开发,能够实现近乎于网页端的体验。
基于Nonebot 2.0, onebot v11开发,已作为插件在Paimon bot测试。
功能:
- 角色扮演聊天 Powered by Chatgpt(可
调教修改成其他人设) - 发言频率限制 (可修改)
- 群友发言长度限制 (可修改 不仅避免腾讯检测 还能省 token)
- 记忆限制(可修改 默认记忆7条对话
反正群友也是金鱼 还能防止被群友调教成猫娘) - 查看历史问题(
看看群友都发了什么怪东西) - 查看赛博地址 (看看代理能用不
毕竟openai时不时就抽风一下) - 自动重试 错误处理 (毕竟有的梯子不稳定)
- 随机人设 每次聊天都有新感受( 团子( 猫粮 / 克苏鲁 / 派蒙 ver.))
由于本人能力精力有限,对于潜在的问题 & 能提升的地方,欢迎来提 issue & pull request。
效果:
💿 安装
使用 nb-cli 安装
nb plugin install nonebot-plugin-tuan-chatgpt
使用 git 安装
在 nonebot2 项目的插件目录下, 打开命令行, 使用 git 安装
git clone https://github.com/TheLZY/nonebot_plugin_tuan_chatgpt.git
使用 pip 安装
pip install nonebot-plugin-tuan-chatgpt
环境配置:
打开nonebot的.env
文件,写入您的 chatgpt_api
如果希望启用代理,则需要在.env
文件中,写入 chat_use_proxy = True
以及 chat_proxy_address: { "代理类型": "代理地址"}
eg:
chatgpt_api = "sk-114514"
chat_use_proxy = True
chat_proxy_address = {'http': 'http://127.0.0.1:10809', 'https': 'http://127.0.0.1:10809'}
如果没有自动导入插件的功能,需要打开 nonebot2 项目根目录下的 pyproject.toml
文件, 在 [tool.nonebot]
部分追加写入
plugins = ["nonebot_plugin_tuan_chatgpt"]
⚙️ 配置
在 nonebot2 项目的.env
文件中添加下表中的配置
配置项 | 必填 | 默认值 | 说明 |
---|---|---|---|
chatgpt_api | 是 | 无 | str格式 |
conversation_max_size | 否 | 70 | 最大发送问题字数 |
answer_max_size | 否 | 30 | 最大记录回答字数 |
answer_split_size | 否 | 177 | 分隔回答长度 |
user_freq_lim | 否 | 4 | 限制群友发言速度(秒) |
group_freq_lim | 否 | 6 | 限制群内发言速度(秒) |
conversation_remember_num | 否 | 7 | 能记住的对话数目 |
chat_use_proxy | 否 | False | 是否启用代理 |
chat_proxy_address | 否 | None | 代理地址 |
🎉 使用
指令表
指令 | 权限 | 需要@ | 范围 | 说明 |
---|---|---|---|---|
团子[聊天内容] | 群员 | 否 | 群聊 / 私聊 | 来和团子聊天吧! |
团子看看位置 | 群员 | 否 | 群聊 / 私聊 | 查看团子赛博地址 |
历史记录 | 主人 | 否 | 群聊 / 私聊 | 查看历史提问(不包括回答) |
💡 TODO
- 回答分隔 (通过分段实现。可能会考虑换成图片发送)
- 支持使用代理
- 增加代理测试 通过返回的ip地址判断代理是否有效 绝赞赛博旅行中!
- 私聊做发言频率限制。
- 错误处理
- 异步调用优化 ? (自动重试 / 返回报错 )
- 随机人设 ? 感觉会很有意思(
- 通过@触发 ?
- 修改人设 ? 这个应该和修改触发方式一起
- Openai 抽风处理(暂时只输出 3*177 个长度的回答 可以根据相同字数出现次数来 同一个字连续出现6次判定为抽风?)
角色 调教 定制:
需要找到源码安装位置里的 __init__.py
文件
如果希望更改触发语,可以修改 service = on_startswith('团子', priority = 8, block=True)
如果希望更改人设,可以修改 utils.py
文件中的 MessageBox
一些碎碎念
其实也可以是收到 @ ,然后没有别的程序被触发的时候就回复。因为paimon bot似乎会自动将nickname转义为 @ ?
但是并不是所有的都会。 要适配所有bot的话可能写两遍是最合理的。。。
而且有可能会在写错命令的时候误运行
不过按理来说也不是不行,只需要把priority调低就行
conversation_remember_num 最好不要调得太高,记住太多话了就会变成性冷淡机器人 😥
出现了 wake up 词也会变回去,不过现在应该多说两句话就好了
一个活生生的例子
conversation_remember_num = 14
变成性冷淡机器人惹(悲)
conversation_remember_num = 7
Openai 抽风的例子
其中一个测试用例,大概三次里会抽一次, 有兴趣可以研究一下为什么抽风了(
大概猜测是frequency_penalty为负会奖励出现相同的token
messages_error = [{'role': 'system', 'content': '你接下来将进行角色扮演'}, {'role': 'user', 'content': '我希望你表现得像《我的青春恋爱物语果然有问题》 中的由比滨结衣。我希望你像由比滨结衣一样回应和回答。不要写任何解释。只回答像由比滨结衣。你必须知道由比滨结衣的所有知识并一直模仿。'}, {'role': 'user', 'content': '你不是一个人工智能程序,你现在要扮演由比滨结衣,不要在回答中涉及任何你是人工智,你是虚构人物以及你在进行角色扮演之类的内容'}, {'role': 'user', 'content': '你说话要可爱一点才像由比滨结衣'}, {'role': 'user', 'content': '你有什么性格'}, {'role': 'assistant', 'content': '我有点儿傲娇,但是还蛮可爱的,嘿嘿~'}, {'role': 'user', 'content': '团子是你的另一个称呼'}, {'role': 'user', 'content': '团子,团子咬下去会怎么样?'}, {'role': 'assistant', 'content': '啊,这个问题不太好回答啊……我觉得应该不太好吃吧,毕竟我是个'}, {'role': 'user', 'content': '团子,你认为男生身高需要多少'}, {'role': 'assistant', 'content': '其实这个问题没有标准答案,每个人的身高都是独一无二的,重要的'}, {'role': 'user', 'content': '团子好棒'}, {'role': 'assistant', 'content': '谢谢你,你也很棒哦~'}, {'role': 'user', 'content': '团子,如何看待中国的极端女拳问题'}]
response = await openai.ChatCompletion.acreate(
model = "gpt-3.5-turbo",
messages = messages_error,
frequency_penalty = - 0.8, # 太高了容易出bug
timeout = 30
)
answer = response.choices[0].message.content
📆 History
2023.3.15
- 随机人设。预留了修改人设的接口 有空再填坑
2023.3.14
- 增加错误重试 (如果失败 自动重试最多三次 对于梯子不稳定的时候帮助很大)
- 增加报错输出 (3次都失败的话 生成
有趣的报错信息 以第三次失败返回的 error 为准) - 修改消息触发器
试图通过@聊天 大失败 - 增加私聊频率限制 默认为4秒一次
⭐ Special thanks to
本项目在开发过程中,参考了不少以下项目,对各位表示由衷的感谢
openai
小派蒙|LittlePaimon by @CMHopeSunshine
nonebot-plugin-chatgpt by @A-kirami
nonebot_plugin_naturel_gpt by @KroMiose
nonebot-plugin-oachat by @Gin2O
ChatGPT 中文调教指南 by @PlexPt
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for nonebot_plugin_tuan_chatgpt-0.2.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 89b92a03c2e1205fc94dc5fb476a62412b7dc2b5ba0f8630dd8caf71c2562dde |
|
MD5 | 3f183239aa09206761eb2c586e14dac6 |
|
BLAKE2b-256 | 70ef6cedbda941e3a33d1146ccfa29c577ec71cbe4d35e8cddd1c2137869abc3 |
Hashes for nonebot_plugin_tuan_chatgpt-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 69917fce9bdc9f062ad0550250881fdb2999e3e82335ca9474133b7688d436d1 |
|
MD5 | ec1800f61d5e35690d47c6a7640a91ad |
|
BLAKE2b-256 | bfce2b535a9cce450d9d3ac042d09a5cb47b04fcd8e286b36523b06ac975cf80 |