2025-08-19

QQ 角色 AI Bot

一个把角色扮演、好感度、群聊互动和一点点工程缝合在一起的小项目。

#AI Bot#QQ#AstrBot#NapCat

起因

一开始只是想做一个能在 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 加护栏:可以演,但不能把方向盘整个交出去。

现在的感觉

这个项目没有那么“正经”,但我挺喜欢它。

它不是为了证明什么技术路线多先进,更像是把几个我感兴趣的东西放在一起试试看:角色、记忆、对话、陪伴感、群聊里的轻量互动,还有一点游戏系统设计。

以后如果继续做,我可能会把它整理成更清楚的版本:公开一部分代码,删掉不能公开的配置,再把角色设定、好感度规则和消息流程单独写出来。

先放在这里,当作一个还没完全收拾好的小实验。