Skip to main content

"Chat with tuanzi ~"

Project description

NoneBotPluginLogo

NoneBotPluginText

nonebot-plugin-tuan-chatgpt

✨ 来和团子一起聊天吧~ ✨

license pypi python

📖 介绍

来与团子聊天吧!

基于 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

NoneBot

小派蒙|LittlePaimon by @CMHopeSunshine

nonebot-plugin-chatgpt by @A-kirami

nonebot_plugin_naturel_gpt by @KroMiose

nonebot-plugin-oachat by @Gin2O

ChatGPT 中文调教指南 by @PlexPt

Little Paimon with chatgpt by @meatjam

nonebot_plugin_biliav by @knva

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_tuan_chatgpt-0.2.3.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file nonebot_plugin_tuan_chatgpt-0.2.3.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_tuan_chatgpt-0.2.3.tar.gz
Algorithm Hash digest
SHA256 f3943650822da8ff912ba74dc7863f74f3f2dd60878d324112c0192eb1ef2def
MD5 96f386d15ab28e3bb88bad26a85244b4
BLAKE2b-256 37c79a56e9dcbb3165b9bb10c293610ee17bcaac8ccd5a144d67f21d32419473

See more details on using hashes here.

File details

Details for the file nonebot_plugin_tuan_chatgpt-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_tuan_chatgpt-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 33a97f7837a012567877a5c32653fd766ebae0a9cd687db2929af2cffbbe7542
MD5 f6bc83151ff3e5fe9ffbece688e2f15d
BLAKE2b-256 7f6dd27b737284e25ad4d6a18ba51bcceb759010059b12aff8e2ddca31992e96

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page