问题
大多数多 Agent 系统是脚本化程度很高的团队:规划者做规划、编码者写代码、评审者做评审。这对定义明确的任务很有效,但它捕捉不到 Agent 拥有记忆、优先级和开放世界时产生的涌现式、非脚本化行为。研究、社会模拟以及越来越多的游戏 AI,需要的正是这第二类系统。
Smallville 架构是这方面的基准。在 Park 2023 之前,最好的 Agent 模拟只是浅层地跟随脚本;在此之后,这种模式成为开放世界中生成式 Agent 的默认做法。如果你在 2026 年构建 Agent 模拟,你要么采用 Smallville 的三个组件,要么明确说明为什么不采用。
概念
三个组件
记忆流。 一个只追加的日志,记录观察、行动、反思和计划。每个条目都有时间戳、类型、描述(自然语言)以及派生元数据:新近度(recency)、重要性(importance)(Agent 自评 1-10)和相关性(relevance)(与当前查询的余弦相似度)。
[2026-02-14 09:12:03] observation: Isabella Rodriguez asked me if I like jazz
[2026-02-14 09:14:22] reflection: I enjoy long conversations about music
[2026-02-14 10:05:00] plan: Attend Isabella's Valentine's Day party tonight记忆检索会组合三个分数:score = w_recency * e^(-decay * age) + w_importance * importance + w_relevance * cos_sim。得分最高的 k 个条目进入当前 prompt。
反思。 周期性触发(每 N 条记忆或遇到重要事件时),Agent 从最近的记忆中生成更高阶的综合。反思条目会回到记忆流中,并像其他记忆一样可被检索。Agent 就是这样建立「理解」的——相当于该架构中的长期信念。
计划。 自顶向下分解。首先是一个粗线条的日级计划(「去上班,和 Klaus 吃晚饭」)。然后是小时级计划。接着是动作级计划。计划可修订:当观察与计划矛盾时,Agent 只重规划受影响的那一段。
为什么三者缺一不可(消融)
Park 等人分别去掉了观察、反思和计划做消融。每种消融都会损害可信度:
- 没有观察,Agent 会错过上下文,基于过时的信念行动。
- 没有反思,Agent 无法形成高阶信念;交互停留在浅层。
- 没有计划,行为变成反应式的噪声;目标消散。
人类评分者给出的可信度分数在三者齐备时最高;去掉任何一个都会带来可测量的回退。
情人节派对的涌现
一个 Agent Isabella Rodriguez 被赋予目标「想在 2 月 14 日下午 5 点在 Hobbs Cafe 办一场情人节派对」。其余 24 个 Agent 没有这个种子。随着模拟天数推进:
- Isabella 的计划包含邀请他人。
- 邀请成为邻居记忆流中的一条观察。
- 这个邻居的反思生成信念:「Isabella 要办派对。」
- 邻居的计划纳入「2 月 14 日参加派对」。
- 邻居再告诉其他邻居。邀请在没有中心协调的情况下传播开来。
- 2 月 14 日下午 5 点,若干 Agent 汇聚到 Hobbs Cafe。
这是技术意义上的涌现:系统级行为(一场派对)从局部交互(双边邀请 + 个体规划)中产生,没有中心编排器。
已记录的失效模式
Park 等人明确记录了:
- 空间规范错误。 Agent 走进关门的商店。Agent 试图使用同一个单人卫生间。Agent 在不适合用餐的房间里吃饭。模型无法仅从环境中推断社会-物理规范。
- 记忆溢出。 长时间的深度模拟会让记忆检索成本持续增长。实用补救:周期性记忆压缩(总结并修剪)以及对低重要性条目的衰减。
- 反思幻觉。 反思可能虚构出记忆流中并不存在的关系。缓解:在反思 prompt 中包含来源记忆 id,并在检索时校验。
这些都是与生产相关的失效模式:任何 2026 年的 Agent 模拟都会继承它们。
三组件实现规则
- 记忆只追加。 永不修改记忆条目。更正是新条目。
- 重要性分数要廉价。 在写入时调用 LLM 打 1-10 分。缓存分数。
- 检索是排序,不是过滤。 按组合分数取 top-k;不要用硬过滤(会丢失上下文)。
- 反思周期性运行。 当未处理记忆的重要性总和超过阈值(例如 150)时触发。
- 计划可修订。 当新观察与计划矛盾时,只重新生成受影响的那一段,而不是整份计划。
Smallville 之外的生成式 Agent
2024-2026 年的后续文献扩展了该架构:
- 用于政策/市场研究的多 Agent 社会模拟。 Smallville 式人群模拟用户对新功能的行为反应。比 A/B 测试更快;准确性仍有争议。
- 游戏中的 NPC AI。 配备 Smallville Agent 的 RPG 会产生涌现式剧情,而不是脚本化任务。
- 生成式 Agent 评估基准。 指标不再是任务准确率,而是长时间运行中行为的可信度 + 连贯性。
该架构是参考。各种扩展会替换组件(用向量库做记忆、检索增强的反思、神经符号计划),但保留三部分结构。
这对多 Agent 工程意味着什么
Smallville 证明了:只要组件选对,多 Agent 涌现的成本很低。该架构如今已在开源模型上复现(较小的 LLM 会平滑地、而非断崖式地损失可信度)。任何需要涌现式社会行为的生产系统都采用这种形态。任何需要紧密任务执行的系统,则采用本阶段前面的监督者/角色/原语模式。
构建它
code/main.py 用标准库 Python 实现三个组件,采用脚本化的 Agent 策略(没有真实 LLM)。演示在缩小规模上复现了情人节派对的涌现:
MemoryStream—— 只追加日志,支持按新近度/重要性/相关性检索。reflect(stream)—— 对近期高重要性记忆做脚本化反思。plan(agent_state)—— 基于当前信念生成日级和小时级计划。- 场景:5 个 Agent。Agent 1 从「下午 5 点办派对」开始。随着模拟 tick 推进,邀请扩散,Agent 们汇聚。
运行:
python3 code/main.py预期输出:逐 tick 的轨迹。到最后一个 tick,5 个 Agent 中至少有 3 个的计划里出现了派对,并且它们在派对地点汇聚。单一初始种子在没有任何编排器的情况下产生了协调到达。
使用它
outputs/skill-simulation-designer.md 用于设计生成式 Agent 模拟:Agent 数量、记忆 schema、反思节奏、计划时程以及评估指标。
交付它
生产模拟的规则:
- 记忆就是数据库。 规模化时选择真正的存储(向量数据库、Postgres)。内存中的标准库实现只适合原型。
- 记录检索轨迹。 对每个动作,记录驱动它的 top-k 记忆。这是你的调试能力所在。
- 为每个 Agent 设定 token 预算。 每个 Agent 每 tick 的 retrieve + reflect + plan 是 O(k) 次 LLM 调用。N 个 Agent × T 个 tick × 每 tick 的调用次数,可能远远超出预算。
- 周期性压缩记忆。 总结并修剪低重要性条目。保留策略是设计决策,不是细节。
- 显式检测空间/社会规范违规。 架构本身学不到这些。
练习
- 运行
code/main.py。确认 3 个以上 Agent 在派对地点汇聚。把 Agent 增加到 10 个——涌现还会发生吗? - 去掉反思步骤。行为看起来如何?对照 Park 2023 的消融结论。
- 引入一个相互竞争的种子目标(「Klaus 想在下午 5 点做一场研究报告」)。Agent 会分裂,还是一个目标占主导?由什么决定?
- 增加空间约束:Hobbs Cafe 最多容纳 4 个 Agent。模拟是优雅地处理溢出,还是撞上「单人卫生间」式的失败模式?
- 阅读 Park 等人(arXiv:2304.03442)第 6 节(涌现行为实验)。找出一个在你的缩小版中无法复现的行为。你需要增强架构中的哪个组件?
关键术语
| 术语 | 人们的说法 | 实际含义 |
|---|---|---|
| Memory stream | "Agent 的日记" | 观察、行动、反思、计划的只追加日志。 |
| Recency | "记忆有多新" | 按时间计算指数衰减的分数。 |
| Importance | "Agent 有多在意" | 写入时自评 1-10。会缓存。 |
| Relevance | "与当前查询有多相关" | 余弦相似度(基于 embedding)。 |
| Reflection | "高阶信念" | 从近期记忆生成的综合,再作为新记忆重新摄入。 |
| Plan | "日/时/动作分解" | 自顶向下的计划树。观察矛盾时可修订。 |
| Smallville | "Park 2023 的沙盒" | 产生情人节涌现的 25 Agent 模拟。 |
| Believability | "质量指标" | 人类评分者判断行为是否像可信 Agent 的分数。 |
延伸阅读
- Park et al. — Generative Agents: Interactive Simulacra of Human Behavior —— 参考架构
- UIST '23 paper page —— 发表会议
- Smallville code release —— 参考 Python 实现
- Hayes-Roth 1985 — A Blackboard Architecture for Control —— 结构化记忆 Agent 的先例