目录

斯坦福小镇 AI:Generative Agents 论文解读

拆解 25 个 LLM 智能体的记忆、反思与计划架构

2023 年 4 月,斯坦福大学与谷歌研究院的研究人员在 arXiv 上发布了论文《Generative Agents: Interactive Simulacra of Human Behavior》(arXiv:2304.03442),后续被 ACM UIST 2023 收录。他们在《模拟人生》(The Sims)风格的沙盒小镇 Smallville 中放入 25 个由大语言模型(LLM)驱动的虚拟居民,每个居民拥有独立的性格、日程与社交关系,可以自主移动、对话、记忆和决策。这项工作把 LLM 从"回答问题的工具"推到了"模拟可信人类行为的代理"这一新范式,成为后续 Agent 浪潮(如 AutoGPT、MetaGPT、AI Town 等)的重要参照。

论文并不追求让智能体完成"正确答案",而是要求它们的行为像真实的人:维持一致的身份,基于过往经历做决策,在与环境和其他智能体交互时产生合理的反应。作者将其抽象为三个能力:

  • 记录经验(Recording Experience):用自然语言持续写入记忆;
  • 反思(Reflection):把琐碎的观察综合成更高层的结论;
  • 动态检索(Dynamic Retrieval):在决策时调出最相关的记忆。

Smallville 是一个 2D 俯视角地图,包含房屋、咖啡馆、商店、公园、大学等场景,使用 Tiled 编辑器构建。每个智能体在地图上有坐标和朝向,可以感知周围的人和物,移动到新地点会触发新的观察。环境由一个 Django 服务器渲染,模拟服务器驱动每个智能体的"思考—行动"循环,1 个模拟步(simulation step)对应游戏内的 10 秒。

论文最广为流传的实验是情人节派对:作者只在其中一个智能体 Isabella 的初始设定中写入"想举办一场情人节派对",没有任何脚本化指令。两天内,Isabella 自主发出邀请、装饰场地;被邀请的智能体 Maria 又把消息扩散给其他人;甚至有智能体在派对前主动约人同去。整个过程是涌现(emergent)的——这种"口口相传"和"协同到场"的社交行为并非预先编排,而是由记忆、反思、计划三层机制共同产生。

论文最具工程价值的部分是它的智能体架构(Agent Architecture),它把一个原始的 LLM 扩展为一个能长期"活着"的程序。核心由四块组成:记忆流、检索、反思、计划。

每个智能体维护一条记忆流(Memory Stream),以自然语言的形式按时间顺序记录它所经历的一切观察,例如"2023-02-13 10:22,Isabella 在 Hobbs Cafe 看到 Maria 在点咖啡"。每条记录包含:

  • 文本描述(natural language description);
  • 创建时间戳;
  • 最近一次被访问的时间戳

随着模拟运行,记忆流会快速膨胀。因此,如何从海量记忆中挑选当下相关的那几条喂给 LLM,就成为整个架构的关键。

检索函数为每一条候选记忆打分,总分由三项加权求和:

维度含义计算方式
Recency(近期度)最近是否被访问过指数衰减(论文中大约以每小时衰减一次),每次被检索后重置为满值
Importance(重要度)事件本身的分量由 LLM 在记忆创建时打分(如"吃早餐"≈1 分,“分手”≈9 分)
Relevance(相关度)与当前情境的语义相似度当前情境向量与记忆向量的余弦相似度

最终得分 score = α·recency + β·importance + γ·relevance,取 Top-K 作为 LLM 的上下文。三项缺一不可:Recency 让智能体保持短期一致,Importance 让重大事件长期不被遗忘,Relevance 让它在合适场景下调出合适记忆。

光有原始观察还不够。智能体会定期触发**反思(Reflection)**机制:当最近若干条观察的重要度累计超过某个阈值(论文实现中约为 150)时,智能体会把最近的相关记忆汇总,交给 LLM 生成若干条更高层次的洞察——例如从"Klaus 多次提到女儿"“Klaus 在咖啡馆聊起家庭"等观察,提炼出"Klaus 非常重视家庭”。反思再以记忆的形式写回流中,并在 Importance 上获得更高权重,从而在未来检索中更易被唤起。这一步把"事件"压缩成"信念",是智能体展现"性格一致性"的关键。

智能体的计划(Planning)是分层的:从粗到细,先给出一天的高层安排,再细化为小时级、再细化到分钟级的动作。计划并不是写死的——当环境发生变化(比如撞见朋友、临时收到邀请)时,智能体会基于检索到的记忆重新规划。最终,LLM 输出一条具体的动作(Action),例如移动到某地、对某人发起一段对话。对话内容同样由 LLM 生成,双方都把自己检索到的相关记忆作为上下文。

论文设计了受控评估(Controlled Evaluation)消融实验(Ablation Study)。前者让人类对智能体的行为是否符合人设、是否合理打分;后者依次移除 Observation、Planning、Reflection 三个组件,结果表明三者各自都不可少——去掉任何一个,智能体的可信度都会显著下降。这种"拆件验证"也成了后来 Agent 论文的常用范式。

论文对应的官方实现把上述架构落到一个可运行的项目里,关键点包括:

  • 依赖:Python 3.9(官方测试版本为 3.9.12);
  • 后端:reverie/backend_server/reverie.py 为模拟主循环,通过一个 utils.py 文件配置 OpenAI API Key 和路径;
  • 前端:environment/frontend_server 是 Django 服务,python manage.py runserver 启动后访问 http://localhost:8000/;
  • 运行:python reverie.py 后输入 fork 的模拟名称(如 base_the_ville_isabella_maria_klaus)和新模拟名,再执行 run <step-count> 推进,fin 保存退出;
  • 回放:/replay/<simulation-name>/<starting-time-step>/ 可以回看任意时刻的小镇状态。

需要注意的是,官方实现大量依赖 OpenAI API,跑满 25 个智能体的完整模拟费用可观,论文也在文末提及成本问题——这也是后来社区出现许多本地化、轻量化复刻版本的原因之一。

围绕这篇论文,社区出现了多个有代表性的开源项目。

  • joonspk-research/generative_agents:论文作者释出的参考实现,基于 Python,Apache-2.0 协议。包含完整的小镇地图、智能体设定与模拟循环,是理解论文细节最权威的入口。
  • a16z-infra/ai-town:a16z 出品的可部署启动包,MIT 协议。把"小镇"搬到了 JS/TS 生态——使用 Convex 作为游戏引擎与数据库,PixiJS 负责渲染,默认用 Ollama 本地推理(llama3 + mxbai-embed-large),也可切换到 OpenAI 等兼容接口。项目目标是提供一个"易于扩展的平台"而非论文复刻,适合想在前端做二次开发的团队。
  • py499372727/AgentSims:来自北航团队的开放平台,MIT 协议。注意它并不是斯坦福小镇的复刻,而是一个用沙盒小镇形式评估 LLM 能力的基础设施——研究者可以通过 GUI 搭建任务、接入不同 LLM 作为智能体"大脑",对记忆、规划等能力做量化评测。把它列在这里,是因为它沿用了"小镇 + 多智能体"的形态,且是同类中文项目中较成熟的一个。

Generative Agents 的价值不在于"造了一个好玩的小游戏",而在于它给出了把 LLM 变成长期、可信、有记忆的代理的一套完整工程范式:记忆流负责存,加权检索负责取,反思负责抽象,分层计划负责行动。后来的几乎所有 Agent 框架(无论面向游戏、客服还是自动化)都能在这套范式里找到对应组件。如果你正在做自己的 Agent 项目,值得把这篇论文的架构图当作一份"对照清单"——它不会告诉你最优超参数,但它会告诉你哪些模块不能省略。

相关内容