斯坦福 AI 小镇
Park, O'Brien, Cai, Morris, Liang, Bernstein · Stanford / Google · UIST 2023 · arXiv:2304.03442
斯坦福和谷歌的研究者造了一座虚拟小镇,住进 25 个 AI 居民,每人只有一段话的身世。然后他们只对其中一个人说了一句:"你想办一场情人节派对。"两天后,派对真的办成了——有人奔走相告,有人装饰咖啡馆,有人趁机约了暗恋对象。没有一行剧本写过这些。这篇论文的术语——记忆流、检索、反思、消融——你一个都不用记。你只需要做一件比研究者更过分的事:亲自往居民脑子里塞记忆。
先来当一天上帝
规则只有一条:你可以往一个居民的脑子里塞一条记忆,然后袖手旁观。没什么大不了的——就一句话而已,对吧?点下面三条记忆中的一条,看它接下来的一天:
聪明的模型,散装的一天
让游戏角色像个人,老办法是把行为一条条写死:行为树、状态机——"看到玩家就打招呼,血量低就逃跑"。可开放世界里会发生的事是写不完的。于是这篇论文之前,大家想到了偷懒的新招:角色每走一步,就问一次大语言模型(LLM)"我现在该干嘛?"模型见多识广,答得头头是道。
听起来很完美。点「问它:现在该干嘛?」,替一个没有记忆的角色,把中午这一个小时问完:
看到第三个盒子红起来了吗?每一次回答单独看都无懈可击——"中午了,该吃饭",逻辑满分。但模型不记得半小时前它刚吃过:于是同一个人在 12 点、12 点半、1 点各吃了一次午饭。缺的从来不是聪明,是记性。点「接上记忆流」你会看到:同样的模型,只要每次回答前先想起"刚吃过",一天立刻连贯了。
论文的方案就从这里出发:给每个智能体(generative agent,「生成式智能体」)配一条记忆流(memory stream)——一本用大白话记的流水账,看到什么、做过什么、想过什么,全部按时间戳存进去;行动前先从里面想起几条,再问模型。然而新麻烦马上就来:这本流水账几天就长到几千条,而模型一次能读的上下文就那么点。凭什么决定,此刻该想起哪几条?
检索:此刻该想起什么
先排除两个笨办法。全塞进去?几千条流水账远超模型一次能读的长度。压缩成一句摘要塞进去?论文试过,得到的回答平庸到没用——什么都提一嘴,等于什么都没说。剩下的路只有一条:挑。
而"挑"这件事,你自己天天在做。朋友问"周末去哪玩",你不会把三十年人生过一遍电影——脑子里自动浮上来的,是最近看到的攻略、刻骨的那次旅行、和这个问题相关的几段记忆。论文把这个直觉拆成了三个可以打分的量:时近性(recency,多久前发生,随时间指数衰减)、重要性(importance,有多刻骨,让模型给每条记忆打 1–10 分)、相关性(relevance,和眼前的问题多贴)。三个分数加起来,得分最高的几条才被"想起"。
下面是 Isabella 记忆流里真实的几条。现在她问自己:店里要补什么货?拖动三个旋钮改变每个分数的权重,把某一个拧到 0 或拧满,看"想起来的记忆"(金框前三名)怎么变:
试过把相关性拧到 0 吗?排第一的变成了"和 Maria 商量办情人节派对"——那是她最刻骨的记忆,却答不了"补什么货"。把重要性拧满,刻骨的大事同样会淹没眼前的杂务;把时近性拧满,刚发生的琐事全挤上来。三个分数各管一件事,缺了哪个,"想起来的"都会答非所问。论文最后取了最朴素的配方:三者等权重,直接相加。
想看一次真实的打分?(可跳过,不影响后面)
拿图里两条记忆算一遍(分值为教学用近似,三个权重都取 1):
| 记忆 | 时近 | 重要 | 相关 | 总分 |
|---|---|---|---|---|
| 冰箱空了 | 0.95 | 0.30 | 0.90 | 2.15 |
| 和 Maria 商量办派对 | 0.70 | 0.80 | 0.20 | 1.70 |
三个分数的来路各不相同:时近性随"上次被想起到现在"的时间指数衰减,越久越接近 0;重要性是记忆写入时一次性打的分——论文直接让语言模型按 1–10 给"刻骨程度"评级("打扫房间"1 分,"分手"10 分),再折算到 0–1;只有相关性随提问而变,衡量这条记忆和眼前问题贴不贴。所以问"补什么货"时冰箱赢,问"最期待什么"时派对赢——同一条记忆的价值,取决于你正站在哪个此刻。
然而检索再准,取回的也只是发生过的事。一个人对自己的认识——"我是个什么样的人"——在流水账里是查不到的。它得被想出来。
反思:把碎片想成一个人
只有流水账的智能体,回答"你最想和谁共度一小时"这种问题时只有一招:挑碰面次数最多的人——像用打卡记录代替友情。论文加的第二个零件叫反思(reflection):每隔一阵,智能体回看最近的经历,问自己几个高层问题,把答案写成更抽象的结论,存回记忆流。结论之上还能再反思,于是记忆里长出一棵树。
下面是论文里 Klaus 的真实例子。拖动滑块,从底下的琐事一层层往上合成——拖到头,看这棵树到底有什么用:
你拖到最后看到的那次翻转就是全部意义:有了树顶那句"高度投入研究",Klaus 挑的不再是天天打照面的邻居 Wolfgang,而是同样痴迷研究的 Maria。反思把"谁离我最近"升级成了"谁和我同频"。记住这棵树——派对那天,它还会替 Klaus 做一次决定。
现在智能体记得住、想得起、也知道自己是谁了。可它还差最后一个零件:知道接下来干什么。而且这个"干什么",不能是逐步临场发挥——那样第二节的三次午饭就会卷土重来。
计划:从"过一天"拆到"拿块水果"
论文的做法像你安排周末:先写粗的,再逐级放大。智能体每天早上根据身世和昨天的总结,先列出 5–8 块的粗线条计划,然后把每一块递归拆成小时级,再拆成 5–15 分钟级的具体动作——拆出来的每一层,照例写回记忆流。下面是音乐系学生 Eddy 的一天被拆开的样子:
论文里有个现成的例子:爸爸 John 撞见 Eddy 在花园里散步——这不在任何人的计划里。智能体不会装作没看见,也不会慌乱:它先判断"要不要反应",聊上几句,然后从那一刻起把剩下的一天重新拆一遍。计划被打断不是故障,是常态:计划给了行为长程的骨架,反应给了它临场的弹性。到这里,四个零件全齐了:记忆流负责记、检索负责想起、反思负责懂自己、计划负责往前走。单看每一个都不惊人——惊人的是把装着这套循环的 25 个人放进同一座小镇,同时按下播放键。
组装时刻:派对自己办成了
回到你在第一节塞的那条记忆。研究者做的一模一样:给 Isabella 塞下"想办情人节派对",给 Maria 塞下"暗恋 Klaus",然后收手。接下来两天里发生的事,论文原样记录了传播路径,每个气泡都是当事人自发的原话。点「下一步」,按天看这句邀请怎么传遍小镇:
注意第二圈里每个人的措辞都不一样——Ayesha 甚至把它包装成了自己的"朗读夜"。消息不是被复制粘贴的,是每个人用自己的记忆重新讲了一遍,最后还绕回了 Isabella 本人。两天,12 人听说,2 月 14 日下午 5 人真的走进咖啡馆。没有一行脚本规定谁该告诉谁、谁必须出席——这叫涌现(emergence):社会行为从个体循环里自己长出来。
不过,先替杠精问一句:怎么证明这是记忆流、反思、计划的功劳,而不是大模型本来就这么神?论文的回答很硬核——当着你的面,把零件一个个拆下来。
拆掉一个零件试试
这种"拆零件测试"学名叫消融实验(ablation):把架构逐级砍掉,请 100 名人类评判者旁观各版本智能体的访谈回答,两两比较谁的行为更像"一个可信的人"。他们还请了真人临时工假扮智能体来回答,作为人类基准线。点下面的配置,亲手拆:
最底下那档值得多看一眼:去掉记忆、反思、计划之后剩下的,正是第二节里那个"每步都问一次大模型"的常规做法——21.2 分,连人类临时工(虚线,22.95)都不如。而完整架构比它高出整整八个标准差。可信,不在于模型多聪明,而在于它能不能记得、综合、并照着自己的过往行动。模型没换过,换的只是那三个你已经亲手摸过的零件。
五档可信度评分的完整数字(可展开)
| 配置 | 可信度评分 | 对应本文哪一节 |
|---|---|---|
| 完整架构(记忆 + 反思 + 计划) | 29.9 | §3 – §5 全部零件 |
| 去掉反思 | 26.9 | §4 那棵树被砍 |
| 去掉反思 + 计划 | 25.6 | §2 的三次午饭复发 |
| 人类临时工(假扮智能体作答) | 22.95 | 基准线 |
| 去掉反思 + 计划 + 记忆 | 21.2 | §2 的裸大模型 |
评分来自 100 名人类评判者对各版本访谈回答的两两比较(分数越高 = 越常被判"更像一个可信的人")。最扎眼的一行是人类临时工只排第四:评判者并不知道混在里面的哪个是真人——而带着完整记忆流的智能体,比假扮它的真人更"像一个人"。
好——机制懂了,证据也看了。现在把上帝之手还给你,这次不限一条记忆。
镇长办公室:能让派对办不成吗
派对前一天,你可以给任何人塞任何一条记忆。先猜:9 种组合里,哪一种能让派对彻底告吹?猜完动手验证——组合选对了,才说明你真的看懂了这套架构的软肋:
回想你这一路亲手做过的事:你往 Isabella 脑子里塞过一条记忆,看它长成一场派对;你逼一个没有记性的模型吃了三次午饭;你把"相关性"拧到 0,看她想起了最刻骨却最没用的事;你拖着 Klaus 的琐事长成一棵树,看它替他挑对了人;你按着天数看一句邀请传遍小镇,又把架构拆到比人类临时工还不如;最后你用一条水管坏消息,亲手弄垮了这场派对。这些操作背后是同一句话:一个"可信的人",在这套架构里不过是一条记忆流,加上不断在它之上的检索与综合。
这篇论文之后,"记忆流、反思、计划"成了智能体领域的通用蓝图——今天你听到的各种 AI agent,骨架大多能在这座 25 人的小镇里找到影子。但它同时留下一道没有答案的题,论文作者自己在结尾按响了警铃:正因为它太像人,人才会对它动真感情。如果"会记得、会反思、会照着过往行动"就足以让我们在对面认出一个"人"——那条认出彼此的线,究竟该划在哪里?你刚刚在沙盒里随手拆掉过一场 12 个人的派对。当小镇从 25 人变成两万五千人的时候,愿意接过上帝之手的人,最好先像你今天这样,摸清楚每一个零件。