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)")]
你会得到什么¶
-
面板数据,而非快照
同一批 agent,一步接一步。任何个体的完整轨迹、任何聚合指标, 都能直接从持久化的 DuckDB 存储里查出来。
-
端到端的 agentic 工作流
七个
sv-*工作流 skill 把你从一个研究问题带到一份报告: 路由 → 环境 → 人群 → 运行 → 报告 → 迭代。每个阶段只写一份 经 schema 校验的产物,可随时检查、随时修改。 -
带版本的迭代
修改已经跑过的研究必须经过版本门:快照、迭代、或从任意历史版本 分支——不会有任何结果被悄悄覆盖。
-
有据可依,不凭空编造
每个研究都带一份 grounding 侧车文件:有来源的事实、建模参考、 以及显式声明的假设。承重的数值都注明出处。
-
接入你自己的模拟器
把既有的遗留模拟器包装到核心接口后面,对其源码零改动—— 或者直接在核心内核上从零构建研究。
-
处处类型化契约
Pydantic schema 定义了每一次交接(
Persona → Observation → Action → metrics);严格校验守住每个阶段边界。
不装任何东西就能试¶
在线实例运行在 socioverse.fudan-disc.com。用日常语言说出 研究问题,一个研究助手会和你一起把 study 做出来 —— 锚定、跑批、写报告 —— 与此同时 每一个产物都出现在对话旁边的观察面板里。同一套运行时、同一条工作流、同一种 study 目录,零配置。
从 SocioVerse 在线版 开始。
60 秒速览¶
git clone https://github.com/REPLACE-ME/socioverse # TODO(launch):最终仓库地址
cd socioverse
pip install -e .
pytest tests -q # 依赖外部数据的测试会自动跳过
然后可以走 agentic 路线 —— 用 Claude Code 打开仓库,从你的研究问题出发:
……也可以走编程路线 —— 加载研究的已校验产物,用
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; -- 干预何时触发
做完的案例¶
仓库自带五个参考 study,每一个都可以 fork 成你自己变体的起点:
| 案例 | 演示了什么 |
|---|---|
| 芝加哥居住隔离 | 包装既有模拟器;真实普查数据;一次证伪了自身假设的政策干预 |
| 消费者信心 | 纵向轴由信息累积构成,而不是日历时间 |
| 舆论动态 | 混合人群 —— LLM 驱动的核心用户与规则驱动的普通用户并存 |
| 药品集采 | 跑批发生在外部训练管线里的 study |
| Sugarscape | LLM f 对阵规则 f,并与原始模型做一致性核对 |