跳转至

真实世界锚定与溯源

模拟的可信度取决于它据以构建的数字。SocioVerse 把溯源当作一等公民的产物: 研究里每一个承重数值,都能追到一个来源、一个代理指标,或一条被公开声明的假设。

在找事件服务或 persona 池?

外部数据服务已经拆到单独一页:外部能力

grounding 侧车

每个研究都携带 grounding/grounding.json,一份三类条目的台账:

  • 事实(facts)——带来源;研究初始化时由真实世界检索收集 (/sv-init 时检索必定执行一次);
  • 实现参考(implementation references)——某个设计选择所依赖的 建模文献或既有系统;
  • 声明的假设(declared assumptions)——所有承重但无法溯源的内容。

每个条目有一个 basissourced(有源)、proxy(代理)、 assumed(假设)。构建阶段查阅并扩充这份台账;工作流的规则是:

先锚定、再发明。 承重的环境或人群数值要引用一个事实 id 或假设 id。无法溯源的内容被声明——绝不悄悄编造。

/sv-report 会把台账渲染为报告的数据基础与参考来源一节,读者在结果 旁边就能看到证据基础。侧车会自动随 fork 与版本快照一起走。

文档结构

内容
facts id、断言、数值、basisvia(怎么拿到的:web_search / event_service / provider)、来源 url 与访问日期
implementation_refs 某个机制照搬自哪篇论文或哪个既有系统,以及照搬了什么
assumptions id、假设了什么、为什么无法溯源、结果对它有多敏感
method_notes 自由文本,说明这个研究是怎么被锚定的——包括下面的 fork 决策

工作流用的辅助模块是 skills.sv_groundingmerge(...)method_notes=...), API 见 workflow helpers 参考

是溯源,不是运行时校验

grounding 是「审阅时长牙齿」的文档,不是运行时约束:引擎不会拿你的 常量对照台账做检查。这份契约是社会性、可审阅的——每个数字都可被 引证,审阅者能看到每个数字站在哪种依据上。

fork 时的显式再锚定决策

Path A 的 fork 会把源研究的 grounding.json 一并复制过来。但它不会默认那份 锚定依然成立。在动 fork 的产物之前,/sv-init 先问一个问题——这个 fork 的 delta 是否需要继承来的 grounding 尚未覆盖的外部数据?——并在两个答案里选一个:

决策 什么时候 会发生什么
search(重新检索) delta 引入了新的真实世界断言(新地区、新时期、新冲击幅度、新政策) 跑一次新的检索;按 id 新增 facts / refs;仍然成立的继承条目保留
inherit(沿用) 纯参数变体——每个 delta 都落在源研究已锚定的范围内 不做新检索;只把 delta 触及的继承条目复核后按 id 合并

无论选哪个,选择本身都要写进侧车的 method_notes,并附理由:

from skills import sv_grounding

sv_grounding.merge(
    "studies/chicago_sez",
    method_notes="fork re-grounding: searched — 一次性 +20% 冲击幅度需真实调价案例支撑",
)
# 或:method_notes="fork re-grounding: inherited — 纯参数变体,锚点沿用源研究"

dashboard 的「参考来源」卡片会显示这条记录,读者因此能看出这个 fork 是重新检索过 还是沿用了母研究、以及为什么。这个判断绝不静默跳过;如果研究本来就是刻意 风格化的,诚实的写法是 method_notes="stylized",而不是编造事实。

一条贯穿一切的原则

运行时循环永不外呼。 一切外部内容都在构建时物化,溯源记入 grounding 侧车。因此运行是自包含的:模拟中途没有网络意外,一次运行看到 的每个输入都在磁盘上,与研究一起被版本化。

延伸阅读