大模型智能体做社会模拟时,真正难在哪
传统社会科学更多依赖问卷、访谈和心理实验。这些方法当然有效,但一到大规模、敏感话题或者强变量控制,成本和伦理风险就很难绕开。LLM 出来之后,事情变得不一样了:我们开始能用一组虚拟智能体去模拟人的行为、协作和群体演化。
这类工作通常会分成三个层次:个体模拟、任务模拟、社会模拟。层次越往后,问题就越不是'模型会不会说话',而是'它能不能在足够长的时间里,保持像一个人,甚至像一群人'。
个体模拟:先把一个人站稳
个体模拟是最基础的一层。目标不是让智能体'聪明',而是让它稳定地表现出某种身份、性格、经验和偏好。
这里最常见的做法是给智能体补齐角色设定:姓名、年龄、职业、性格特征、过往经历。实现方式可以是 Prompt Engineering,也可以靠微调模型。前者上手快,后者更稳一些,但成本也更高。做过一轮之后通常会发现,真正麻烦的不是角色开场,而是前后行为一致不一致。
记忆机制基本躲不开:
- 短期记忆:处理当前对话上下文。
- 长期记忆:用向量数据库保存关键事件和知识。
- 反思机制:回看自己的行为,修正认知偏差。
如果没有这些东西,智能体很容易变成'每轮都像新的人'。短对话还能糊过去,时间一长就露馅。
个体层面还要解决决策和规划问题。LLM Agent 框架,比如 ReAct、Plan-and-Solve,适合把一个目标拆成多步,再逐步执行。下面这个例子比较典型:
class IndividualAgent:
def __init__(self, persona, memory):
self.persona = persona
self.memory = memory
def plan(self, goal):
# 分解目标为子任务
steps = self.llm.generate_plan(goal)
return steps
def execute(self, step):
# 执行动作并更新环境
action = self.llm.decide(step)
return action
这段代码的重点不在类本身,而在它把'想'和'做'拆开了。只让模型直接回答,行为通常很飘;先规划再执行,至少能把动作链条拉直一点。
任务模拟:多智能体一起干活
当多个个体智能体放进同一个环境里,问题就从'像不像一个人'变成'能不能协作完成任务'。这就是任务模拟。
多智能体系统里,通信方式很关键。可以直接用自然语言交流,也可以用结构化消息传递信息。前者更灵活,后者更容易控住格式。实际选型时我会偏向后者,尤其是任务复杂、参与者多的时候,纯自然语言很容易把协作拖散。
协商机制也很重要。资源冲突、意见分歧、优先级不一致,这些都得处理。常见思路包括辩论式 AI、投票机制,或者干脆引入一个裁决角色。没有协商,多个智能体很容易各说各话,最后谁也没把事情做完。
工具使用是另一条线。模型本身的参数不可能覆盖所有实时信息,所以要让智能体会调用外部工具:搜索互联网、运行代码、操作 API 等。这个方向的价值很直接,它把模型和环境之间的缝补上了,也让任务模拟不至于只停留在'聊天像那么回事'。
社会模拟:从协作走向涌现
社会模拟是更高一层。这里关注的不只是单个智能体或者一组智能体完成任务,而是大量个体互动之后,宏观现象怎么出现,比如舆论传播、市场波动、文化演化。


