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),从你的研究问题出发:
……也可以走编程路线 —— 加载研究的已校验产物,用
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,并与原始模型做一致性核对 |