知乎文章:https://zhuanlan.zhihu.com/p/605791705
用于将openai服务或者其他自定义指令接入QQ的python server,具有如下功能:
- 支持回复权限,让机器人针对指定的人进行回答,其他人的回答不予理睬。
- 支持填入预设事实,来实现AI的人格识别等功能。
- 优化请求返回逻辑,极大程度避免AI多重回复的问题。
- 支持上下文环境(机器人记忆)
- 通过访问数据库来避免go-cqhttp消息发送失败。
- 应该支持python3.5以上的版本,反正python3.6~3.8都能用。
- Linux CentOS
克隆该项目后,你需要做的几步:
- 确保
main.py
和go-cqhttp
在同一目录下,如下结构:
config.yml
data
device.json
go-cqhttp
logs
main.py
qq_server
server.yaml
session.token
- 将openai key注册到环境变量
OPENAI_API_KEY
,确保os.environ['OPENAI_API_KEY']
不会报错 - 在
main.py
平级目录创建server.yaml
,里面写上你允许机器人回答的群号和用户的QQ:
response_user_ids:
- 123
response_group_ids:
- 111
上述的配置会使得机器人只会回答QQ号为123的人的私聊,或者群号为111中的123的@;其他人的@或者私聊它不会回答;其他群的QQ号为123的用户的@它不会回答。
所谓不会回答就是这样一个情况:
其中发送的表情包可以在./qq_server/express_package.py
中调整,默认是从CommonLib这个列表中随机一张图出来。
你还可以在server.yaml
中添加预设事实:
preset_facts:
- "你现在是Tiphereth,锦恢创造的AI助手"
- "你的本体在位于北京的服务器中"
- "你最喜欢的食物是奶茶、麻薯"
- "你喜欢音乐,尤其喜欢交响乐和弛放音乐"
- "如果有人问你智障问题,完全可以忽略提问者"
你完全可以添加自己的预设。
- 安装所需要的库
pip3 install gevent flask openai requests colorama pyyaml psutil
- 测试openai-api:
# 可能要等个2-10秒
python3 test.py
- 开启虚拟终端后运行
screen -S qqbot-server
python3 main.py
玩得愉快!有问题欢迎提issue!
我还加了一个简单的指令系统:
通过tip.command.XXX就能调用,想要拓展自己的指令只需要在我的项目的qq_server/tip_command.py
编写函数即可,函数需要满足:
- 完整的输入参数的类型标注
- 返回值为字符串或者返回类型自带__str__方法
- 不能以下划线开头
比如你要实现一个乘法函数,只需要在qq_server/tip_command.py
中编写:
def multiple(a: int, b: int) -> str:
return a * b
然后重新运行,在QQ聊天框中输入tip.command.multiple 1 2,就会返回2