多智能体社会模拟
多智能体社会模拟在设定好的环境中观察角色互动,用来探索机制和情景;模拟中的行为不能直接当作真实人群结论。
理解与应用
多智能体社会模拟为一组虚拟角色设置环境、可见信息与行动方式,再观察互动如何演化。使用语言模型时,角色还可以结合记忆、计划和对话生成行为。它适合研究规则在某种设定下会带来什么结果,或为游戏与交互设计探索可能情景。
例如模拟办公楼里的消息传播:A 知道食堂临时关闭,B 只能联系 A 和 C,C 没有直接收到通知。模拟者需要决定每一轮谁先行动、消息是否一定转发、角色能否记住前一轮对话。这些看似实现细节的选择,会直接决定通知多久传遍整栋楼。
如果采用同步更新,每个角色本轮只能看到上一轮状态,消息从 A 到 C 可能需要两轮;若依次更新,B 刚知道消息,C 就可能在同一轮听说。加入语言模型后,转发意愿和措辞又会受角色提示、底层模型与采样影响。多个角色用同一模型时,输出还可能带有相关偏差,并非独立的人群样本。
因此,模拟结果首先说明的是这套规则和设定的后果。更换初始条件、更新顺序和随机种子,能检验结果是否稳健;若要解释现实,则还需要现实数据的校准与验证。故事看起来生动,不能让虚构员工的意见变成真实员工反馈,更不能据此认定某一群体通常会怎样行动。
动手试一试:同步更新时,一条消息需要几轮传播
程序规定消息一定转发,并使用上一轮状态同步更新,所以结果完全由网络和规则决定。它没有模拟人的心理或运行语言模型;C 在第二轮才知道消息,说明更新时间安排本身就能改变观察结果。
将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。
Python 代码
neighbors = {"A": ["B"], "B": ["A", "C"], "C": ["B"]}
known = {"A": True, "B": False, "C": False}
for step in range(3):
print(f"第 {step} 轮:", [name for name, value in known.items() if value])
previous = known.copy()
known = {
name: previous[name] or any(previous[n] for n in neighbors[name])
for name in previous
}运行结果
第 0 轮: ['A'] 第 1 轮: ['A', 'B'] 第 2 轮: ['A', 'B', 'C']
常见误区
- 角色语言自然,不等于这些角色代表真实人群的行为分布。
- 更新顺序、交互渠道和初始设定都会影响结果,不能当作无关实现细节。
- 用同一模型生成多个角色,不会自动获得相互独立的社会样本。
前置与延伸
建议先读
相关概念
参考与版本
Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- Generative Agents: Interactive Simulacra of Human Behavior ↗
核对作者模拟环境中的记忆、反思与行动机制;不把模拟涌现现象视为真实人群预测验证。 · 核验:2026-10-10