QQ 角色 AI Bot
一个把角色扮演、好感度、群聊互动和一点点工程缝合在一起的小项目。
起因
一开始只是想做一个能在 QQ 里说话的角色 Bot。
不是那种“你好,我是智能助手,请问有什么可以帮您”的东西,而是更接近一个会被叫出来聊天、会接话、会记得一点上下文、会有角色口吻的小东西。
README 里最早写得很朴素:
This project features self-developed QQ AI ChatBots based on the AstrBot and NapCat open sourced projects.
做了什么
它大概由几块东西拼起来:
- 用 NapCat 接 QQ 消息;
- 用 AstrBot / Python 处理消息和回复;
- 给不同角色写单独的人设文件;
- 根据聊天内容保留历史记录;
- 做了菜单、角色切换、群聊 at 触发;
- 给角色加了好感度系统,避免每次聊天都像第一次见面。
听起来有点像在做游戏系统,但入口是 QQ 聊天框。这个点还挺有趣的:UI 几乎没有,所有反馈都藏在一句话、一个动作描写、一次数值变化里。
角色设定
我整理了一些角色设定,比如角色的说话方式、关系网、行动习惯,以及在不同场景下应该怎么回应。
比较重要的不是“知道这个角色的百科信息”,而是让回复不要散掉:
- 不能随便跳出人设;
- 不能每句话都像模板;
- 不能只回答问题,要给对话留下一点继续聊的空间;
- 不同好感度下,互动距离应该有变化;
- 群聊里被 at 才回复,别像个失控的喇叭。
这部分写起来很像在调一个很小的剧场。规则太少,角色会飘;规则太多,又会变成背设定。中间那个刚刚好的位置,比想象中难找。
好感度系统
好感度一开始只是一个数值,后来发现它其实是“关系状态”的简化表达。
如果没有它,Bot 很容易每次都以同样的距离说话:昨天聊过什么、刚才发生了什么、关系有没有变近,都没有痕迹。
所以我让它根据对话变化,同时也加了一些限制,防止模型自己乱写数值。这里有点像给 AI 加护栏:可以演,但不能把方向盘整个交出去。
现在的感觉
这个项目没有那么“正经”,但我挺喜欢它。
它不是为了证明什么技术路线多先进,更像是把几个我感兴趣的东西放在一起试试看:角色、记忆、对话、陪伴感、群聊里的轻量互动,还有一点游戏系统设计。
以后如果继续做,我可能会把它整理成更清楚的版本:公开一部分代码,删掉不能公开的配置,再把角色设定、好感度规则和消息流程单独写出来。
先放在这里,当作一个还没完全收拾好的小实验。