生成式 agent 与涌现式仿真
Park 等人 2023 年(UIST '23,arXiv:2304.03442)用一个三部件架构填充了 Smallville——一个 25 个 agent 的沙盒:记忆流(memory stream)(自然语言日志)、反思(reflection)(agent 对自己记忆流生成的更高层综合)、计划(plan)(先是日级行为、再是子计划)。标志性结果是情人节派对的涌现:一个被植入「想办一场情人节派对」的 agent,在没有进一步脚本的情况下,让邀请在人群中传开、协调了时间、派对真的发生了——从 24 个一开始对此一无所知的 agent 里冒出来。消融实验表明这三个部件对可信度缺一不可。记录在案的失败是空间规范错误(走进打烊的商店、共用单人卫生间)。这是 2026 年 agent 仿真和多 agent 社会评估的参考架构。
类型: Learn + Build 语言: Python(标准库) 前置要求: Phase 16 · 04(原语模型)、Phase 16 · 13(共享内存) 预计时间: ~75 分钟
问题背景
大多数多 agent 系统是脚本紧凑的团队:planner 规划、coder 写码、reviewer 评审。这对定义良好的任务管用。它捕捉不到当 agent 有记忆、优先级和一个开放世界时产生的那种涌现、非脚本化的行为。研究、社会仿真、以及越来越多的游戏 AI 需要第二种。
Smallville 架构是它的基准。在 Park 2023 之前,最好的 agent 仿真也只是浅薄的脚本跟随者;在它之后,这个模式成了开放世界生成式 agent 的默认。如果你在 2026 年构建一个 agent 仿真,你要么在用 Smallville 的三个部件,要么得明确论证你为什么不用。
核心概念
三个部件
记忆流(Memory stream)。 一份只追加的日志,记录观察、行动、反思和计划。每条记录有时间戳、类型、描述(自然语言)、以及衍生元数据:新近度(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。
反思(Reflection)。 周期性地(每 N 条记忆或在重要事件时),agent 从近期记忆生成更高阶的综合。反思条目回流进记忆流,像任何其他记忆一样可被检索。这就是 agent 如何构建「理解」——这套架构里相当于长期信念的东西。
计划(Plan)。 自顶向下拆解。先是粗线条的日级计划(「去上班,跟 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。
这是技术意义上的涌现:系统级行为(一场派对)从局部交互(双边邀请 + 个体规划)中产生,没有中心 orchestrator。
记录在案的故障模式
Park 等人明确记录了:
- 空间规范错误。 agent 走进打烊的商店。agent 试图用同一个单人卫生间。agent 在不该吃东西的房间里吃东西。模型无法仅凭环境推断社会-物理规范。
- 记忆溢出。 深度仿真运行会让记忆检索成本增长。实用补救:周期性记忆压缩(summarize-and-prune)和对低重要性条目的衰减。
- 反思幻觉。 反思可能编造记忆流里不存在的关系。缓解:在反思 prompt 里包含源记忆 id,并在检索时验证。
这些都是与生产相关的故障模式:任何 2026 年的 agent 仿真都继承它们。
三部件实现规则
- 记忆只追加。 永不改变一条记忆条目。修正是新条目。
- 重要性分数很便宜。 写入时调 LLM 给重要性打 1-10 分。缓存这个分数。
- 检索是排序而非过滤。 按组合分数取前 k;不要用硬过滤(会丢上下文)。
- 反思周期性运行。 当未处理记忆的重要性之和超过一个阈值(比如 150)时触发。
- 计划可修订。 当一个新观察与计划矛盾时,只重新生成受影响的片段,而非整个计划。
Smallville 之外的生成式 agent
2024-2026 年的后续文献扩展了这套架构:
- 用于政策 / 市场研究的多 agent 社会仿真。 类 Smallville 的人群仿真用户对功能的反应行为。比 A/B 测试快;准确性有争议。
- 游戏的 NPC AI。 带 Smallville agent 的 RPG 产出涌现式故事线,而非脚本化任务。
- 生成式 agent 评估基准。 指标不再是任务准确率,而变成长跑中行为的可信度 + 连贯性。
这套架构是参考。各种扩展替换部件(用向量存储做记忆、检索增强的反思、神经符号计划),但保留三部件结构。
这对多 agent 工程为什么重要
Smallville 是一个概念验证:当部件对路时,多 agent 涌现是便宜的。这套架构如今已在开源模型上被复现(更小的 LLM 优雅地而非陡然地丢失可信度)。任何需要涌现式社会行为的生产系统都用这个形状。任何需要紧凑任务执行的系统则用本阶段前面的 supervisor / 角色 / 原语模式。
a5-memory-reflection动手构建
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 个的计划里出现了派对,它们聚到了派对地点。单个种子在没有任何 orchestrator 的情况下产出了协调一致的到场。
实际使用
outputs/skill-simulation-designer.md 设计一个生成式 agent 仿真:agent 数量、记忆 schema、反思节奏、计划视野、以及评估指标。
拿去用
生产仿真的规则:
- 记忆就是数据库。 规模化时选一个真实存储(向量数据库、Postgres)。内存标准库是给原型用的。
- 记录检索轨迹。 每个动作都记录驱动它的前 k 条记忆。这是你的调试能力。
- 给每个 agent 的 token 设预算。 每个 agent 每 tick 的「检索 + 反思 + 计划」是 O(k) 次 LLM 调用。N 个 agent × T 个 tick × 每 tick 调用数能把你的预算吃光。
- 周期性压缩记忆。 summarize-and-prune 掉低重要性条目。保留策略是一个设计决策,不是细节。
- 显式检测空间 / 社会规范违例。 这套架构学不会它们。
练习
- 跑
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 的先行工作