跳转至

SocioVerse

纵向(longitudinal)、LLM 原生的社会模拟运行时。

多数 LLM 社会模拟框架跑的是横截面研究:许多单轮实验、每轮换一批人。 SocioVerse 反过来:固定人群、让环境随时间变化,逐步追踪同一批个体 ——产出的是面板数据(panel data)。

统一的抽象来自 Lewin 场论 —— B = f(P, E)(行为是人与环境的函数):

  • P — 人群:一个固定的 persona 池,带持久 id(纵向追踪的主键)。
  • E — 环境:动态,沿两条轴展开:物理 / 信息 × 宏观 / 局部。
  • B — 行为:每一步计算一次。循环闭合为 E_t → B_t → E_{t+1}, 每步为每个 agent 记录一行面板数据。
flowchart LR
    E0["E<sub>t</sub><br/>环境"] -->|观察| P["P<br/>固定人群"]
    P -->|"决策 · B = f(P, E)"| B["B<sub>t</sub><br/>行为"]
    B -->|作用回环境| E1["E<sub>t+1</sub>"]
    E1 -.->|下一步| E0
    B -->|落库| D[("面板存储<br/>(DuckDB)")]

在这个抽象之上跑着两个循环。纵向模拟循环让一次运行逐步向前: E_{t+1} = g(E_t, B_t)。可控研究循环让研究本身逐次修改向前 —— 对研究状态 σ = (P, E_{0:T}, f, Θ) 施加一次修改,得到 σ_{k+1} = h(a_k, σ_k)。 两者跑在同一套智能体基础设施上:编写研究的那组工作流 skill、把 P 与 E 锚定到 真实数据的服务,以及让一个做完的研究可审计的那批记录。

你会得到什么

  • 面板数据,而非快照


    同一批 agent,一步接一步。任何个体的完整轨迹、任何聚合指标, 都能直接从持久化的 DuckDB 存储里查出来。

  • 端到端的 agentic 工作流


    七个 sv-* 工作流 skill 把你从一个研究问题带到一份报告: 路由 → 模型 → 环境 → 人群 → 运行 → 报告 → 迭代。每个阶段只写一份 经 schema 校验的产物,写完停在一个检查点,可随时检查、随时修改。 报告阶段涵盖轨迹分析、文献与论文初稿。

  • 干预与分支


    一次干预就是环境包里的一条声明 —— 作用在物理层上的 ScheduledEvent,或投向某个受众的 Broadcast,在指定步触发。 分支精确重放父版本已经跑过的历史,只为分叉步之后的新步骤付费, 因此对照组与处理组可以逐个 agent 配对比较。 分支怎么实现

  • 版本由你掌控


    一个版本是整个工作区的快照。任何工件都能改 —— 人群、行为函数、 环境、运行设置 —— 新版本也能从任意历史版本出发。没有任何结果会被 悄悄覆盖,每次运行都能从它自己的快照复现。 研究循环

  • 有据可依,不凭空编造


    每个研究都带一份 grounding 侧车文件:有来源的事实、建模参考、 以及显式声明的假设。承重的数值都注明出处。

  • 类型化契约,任意模拟器


    Pydantic schema 定义了每一次交接(Persona → Observation → Action → metrics),严格校验守住每个阶段边界。你可以在核心内核上 实现四个接口从零构建,也可以把既有的遗留模拟器包装到同样的接口 后面,对其源码零改动。

不装任何东西就能试

在线实例运行在 socioverse.fudan-disc.com。用日常语言说出 研究问题,一个研究助手会和你一起把 study 做出来 —— 锚定、跑批、写报告 —— 与此同时 每一个产物都出现在对话旁边的观察面板里。同一套运行时、同一条工作流、同一种 study 目录,零配置。

从 SocioVerse 在线版 开始。

60 秒速览

SocioVerse2 以 Apache-2.0 协议开源: GitHub · 发布页(v0.2.0,见 版本发布)· PyPI。

git clone https://github.com/sii-research/SocioVerse2.git
cd SocioVerse2
pip install -e ".[dev,viz]"      # Python 3.11+
pytest -q                        # 不需要 key;需要配套仓库或真实 LLM 的测试会自动跳过
python scripts/demo_offline.py   # 离线、不用 API key,端到端跑完一个完整研究

pip install socioverse2 只安装核心库(导入名 socioverse);工作流 skill、仪表盘和 参考研究随 clone 下来的仓库提供。

然后可以走 agentic 路线 —— 用 Claude Code 打开仓库(它用自己的 Claude 登录运行, 而不是模拟用的 LLM key),从你的研究问题出发:

/sv-init "一个中等规模的线上社区里谣言如何传播?
          官方辟谣在第 3 天广播后会发生什么?"

……也可以走编程路线 —— 加载研究的已校验产物,用 socioverse.engine.build_simulator 装配运行,再用 SQL 查询结果:

SELECT step, state FROM panel WHERE agent_id = '…' ORDER BY step;  -- 单个 agent 的时间线
SELECT * FROM metrics ORDER BY step;                               -- 整体轨迹
SELECT step, note FROM events ORDER BY step;                       -- 干预何时触发

下一步:安装 → 快速开始,或者先读 核心概念。

做完的案例

五个做完的案例,每一个都可以作为你自己变体的起点。其中四个随仓库提供(芝加哥和 Sugarscape 需要配套的 SocioVerse-ABM 检出,消费者信心需要 ConsumerSim);药品集采作为一种模式记录在这里,不在开源版本中:

案例 演示了什么
芝加哥居住隔离 包装既有模拟器;真实普查数据;一次证伪了自身假设的政策干预
消费者信心 纵向轴由信息累积构成,而不是日历时间
混合舆论动态 混合人群 —— LLM 驱动的核心用户与规则驱动的普通用户并存
药品集采 跑批发生在外部训练管线里的 study
Sugarscape LLM f 对阵规则 f,并与原始模型做一致性核对