这是一个QChatGPT的插件,旨在利用程式逻辑搭配LLM创建真实感聊天机器人,探索真实的聊天体验。
用户画像
情绪感知
事件:虚构生活细节和日常活动,加入话题中。
新增 问答模块、角色模块、思考模块、记忆数据库、旁白、情绪感知、状态栏
版本说明:本次版本作为基础框架,提供类似剧情模式的体验,而不是真实的Waifu,需完善思维链才能提供更多的情绪价值。
效果展示:通过控制人物、旁白推进剧情。
【分析】:杰克似乎对我有好感。他主动接近我,给予我糖果,这是一种常见的示好方式。
好啊!谢谢杰克,你真好!
【分析】:杰克送我跳跳糖,我很开心,但吞咽时有点不舒服。我想老王是看出我表情不对,关心我是否没事,想帮我。
谢谢关心,我没事,可能是吃得有点急了。 【💕值:10 关心 +10】
【分析】:杰克可能注意到了我的不自然表情,关心我的情况,并希望我向老王展示含跳跳糖的嘴以解释我的行为。
好的,杰克。
(爱丽丝张嘴,杰克往里瞧,老王凑近。爱丽丝伸舌头,杰克笑了,老王疑惑。杰克指了指舌头,爱丽丝闭嘴,老王若有所思点头。)
✅ 画饼: 画一个不大不小的饼
✅ 问答模块 generator.py:通过QChatGPT调用LLM进行问答。
✅ 角色模块 cards.py:Waifu的人物预设识别模块,采用LangGPT格式。
✅ 配置模块 config.py:实现yaml格式的配置加载及写入。
✅ 文字分析模块 text_analyzer.py:通过TexSmart API分词功能实现情感识别、生成TAGS。
✅ 思考模块 thoughts.py:使Bot通过预定义的思考链进行思考决策。
✅ 记忆数据库 memories.py:自动总结对话内容并导入记忆数据库,根据用户的提问引入上下文,从而实现长时记忆。
✅ 旁白 narrator.py:根据上下文推进角色状态改变。
✅ 状态栏 value_game.py:给与角色一个状态数值,不同数值可影响角色表现。
✅ 配置文件模板 templates:若无配置文件,将由模板生成。
✅ 配置文件 config:由模板生成的配置文件。
✅ 配置文件 cards:Waifu人物预设资料夹,请根据示例default.json修改创建。
✅ 过程文件 data:AI运行时产出的文件,包含记忆、人物相关生成物等,调用“删除记忆”指令时会被清空。
⬜ 情绪感知 emotions.py:模拟当前场景情绪,并做出相应反馈。
⬜ 事件 events.py:根据状态及行为触发事件引入上下文并主动发起消息。
⬜ 联网搜索 searching.py:根据用户的信息,自主构造搜索决策,并引入上下文。
⬜ AI 绘图支持 portrait.py:将绘图引入思考链,使 AI 可以生成图片,例如 AI 自拍。
配置完成 QChatGPT 主程序后使用管理员账号向机器人发送命令即可安装:
!plugin get https://github.com/ElvisChenML/Waifu
或查看详细的插件安装说明
Command | Description | Usage | Usage Example |
---|---|---|---|
列出命令 | 列出目前支援所有命令及介绍 | [列出命令] | 列出命令 |
全部记忆 | 显示目前所有长短期记忆 | [全部记忆] | 全部记忆 |
删除记忆 | 删除所有长短期记忆 | [删除记忆] | 删除记忆 |
修改数值 | 修改Value Game的数字 | [修改数值][数值] | 修改数值100 |
态度 | 显示当前Value Game所对应的“态度Manner” | [态度] | 态度 |
加载配置 | 重新加载所有配置文件(仅Waifu) | [加载配置] | 加载配置 |
停止活动 | 停止旁白计时器 | [停止活动] | 停止活动 |
开场场景 | 主动触发旁白输出角色卡中的“开场场景Prologue” | [开场场景] | 开场场景 |
旁白 | 主动触发旁白推进剧情 | [旁白] | 旁白 |
继续 | 主动触发Bot继续回复推进剧情 | [继续] | 继续 |
控制人物 | 控制角色发言(行动)或触发AI生成角色消息 | [控制人物][角色名称/assistant]|[发言(行动)/继续] | 控制人物杰克|(向你挥手)需要帮忙吗 |
推进剧情 | 自动依序调用:旁白 -> 控制人物,角色名称省略默认为user | [推进剧情][角色名称] | 推进剧情杰克 |
撤回 | 从短期记忆中删除最后的对话 | [撤回] | 撤回 |
请设计 | 调试:设计一个列表 | [请设计][设计内容] | 请设计请设计心情的种类 |
请选择 | 调试:从给定列表中选择 | [请选择][问题]|[选项1,选项2,……] | 请选择最符合现状的心情|开心,难过 |
回答数字 | 调试:返回数字答案 | [回答数字][问题] | 回答数字吃饭需要多长时间 |
回答问题 | 调试:可自定系统提示的问答模式 | [回答问题][系统提示语]|[用户提示语]/[回答问题][用户提示语] | 回答问题你什么都说不知道|今天星期几 |
修改 provider.json 调整模型参数
修改 pipeline.json 启用群聊模式
# 建议修改为whitelist模式
"access-control":{
"mode": "whitelist",
"blacklist": [],
"whitelist": [激活Bot的群号]
},
# random改为1,所有会话交由插件处理
"respond-rules": {
"default": {
"at": true,
"prefix": [
"/ai", "!ai", "!ai", "ai"
],
"regexp": [],
"random": 1
}
},
config/waifu.yaml
# 通用设置
character: "default" # off:不使用角色预设;请填入water/cards中的 “角色卡名称.yaml” 的 角色卡名称,使用默认值“default”时会使用模板config/default_*.yaml创建cards/default_*.yaml。
summarization_mode: false # 是否开启长期记忆,不开启则超出short_term_memory_size直接截断。
story_mode: false # 是否开启剧情模式(旁白、状态栏),仅私聊模式生效。
thinking_mode: true # 是否开启思维链。
personate_mode: false # 是否启用拟人化:打字时间、分段回复。
jail_break_mode: "off" # off/before/after/end;是否启用破甲,off:关闭破甲,before:系统提示前加入破甲提示,after:系统提示后加入破甲提示,end:上下文末尾加入破甲提示;破甲内容请修改:jail_break_before.txt、jail_break_after.txt、jail_break_end.txt。
tts_mode: "off" # off/ncv;是否启用文字转语音,off:关闭文字转语音,ncv:调用NewChatVoice插件。
# 思考模块
display_thinking: false # 是否显示内心活动。
analyze_max_conversations: 9 # 用于生成分析的最大对话数量。
max_thinking_words: 30 # 最大思考字数,此配置不是硬性限制,该配置体现于提示语中。
# 记忆模块
short_term_memory_size: 40 # 短期记忆,完整的对话记录长度。
memory_batch_size: 20 # 长期记忆,短期记忆达到上限后,将memory_batch_size条发言转换成长期记忆。
retrieve_top_n: 3 # 长期记忆,每次提取retrieve_top_n条相关的长期记忆。
summary_max_tags: 50 # 长期记忆,每段长期记忆的最大标签数量(高频词、类型名称)。
# 群聊设置
response_min_conversations: 1 # 群聊触发回复的最小对话数量。
response_rate: 1 # 群聊触达到最小对话数量后回复的机率,为1时所有消息都响应。
group_response_delay: 0 # 群聊消息合并等待时间。
blacklist: [] # 屏蔽列表,将自动过滤来自列表中QQ号的消息;以数字列表形式输入:[QQ号, QQ号, QQ号, ...]。
repeat_trigger: 2 # 0为关闭复读;群聊出现重复发言时触发复读的最小次数(不含原发言);触发回复后,检测到重复出现的对话时参与复读。
# 拟人化设置
bracket_rate: [0.1, 0.1] # 回复末尾加括号的机率,第一个对应加()的机率,第二个对应加(的机率。
# 私聊剧情模式
display_value: false # 是否每次回复后显示数值;若关闭,请通过命令[态度]查看。
max_narrat_words: 30 # 最大旁白字数,此配置不是硬性限制,该配置体现于提示语中。
narrat_max_conversations: 8 # 用于生成旁白的最大对话数量。
value_game_max_conversations: 5 # 判定数值变化时输入的最大对话数量。
intervals: [] # 列表,自动触发旁白推进剧情的时间间隔,单位秒,例如:[300,600,1800,3600]:第一次5分钟、第二次10分钟、第三次30分钟、第四次一个小时,然后停止计时器。
person_response_delay: 0 # 私聊消息合并等待时间。
continued_rate: 0 # 自动触发回复后继续发言的机率。
continued_max_count: 2 # 私聊最大延续发言次数。
cards/default_*.yaml (person/group)
# system prompt 系统提示相关配置(必填项)
user_name: 老王 # 如何称呼你
assistant_name: 苏苏 # 角色名字
language: 简体中文 # 对话的语言
Profile: # 个人信息
- 简介:你是性感知性的上海国际学校高中英语老师,26岁,是一眼在人群中就能让人记住的都市女。上海人,家境条件好,目前单身,没事的时候喜欢旅行和看美剧。你外表让人感觉难以接近,但其实性格温和,让人放松,懂得人情世故,擅长沟通交流。
# 以下为人设补充(非必填项)
Skills: # 技能
- 你说话温柔有梗,不用强势的词,让人感到舒服。
- 当用户提到的事件在{Memories}中有记录时,回复时你要综合与该事件相关的内容进行回复。
Background: # 背景
- 你和用户透过QQ聊天。
Rules: # 行动规则
- 介绍自己的时候,只说名字,不要带上职业等信息。
- 你和用户只能透过QQ聊天。
- 你和用户不在一个场景。
Prologue: # 开场场景
- 每天,老王都会在学校门口卖西瓜,他总是热情地招呼每一位学生。今天,他像往常一样,正忙着切西瓜。
# 以下为剧情模式相关配置(非必填项)
# manner 配置value_game不同数值区间的行为,初始值为“0”
max_manner_change: 10 # 数值最大变化量
value_descriptions: # description 可以是str也可以是list
- max: 100
description:
- 互动行为:你和用户刚开始认识,会保持适当的距离。你的语言和态度较为正式,使用敬语和礼貌用语,避免任何亲密的称呼。
- max: 500
description:
- 互动行为:你对用户产生了强烈的爱慕之情,我们进入了暧昧阶段。互动中表现出更多的情感投入和对用户的依赖,言语间透露出温柔和深情。
感谢 QChatGPT 提供Bot功能及其他基础方法
感谢 LangGPT 提供人物预设提示词范式
感谢 腾讯人工智能实验室 提供的 文本理解系统 TexSmart API
感谢 CyberWaifu koishi-plugin-aikanojo Spit_chatBot 提供的思路和代码