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::Platformoasis/environment/env.py::OasisEnvPlatform.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_POSTQUOTE_POSTUPDATE_REC_TABLEPURCHASE_PRODUCTINTERVIEW、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_factornum_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 += 1
async 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 response
async 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 ConceptSource FileKey Class/Function
Overall environment loopoasis/environment/env.pyOasisEnv.__init__, OasisEnv.reset, OasisEnv.step, OasisEnv.close
Agent LLM action selectionoasis/social_agent/agent.pySocialAgent.perform_action_by_llm, perform_action_by_data, perform_agent_graph_action
Action wrappers / tool interfaceoasis/social_agent/agent_action.pySocialAction.perform_action, sign_up, refresh, create_post, follow, create_comment
Platform state and database updatesoasis/social_platform/platform.pyPlatform.running, refresh, update_rec_table, create_post, follow, create_comment
Action space enumoasis/social_platform/typing.pyActionType, get_default_twitter_actions, get_default_reddit_actions, RecsysType
Reddit/X recommendationoasis/social_platform/recsys.pycalculate_hot_score, rec_sys_reddit, rec_sys_personalized_twh, rec_sys_personalized_with_trace
Async information channeloasis/social_platform/channel.pyChannel, AsyncSafeDict, write_to_receive_queue, read_from_send_queue
Time mappingoasis/clock/clock.pyClock.time_transfer, Clock.get_time_step
Large-scale agent generationoasis/social_agent/agents_generator.pygenerate_agents_100w, generate_reddit_agent_graph, generate_twitter_agent_graph
Dynamic follow graphoasis/social_agent/agent_graph.pyAgentGraph, add_edge, remove_edge, get_edges

4. Experimental Setup (实验设置)

4.1 实验问题与场景

论文围绕两个问题设计实验:

  1. OASIS 是否能适配不同平台/场景并复现真实社会现象? 论文复现三个经典现象:X 上的信息传播、传播过程中的 group polarization、Reddit 上的 herd effect。
  2. 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 的精确数据如下:

TopicPostsComments
Economics4,23121,650
IT4,02018,622
Culture & Society2,31910,489
news2,87419,134
politics2,69021,477
business1,8078,043
fun3,27217,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.yamlnum_timesteps=30recsys_type=twhin-bertmodel_type=qwen-2
  • Group polarization:released config examples/experiment/twitter_simulation/group_polarization/group_polarization.yamlnum_timesteps=30recsys_type=twhin-bertmodel_type=llama-3model_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.yamlnum_timesteps=40activate_prob=0.1max_rec_post_len=300round_post_num=200refresh_rec_post_count=1model_type=llama-3
  • Reddit counterfactual herd effect:released config examples/experiment/reddit_simulation_counterfactual/control_100.yamlnum_timesteps=30activate_prob=0.1max_rec_post_len=50round_post_num=30refresh_rec_post_count=5init_post_score=0model_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.yamlnum_timesteps=60recsys_type=twhin-bertmodel_type=llama-3model_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 的可靠性。