多智能体社会模拟

多智能体社会模拟在设定好的环境中观察角色互动,用来探索机制和情景;模拟中的行为不能直接当作真实人群结论。

返回概念图谱 →

理解与应用

多智能体社会模拟为一组虚拟角色设置环境、可见信息与行动方式,再观察互动如何演化。使用语言模型时,角色还可以结合记忆、计划和对话生成行为。它适合研究规则在某种设定下会带来什么结果,或为游戏与交互设计探索可能情景。

例如模拟办公楼里的消息传播:A 知道食堂临时关闭,B 只能联系 A 和 C,C 没有直接收到通知。模拟者需要决定每一轮谁先行动、消息是否一定转发、角色能否记住前一轮对话。这些看似实现细节的选择,会直接决定通知多久传遍整栋楼。

如果采用同步更新,每个角色本轮只能看到上一轮状态,消息从 A 到 C 可能需要两轮;若依次更新,B 刚知道消息,C 就可能在同一轮听说。加入语言模型后,转发意愿和措辞又会受角色提示、底层模型与采样影响。多个角色用同一模型时,输出还可能带有相关偏差,并非独立的人群样本。

因此,模拟结果首先说明的是这套规则和设定的后果。更换初始条件、更新顺序和随机种子,能检验结果是否稳健;若要解释现实,则还需要现实数据的校准与验证。故事看起来生动,不能让虚构员工的意见变成真实员工反馈,更不能据此认定某一群体通常会怎样行动。

关系速览
多智能体协作应用于 →多智能体社会模拟

交互角色可以通过多 Agent 建模,但模拟行为不等于真实人群因果证据。

动手试一试:同步更新时,一条消息需要几轮传播

程序规定消息一定转发,并使用上一轮状态同步更新,所以结果完全由网络和规则决定。它没有模拟人的心理或运行语言模型;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 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。