一个基于NoneBot框架的Ai聊天插件,对接OpenAi文本生成接口
Project description
💡功能列表
- 自动切换api_key: 支持同时使用多个openai_api_key,失效时自动切换
- 自定义人格预设: 可自定义的人格预设,打造属于你的个性化的TA
- 聊天基本上下文关联: 群聊场景短期记忆上下文关联,尽力避免聊天出戏
- 聊天记录总结记忆: 自动总结聊天记忆,具有一定程度的长期记忆能力
- 用户印象记忆: 每个人格对每个用户单独记忆印象,让TA能够记住你
- 人格切换: 可随时切换不同人格
- 数据持久化存储: 保存用户对话信息(使用pickle)
- 新增/编辑人格: 使用指令进行人格预设的编辑
- 潜在人格唤醒机制: 一定条件下,潜在人格会被主动唤醒
- 主动聊天参与逻辑: 尽力模仿人类的聊天参与逻辑,目标是让TA能够真正融入你的群组
- 回忆录生成: 记录你们之间的点点滴滴,获取你与TA的专属回忆
- 记忆编辑功能: 不小心让TA记住了奇怪的事情?要不还是忘了吧
📕使用方式
- 安装本插件并启用,详见NoneBot关于插件安装的说明
- 加载插件并启动一次NoneBot服务
- 查看自动生成的
config/naturel_gpt.config.yml
,并填入你的OpenAi_Api_key - 在机器人所在的群组或者私聊窗口@TA或者
提到
TA当前的人格名
即开始聊天 - 使用命令
rg / 人格设定 / 人格 / identity
即可查看bot信息和相关指令 - 启用后bot会开始监听所有消息并适时作出记录和回应,如果你不希望bot处理某条消息,请在消息前加上忽视符(默认为
#
,可在配置文件中修改)
🛠️参数说明 — config/naturel_gpt.config.yml
参数名 | 类型 | 释义 | 默认值 | 编辑建议 |
---|---|---|---|---|
OPENAI_API_KEYS | array | OpenAi的 `Api_Key,以字符串数组方式填入 | [''] | |
CHAT_HISTORY_MAX_TOKENS | int | 聊天记录最大token数 | 2048 | |
CHAT_MAX_SUMMARY_TOKENS | int | 聊天记录总结最大token数 | 512 | |
CHAT_MEMORY_MAX_LENGTH | int | 聊天记忆最大条数 | 12 | 超出此长度后会进行记忆总结并删除更早的记录 |
CHAT_MEMORY_SHORT_LENGTH | int | 短期聊天记忆参考条数 | 8 | |
CHAT_MODEL | str | 聊天生成的语言模型 | text-davinci-003 | |
CHAT_FREQUENCY_PENALTY | float | 聊天频率重复惩罚 | 0.4 | |
CHAT_PRESENCE_PENALTY | float | 聊天主题重复惩罚 | 0.6 | |
CHAT_TEMPERATURE | float | 聊天生成温度: 越高越随机 | 0.6 | |
CHAT_TOP_P | float | 聊天信息采样率 | 1 | |
IGNORE_PREFIX | str | 忽略前置修饰:添加此修饰的聊天信息将被忽略 | # | |
REPLY_MAX_TOKENS | int | 生成回复的最大token数 | 1024 | |
REQ_MAX_TOKENS | int | 发起请求的最大token数(即请求+回复) | 2048 | |
USER_MEMORY_SUMMARY_THRESHOLD | int | 用户聊天印象总结触发阈值 | 12 | 越小触发越频繁,推荐10-20 |
REPLY_ON_AT | bool | 在被 @TA 时回复 |
True | |
REPLY_ON_NAME_MENTION | bool | 在被 提及 时回复 |
True | 提及 即用户发言中含有当前bot人格名 |
PRESETS | dict | 人格预设集合 | 默认有四个预设,详见生成的配置文件 | |
NG_DATA_PATH | str | 数据文件目录 | ./data/naturel_gpt/ | 保存实现数据持久化 |
ADMIN_USERID | array | 管理员id,以字符串数组方式填入 | [''] | 只有管理员可删除预设 |
__DEBUG__ | bool | 是否开启DEBUG输出 | False | 开启可查看prompt模板输出 |
🤖行为逻辑QA
Q: 如何区分会话?
A: 根据群组(群聊场景)、私聊(个人)区分会话,即同一群组内共享一个会话,私聊窗口独占一个会话;不同人格的会话和记忆完全独立
Q: TA是如何产生回复的?
A: TA会根据 对话上下文(即最近几条聊天记录 不论是否与TA相关)、过往记忆(过去聊天记录的总结)、发起 @
或 提及
的用户印象(根据与该用户的聊天记录总结) 生成prompt模板,然后通过 OpenAi 的接口产生对应的回复发送,并且把产生的回复再填加入相应的聊天记录中
Q: TA如何记忆用户印象?
A: TA根据用户的id(通常是qq号)的 对TA发起 @
或 提及
的聊天记录、响应和历史印象 自动总结产生bot对每个用户的印象,该印象记录与会话无关(即多个会话共享),但各个人格之间信息相互独立
Q: 如何实现记录持久化保存?
A: 由于本项目的记忆保存与人格预设存在一定耦合,故使用了pickle直接对程序中使用的数据信息进行序列化后保存为本地文件,然后在程序启动的时候使用pickle加载,这样做的好处是代码实现简便,但由于运行过程数据信息几乎都保存在内存中,如果您的bot活跃用户过多(>1k)、或者人格预设过多(>100),可能会造成一定的性能负担,敬请见谅!
Q: 为什么我在编辑了配置文件中的人格预设信息后重载插件,编辑没有生效?
A: 由于用户数据信息与人格预设信息高度绑定,如果已经生成过pickle文件后程序不会再响应配置文件中人格预设的修改,而是会直接读取已有的pickle文件中的信息,您可以尝试使用 !rg
指令根据响应提示直接进行编辑,或者直接删除数据目录中的 .pkl
文件(注意:会造成bot记忆丢失)后重载程序重新生成
❔已知问题
- 程序在计算对话token数消耗时长过长,甚至高于生成回复的耗时,正在寻找更好的计算token数方案(但是过快的回复速度同时也会使bot表现不自然,导致bot拟人效果变差)
🎢更新日志
[2023/2/6] v1.1.3
注意:本次更新需要删除原bot记忆文件重新生成(即./data/naturel_gpt文件夹),否则可能产生无法预计的错误
- 修复了bot记忆串线的问题(多个群组同时使用场景下记忆混乱)
- 优化bot生成记忆和摘要的逻辑,小幅提高了bot回复的速度
- 优化了控制台输出
[2023/2/5] v1.1.2
- 新增了人格预设的 锁定/解锁 功能,锁定后非管理员无法编辑该预设
- 更新README文档
- 优化rg命令显示格式
- 微调了
config.py
中的一些默认参数 - 修复本插件拦截其它插件响应的问题,降低了本插件的响应优先级
- 更新了交流群信息(见本文档开头),欢迎各路大佬加入互相学习、一同探讨更新方向、分享更多玩法等
[2023/2/2] v1.1.1
- 修复查询人格错误的问题
[2023/2/2] v1.1.0
注意:本次更新需要删除原bot记忆文件重新生成(即./data/naturel_gpt文件夹),否则可能产生无法预计的错误
- 新增了预设编辑功能
- 新增自定义管理员id功能,管理员可以删除预设 / 修改锁定的预设
- 增加debug开关控制生成文本时的控制台输出(默认关闭)
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_naturel_gpt-1.1.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3717bb0e947f934dab45f1333bdf7a9196bc0d028d13a43098f97fd85765c015 |
|
MD5 | af7b407207c963217dbccd16ba246907 |
|
BLAKE2b-256 | 20343c4f1c86de11e8334802ff2a3c9329fac34a26a72dce0351eb63061abd1a |
Hashes for nonebot_plugin_naturel_gpt-1.1.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7669fa9272128ce71a228bfcad6ffede73b645095e4a169284377ac0136533df |
|
MD5 | 62077e3db16b0e2d1aef89f756709054 |
|
BLAKE2b-256 | 3638b08cbacee1869aa09980ef769735f430e076627a67803248b0a27b12ecb7 |