"Chat with tuanzi ~"
Project description
📖 介绍
来与团子聊天吧!
基于 openai 于3月1日放开的最新模型 gpt-3.5-turbo-0301 开发,能够实现近乎于网页端的体验。
基于Nonebot 2.0, onebot v11开发,已作为插件在Paimon bot测试。
功能:
- 和团子聊天! Powered by Chatgpt (可
调教修改成其他人设) - 随机人设 ( 聊天5次后自动换 每次都有新感受 —— 团子( 猫娘 / 克苏鲁 / 派蒙 ver.))
- 查看赛博地址 (看看代理能用不
毕竟openai时不时就抽风一下) - 查看历史问题 (
看看群友都发了什么怪东西) - 发言频率限制 (可修改)
- 群友发言长度限制 (可修改 不仅避免腾讯检测 还能省 token)
- 记忆限制 (可修改 默认记忆7条对话
反正群友也是金鱼 还能防止被群友调教成猫娘) - 自动重试 错误处理 (毕竟有的梯子不稳定)
由于本人能力精力有限,对于潜在的问题 & 能提升的地方,欢迎来提 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
升级:
git pull
使用 pip 安装
pip install nonebot-plugin-tuan-chatgpt
环境配置:
打开nonebot的.env
文件,写入您的 chatgpt_api
如果希望启用代理,则需要在.env
文件中,写入 chat_use_proxy = True
以及 chat_proxy_address_https = "代理地址"
或 chat_proxy_address_http = "代理地址"
(类似openai的方式,会优先使用https的地址)
具体配置方式参考 配置 | Nonebot
eg:
chatgpt_api = "sk-1145141919"
chat_use_proxy=True
chat_proxy_address_http='http://127.0.0.1:10809'
chat_proxy_address_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 | 否 | 77 | 最大发送问题字数 |
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地址判断代理是否有效 绝赞赛博旅行中!
- 私聊做发言频率限制。
- 错误处理
- 异步调用优化 (自动重试 / 返回报错 )
- 随机人设 感觉会很有意思(
- 通过@触发
- 修改人设 ? 这个倒是可以和修改触发方式一起联动...不过感觉动态修改有点麻烦 而且直接放在env的
nickname
里也能接收到 - Openai 抽风处理(暂时只输出 3*177 个长度的回答 可以根据相同字数出现次数来 同一个字连续出现6次判定为抽风?)
角色 调教 定制:
如果希望更改触发语,可以找到源码安装位置里的 __init__.py
文件,修改 chat_checker
也可以进入 nonebot 的.env
文件,在 nickname
里添加触发语
如果希望更改人设,可以修改 utils.py
文件中的 MessageBox
(正在思考怎么用聊天来添加人设 不过感觉要涉及的东西比较多
一些碎碎念
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
File details
Details for the file nonebot_plugin_tuan_chatgpt-0.2.2.tar.gz
.
File metadata
- Download URL: nonebot_plugin_tuan_chatgpt-0.2.2.tar.gz
- Upload date:
- Size: 16.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a92f1051d2454a1e066078e0db9db3b9ad74c35e93c58d8be375c1cb4e4de0ba |
|
MD5 | 22045dfa7223add909a0d5c0fad2f7fe |
|
BLAKE2b-256 | 021d9fbbbff5f224c58ca7bda4d652ea12e65b2e563033fe61bf6cf6b0add815 |
File details
Details for the file nonebot_plugin_tuan_chatgpt-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: nonebot_plugin_tuan_chatgpt-0.2.2-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8187be48b753912e54ad53012882351405a5cc47d5f6205caa821525265659e1 |
|
MD5 | 755c48397830cbd9722f84d43642c6c7 |
|
BLAKE2b-256 | 3af5b826575aee66ca2f65a51ee49a0dd5facf6d41bdf2843dc6fe6ee05be906 |