图:Shixart1985 / Wikimedia Commons / CC BY 2.0
“我早就跟它说过,周报改发给新来的刘经理了,它怎么还在往老王那儿发?”
周一上午,项目组的小吴拿着一封退回的邮件来找我。办公室里那个帮大家整理周报的本地 Agent 是我部署的,它有一个记忆功能:同事在对话里交代过的偏好,比如“周报发给谁”“表格用哪个模板”,会被存下来,下次直接照办。平时很省事,这次却出了岔子。
我把小吴的记忆条目全部导出来看。关于周报收件人的记忆有两条:一条是两个月前存的“周报发给王经理”,另一条是三周前存的“以后周报给刘经理”。两条都在,Agent 每次检索记忆的时候,按相似度取最靠前的一条,偏偏旧的那条措辞和“发周报”更像,排在了前面。新的那条一直没被用上。
我又顺着查了一遍其他同事的记忆,全组十二个人,一共存了一百六十多条,其中有二十三条已经和现在的情况对不上:人调岗了、模板换了、项目结束了。这些过时的记忆一旦被检索到,就会让 Agent 理直气壮地按旧规矩办事。
小吴问:“那把记忆功能关了不就完了?”我说关了大家又得每次重新交代,问题不在记,而在记了以后没人管。后来我改了三处。
图:Phil Slattery / Wikimedia Commons / CC BY-SA 4.0
第一处,每条记忆带上日期和出处。存的时候记下是哪天、在哪次对话里说的;同一个人同一件事有多条记忆时,默认用最新的一条,并在执行前提一句“按你某月某日的说法,发给刘经理”。
第二处,涉及人和权限的记忆,以通讯录和项目表为准。Agent 执行发送类操作前,先拿记忆里的人名去对一遍通讯录和当前项目成员,对不上就停下来问,不再自己猜。
第三处,记忆可查可删。我给每个人加了一条指令,说一句“看看你记住了我什么”,就能列出自己的全部记忆,过时的当场删掉;另外每月一号,Agent 会把超过九十天没用过的记忆列给本人,问还要不要留。
改完我做了一轮测试。挑了三十个场景,其中十五个故意埋了新旧冲突的记忆,比如换过收件人、换过模板、换过截止日。改之前,这十五个里 Agent 按旧记忆办的有九个;改之后全部用了新的,其中两个因为通讯录里查不到人名,主动停下来问了。另外十五个没有冲突的场景,结果和改之前一致,没有被误伤。
小吴第二天让它列了一遍自己的记忆,删掉了四条。她说有几条自己都忘了说过。
图:Tookapic / Wikimedia Commons
这件事给我的提醒是,Agent 的记忆跟人一样会过期,存进去容易,清出来难。部署的时候只想着让它记住,却没想过让人能看见、能纠正它记住了什么。
你们用的 Agent 有记忆功能吗?有没有遇到它按老规矩办事的情况,欢迎在评论区说说。
记忆条目的字段设计和那三十个测试场景,我整理在 evafang.com 上了,有需要可以参考。