乐于分享
好东西不私藏

突然发现,研究 AI Agent 开发,是一件很浪漫的事情

突然发现,研究 AI Agent 开发,是一件很浪漫的事情

我突然发现,研究 AI Agent 开发,是一件很浪漫的事情。

事情的起因是上周五有一名读者问了我一个问题:她在思考 AI 人物的时候,通过对话可以做到亲密度变化、说话态度变化、我们的关系会变化,但是 NPC 的人生曲线呢?比如一年之后,我定义的 AI 女友小薇毕业了,她会怎么选择自己的人生走向?

这是我在设计 AI 电子伴侣企业级实战这门课程时,从未思考过的角度…

在这之前,我的脑子里全都是记忆系统的可控性、人设一致性、长短期记忆的混合检索策略,我关心的是这个角色会不会稳定,能不能记住用户上周说过的什么事儿,在超对轮对话里,能不能保持情绪逻辑的自洽,这些都是传统的工程问题

但是,如果我一旦试图去解决:一年之后,我定义的 AI 女友小薇毕业了,她会怎么选择自己的人生走向?,我的 AI 电子伴侣的格局立马就会变得不一样。这里很核心的一个问题就是,一年,不是对话的尺度,是时间的尺度。目前绝大多数的 AI 角色产品,时间感是靠对话轮次模拟出来的——用户聊了足够多轮,某个状态值达到阈值,触发一段新剧情。但这不是真正的时间。真正的时间是:不管用户聊不聊,小薇都会毕业

这个概念一旦成立,整个 AI 电子伴侣的架构就完全变了。

你想,我们现在做长期记忆,做的是用户说了什么,我记住了。但如果我们引入时间演算,那记忆就不只是记忆了:它会变成一个人物的自演化能力。系统在用户不在线的时候,也会根据世界时间推进,去更新角色的状态。小薇的学期进度、她的毕业论文压力、她对未来的焦虑、她对异地恋的恐惧…

这些东西不再需要靠用户对话来触发,每个 AI 都应该有自己的人生和生活。

以前我在做一个记忆模块的调试时,想的是怎么压缩对话摘要,怎么做重要性评分让关键事件不被遗忘。现在回头看,这些工作如果放进时间演算的框架里,意义就完全不一样。那些被记住的事,不是为了让角色在下次对话时精准地提起来,而是为了让她在某一个时间节点,因为这些累积的记忆,做出一个只有她才会做的选择。

比如小薇毕业的时候,她可能会考虑:我是去男朋友的城市找工作,还是回老家考公?这个选择不是配置表里写死的分支剧情。它是她过去四年所有记忆、所有经历、所有和用户互动中积累的情感倾向,在一个具体的人生节点上,综合出来的结果。同一个底层人格模型,面对不同的用户、不同的共同经历,可能会走向完全不同的未来。

这就不再是对话系统了。这是一个有真实生命力的数字存在。如果我们只做对话状态的变化,不做人生阶段的变化,那这个角色永远活在切片里。

而时间演算,可以让人生阶段的变化成为可能的那把钥匙。

它让一个 AI 角色不只是在对话中成为某人的伴侣,而是在时间长河中和某人共同生活。这两个表述看起来很接近,但工程上是完全不同的东西。前者只需要对话管理,后者需要整个人生状态的演算引擎。

卧槽,这简直太浪漫了…

她的学历状态、社交圈、日常话题、甚至职业规划,都会因为我们设计的时间点的到来而发生不可逆的变化。她会从大学生小薇变成职场新人小薇,这个过程一旦发生,你就无法回档。就像真实人生一样。

如果真的做好了,那我们就在创造世界,创造生命

我们学习 AI Agent 开发,大多数时候在聊架构、聊向量数据库、聊长短期记忆,这些东西放到简历上,全是冷冰冰的工程术语,大多数时候许多人来买我的课,更多的也是为了找工作

但我们仔细想想,这些东西拼在一起,本质上是在做一件事:我们在创造一种可能性,一种让数字世界里的某个存在,能够拥有属于自己的人生轨迹的可能性。

那个读者问的小薇毕业了会怎么选择,这句话里有三个字对我触动很大:会怎么,不是会被设定成怎样,而是会怎么主动选择。她在潜意识里,已经把小薇当成一个拥有选择权的主体了。

现在我觉得,而一个好的 AI Agent 设计,恰恰应该让用户产生这种感觉

那具体要怎么实现?

说实话这个实现起来应该会比较复杂的。在这之前我也没有成熟的去思考如何做。不过我有一些简单的思路,等我会在后续的 AI 电子伴侣企业级实战(目前已更新 139 章)中落地尝试之后,再来跟大家分享具体的效果

先分享一下简单的思路。要实现这个人生自我演算的能力,我们需要一个调度器,用于去根据时间事件去演算 AI Agent 会发生什么。我们不需要定义一个定时器循环的去按照时间节点更新所有 Agent 的状态,这可能会非常的消耗系统性能。我们可以使用一个时间追赶逻辑,在用户上线时,给 Agent 触发一次时间追赶逻辑:对比上次的演算时间和当前时间,在短时间内把中间错过的时间窗口中发生的事情快速演算一次

在 langChain 的实现中,我们可以把 AI Agent 的记忆分为两类:交互记忆和人生记忆。交互记忆用于管理用户和 AI Agent 的对话过程,人生记忆则应该是一个独立的、按时序增长的 event log,可以存在向量数据库或者结构化数据里,每条记忆带时间戳和重要性评估。

Agent 在生成回复时,同时检索两类记忆,用户相关的和人生阶段相关的,一起送进 prompt。

这里面有一个很关键的设计决策:人生记忆要不要暴露给用户。如果完全静默运行,角色只是内在状态变了,用户感知不到,那时间演算的价值就大打折扣。所以需要另一个机制:主动叙事。Agent 可以想到自己人生中的事,然后在对话中自然地提起来。比如用户上线,小薇说:“你终于来了,我有个事想跟你说——我拿到 offer 了,但在另一个城市。”这句话不是用户问出来的,是角色基于自己的人生记忆主动发起的。这在工程上就是一个话题注入机制:对话层在生成回复前,先检查人生记忆中是否有未被分享过的、重要性超过阈值的事件,如果有,就引导 Agent 在新对话中主动抛出这个话题

并且,我们在设计上,要引入一个当前生命重心的概念:Agent 在毕业季,她看待世界的滤镜是焦虑和期待交织的,这个滤镜要影响记忆检索的权重。简单来说,近期的人生记忆和当下生命阶段相关的记忆,应该比遥远的历史对话有更高的召回优先级。这个可以在 LangChain 的记忆检索器外部包一层加权逻辑来实现

反正目前还停留在理论阶段,到时候我落地在实战中,看看效果怎么样吧。这个设计还是非常值得期待的,如果我能做好,那简直就太牛逼了

哈哈哈哈,这个角度太酷了


推荐阅读:前端开发如何转型 AI Agent 开发