AgentSociety: Large-Scale Simulation of LLM-Driven Generative Agents Advances Understanding of Human Behaviors and Society
Paper: arXiv:2502.08691 Code: tsinghua-fib-lab/AgentSociety Code reference:
main@26eb1d11(2026-05-21)
1. Motivation (研究动机)
这篇论文要解决的不是“让 LLM agent 做一个任务”,而是更难的 generative social science / agent-based social simulation 问题:如何在一个足够真实、足够大规模、可干预、可复现实验的虚拟社会里,让 LLM-driven agents 产生可研究的人类行为与社会现象。传统社会科学实验成本高、样本和伦理约束强,经典 agent-based models 又常依赖手写规则,难以覆盖人的情绪、需求、认知、移动、工作、消费、社交之间的耦合。LLM 的出现提供了更强的角色扮演、语言沟通和情境推理能力,但 vanilla LLM 或已有小规模 generative agents 仍有三个核心缺口:
- 个体层缺少 mind-behavior coupling:已有 agent 往往能写日程或聊天,却没有把 emotion、needs、cognition 与 mobility / social / economic behaviors 连成闭环。人的行为不是随机行动列表,而是由饥饿、安全、社交、经济压力、政治态度、情绪波动等内部状态持续驱动。
- 环境层缺少客观世界约束:如果只靠 LLM “想象”城市、交通、社交平台和经济系统,位置、时间、金钱、税收、商品供需、社交关系等数值约束容易 hallucinate。论文因此强调把 LLM 的主观行为逻辑与可计算的 real-world societal environment 分离。
- 系统层缺少大规模异步执行能力:社会现象常是规模涌现的结果。少量 agent 的同步 SOP 式协作不等价于真实社会中大量个体独立思考、异步行动、偶发交流并受环境反馈影响的过程。要支撑 量级 agents 和数百万次交互,需要分布式执行、连接复用和高吞吐消息系统。
Figure 1 解读:这张图给出论文评价 LLM-driven social simulators 的三维框架:agent 是否有 profile / status / mind / behavior / M-B coupling,environment 是否覆盖 urban / social / economic space,simulator 是否支持大规模、社交实验工具和用户交互。AgentSociety 的目标就是把这三条轴同时做满,而不是只在某个小型对话场景里展示 agent 能聊天。
这个问题值得研究,是因为一旦平台具备可信的个体、环境和规模,就可以把它作为社会科学的 “digital sandbox”:在不直接影响真实人群的前提下,研究 polarization、inflammatory message spread、UBI、hurricane shock、urban sustainability 等问题,并通过 survey / interview / intervention 复现实验设计。
2. Idea (核心思想)
核心 insight:把社会模拟拆成“有心理状态的 LLM social agents + 有物理/社会/经济约束的环境 + 异步大规模执行引擎”,并让 agent 的 mind、memory、behavior 和 environment feedback 形成闭环。 这样 LLM 不负责精确算交通、税收或消息路由,而负责更接近人类的语义判断、计划、沟通和认知更新。
Figure 2 解读:Figure 2 把 AgentSociety 画成三块:左侧是具备 minds、behaviors、social relations 的 agents;中间是 urban / social / economic spaces 组成的 societal environment;右侧是 simulation engine 与一组 social experiments。图中最关键的箭头不是单向调用,而是 agent 在环境中行动、环境返回约束和结果、agent 再更新 memory / emotion / cognition 的循环。
与 Generative Agents / Smallville 这类偏小规模、偏规则场景的工作相比,AgentSociety 的根本差异在于:它不是只做 “daily routine + memory reflection”,而是显式建模 mobility、social、economic 三类社会行为,把行为落到 OSM/SafeGraph 城市空间、社交网络、宏观经济账户与 MQTT 消息系统上,并用 Ray + asyncio + agent groups 把规模推进到 agents 和约 5 million interactions。
3. Method (方法)
3.1 Overall framework:三层社会模拟器
AgentSociety 的方法可以理解为三层解耦:
- Subjective layer / LLM-driven social agents:保存 profile、status、stream memory;用 needs、emotion、cognition 驱动计划和行为。
- Objective layer / societal environment:用城市交通、社交网络、经济账户等模块给行为提供可计算反馈,避免 LLM 直接幻想世界状态。
- Execution layer / large-scale simulation engine:把 agents 分组为 Ray actors,在每组内用 asyncio 并发 I/O,通过 MQTT 做 agent/user/survey 消息传输。
这种解耦的直觉是:LLM 最擅长语义、意图、沟通和开放情境判断;传统仿真/数据库/消息队列更擅长确定性状态更新和高吞吐工程执行。AgentSociety 把两者放在各自擅长的位置,再用 memory 和 environment feedback 把它们闭合起来。
3.2 LLM-driven social generative agents
3.2.1 Profile / status / minds / behaviors
Figure 3 解读:Figure 3 展示 agent 的四个组成部分:Profile 与 Status 提供角色身份和动态状态;Minds 包括 emotion、needs、cognition;Social Behaviors 包含 mobility、social、employment & consumption;Environment 则给这些行为返回外部约束。图底部的 workflow 强调行为不只是 LLM 生成文本,而是 “profile/status → minds → behavior → environment feedback → memory/status update” 的闭环。
Profile 存相对静态属性,例如姓名、年龄、性别、教育、人格、背景故事。Status 存动态属性,例如当前 need、emotion、经济状态、位置、社交关系和当前计划。Minds 分三层:emotion 是短期反应,needs 是行动动机,cognition 是对世界和事件的理解/态度。Behaviors 则是 mind 作用到外部世界的执行通道。
3.2.2 Emotion, needs, cognition
Figure 4 解读:Figure 4 把 mind 拆成 attitude、emotion、thought,并通过 needs 与 behavior 相连。论文采用 Shvo et al. 的 emotion measurement:agent 选择当前情绪关键词,生成一句与情绪相关的 thought,并对 sadness、joy、fear、disgust、anger、surprise 六类核心情绪给出 0–10 强度。Needs 参考 Maslow hierarchy,作为持续动机;cognition 则参考 Theory of Mind / Cognitive Appraisal Theory,负责对事件、他人状态和外部情境形成理解。
Needs 模块会随时间衰减、受行为完成情况和干预事件影响,并决定当前 dominant need。Plan 模块随后按 Theory of Planned Behavior 的思路,把 need 转成 plan target 和 steps。released code 中这一逻辑对应 NeedsBlock.forward() 和 PlanBlock.forward():先 initialize / time_decay / update_when_plan_completed / determine_current_need,再选择 guidance option 并生成 detailed plan。
3.2.3 Mobility behavior
Figure 5 解读:Figure 5 展示 mobility 从 need/plan 进入四步:intention extraction、type selection、radius decision、place selection。比如 social need 触发 “去见朋友”,系统先选 POI 类型,再确定搜索半径,再在候选地点里选择具体位置,最后通过地图环境执行移动。
地点选择使用 gravity model: 其中 表示地点 的吸引力, 表示 agent 到地点 的距离, 是距离衰减系数。这个公式把“近处更可能被选中”和“高吸引力地点更可能被选中”结合起来,减少完全交给 LLM 选择地点的随机性和成本。
3.2.4 Social behavior
Figure 6 解读:Figure 6 把 social behavior 分成找人、发消息、编排会面等动作,并把 social network 里的 relationship type / strength 作为选择目标和语气的依据。论文当前主要建模 online social behavior,但也保留 offline meeting 的扩展逻辑。
社会关系包括 family、friend、colleague,关系强度为 0–100。agent 选择聊天对象时不仅看关系强度,还看当前 intention、emotion、thought、对方职业/经验和历史聊天记录。收到消息后,agent 的回应又会改变 emotion、cognition 和后续行为,因此 social behavior 是信息传播、观点变化和情绪扩散实验的关键基础。
3.2.5 Economic behavior
Figure 7 解读:Figure 7 展示 economic behavior 中 work 与 consumption 的闭环:agent 的 mobility behavior 决定到工作地或消费场所,经济行为改变 work propensity、consumption propensity、income、savings 等状态,并反馈给 simulator 里的 firms、government、bank 等实体。
论文把 employment 和 consumption 作为日常生活的核心经济活动:work propensity 决定工作时间和月收入,consumption propensity 决定月消费预算;消费又受上月消费、价格、税收、储蓄和市场供需影响。released code 中 EconomyBlock.before_forward() 会先调用 MonthEconomyPlanBlock 生成月度经济计划,WorkBlock 估计工作耗时并记录工作经验,ConsumptionBlock 检查月消费上限、查询 firms、计算价格加权购买分布并通过 economy client 执行交易。
3.2.6 Memory-driven workflow
Figure 8 解读:Figure 8 是 agent 内部闭环的核心图:Profile / Status / Stream Memory 存储不同粒度的信息;Minds 在 timeline 上持续更新;Need to Plan 把内部动机转成计划;Behavior 分到 mobility / social / economy / other;执行结果再回写 memory。这里的关键是 stream memory 同时记录 event flow 和 perception flow,使“发生了什么”和“agent 如何理解这件事”可以分开存储又互相引用。
3.3 Real-world societal environment
Figure 9 解读:Figure 9 把 environment 拆成 Urban Space、Social Space、Economic Space。Urban Space 负责地图、AOI、POI、道路、交通方式;Social Space 负责社交网络、online/offline interaction、supervisor;Economic Space 负责 firms、agents、government、bank 和 NBS。下方四条绿色通道说明 environment 给 social interaction、mobility、environment feedback、economy computation 提供接口。
- Urban Space:基于 OpenStreetMap 的 road network / AOI 和 SafeGraph POI,支持 driving、walking、public transit、taxi。车辆部分使用 IDM acceleration 和 MOBIL lane-changing;行人走 sidewalk 并遵守信号;bus 按固定时刻表;taxi 用全局 dispatch 找最近车辆。
- Social Space:加载用户提供的 social network,维护关系类型和强度。supervisor 作为消息传输前的 middleware,可识别消息内容、过滤 inflammatory content、ban users 或切断 connections。
- Economic Space:建模 firms、agents、government、banks、National Bureau of Statistics。firms 用劳动生产商品并付工资,government 收税,banks 按 Taylor Rule 调整利率并付息,NBS 汇总 real GDP、income distribution、tax revenue、per-capita consumption 等指标。
3.4 Large-scale social simulation engine
Figure 10 解读:Figure 10 展示系统工程架构:shared services 包括 DeepSeek/OpenAI/Qwen/vLLM/ollama 等 LLM API、EMQX MQTT server、PostgreSQL database、mlflow metric recorder;每个 experiment 由 environment simulator、agent simulator、Ray cluster 和 experiment-side clients 组成;GUI 通过 database 和 MQTT 与实验交互。
Figure 11 解读:Figure 11 说明为什么要有 agent group:如果每个 agent 独占进程和连接,TCP port、数据库连接和 MQTT 连接会很快耗尽;把多个 agent 放入一个 Ray actor / process 后,可以复用 LLM、MQTT、environment、database、metric clients,同时在组内用 asyncio 隐藏 LLM API 和 environment API 的 I/O 等待。
Figure 12 解读:Figure 12 展示 MQTT-powered messaging:agent 只订阅 /<exp_uuid>/agents/<agent_uuid>/ 前缀下的 topic,具体包括 agent-chat、user-chat、user-survey。这种 pub/sub 结构来自 IoT 场景,适合大量端点、较高吞吐、对单条消息延迟不极端敏感的 agent society。
论文还提供 intervention / interview / survey 三类 social experiment toolbox。intervention 可在 pre-simulation 修改 agent settings,也可在 simulation 中 manipulation memory/state 或发送 message notification;interview 和 survey 都通过 MQTT 传给 agent,让 agent 在不中断主行为流的情况下给出结构化回答。
3.5 Pseudocode from released code
下面伪代码基于 released code main@26eb1d11,重点反映真实实现中的 block、dispatcher、memory 和 environment client 关系,而不是只复述论文图。
async def society_agent_forward(agent):
await agent.reflect_to_environment() # LLM reflects on AOI/env context
if not await agent.check_and_update_step(): # if previous move/action still running
return
cognition = await agent.needs_block.forward() # initialize/decay/need selection
if agent.params.enable_cognition and cognition:
await agent.save_agent_thought(cognition)
if not await agent.memory.status.get("current_plan"):
cognition = await agent.plan_block.forward() # need -> guidance -> detailed steps
if cognition:
await agent.save_agent_thought(cognition)
await agent.step_execution() # dispatch current step to behavior blocks
if agent.params.enable_cognition:
await agent.cognition_block.forward() # daily thought/attitude updateasync def need_and_plan_loop(needs_block, plan_block, memory):
await needs_block.initialize()
await needs_block.time_decay()
await needs_block.update_when_plan_completed()
dominant_need = await needs_block.determine_current_need()
if dominant_need is not None:
guidance = await plan_block.select_guidance(dominant_need)
plan = await plan_block.generate_detailed_plan()
for step in plan["steps"]:
step["evaluation"] = {"status": "pending", "details": ""}
await memory.status.update("current_plan", {
"target": plan["target"],
"steps": plan["steps"],
"index": 0,
"completed": False,
"failed": False,
"guidance": guidance,
"stream_nodes": [],
})def gravity_model(candidates, beta=1.0):
weights = []
for poi, distance in candidates:
attractiveness = poi.get("attractiveness", 1.0)
weights.append(attractiveness / max(distance, 1.0) ** beta)
probs = torch.tensor(weights, dtype=torch.float32)
probs = probs / probs.sum()
selected = torch.multinomial(probs, num_samples=1).item()
return candidates[selected]
async def mobility_block_forward(block, context):
selected = await block.dispatcher.dispatch(context)
if selected is None:
return {"success": False, "consumed_time": random.randint(1, 30)}
return await selected.forward(context) # PlaceSelectionBlock or MoveBlockasync def social_block_forward(block, context):
selected = await block.dispatcher.dispatch(context)
if selected is None:
return {"success": False, "evaluation": "no social action"}
if selected.__class__.__name__ == "MessageBlock":
target = context.get("target") or await block.find_person_block.forward(context)
message = await block.message_block.llm.atext_request(
block.message_block.default_message_template,
response_format={"type": "json_object"},
)
await block.agent.send_message_to_agent(target["target"], message)
await block.memory.status.update("chat_histories", message, mode="merge")
return {"success": True, "evaluation": message}
return await selected.forward(context)async def economy_block_forward(block, context):
await block.month_plan_block.forward() # before_forward: monthly work/consumption plan
selected = await block.dispatcher.dispatch(context)
if selected is None:
return {"success": False, "consumed_time": 0}
if selected.__class__.__name__ == "ConsumptionBlock":
agent_id = await block.memory.status.get("id")
firms = await block.environment.economy_client.get_firm_ids()
budget = await block.memory.status.get("to_consumption_currency")
spent = await block.environment.economy_client.get(agent_id, "consumption")
if spent >= budget:
return {"success": False, "evaluation": "monthly limit reached"}
# released code then allocates spending across firms and records stream memory
return await selected.forward(context)async def grouped_engine_round(agent_groups):
# Each group is a Ray actor/process with shared LLM/MQTT/env/db/mlflow clients.
futures = []
for group in agent_groups:
futures.append(group.run_agents_asyncio())
await asyncio.gather(*futures)
async def mqtt_interceptor_round(supervisor, messages):
validation, persuasion = await supervisor.forward(messages)
delivered = []
for msg in messages:
if msg.kind == "AGENT_CHAT" and not validation.get(msg, True):
delivered.append(failed_delivery_notice(msg))
else:
delivered.append(msg)
return delivered + persuasion3.6 Code-to-paper mapping
论文公式与 released code 实现差异:论文性能实验明确使用 DeepSeek API 平台和 DeepSeek-V3,并在 05:00–07:00 off-peak 时段测试;当前 released examples 多数使用 LLMProviderType.Qwen 且 model="<YOUR-MODEL>" 占位。因此代码仓库可复现实验流程和模块结构,但不是论文性能表的原始 launch config。另一个差异是当前 README 推荐 packages/agentsociety2/,而论文核心实现和示例仍主要对应 legacy packages/agentsociety/ 与 examples/。
Code reference:
main@26eb1d11(2026-05-21) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| LLM-driven social agent loop | packages/agentsociety/agentsociety/cityagent/societyagent.py | SocietyAgent.forward, check_and_update_step, step_execution, react_to_intervention |
| Needs and planning | packages/agentsociety/agentsociety/cityagent/blocks/needs_block.py; .../plan_block.py | NeedsBlock.forward, PlanBlock.forward, select_guidance, generate_detailed_plan |
| Cognition/emotion update | packages/agentsociety/agentsociety/cityagent/blocks/cognition_block.py | CognitionBlock.forward, emotion_update, thought_update, attitude_update |
| Mobility behavior and gravity model | packages/agentsociety/agentsociety/cityagent/blocks/mobility_block.py | gravity_model, PlaceSelectionBlock, MoveBlock, MobilityBlock.forward |
| Social relationship/message behavior | packages/agentsociety/agentsociety/cityagent/blocks/social_block.py | FindPersonBlock, MessageBlock, SocialBlock.forward |
| Economy/work/consumption | packages/agentsociety/agentsociety/cityagent/blocks/economy_block.py | MonthEconomyPlanBlock, WorkBlock, ConsumptionBlock, EconomyBlock.forward |
| Environment APIs | packages/agentsociety/agentsociety/environment/environment.py | Environment.sense, get_datetime, set_aoi_schedules |
| Economic environment client | packages/agentsociety/agentsociety/environment/economy/econ_client.py | EconomyClient.get, update, calculate_real_gdp, calculate_interest |
| Message moderation/intervention | packages/agentsociety/agentsociety/message/message_interceptor.py | MessageInterceptor.forward |
| UBI example config | examples/UBI/main.py | UBI=1000, num_labor_hours=168, productivity_per_labor=1 |
| Polarization / inflammatory / hurricane experiments | examples/polarization/*.py; examples/inflammatory_message/*.py; examples/hurricane_impact/hurricane.py | WorkflowStepConfig, intervene, survey, profile files |
4. Experimental Setup (实验设置)
4.1 Data / environments / simulation scale
- 整体规模:论文基于 AgentSociety 生成 agents 的社会生活,累计约 5 million interactions,包括 agent-agent 交互与 agent-environment 交互。
- 城市/POI 数据:Urban Space 使用 OpenStreetMap road network / AOI,并通过 SafeGraph API 获取 POI。hurricane 实验使用 SafeGraph POI/mobility data 与 Census Block Group (CBG) demographic profiles。
- Hurricane case:Hurricane Dorian,Columbia, South Carolina;时间范围 2019-08-28 到 2019-09-05;实验包含 1,000 social agents,并注入 real-time weather updates。
- Urban sustainability case:北京高保真城市环境,基于 real-world GIS、AOI、POI,实例化 200 heterogeneous agents;人口属性按 2024 Beijing census 采样;6 个独立研究团队设计 eco-normative systems。
4.2 Baselines / compared systems
论文有两类比较:
- Simulator capability comparison:D2A、EconAgent、OASIS、GA1000、MATRIX、Sociodojo、Generative Agents、GenSim、Project Sid、AgentScope、HiSim、S3、Agent4Rec、RecAgent、Sotopia、Casevo 等。比较维度包括 minds、mobility、economics、social、free/influence/driven M-B coupling、scale、environment type。AgentSociety 的 “Ours” 行覆盖全部列,scale 为 ,environment 为 Society。
- Messaging system comparison:MQTT (emqx v5.8.1)、Redis Pub/Sub (v6.2)、RabbitMQ (v4.0.5)、Kafka。Kafka 因无法在 5 分钟内初始化 100,000 agents,论文未报告 throughput。
4.3 Evaluation metrics
- Environment performance:simulation step time;在不同个体数量和 QPS 下的 per-step time degradation。
- Messaging performance:throughput (msg/s),同时考虑是否有 GUI / dashboard 等辅助工具。
- Social simulator performance:五轮 interaction 的 total execution time、input/output token usage、LLM API latency distribution、environment API latency distribution。
- Social experiments:polarization opinion shift;information spread / emotional intensity;UBI 下 GDP、consumption、CES-D depression;hurricane 下 activity level 和 normalized daily trips;urban sustainability 下 pro-environmental norm strength 与 mobility CO emissions。
4.4 Runtime / config
论文性能实验全部在 Huawei Cloud c7.16xlarge.4 cloud servers 上进行。Social simulator performance 使用一台 64-core machine,其中 32 cores 分配给 environment,另外 32 cores 分配给 simulation engine。LLM API 选择 DeepSeek 平台,因为其官方宣称 no request limit;测试安排在 DeepSeek off-peak hours 05:00–07:00 local time;论文称实验模型为 DeepSeek-V3。
关键实验 config:
- Environment performance:生成 1,000 / 10,000 / 100,000 / 1,000,000 individuals;departure time 按 weekday pattern;从 08:30 morning peak 开始;setting:fetched query ratio 为 1:999;process count 为 2 / 4 / 8 / 16 / 32;每组重复 5 次、持续 10 秒;QPS 从 到 。
- Messaging performance:假设 100,000 agents;每条消息 100 bytes;每个 agent 给 10 个随机 agent 发消息;parallel process counts 为 2 / 4 / 8 / 16 / 32;最低需求 throughput 为 20,000 msg/s。
- Social simulator performance:agents 数量为 与 ;groups 数量为 8 / 16 / 32;指标按五轮 interactions 统计。
- UBI experiment:对照无 UBI 与处理组每个 agent 每月无条件发放 $1,000;released code
examples/UBI/main.py中相同地配置UBI=1000,并设置num_labor_hours=168、productivity_per_labor=1。 - Urban sustainability experiment:day 1 允许三种 intervention channel:direct communication、poster placement、city-wide public announcement;poster cost = 1,000,city-wide announcement cost = 10,000;每队总预算上限 = 100,000;day 2 禁止继续干预,只观测 norms survey 和 travel mode / CO。
5. Experimental Results (实验结果)
5.1 System performance
Societal environment step time:
| # Agents | Mean Time per Step (s) ± SD |
|---|---|
结论是环境本身在百万个体级别仍保持 sub-second step time,说明主要瓶颈不在 environment API,而在 LLM API 和大规模 agent execution。
Messaging throughput:
| System | Best Parallel Process Number | Throughput (msg/s) | Auxiliary Tools |
|---|---|---|---|
| MQTT (emqx v5.8.1) | 32 | Built-in GUI | |
| Redis Pub/Sub (v6.2) | 16 | - | |
| RabbitMQ (v4.0.5) | 16 | Built-in GUI |
Redis throughput 更高,但 MQTT 仍超过 20,000 msg/s 需求,并有 EMQX GUI 便于调试和监控;RabbitMQ 刚过阈值且波动大;Kafka 初始化 100,000 agents 超过 5 分钟未完成。因此论文选择 MQTT 作为默认 messaging implementation。
Social simulator performance:
| Agents | Groups | LLM Calls | ITs/call | OTs/call | All (s/round) | LLM (s/call) | Env (ms/call) |
|---|---|---|---|---|---|---|---|
| 8 | 4803.0 | 430.04 | 79.17 | 82.45 | 4.51 | 12.26 | |
| 16 | 3120.8 | 398.78 | 77.18 | 41.17 | 2.92 | 14.31 | |
| 32 | 4790.4 | 412.82 | 75.56 | 43.30 | 2.94 | 9.55 | |
| 8 | 54135.4 | 430.35 | 75.84 | 5681.18 | 52.54 | 33.55 | |
| 16 | 54002.2 | 430.24 | 75.80 | 1422.48 | 3.53 | 33.55 | |
| 32 | 54075.0 | 430.47 | 76.14 | 458.82 | 8.05 | 30.53 |
Figure 13a–13d 解读:四个子图分别是 10k agents 下 input tokens、output tokens、LLM API time、environment API time 的分布。token 分布在不同 group 数下相对稳定,说明并行化不会改变单次调用信息量;LLM time 对并发和平台侧负载更敏感;environment time 保持毫秒级,支持论文“LLM API 是主要瓶颈”的判断。
5.2 One-day life and large-scale simulation examples
单个 agent 一天内的环境交互统计如下:Urban Space Get 465.67、Urban Space Set 4.27、Economy Space Get 9.26、Economy Space Set 3.30、Social Space SendMessage 9.08,总计 491.68 interactions per agent per day。这说明 agent 的日常生活不是纯文本日程,而是频繁查询和更新城市、经济、社交空间。
Figure 14 解读:Figure 14 把 daily life of social agent 和五类 social experiments 放在一起:左侧是 profile/status/memory/needs/cognition/behavior 的个体生活闭环;右侧是 behavior space 与 experiment cases,包括 polarisation、inflammatory messages、UBI、hurricane impact、eco-normative systems。它说明同一套 simulator 同时用于微观行为一致性检查和宏观社会实验。
Figure 15a–15b 解读:这组图展示 GUI / map 上的大规模 agent 分布与单个 agent 行程回放。左图更像全局空间分布,右图展示某个 agent 的路径、交通和环境记录。它的作用不是给出量化指标,而是验证平台具备可观察性:研究者可以回看 agent profiles、locations、status history、thought/dialogue history 和 survey responses。
5.3 Polarization
Figure 16 解读:Figure 16 比较 gun control 议题下三种设置:control、homophilic interaction、heterogeneous interaction。control 中 39% agents 更 polarized,33% 更 moderate;homophilic interaction 中 52% agents 更 polarized,体现 echo chamber;heterogeneous interaction 中 89% agents 变得更 moderate,11% 被说服到对立观点。该实验说明 AgentSociety 可以用 controlled intervention 观察信息环境如何改变群体观点分布。
5.4 Spread of inflammatory messages
Figure 17a–17b 解读:左图是 information spread 随时间变化,右图是 emotional intensity 随时间变化。experimental group(注入 inflammatory messages)相对 control group 有更高扩散和更强情绪反应;node intervention 比 edge intervention 更能抑制扩散和情绪强度。原因是 node-level suspension 直接打击重复传播者,而 edge-level 删除连接只能局部改变网络结构。
Figure 18 解读:词云总结 agents 对 chained woman incident 的访谈意见,突出 “incident / human rights / accountability / public / information / change / people”等词。它补充说明平台不仅能记录传播曲线,还能通过 interview 获取 agents 对事件的语义解释和动机。
5.5 Universal Basic Income
Figure 19a–19b 解读:Real GDP 和 consumption curves 都显示随着 simulation steps 增加,波动逐渐收敛,经济系统进入较稳定状态。论文随后在 step 96 注入 UBI 干预,并比较后续 24 steps 的经济/社会指标。
Figure 20a–20b 解读:UBI 处理组相对无 UBI 组表现为 consumption level 上升、CES-D depression level 下降。论文将其解释为与 Texas UBI social experiment 的观察相似:无条件现金转移增加消费能力,并缓解部分心理压力。
Figure 21 解读:UBI 访谈词云突出 interest rates、saving、essential goods、long term、benefit、support 等词,说明 agents 讨论 UBI 时不仅提到短期现金,还会联系储蓄、生活必需品、长期收益和宏观利率等经济因素。
5.6 Hurricane external shock
Figure 22a–22c 解读:三张地图分别对应 hurricane landfall 前、中、后阶段。论文报告 hurricane 前各 CBG 的 average activity level 约为 70%–90%;hurricane 到来时降到约 30%;hurricane 后逐步恢复。这说明 social agents 能根据 weather/environment information 调整 mobility demand。

Figure 23 解读:折线图比较 real data 与 simulated visits 的 normalized daily trips。两条曲线都在 8 月 30 日附近明显下降,并在 9 月初恢复;simulation 与真实趋势相近,但峰值和恢复速度仍有偏差。这个结果支持“趋势级别拟合”,但也提示灾害响应强度和时间滞后仍需校准。
5.7 Urban sustainability
Figure 24a–24c 解读:Figure 24 展示 6 个研究团队的 eco-normative interventions 对 pro-environmental norm strength 和 mobility CO emissions 的影响。所有团队都提高了环保规范对齐度并降低了交通 CO;Figure 24c 显示 norm strength increase 与 CO reduction 呈正相关,说明态度变化在模拟中转化为更低碳的出行选择。
Figure 25 解读:Figure 25 展示六套 intervention systems 的规范组成,包括 descriptive norms、injunctive norms、personal norms、identity norms。不同团队的组合不同,说明 AgentSociety 不是只测试单一固定政策,而是可以让研究者设计异质干预策略并比较其行为结果。
5.8 Ablations / limitations / takeaways
论文没有传统 ML ablation table;更接近系统验证与 case-study validation。关键发现如下:
- Environment 不是瓶颈:即使到 individuals,environment step time 仍为 秒;social simulator 表中 Env API 也在 9.55–33.55 ms/call。
- LLM API 是主要瓶颈:10k agents、8 groups 时 All 达 5681.18 s/round,LLM 52.54 s/call;提升到 16/32 groups 后总时间显著降低,但 LLM latency 仍受外部 API server load 波动影响。
- MQTT 是工程折中:Redis Pub/Sub throughput 更高,但 MQTT 达标且有 GUI/调试生态;论文选择它是 “够快 + 可运维” 的折中。
- Social experiments 证明可用性但不是因果真值:polarization、inflammatory messages、UBI、hurricane、urban sustainability 都展示了与真实现象相似的趋势,但平台仍需更多 empirical calibration 和 sensitivity analysis 才能作为政策决策依据。
作者明确或隐含的限制包括:agent group 固定分组会被最慢 group 限制,adaptive load balancing / dynamic scheduling 是 future work;social behavior 当前主要关注 online interactions,offline interactions 仍是计划扩展;economic behavior 目前覆盖 employment / consumption,未来还需 job change、debt、investment 等更复杂金融行为;UBI、灾害和 sustainability 等案例更多展示 simulator potential,而非证明 LLM agents 已经能精确替代真实社会实验。