CBSR智能体金融的证据基础设施

agent 接入  ·  原生 MCP

流利不是证据。这是它底下要垫的那份记录。

软件按领域分了家:一套做人力,一套做营销,一套做财务。AI 正在以同样的方式分家。凡是答错要付钱的地方,模型就需要一份它能引用的记录。监管是这道缝咬得最狠的地方——一个自信的错答案,代价是一张牌照。

40 个类型化 MCP 工具  ·  一个 schema 校验过的 dataset.json  ·  Apache-2.0  ·  自行部署,无需账号或密钥


为什么通用模型在这里必然失手

语言模型在监管问题上失手,不是因为它推理得差,而是因为它没有可推理的对象。它转述的那段条文,可能在它训练之后就改了,而它无从知道。

这不是一个靠更大的模型能修好的问题,因为缺的不是能力,是地面真值:一份带日期、带出处、说得出自己什么时候会过期的记录。CBSR 就是那份记录,并且它是以 agent 能读的形式发布的,而不是以人能读的形式再指望 agent 去猜。


接地契约

一个接地的答案必须携带的字段

下面是 compose() 对一条通道返回的东西。值得看的不是结论,而是结论周围那一圈:结论旁边的每一个字段,都是为了让这个结论可以在以后被证明是错的。

// compose(origin="EU", destination="US", as_of="2026-08-20")
{
  "corridor":      "EU>US",
  "class":         "T",                  // regime in transition
  "mechanism":     "commencement_pending",
  "binding_at":    "destination_inbound_gate",
  "provision":     "GENIUS Act §18",
  "status":        "enacted_not_commenced",   // NOT citable as current law
  "resolves_on":   "2027-01-18",
  "resolves_to":   "II",
  "claim_class":   "tier1_legal",
  "evidence_tier": "resolution_text",
  "as_of":         "2026-08-20",
  "register":      "v0.11.0",
  "doi":           "10.5281/zenodo.20730358"
}

字段名以登记册 schema 为准,此处为示意结构。status 是独立字段而非散文附注——正因如此,一部已通过尚未施行的法规,无法被当作现行有效法引用。

没有 as_of,就没有过期

一个没有日期的答案永远不会过期,也就永远不会被证明错了。这不是保守,这是不可证伪。

没有 provision,就无法反驳

「依据 MiCA」不是引用,「MiCA 第 X 条」才是。精确定位是让对方能回到原文说你读错了的那个东西。

没有 status,「尚未施行」会被读成「已经生效」

这是通用模型最常犯的那一类错,而且它每次都答得很有把握。这里它是一个具名状态,不是一句语气词。

没有版本,事后无法复盘

登记册按构造带日期,所以省略版本的引用等于没引用。每个版本存档至 Zenodo,可以取回当时那一份。


MCP 界面

40 个类型化工具,覆盖同一份记录

登记册以单一 dataset.json 发布,外加一个把它暴露给 agent 的 MCP server。工具是类型化的:参数受 schema 约束,返回值也是,所以模型拿到的是结构,而不是一段需要它再解析一次的散文。

工具族 agent 用它做什么 返回的关键字段
compose() 就一条有向边求解:起点 → 目的地,读在给定日期上。这是最常被调用的那一个。 class · mechanism · provision · as_of
compose(as_of=…) 同一条边,读在另一个日期上。已排期的施行会被施加,所以「今天不行、某天可以」是一个可计算的结论,不是一句预测。 resolves_on · resolves_to · trigger
citable_law() 只返回通过全部六轴门槛、可以作为现行有效约束性法律引用的严格子集。结构候选不会被混入返回值。 0 条严格记录 · 46 条结构候选
法域查询 就单一法域取回全部维度:发行、赎回、储备、投资者门槛、反洗钱、跨境等。 15 dimensions · per-record sourcing
维度比较 就单一维度横切全部法域。这是「谁禁止付息、谁不禁止」这类问题的形状。 12 jurisdictions · comparability notes
待核清单 取回尚未通过完整可引用门槛的格子。缺口是可查询的数据,不是一句免责声明。 per-cell worklist · what is missing

工具清单以仓库为准

上表按功能分族,不是签名清单。权威的工具名称、参数与返回结构在登记册仓库的 MCP_SERVER.md 里,并随版本更新。以那里为准,不要以本页为准。


它防住的四种失败

四种失败,一个无接地的模型自己躲不开

这四种不是「幻觉」的四个别名。它们是四种不同的机制,各自需要数据侧的一个不同装置去挡,而且每一种在无接地的情况下都读起来完全正常。

01

把尚未施行的法律当作现行有效法

模型读到一部已通过的法规,据此描述一条今天并不存在的申请路径。挡它的装置:status 是独立字段,且构建流程拒绝把 enacted_not_commenced 的记录放进可引用子集。

02

把有向的问题答成无向的

模型给出「欧盟与美国之间」的结论,而绑定规则其实在目的地那一侧。挡它的装置:数据集的基本单位是有向边,本登记册 66 组配对里有 56 组会因方向不同而读出不同结论。

03

把市场事实说成法律命题

「主要发行方通常这样做」被写成了「规则要求这样做」。挡它的装置:claim_class 把两者分开,而律师看到的那个界面里不允许出现市场事实。

04

给出一个不带日期、因而无法过期的答案

回答本身没有错,但它没有说自己读的是哪一天的法律,于是六个月后没人知道它还成不成立。挡它的装置:每条结论携带 as_of 与登记册版本,两者都进返回值。

这四种里没有一种是靠提示词能修好的。它们全都要求模型手上有一份它没有的东西:一份带日期、说得出出处、并且承认自己有哪些格子还没核完的记录。


怎么接上去

没有账号,没有密钥,没有速率表。代码 Apache-2.0,数据 CC-BY-4.0,自己跑自己的那一份。

01

固定一个版本

从 Zenodo 取一个带 DOI 的版本,而不是跟着 main 走。你希望半年后还能复现出当时那个答案;跟着分支走做不到这一点。

02

把 MCP server 挂进你的 agent

按 MCP_SERVER.md 里的配置接入。工具是类型化的,所以模型拿到的是结构化返回,不需要再从散文里抽字段。

03

要求答案携带信封

在系统提示里规定:任何监管结论都必须带 provision、status、as_of 和版本;缺任何一项就退回工具调用,而不是补一句「据我所知」。

04

对着待核清单做降级

被问到一个尚未通过完整可引用门槛的格子时,正确的行为是说出它属于待核清单,而不是把制度层级的确认当成条文层级的确认往上抬。