OASIS: Open Agent Social Interaction Simulations with One Million Agents
Paper: arXiv:2411.11581 Code: camel-ai/oasis Code reference:
main@46cdc8d3(2026-05-15)
1. Motivation (研究动机)
现有 LLM-based ABM 的核心问题
这篇论文要解决的不是“让单个 agent 更会聊天”,而是“能否把 LLM agent 放进一个接近真实社交媒体的平台里,规模化地研究信息传播、群体极化、从众效应和谣言扩散”。传统 rule-based Agent-Based Model(ABM)虽然可控、便宜,但行为规则往往过于简化;近一年的 LLM-based ABM 能生成更自然的用户反应,却通常只服务于某一个特定场景,平台环境也很弱:没有动态社交网络、没有真实意义上的推荐系统、动作空间很窄,通常只能点赞/转发/评论中的少数几类动作。
论文在 Table 1 里把 OASIS 和 Smallville、Sotopia、RecAgent、Agent4Rec、S3、HiSim、AgentTorch、AgentScope 等系统对比:多数工作只有 2–1,000 个 agent;即便 AgentScope 声称 1M 规模,也没有具体社交媒体环境、推荐系统和动态网络。OASIS 的定位是补这个空:支持 X 和 Reddit 两类平台、21 类社交动作、推荐系统、动态 follow 网络,并且可以扩展到 1M agents。
本文具体要解决什么
OASIS 试图提供一个 generalizable + scalable social media simulator:
- generalizable:同一个平台抽象可以换成 X 或 Reddit,并通过替换 RecSys、动作子集、数据初始化方式来复现不同社会现象;
- scalable:不仅能做几百人的真实传播复现,还能生成上万到一百万规模的用户群体,用来观察规模带来的群体行为变化;
- social-media-faithful:环境里显式维护用户、帖子、评论、关系、行为 trace、recommendation cache,而不是把“社交平台”压缩成一段 prompt;
- experiment-oriented:目标不是纯 benchmark,而是能复现实验社会科学中的信息扩散、群体极化、Reddit 从众效应,并进一步研究 misinformation 在百万 agent 中的传播。
为什么值得研究
如果模拟器只能跑几十个 agent,很多社交媒体现象根本不会出现:super user 的广播效应、推荐系统对可见内容的塑形、follow 网络中的局部聚类、观点在大群体中的自我修正或极化,都需要足够大的用户池和持续的环境状态。OASIS 的价值在于把 LLM agent 从“对话角色扮演”推向“带平台机制的计算社会科学实验环境”:未来可以用来测试推荐系统、研究群体行为、做 policy/safety sandbox,甚至把 agent 网络反馈当作训练或评估信号。
Figure 1 解读:这张 overview 强调 OASIS 同时覆盖 X 和 Reddit,两类平台共享 agent、environment、recommendation、time/scaling 等抽象。它不是把所有平台行为硬编码成一个固定任务,而是把平台机制拆成可替换模块,因此能把同一套 simulator 用到信息传播、群体极化、从众效应和 misinformation 扩散等不同问题上。
2. Idea (核心思想)
OASIS 的核心洞察是:LLM agent 的社会模拟能力不只取决于 agent prompt,更取决于 agent 能看到什么信息、能执行什么动作、动作如何改变环境、以及这些过程能否在大规模下异步运行。因此论文把 social media simulator 拆成 Environment Server、RecSys、Agent Module、Time Engine、Scalable Inferencer 五个模块,让“个体行为生成”和“平台信息流机制”同时进入模拟闭环。
关键创新可以概括为三点:第一,OASIS 用真实社交媒体平台的数据库/动作/推荐抽象替代纯 prompt 环境;第二,用用户生成和异步推理架构把 LLM-based ABM 扩展到 million-agent 级别;第三,用同一框架复现 X 和 Reddit 上不同社会现象,并检验 agent population scale 对群体行为的影响。
与 S3/HiSim 这类主要面向 X 信息传播的小规模模拟不同,OASIS 的根本差异在于它显式加入了 RecSys 和 dynamic network。与 AgentTorch/AgentScope 这类强调大规模系统的工作相比,OASIS 又更强调社交媒体平台机制:agent 不是抽象人口点,而是在 user/post/comment/follow/trace/rec tables 组成的环境中通过具体动作改写平台状态。
3. Method (方法)
3.1 Overall framework:注册阶段 + 模拟阶段
OASIS 的 workflow 分两步。Registration Phase 先把真实或生成的用户信息注册到 Environment Server:用户 profile、用户关系、历史帖子/评论、初始推荐表都会进入数据库。Simulation Phase 中,Environment Server 把用户信息、帖子、关系交给 RecSys;RecSys 根据 social connections、interest matching 或 hot score 选择 agent 可见内容;LLM agent 读到推荐内容后生成 action 和 rationale;动作再写回数据库,改变 post/comment/follow/trace/rec 等状态。Time Engine 决定哪些 agent 在某个时间点活跃,Scalable Inferencer 负责处理大规模 LLM 请求。
Figure 2 解读:图中最重要的是闭环:Environment Server 不是静态上下文,而是一个会被 agent action 更新的状态机;RecSys 决定 agent 的观察窗口;LLM agent 的 action 又反过来改变平台状态。这个设计解释了为什么 OASIS 能复现“传播”而不只是生成孤立回复:每个 agent 的行动会成为后续 agent 可见信息的一部分。
3.2 Environment Server:把社交平台变成可更新数据库
Environment Server 维护 social media 的状态和数据,论文将其拆成六类组件:users、posts、comments、relations、traces、recommendations。user table 存用户姓名、bio 等基本信息;post/comment table 存内容、创建时间、点赞/点踩数等;relations 存 follow、mutual、like 等关系;trace table 记录用户完整行为历史;recommendation table 缓存 RecSys 输出。
直觉上,这个模块解决的是“LLM agent 如何共享同一个世界”的问题。如果每个 agent 只看自己的 prompt,就无法形成真实传播链;Environment Server 让一个 agent 的 repost/comment/follow 变成数据库事件,随后被推荐系统取出并暴露给其他 agent。
released code 中,这个模块主要对应 oasis/social_platform/platform.py::Platform 和 oasis/environment/env.py::OasisEnv。Platform.running() 从 Channel 收消息,根据 ActionType 调用对应异步接口,再把结果写回 channel;OasisEnv.step() 每一步先 update_rec_table(),然后用 asyncio.gather 并发执行所有 manual/LLM actions。代码层面没有把“论文中的所有社交现象”写成一个 monolithic script,而是提供平台动作接口和不同 experiment config。
3.3 RecSys:控制 agent 可见信息流
RecSys 是 OASIS 中最关键的社会机制之一,因为它决定 agent 看见哪些 post。论文分别实现了 X 和 Reddit 的推荐逻辑。
X RecSys 有两个来源:in-network posts 来自用户 follow 的人,并按 popularity 排序;out-of-network posts 来自更大范围的模拟世界,通过 TwHIN-BERT 或 embedding 相似度匹配用户兴趣,同时考虑 recency 和作者粉丝数,以模拟 super user broadcasting。附录给出的打分公式为: 其中 是 post content embedding, 是用户 profile 和 recent post content 的 embedding; 偏向新内容, 放大粉丝数高的用户, 表示兴趣匹配。
Figure 3 解读:图中展示的是 X 的 out-of-network recommendation pipeline:先从全局帖子池取候选,再用用户兴趣表示和帖子表示做相似度匹配,最后结合时间与作者影响力排序。它补上了 ABM 中常被忽略的信息过滤机制;没有它,agent 会看到过多无关内容,或者只能在 follow 网络内部传播。
Reddit RecSys 使用 Reddit disclosed hot score,公式为: 其中 是 upvotes, 是 downvotes, 是 Unix epoch seconds 下的提交时间,。hot score 同时奖励高净赞数和新近帖子,使热门/新帖子优先被推荐。
论文公式与 released code 实现差异:oasis/social_platform/recsys.py::calculate_hot_score 的实现为 return round(sign * order + seconds / 45000, 7),其中 order=log(max(abs(s),1),10) 且 s=num_likes-num_dislikes。这等价于把 sign 乘在 log-order 上,而论文公式写成 log10(max(...)) + sign(u-d)*(t-t0)/45000,即 sign 乘在时间项上。笔记中保留论文公式,同时标注代码实现,避免把两者静默合并。
3.4 Agent Module:memory + action + CoT rationale
Agent Module 继承 CAMEL agent 设计,主要由 memory module 和 action module 组成。memory 记录 agent 见过的 posts、likes、comments、评论点赞数、过去动作及其 rationale,使 agent 在后续动作中能引用自己的历史观察。action module 提供 21 类社交互动:sign up、refresh、trend、search posts、search users、create post、repost、follow、unfollow、mute、like、unlike、dislike、undo dislike、unmute、create comment、like comment、unlike comment、dislike comment、undo dislike comment、do nothing。论文强调 CoT reasoning:agent 不只输出动作,也输出 rationale,便于解释模拟行为。
released code 中,oasis/social_agent/agent.py::SocialAgent.perform_action_by_llm() 会先调用 env.to_text_prompt() 把平台环境转成文本观察,再让 ChatAgent 选择 tool call;oasis/social_agent/agent_action.py::SocialAction.perform_action() 把 (agent_id, message, type) 写入 Channel,等待 Platform 返回结果。动作实际由 oasis/social_platform/platform.py 修改数据库,例如 create_post 增加 post 记录,follow 更新关系表。
论文公式与 released code 实现差异:论文正文说 action module 有 21 类互动;released code 的 ActionType enum 还包含 REPORT_POST、QUOTE_POST、UPDATE_REC_TABLE、PURCHASE_PRODUCT、INTERVIEW、group chat 相关动作等额外动作。默认 Twitter actions 只有 create_post/like_post/repost/follow/do_nothing/quote_post;默认 Reddit actions 包含 like/dislike/create/search/trend/refresh/follow/mute 等 13 项。论文实验通过不同 scenario 的 action subset 控制可用动作,而不是在代码里强制所有场景都使用同一个 21-action set。
3.5 Time Engine:用用户活跃概率控制 agent activation
Time Engine 解决“所有 agent 同时行动不真实”的问题。论文给每个 agent 一个 24 维 hourly activity vector,表示一天中每小时活跃概率;环境按概率激活 agent,而不是每步激活全部 agent。论文还定义了 sandbox time step:OASIS 中一个 time step 等于 3 分钟;Reddit 场景还需要更细的线性时间映射,因为同一步内 post 的 created time 会影响 Reddit hot score。
released code 中,oasis/clock/clock.py::Clock 只有两个核心接口:time_transfer(now_time, start_time) 用比例因子 把真实时间差映射到模拟时间,get_time_step() 返回离散 step。OasisEnv.step() 在 Twitter 平台下执行完动作后把 sandbox_clock.time_step += 1。论文公式与 released code 实现差异:论文叙述的“1 time step = 3 minutes”主要体现在实验脚本/配置和附录实验说明中,Clock 本身只是通用线性映射器;具体 clock_factor 和 num_timesteps 由 scenario config 决定。
3.6 Scalable design:异步 Channel + inference manager + 大规模用户生成
Scalable Inferencer 的目的不是提高单次 LLM 推理质量,而是避免 million-agent simulation 被同步通信卡死。论文设计了高度并发的分布式系统:agents、environment server、inference services 是独立模块,通过 information channel 交换消息;agent 可以在等待某些响应时继续发起其他请求;environment module 并行处理 incoming messages;inference manager 管理 GPU 并尽量均匀分配请求。
Figure 4 解读:这张图对应 released code 的 Channel:请求进入 asynchronous queue,每条 message 分配 UUID,处理结果放在 thread/async-safe dictionary 中供 agent 读取。这个设计把 agent action 和 environment update 解耦,支撑大量 agent 并发访问同一个平台环境。
大规模用户生成算法用于突破平台 API 和隐私限制:用少量真实用户作为 core users,再根据人口分布生成年龄、MBTI/personality、职业、兴趣等 profile;关系网络保持 scale-free 特性,普通用户按兴趣连接 core users,并以 概率 follow core users,以避免网络过密但保留头部用户影响力。
3.7 Pseudocode:按 released code 抽象的关键流程
下面伪代码基于 main@46cdc8d3 的 released code,而不是只根据论文文字重写。
async def oasis_step(env, actions_by_agent):
# oasis/environment/env.py::OasisEnv.step
await env.platform.update_rec_table()
tasks = []
for agent, action_or_actions in actions_by_agent.items():
actions = action_or_actions if isinstance(action_or_actions, list) else [action_or_actions]
for action in actions:
if isinstance(action, ManualAction):
if action.action_type == ActionType.INTERVIEW:
tasks.append(agent.perform_interview(action.action_args.get("prompt", "")))
else:
tasks.append(agent.perform_action_by_data(action.action_type, **action.action_args))
elif isinstance(action, LLMAction):
tasks.append(agent.perform_action_by_llm())
await asyncio.gather(*tasks)
if env.platform_type == DefaultPlatformType.TWITTER:
env.platform.sandbox_clock.time_step += 1async def llm_agent_action(agent):
# oasis/social_agent/agent.py::SocialAgent.perform_action_by_llm
env_prompt = await agent.env.to_text_prompt()
user_msg = make_user_message(
"Please perform social media actions after observing the platform environments. "
f"Here is your social media environment: {env_prompt}"
)
response = await agent.astep(user_msg) # CAMEL ChatAgent chooses tool calls
for tool_call in response.info["tool_calls"]:
action_name = tool_call.tool_name
args = tool_call.args
# actual DB update is executed via SocialAction -> Channel -> Platform
return responseasync def channel_action_roundtrip(channel, agent_id, message, action_type):
# oasis/social_agent/agent_action.py::SocialAction.perform_action
message_id = await channel.write_to_receive_queue((agent_id, message, action_type))
response = await channel.read_from_send_queue(message_id)
return response[2]def reddit_recsys(post_table, rec_matrix, max_rec_post_len):
# oasis/social_platform/recsys.py::rec_sys_reddit
post_ids = [post["post_id"] for post in post_table]
if len(post_ids) <= max_rec_post_len:
return [post_ids] * len(rec_matrix)
scored = []
for post in post_table:
created_at = parse_datetime(post["created_at"])
s = post["num_likes"] - post["num_dislikes"]
order = math.log(max(abs(s), 1), 10)
sign = 1 if s > 0 else -1 if s < 0 else 0
seconds = unix_seconds(created_at) - 1134028003
hot_score = round(sign * order + seconds / 45000, 7)
scored.append((hot_score, post["post_id"]))
top_post_ids = [pid for _, pid in heapq.nlargest(max_rec_post_len, scored)]
return [top_post_ids] * len(rec_matrix)def update_rec_table(platform):
# oasis/social_platform/platform.py::Platform.update_rec_table
user_table = fetch_table("user")
post_table = fetch_table("post")
trace_table = fetch_table("trace")
rec_matrix = fetch_rec_table_as_matrix()
if platform.recsys_type == RecsysType.RANDOM:
new_rec_matrix = rec_sys_random(post_table, rec_matrix, platform.max_rec_post_len)
elif platform.recsys_type == RecsysType.TWITTER:
new_rec_matrix = rec_sys_personalized_with_trace(
user_table, post_table, trace_table, rec_matrix, platform.max_rec_post_len
)
elif platform.recsys_type == RecsysType.TWHIN:
new_rec_matrix = rec_sys_personalized_twh(
user_table, post_table, latest_post_count, trace_table, rec_matrix,
platform.max_rec_post_len, platform.sandbox_clock.time_step,
use_openai_embedding=platform.use_openai_embedding,
)
elif platform.recsys_type == RecsysType.REDDIT:
new_rec_matrix = rec_sys_reddit(post_table, rec_matrix, platform.max_rec_post_len)
write_rec_matrix_to_db(new_rec_matrix)Code reference:
main@46cdc8d3(2026-05-15) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| Overall environment loop | oasis/environment/env.py | OasisEnv.__init__, OasisEnv.reset, OasisEnv.step, OasisEnv.close |
| Agent LLM action selection | oasis/social_agent/agent.py | SocialAgent.perform_action_by_llm, perform_action_by_data, perform_agent_graph_action |
| Action wrappers / tool interface | oasis/social_agent/agent_action.py | SocialAction.perform_action, sign_up, refresh, create_post, follow, create_comment |
| Platform state and database updates | oasis/social_platform/platform.py | Platform.running, refresh, update_rec_table, create_post, follow, create_comment |
| Action space enum | oasis/social_platform/typing.py | ActionType, get_default_twitter_actions, get_default_reddit_actions, RecsysType |
| Reddit/X recommendation | oasis/social_platform/recsys.py | calculate_hot_score, rec_sys_reddit, rec_sys_personalized_twh, rec_sys_personalized_with_trace |
| Async information channel | oasis/social_platform/channel.py | Channel, AsyncSafeDict, write_to_receive_queue, read_from_send_queue |
| Time mapping | oasis/clock/clock.py | Clock.time_transfer, Clock.get_time_step |
| Large-scale agent generation | oasis/social_agent/agents_generator.py | generate_agents_100w, generate_reddit_agent_graph, generate_twitter_agent_graph |
| Dynamic follow graph | oasis/social_agent/agent_graph.py | AgentGraph, add_edge, remove_edge, get_edges |
4. Experimental Setup (实验设置)
4.1 实验问题与场景
论文围绕两个问题设计实验:
- OASIS 是否能适配不同平台/场景并复现真实社会现象? 论文复现三个经典现象:X 上的信息传播、传播过程中的 group polarization、Reddit 上的 herd effect。
- agent population scale 是否影响群体行为模拟准确性? 论文把用户规模从几百扩展到上万/百万,观察观点多样性、helpfulness、counterfactual self-correction 和 misinformation 扩散是否随规模改变。
4.2 Datasets and scale
- Information spreading on X:从 Twitter15 和 Twitter16 rumor detection datasets 收集 198 个真实传播实例,覆盖 9 个类别;每个 instance 包含 100–700 users 和 source post propagation path。作者还用 X API 获取 user profiles、follow relationships、previous posts,并据此计算 hourly activity level。
- Group polarization on X:从信息传播实验中选取 196 个真实 X users 作为 core users(这些用户 follower 较多且来自不同领域),再用 LLM 生成 up to 1 million synthetic users;生成用户根据 sports、entertainment 等 topic 与 core users 建立 follow 关系。
- Herd effect on Reddit:收集 116,932 条 Reddit real comments,覆盖 7 个 topic,并生成 3,600 个用户 profile;同时从 CounterFact dataset 收集 21,919 条 counterfactual entries,生成 10,000 users。
- Misinformation spreading in 1M agents:选择 4 条官方新闻(health、technology、entertainment、education)并构造 4 条相似 misinformation;实验包含 196 core agents + 1,000,000 regular agents,仿真 60 time steps。
Reddit 7 个 topic 的精确数据如下:
| Topic | Posts | Comments |
|---|---|---|
| Economics | 4,231 | 21,650 |
| IT | 4,020 | 18,622 |
| Culture & Society | 2,319 | 10,489 |
| news | 2,874 | 19,134 |
| politics | 2,690 | 21,477 |
| business | 1,807 | 8,043 |
| fun | 3,272 | 17,517 |
4.3 Baselines / comparisons
论文的 baseline 不是单一模型 benchmark,而是两类比较:
- System-level comparison:Table 1 比较 Smallville、Sotopia、RecAgent、Agent4Rec、S3、HiSim、AgentTorch、AgentScope 与 OASIS 在 agent scale、environment、action space、RecSys、dynamic network、primary LLM 上的差异。OASIS 是表中唯一同时支持 1M agents、X/Reddit environment、21 actions、RecSys、dynamic network、open-source LLM 的系统。
- Phenomenon-level comparison:信息传播用真实 propagation curves 作为 ground truth;herd effect 与 Muchnik et al. 的 human Reddit effect 对照;group polarization 比较 round 0 前后观点,并比较 uncensored vs aligned Llama-3-8B;ablation 比较无 RecSys、普通 BERT/TwHIN-BERT、无 temporal feature、不同 LLM backend。
4.4 Evaluation metrics
- Scale:传播过程中参与传播的 unique users 数量;X 上每个用户只 repost 一次。
- Depth:从 root/source post 到传播图中节点的最大边数。
- Max Breadth:传播图每一层节点数的最大值。
- Normalized RMSE:用于比较模拟曲线与真实曲线: 其中 是最大分钟数, 是第 分钟某个传播指标的值。每分钟误差还可写为 。
- Group polarization metrics:用 GPT-4o-mini 比较不同 round 的 opinions,判断哪一个更 extreme/progressive/helpful,prompt 来自 Safe RLHF/对齐评估风格。
- Post Score:Reddit post/comment 的得分 。
- Disagree Score:对 counterfactual posts 的评论,用 GPT-4o 判断评论对 counterfactual content 的 disagree 程度。
- Misinformation relevance:用 TF-IDF 与 cosine similarity 比较 8 条新闻/谣言和 733,824 条模拟生成 posts;threshold = 0.2,高于阈值视为相关。
4.5 Training / simulation config and hardware
这篇论文不是训练新模型,而是使用 LLM backend 做大规模 simulation;因此“训练配置”主要是 simulation config、LLM backend、硬件与推理服务配置。
- Information spreading alignment:附录说明每个 propagation 最大 50 time steps,每步 3 分钟,对齐真实数据前 150 分钟;动作空间只保留 like、repost、follow、do nothing;300 agents、30 time steps 在 1 张 NVIDIA A100-SXM4-80GB 上耗时 26 分钟。released example
examples/experiment/twitter_simulation/align_with_real_world/yaml_200/sub1/False_Business_0.yaml中num_timesteps=30、recsys_type=twhin-bert、model_type=qwen-2。 - Group polarization:released config
examples/experiment/twitter_simulation/group_polarization/group_polarization.yaml中num_timesteps=30、recsys_type=twhin-bert、model_type=llama-3、model_path=/mnt/hwfile/trustai/models/Meta-Llama-3-8B-Instruct。 - Reddit human-alignment herd effect:released config
examples/experiment/reddit_simulation_align_with_human/business_3600.yaml中num_timesteps=40、activate_prob=0.1、max_rec_post_len=300、round_post_num=200、refresh_rec_post_count=1、model_type=llama-3。 - Reddit counterfactual herd effect:released config
examples/experiment/reddit_simulation_counterfactual/control_100.yaml中num_timesteps=30、activate_prob=0.1、max_rec_post_len=50、round_post_num=30、refresh_rec_post_count=5、init_post_score=0、model_type=qwen-2。 - 1M misinformation simulation:paper reports 196 core agents + 1M regular agents, 60 time steps, core activation probability 0.1, regular activation probability 0.01, 24 A100 GPUs within a week。released config
examples/experiment/twitter_simulation_1M_agents/twitter_1m.yaml中num_timesteps=60、recsys_type=twhin-bert、model_type=llama-3、model_path=models/Meta-Llama-3-8B-Instruct,server_url 列出 3 个 host、每个 host 约 24 个服务端口。
论文公式与 released code 实现差异:正文笼统说 Llama3-8B-Instruct 是 base LLM,但 released experiment configs 并不统一:X information spreading example 用 qwen-2,group polarization 和 1M simulation 用 llama-3,Reddit counterfactual 100-user config 用 qwen-2,Reddit 3,600-user human-alignment config 用 llama-3。因此复现实验时必须以具体 config path 为准,不能只引用正文默认模型。
5. Experimental Results (实验结果)
5.1 Information spreading on X:能复现 scale/max breadth,但 depth 偏低
Figure 5 解读:这张图比较 198 个真实传播实例的 mean-confidence interval 与 OASIS 模拟结果。scale 和 max breadth 没有明显整体偏移,说明 OASIS 能模拟参与人数和最大层宽;depth 明显偏低,说明传播链条不够深,可能因为 RecSys 和用户 profile 抽象不足,难以精细还原中间用户的二次传播行为。
正文报告 OASIS 的信息传播 normalized RMSE “around 30%”。作者明确指出 depth 低于真实传播,这个误差不是 LLM 回复能力本身的问题,而是平台机制和数据粒度问题:真实 X 的推荐系统与用户画像更复杂,released RecSys 更善于模拟 super user broadcasting,却难以复现大量中介用户之间的细粒度转发链。
5.2 Group polarization:uncensored Llama-3-8B 更容易极化
Figure 6 解读:红色表示相对 round 0 更 extreme,蓝色表示更 progressive,绿色表示 draw。图右侧给出不同 round 的文本示例。结果说明 OASIS 可以让用户观点在传播过程中变得更极端;uncensored Llama-3-8B 的极化更明显,而 aligned Llama-3-8B 受安全对齐约束,极端化程度较低。
这个实验的意义在于展示 simulator 能捕捉“观点随互动演化”的现象,而不是只比较一次性回答。由于 group polarization 评估使用 GPT-4o-mini judge,它的结论依赖 judge prompt 与模型偏好,论文没有给出人类标注校验,这是阅读时需要保留的 caveat。
5.3 Reddit herd effect:agent 对负向初始信号更从众
Figure 7 解读:红色是 human,蓝色是 LLM agents;up-treated、down-treated、control 三组分别对应初始点赞、初始点踩、无初始反馈。up-treated 时 agent 和 human 比较接近;down-treated 时 human score 明显高于 agent group,说明人类在看到初始 dislike 后更可能审慎判断,而 agent 更容易继续点踩或减少点赞,表现出更强 herd effect。
5.4 Scale effect:更大群体带来更高 helpfulness 与自我修正
Figure 8 解读:图中固定 196 个 core users,逐步增大合成 agent 数量,观察观点分布和 helpfulness。作者发现随着 agent 数量增加,观点更分散、多样性更强,helpfulness 也提高;这支持论文核心论点:LLM-based ABM 的群体行为不是小规模实验能稳定外推的,scale 本身会改变模拟结果。
Figure 9 解读:该图比较 100 到 10,000 agent 规模下 counterfactual posts 的 disagree score。小规模时三组差异不明显;规模增大后 down-treated group 的 disagree score 更高,并且总体 disagree 上升,说明大群体能把 agent 推向对反事实内容的自我修正,尤其是已有负反馈时。
Figure 10 解读:这组例子展示 agent 对 counterfactual posts 的评论如何从惊讶/好奇,逐步转向部分反驳,最后明确拒绝错误内容。它是 Figure 9 的定性补充:scale 影响不只是数值曲线,也改变了评论文本的立场演化。
5.5 Misinformation spreading:谣言比官方新闻更持久

Figure 11 解读:作者对 733,824 条模拟生成 posts 做 TF-IDF cosine similarity 匹配,threshold=0.2。每个 topic 中 misinformation-related posts 都多于 official-news-related posts;早期两者都快速增长,但后期 misinformation 相关内容保持更高活跃度,说明在该模拟设置下谣言影响更持久。
Figure 12 解读:这张图展示仿真过程中新增 follow 关系。箭头是新 attention/follow relationship,节点是 agent;图中出现聚类,说明 misinformation/news 传播不仅改变 post counts,也会重塑局部社交网络结构。
5.6 Ablation:RecSys、temporal features、LLM backend 都会影响复现精度

Figure 13 解读:RecSys ablation 关注 scale Normalized RMSE。TwHIN-BERT 和 regular BERT 明显优于 simpler/no RecSys 设定,说明信息过滤机制是复现真实传播的重要因素;只有 follow 网络或随机/弱推荐会导致传播过早停止或信息可见性失真。

Figure 14 解读:这张图给出具体 ablation example,用于说明不同 RecSys 如何改变传播曲线形状。它补充了 Figure 13 的 aggregate RMSE:推荐系统不只是降低误差数值,还直接影响传播何时爆发、何时衰减。

Figure 15 解读:去掉 temporal feature 后,OASIS 与真实传播的 Normalized RMSE 变差。其原因是社交媒体用户不是每个时间点等概率活跃;如果不使用 hourly activity level,模拟会把行为挤到不真实的时间段,导致曲线对齐变差。

Figure 16 解读:模型 ablation 比较 Qwen1.5-7B-Chat、InternLM2-chat-20B、Llama-3-8B-Instruct 等 open-source LLM 作为 agent backend 的效果。论文结论是不同 LLM backend 会改变信息传播复现精度,因此 simulator 的误差不是纯平台机制误差,也包含 agent 行为模型差异。
5.7 Efficiency and repeatability evidence
附录给出不同 agent scale 的效率表:10k agents 每个 time step 约 15 分钟,1k agents 约 0.83 分钟,100 agents 约 0.33 分钟;三者都使用 4 张 A100;每个 time step 新 comments 分别为 1,393、129、14。这说明 OASIS 的百万级能力不是无成本的:即使异步架构能扩展,推理和数据库仍是主要瓶颈。
Figure 17 解读:这组图把同一 topic 重复运行 10 次,用于说明模拟结果是否稳定。对阅读者来说,它提醒我们:LLM agent simulation 带有随机性,不能只看一次 run 的定性故事,至少需要 repeated runs 或 confidence intervals。
5.8 Limitations and caveats
作者在 appendix 中明确列出限制:第一,当前 RecSys 只是高层近似,X 版本主要依赖语义相似度、用户 profile 和近期活动,尚未实现 collaborative filtering 等复杂机制,因此会和真实传播存在 misalignment。第二,无论用 Twitter API 还是用户生成算法,用户都被抽象化,真实个体差异会损失。第三,动作空间仍不完整,bookmarking、tipping、purchasing、live streaming 等尚未覆盖;当前环境也只有文本,agent 不能感知图片、视频、音频。第四,million-agent simulation 仍需要数天,推理速度和数据库效率是成本瓶颈。第五,系统有潜在滥用风险:百万 agent 模拟如果被用于操纵在线讨论或 misinformation campaigns,需要治理约束。
总体结论是:OASIS 的贡献不在于某个单点指标刷新,而在于给 LLM-based social simulation 提供了一个更像真实平台的闭环环境。实验显示它能复现多个社会现象,并揭示 scale 会改变 agent 群体行为;但它的可信度仍受限于推荐系统近似、用户生成抽象、LLM backend bias 和评估 judge 的可靠性。