论文
记忆机制
背景
Generative Agents: Interactive Simulacra of Human Behavior
生成式智能体:斯坦福小镇的 25 个 AI 居民
Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, Michael S. Bernstein · Stanford · UIST 2023 · 2023-04 · 被引 5321
一句话斯坦福 + Google 在一个 Sims 风格沙盒小镇里跑了 25 个 LLM agent,靠 memory stream + retrieval + reflection + planning 架构让它们自发组织了一场情人节派对;这套记忆架构成了后来几乎所有 agent 记忆系统的参照模板(引用 5300+)。
这是什么
这篇 UIST 2023 论文(即著名的『斯坦福小镇』/Smallville)研究的问题是:如何让 LLM 驱动的软件 agent 表现出可信的、长期一致的人类行为。直接把 LLM 塞进游戏角色会遇到根本困难——上下文窗口装不下一个角色几天的完整经历,行为会前后矛盾、遗忘刚发生的事。作者的答案是给 agent 外挂一套用自然语言记录的记忆系统:完整记录所有经历(memory stream),按需检索,并周期性地把低层观察综合成高层结论(reflection)。
他们用 GPT-3.5(gpt-3.5-turbo,实验做于 2023 年初)驱动 25 个各有人设的 agent,放进一个像素风小镇里运行两个游戏日。最出圈的结果是涌现的社会行为:只给 Isabella 一个『想办情人节派对』的初始意图、给 Maria 一条『暗恋 Klaus』的人设,agent 们就自发完成了传播邀请、装饰咖啡馆、约对象、最后 5 个 agent 准时到场的完整链条。注意这篇的主题是社会模拟(HCI 场景),但它对 agent 领域的实际遗产是那套记忆架构——收录进 continual-learning 方向也是因为这个。
Generative agent 架构总览:agent 感知(Perceive)到的一切以自然语言写入 memory stream;行动(Act)前经 Retrieve 按 recency + importance + relevance 三因子打分取出相关记忆;Plan 和 Reflect 两个模块的输出同样作为记忆写回 stream,形成『经验 → 抽象 → 再利用』的闭环。这张图就是后来无数 agent 记忆系统的原型。机制与做法
Memory stream + 三因子检索
核心数据结构是 memory stream:一个按时间排列的自然语言记录列表,存 agent 的全部观察(observation)、计划和反思。行动或对话时不可能把全部记忆塞进 prompt,所以用检索函数打分取 top 记忆,分数是三项加权和:recency(距上次访问的时间指数衰减)、importance(让 LLM 给每条记忆打 1-10 分,『吃早饭』低分、『分手』高分)、relevance(embedding 余弦相似度)。这个『时近性 + 重要性 + 相关性』三因子公式后来被 LangChain 等框架直接内置,是本文被引用最多的部分。
Reflection 与 Planning
只有原始观察不够——agent 需要泛化。当近期记忆的 importance 累计分超过阈值(实践中约每天 2-3 次),触发 reflection:让 LLM 对最近 100 条记忆提出 3 个高层问题,再针对每个问题检索证据并生成带引用的结论(如『Klaus 对研究充满热情』),结论作为新记忆写回 stream,且可以在更高层的 reflection 之上再反思,形成树状抽象层级。
Planning 解决长程一致性:每天先用人设摘要 + 前一天总结生成粗粒度日计划,再递归分解到小时级、5-15 分钟级。执行中 agent 每步感知周围环境,由 LLM 判断是否需要对突发事件做出 react(比如撞见别人聊天时决定是否加入),需要则重新规划后续计划。这三个模块的消融实验(见 findings)是论文论证的核心。
关键结果
- 消融实验:让 100 名评估者对 25 个 agent 的访谈回答做可信度排序,用 TrueSkill 换算得分——完整架构 μ=29.89 最高,去掉 reflection 降到 26.88,再去 planning 降到 25.64,全部去掉(只剩裸 LLM)最差 21.21;三个模块各自都有显著贡献(Kruskal-Wallis H(4)=150.29, p<0.001)。
- 一个反直觉的结果:人类 crowdworker 扮演的角色(μ=22.95)可信度反而低于带记忆的 agent 架构,只比全消融基线略好——即评估者认为完整架构的 agent 比人类扮演者『更像那个角色』。
- 涌现社会行为:两个游戏日内,Sam 竞选镇长的消息知晓率从 1/25 涨到 8/25,情人节派对从 1/25 涨到 13/25(均无人为干预);agent 间形成新社交关系,网络密度从 0.167 升到 0.74。
- 失败模式论文自己写得很坦率:检索会漏(Rajiv 明明听说过竞选却答『没怎么关注』)、记忆会取到不完整片段、会借 LLM 的世界知识添油加醋(agent Adam Smith 被邻居描述成《国富论》作者)、行为日趋规范化、地点选择会因记忆里地点变多而变得浮夸(去酒吧吃午饭)。
- 成本:模拟 25 个 agent 两个游戏日花了『数千美元』token 费用和多个真实日的时间(论文 discussion 节原话),实时交互在 2023 年是不现实的。
实证核查
扎实代码全量开源且与论文架构一一对应,社区大规模复用(22k star、无数衍生项目),记忆架构被后续工作反复验证;但要注意评估是主观可信度排序而非任务指标,复现原始规模的模拟成本高、官方仓库 2024-08 后已停止维护。
论文声称实现了 memory stream / retrieval / reflection / planning 的完整 agent 架构。
GitHub 仓库(joonspk-research/generative_agents,Apache-2.0,22k star)结构与论文完全对应:reverie/backend_server/persona/memory_structures/ 下有 associative_memory.py(memory stream)、scratch.py、spatial_memory.py;cognitive_modules/ 下有 retrieve.py、reflect.py、plan.py、perceive.py、converse.py、execute.py。25 人小镇的初始记忆数据(base_the_ville_n25)也全部随仓库发布。
架构能支撑可信的多 agent 社会模拟。
社区复现和复用极多——AI Town(a16z)、AgentSociety、斗蛐蛐等衍生项目均基于此架构;三因子检索被 LangChain 官方实现为 TimeWeightedVectorStoreRetriever + GenerativeAgentMemory。但复现完整 25-agent 模拟的成本问题在 issues 中反复出现(#56 'estimate on the cost per hour'、#150 'Gpt 3.5/4 - Cost Assessment'),与论文自述的『数千美元』一致。
开源代码可直接运行复现。
代码是研究原型质量:issues 里大量运行报错(#187 get_embedding NameError、#125/#192 spatial memory KeyError、#114 API error 等),官方最后一次 push 是 2024-08-05,此后 bug 修复靠社区 fork(如 issue #152/#186 的 'NewVersion: Fixes & Improvements')。另外原实验用的 gpt-3.5-turbo 已退役,严格意义上的原样复现已不可能(#190/#191 在讨论换 GPT-4o/Gemini)。
消融显示 observation/planning/reflection 各自对可信度有关键贡献。
评估方式要看清:是 100 名众包者对 agent 访谈回答的主观可信度做 5 条件排序,再换算 TrueSkill 分,不是任何客观任务指标;论文给出的 d=8.16 效应量是 TrueSkill 评级间的标准化差,数字看着夸张但含义有限。源码 technical_eval.tex 中也如实写了 crowdworker 条件与全消融条件差异不显著。
与我们方向的关系
对 continual-learning 方向,这篇是『记忆机制』一支的源头文献:memory stream(全量自然语言日志)+ 三因子检索 + reflection(周期性把经验蒸馏成高层结论再写回)构成了一个不改权重、纯上下文层面的经验积累闭环,后来的 MemGPT、Voyager 的 skill library、各类 agentic memory 系统基本都能看到它的影子。特别值得借鉴的是 reflection 的设计:它不是简单摘要,而是『提问 → 检索证据 → 生成带引用的结论 → 结论本身可被再反思』,这是一种可控的、有层级的记忆固化(consolidation)过程,和 continual learning 里对抗灾难性遗忘的『重放 + 抽象』思路是同构的。
读的时候把它当架构参考而非评测参考:它的评估是社会模拟可信度,不能说明这套记忆在任务型 agent 上的效果;importance 打分依赖 LLM 主观判断、reflection 触发阈值是手调的,这些在自己系统里都需要重新校准。
阅读笔记
论文 2023-04 挂 arXiv,代码 2023-07 才放出。想跑 demo 的话别用官方 repo(依赖老版 openai 库和已退役模型),社区维护的 fork 或 a16z 的 AI Town 更省事。'Smallville' 地图素材有独立的艺术家版权署名,商用注意。
材料清单
TeX 源码已存档:Raw/generative-agents/source/
同类条目