AI 陪伴:开源项目分享与思考
Hello,大家好,也是很久没有做技术分享了,本期视频来介绍两个与 AI 陪伴有关的开源项目,聊一聊他们的架构设计,最后是一些碎碎念。
第一个想介绍的是 Maibot。那么,提到 Chatbot,大家第一个想到的可能是 Astrbot,它提供了一个基础的 Runtime,利用丰富的社区插件可以搭出很有意思的应用。相应的,AI 的拟人程度就非常依赖插件的质量。
那么 Maibot 是一个以拟人性为卖点的项目,她为了让 AI 的回复更像人,在工程侧用了非常多的手段。下面我们来看一看她的设计,串一下从接受到一条消息到发送的整个流程,从前到后依次分这三个阶段。
当接收到一条消息会先存在程序的数据状态里。第一步是 Focus 判断,这个 Focus 机制是 AI 注意力的设计,它模仿的是人的行为,同一时间只能关注一个群聊。那么,如果当前群聊处于 Focus 的状态就会进入后面的判断。
触发门控是通过程序规则来判断是否回复消息的模块。当前 AI 经常会变成话痨,回复的内容质量很低,惹人厌烦,如果玩过 AI Chatbot可能更能体会到我想表达的意思。单纯使用提示词控制很难调到理想的效果,所以 Maibot 设计了触发门控减少无意义的回复,它有一套评分机制,对于一些闲聊的内容,例如“哈哈“、“嗯“,会降低回复的概率,也会根据 AI 的回复频率,调整触发回复的概率。
这一步通过之后,下面才真正进入到 LLM 决策的环节,这里会注入一些记忆、人物画像也就是对某个人的记忆、群内的一些黑话表达,然后Planner会根据注册的 function tool 来判断是沉默等待一会,等别人把一句话说完,还是生成回复。如果选择生成回复,Planner 还要决策使用哪种表达习惯,是冷漠一点,还是开心一点,然后再调用一个专门用于生成回复的模型,这个过程会传递一些上下文给 Replyer。Replyer 生成回复后就会发送消息,这些发送完的消息会被存起来用于学习自迭代,沉淀成记忆。
Maibot 大致的架构就是这样,她的实现细节远比我讲的要复杂,非常值得学习一下。还有一点想聊的就是 Planner 与 Replyer 拆分的设计,我觉得这种设计在一定程度上缓和了 LLM 的一个缺点。LLM 在生成回复的时候,有时候会倾向于把它上下文里的东西都塞进去,这里拿又爱又恨的 GPT 举例子。例如你在用 GPT 写技术方案,一开始你想加两个工具函数 A 和 B,经过一番思考,你觉得 B 函数没什么用,你让 GPT 在技术方案里把 B 函数删掉,这时候 GPT 大概率会在技术方案里写“本次我们实现函数 A,不会实现一个xxx功能的函数 B“,整个技术方案里其实完全不需要有 B 函数的任何描述了,GPT 就喜欢写进去,恶心你。回到 Chatbot 的回复也是一样的道理,LLM 有时会生成一些存在它上下文里,但是跟当前聊天的内容没什么关系的回复,看着就很难受。Planner 与 Replyer 拆分之后,Replyer 的上下文会稍微纯净一些,可以缓和这种缺点。
这种拆分的设计还有一点好处就是,Replyer 你可以使用 AI 角色扮演好一点的模型,你甚至可以微调一个只用于生成回复的模型。当然了,这种设计肯定也有坏处,就看怎么权衡取舍。
我们来看看下一个开源项目 Coopanion,我不清楚是不是这么发音的。她是一个事件驱动的设计,这种方式就天然适合 agent loop 的模式。这个图是 Claude 画的,稍微有点抽象。我们就用 AI 直播玩象棋这个场景来介绍。与 Astrbot 类似,她的核心模块也是一个 Runtime,各种能力通过插件提供,也就是左边的这些 World,这是她这个项目的一个概念。
插件除了提供各种 function tool 之外,还会产生各种事件。例如:游戏插件会播报当前的游戏状况,比如说被将军了;直播间插件会播报弹幕消息。得益于现在各家 flash 模型 agent 能力的提升,以及响应速度的提高,可以大力出奇迹,把这些产生的事件可以全部交给 agent loop 来处理,agent 根据提前设定的人设和已有的 functon tool 来做出响应。 当然了 Coopanion 的 Runtime 有 Event 管理模块,如果 Event 过多的话,会分批处理,不会一股脑塞进去。
基于这种设计,我们在实现自己各种想法的时候,就可以把注意力放在怎么更好的生产 Event,以及提供合理的 function tool,不需要再去思考 agent 流程应该怎么编排,什么时候调用 agent。
最后来聊一些碎碎念。首先先切割,这个标题和排版 Claude 做的,会有点莫名其妙。第一个话题就是“AI味“,目前主流 LLM 都是在增强 agent 能力,很少有模型公司在角色扮演上下功夫,基于我目前的认知猜测了一些原因。第一点可能是不赚钱,如果要做角色扮演模型的训练,肯定是那些有相关业务的公司来做,但是最近 Character.ai 爆出倒闭的消息。而且据我了解到,之前 Minimax 的星野是做出相关尝试的,但效果好像不太行。第二点可能是角色扮演模型比较难训练。商业公司因为无利可图没有什么动作,但是开源社区还是有很大的活力的,比如现在的开源AI生图模型。我之前稍微搜索了一下,主要是训练数据比较难收集。因为角色扮演不像写代码,有着比较客观的答案,角色扮演的答案相对比较主观,训练数据构造的难度较高。
那么面对目前 LLM 的现状,关于 AI 陪伴我认为有两条路。第一个是为角色微调模型,这是一个外行的胡思乱想,我觉得训练一个通用的角色扮演模型比较难,但是针对某个角色微调模型应该是可以试一试的,这种场景可以允许模型过拟合。第二条路就是做内容,思考怎么打招一个有趣的角色,从而弱化 LLM 的不足。之前有位前辈跟我提到了一点“做技术的人容易陷入到技术的泥潭里,而忽视了内容的重要性”,感觉可以向这些角色学习一下。这个 Neuro-sama 太出名了,就不介绍了。可缇Corti是 Coopanion 的作者打造的 AI 主播,她的TTS语音效果非常切合角色,一些 AI 味的文本听起来就没那么难受。她的 Live2d 扮演,还有直播间的互动都比较自然。而且她代码是开源的,使用到的技术也都是大众能接触到的,所以非常值得学习一下。最后一个 Shizuku 是日本的一位研究员做的AI女仆主播,她有一定的人物设定,而且TTS的效果也特别棒,直播时即使是一问一答的交互形式,看起来也很有意思。不过,可惜是闭源的。
第二个想聊的是,AI 陪伴算大众还是小众?这个问题的答案,我也不知道。如果你最近一两年关注过这个方向,会看到很多产品和角色,但是能长期运营而且有流量的很少。即使是宣发特别强的 project neko,用户量也不是很高。但是宣发资源没有 project neko 强的妹居物语,反而也有着不错的关注度。这个现象太奇怪了,我百思不得其解。
第三个想聊聊大肥鱼,最近刷b站,能看到特别多的大肥鱼运营账号,大肥鱼直播间,有些视频的评论区里也都是大肥鱼的回复,感觉大肥鱼已经自行发展成一个很强的 IP 了。其实让 AI 刷 b 站的插件,在 Astrbot 社区很早就有人做了,并没有引起什么关注,但是把这个功能套上大肥鱼这个 IP,一下子就起飞了,这个现象我也不知道该怎么解读。
那么,本期视频到这里就结束了,我们下期视频再见。