跳转至

安装

SocioVerse2 以 Apache-2.0 协议开源: github.com/sii-research/SocioVerse2 (发布页,当前版本 v0.2.0,见版本发布)。核心库也以 socioverse2 之名发布在 PyPI 上。

环境要求

  • Python 3.11+
  • 类 POSIX shell(macOS / Linux;Windows 走 WSL 也可以)
  • LLM API key 可选——安装、跑测试、离线跑完一个完整研究都不需要 key (见无 token 模式)。
  • 使用 /sv-* 工作流 skill 时,还需要一个有自己登录凭据的编程智能体。 模拟用的 LLM key 驱动不了它,见工作流 skill 由什么驱动。

clone 仓库:运行时之外,工作流 skill、本地研究仪表盘和参考研究都在仓库里。 建议使用独立环境(conda 或 venv):

git clone https://github.com/sii-research/SocioVerse2.git
cd SocioVerse2

conda create -n socioverse python=3.11 -y
conda activate socioverse
pip install -e ".[dev,viz]"
git clone https://github.com/sii-research/SocioVerse2.git
cd SocioVerse2

python3.11 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,viz]"

验证安装(不需要 key):

pytest -q

有些测试会跳过——这是正常的

需要配套仓库、可选 extra(chicago、workbench) 或真实 LLM 的测试会检测到缺失并自动跳过。「有跳过、零失败」就是一次健康的安装。

或者:从 PyPI 安装核心库

pip install socioverse2      # 导入名:socioverse

这只安装核心库(socioverse:schema、接口、引擎、DuckDB 存储、校验)。 /sv-* 工作流 skill、仪表盘、参考研究和演示脚本都不在这个包里,需要按上面的方式 clone 仓库获得。如果你用自己的 Python 代码驱动研究 (快速开始的路径 2),用 PyPI 包即可。

不用 API key 跑一个研究

python scripts/demo_offline.py
Running opinion_diffusion_demo (a local copy of opinion_diffusion): 12 agents, 4 steps, llm_kind=scripted

step  mean_opinion  opinion_std  frac_above_0_5
   0         0.500        0.288            0.50
   1         0.500        0.282            0.50
   2         0.618        0.212            0.67
   3         0.707        0.160            0.83
   4         0.737        0.142            1.00

该脚本把随仓库提供的参考研究 studies/opinion_diffusion 派生为一个本地研究 studies/opinion_diffusion_demo/(与你创建的所有研究一样被 gitignore),校验复制过来的 产物后在其中运行。决策模型以 llm_kind: "scripted"(确定性规则)运行,因此免费且可复现。 运行结果写入演示研究的 trajectory/,渲染出的报告在它的 reports/(默认英文; 加 --report-lang zh 渲染成中文)。脚本从不写入参考研究,每次运行都会重新生成演示研究。

每次运行都是一个 DuckDB 库,可以直接用 SQL 查询:

import duckdb
con = duckdb.connect("studies/opinion_diffusion_demo/trajectory/study.duckdb", read_only=True)
con.sql("SELECT step, state->>'opinion' AS opinion FROM panel WHERE agent_id = 'od-000' ORDER BY step").show()
con.sql("SELECT * FROM metrics ORDER BY step").show()
con.sql("SELECT step, note FROM events ORDER BY step").show()

运行库不进仓库

trajectory/ 目录和 *.duckdb 文件都被 gitignore,所以随仓库提供的参考研究带着 产物和渲染好的报告,但不带运行库。想用 SQL 查询某个研究,先把它跑一遍 (上面的演示对 opinion_diffusion 做的就是这件事)。

打开研究仪表盘

python dashboard/server/app.py --open     # http://127.0.0.1:8787(用 --port 更换端口)

演示会作为一个独立研究出现在参考研究 opinion_diffusion 旁边。仪表盘是 studies/ 的本地只读视图;/sv-* skill 在研究开始时会自动启动它。见运行面板。

配置 LLM(可选)

用真实 LLM 跑同一个研究:

pip install -e ".[llm]"
cp .env.example .env      # 设置 SV_LLM_API_KEY;.env 已被 gitignore,永远不要提交 key
python scripts/demo_offline.py --llm openai

脚本会先探测一次端点,然后发起 48 次简短调用(12 个 agent × 4 步),并用这次运行替换 演示研究原有的运行。无法解析的回复会回退到规则,并在输出中计数。随仓库提供的那次运行 使用中文提示词;加 --prompt-lang en 改用英文提示词。

SocioVerse 从环境变量或 .env 读取 LLM 配置(依次查找 $SV_HOME/.env、./.env、 仓库根目录;进程环境变量优先):

变量 含义
SV_LLM_API_KEY 模拟中 agent 的 LLM 调用所用的 key
SV_LLM_BASE_URL 可选;任何 OpenAI 兼容端点(未设置时为 OpenAI 官方 API)
SV_LLM_MODEL 可选;由 scripts/demo_offline.py、芝加哥适配器以及 simulation.json 未指定模型的研究读取
OPENAI_API_KEY SV_LLM_API_KEY 为空时的备选。abm_* 研究的 LLM 模式直接读取 OPENAI_API_KEY 和 OPENAI_BASE_URL

研究的模型固定在哪里

随仓库提供的从零构建研究在 simulation.json 中固定模型(decision_args.model), consumer_confidence 固定在 environment.json(prediction.model),ABM 研究则 固定在 SocioVerse-ABM 中该任务的 config.yaml 里。若所用端点不提供该模型,就在 这些位置修改;已经运行过的研究请通过 /sv-iterate 修改。

永远不要硬编码密钥

key 只应放在 gitignore 的 .env(或 shell 环境变量)里, 绝不出现在代码或研究产物中。

工作流 skill 由什么驱动

一次 /sv-* 研究用到两套彼此独立的 LLM 连接,需要分别配置:

  • 运行 skill 的编程智能体。Claude Code 需要它 自己的 Claude 登录(Claude 订阅)或 ANTHROPIC_API_KEY。.env 里的 SV_LLM_* key 不能驱动 Claude Code,它只用于模拟中的 agent。 Codex CLI 是实验性的替代方案:它读取仓库随附的 AGENTS.md 和 .codex/skills/(两者都由 Claude Code 一侧生成),但 Codex 路径尚未做过 完整的端到端测试。在 Codex 中,在提示里点名要运行的阶段(例如 Run sv-init: "How does a rumor spread ...")。
  • 模拟本身的 LLM,负责模拟 agent 的决策:任何 OpenAI 兼容的服务商都可以,通过上面的 SV_LLM_* 变量配置。没有它,从零构建的研究仍能在 scripted 模式下完整跑通;/sv-run 在花费真实 LLM 调用之前会先询问。

/sv-lit(文献调研)还需要一个 extra:pip install -e ".[lit]"。

会话 hooks

.claude/settings.json 和 .codex/hooks.json 注册了会话 hooks,运行 python3 dashboard/hooks/sv_emit.py。它们只切换仪表盘上「等待你操作」的提示条; 仪表盘本身由 skill 启动。在启动智能体的环境中设置 SV_DASH_DISABLE=1 即可同时关闭两者。

Extras

extra 增加
llm 用于真实 LLM 运行的 OpenAI 兼容客户端,支持 SOCKS 代理
viz 用于报告图表的 matplotlib
workbench llm + viz,外加 textblob(hisim_roe 的情感打分器)和 openpyxl(germany_auto_market 的工作簿)
lit /sv-lit 背后的检索引擎
abm 11 个 abm_* 研究所需的 numpy 和 networkx
chicago chicago_schelling 的地理与 Mesa 依赖,并包含 abm 的全部内容
dev pytest、build、twine
all 以上全部

配套仓库

部分参考研究包装了位于独立仓库中的项目。把它 clone 到 SocioVerse2 旁边即可被 自动发现,相应的测试也不再跳过。

workspace/
├── SocioVerse2/
├── SocioVerse-ABM/                               # 11 个 abm_* 研究与 chicago_schelling
└── ConsumerSim-Consumer-Confidence-Forecast/     # consumer_confidence

SocioVerse-ABM 包含 11 个经典 agent-based 模型(每个都有规则行为函数和 LLM 行为函数),以及芝加哥隔离模型及其普查数据:

cd ..                                              # 包含 SocioVerse2 的目录
git clone https://github.com/Lishi905/SocioVerse-ABM.git
cd SocioVerse2
pip install -e ".[dev,chicago,workbench]"
pytest -q                                          # ABM 与芝加哥测试现在会运行

配套仓库的目录名必须恰好是 SocioVerse-ABM。 ConsumerSim 是 consumer_confidence 包装的预测管线;HiSim 为可选 (hisim_roe 不依赖它也能运行)。其他目录布局可在 shell 或 .env 中设置 SV_ABM_ROOT、 SV_CHICAGO_LEGACY、SV_CONSUMERSIM_ROOT 或 SV_HISIM_ROOT。

配置外部服务(可选)

.env 是服务端点与 key 的唯一来源。Python 客户端直接读它,而会话内的 MCP 注册文件是由它生成的——不要手写:

python scripts/gen_mcp_json.py     # 从 .env 渲染出被 gitignore 的 .mcp.json

每次改完 .env 都要重跑一次。目前有两个可选能力走这条路径;只有设置了对应的 *_URL 变量,才会生成它的条目:

能力 变量 说明
事件服务——给 E 的真实宏观 / 新闻背景 SV_EVENT_API_URL、SV_EVENT_API_KEY,可选 SV_EVENT_LOCAL_CACHE URL 是含路径的完整 MCP 端点(例如 http://host:9997/event_mcp),不是裸主机名;key 以 Authorization: Bearer 发送
user pool 问卷 MCP——给 P 的真实 X / 小红书 persona SV_USER_POOL_MCP_URL、SV_USER_POOL_MCP_KEY 该服务要求鉴权,所以这里的 key 不是可选项

两项服务由 SocioVerse 团队托管,不属于仓库本身;如需访问,请发邮件至 contact@socioverse.fudan-disc.com。在线工作台已配置好这两项服务。

不配置时一切都会优雅降级:事件客户端退到本地缓存、再退到普通网络检索;人群则退到 「先锚定再合成」或你自备的 persona 文件。健康探针、成本与降级细则见 外部能力。

无 token 模式

除真实的 LLM 决策调用外,流水线的一切——安装、测试、环境/人群构建、 以及决策模型为规则式的研究——都无需 key。从零构建的研究在 simulation.json 的 decision_args 里设 llm_kind: "scripted" 即可关掉 LLM,scripts/demo_offline.py 就是这样跑的;chicago_schelling 则用它自带的 DeterministicLLMClient 干跑。 见 LLM 接入与干跑。

下一步

前往快速开始,跑通你的第一个研究。