智能栈 · 机构知识如何变成基础设施
五层。每一层只做一件事:把上一层丢掉的东西写下来。
一个细心的人类读者会在心里保留的那些判断——这条其实只是行业惯例、那条的法规还没施行、这一格我其实没看到官方原文——必须在这里被写下来,并且被强制。软件读到一个字段就当它是事实,它没有可以扬起的眉毛。写在散文里的纪律,软件读不到。
五层架构
从一手法律到 agent 的一个动作
下面五层是架构,不是流程图。区别在于:流程图描述数据怎么流动,架构规定每一层欠上一层什么。任何一层向上交付了它自己撑不住的东西,上面所有层都跟着不成立,而且不会有任何征兆。
证据层 · Evidence
一手法律文书、官方公报、监管规则、生效令。这一层欠上层的是出处与日期:读的是原文还是转述,精确定位在哪里,哪一天读的。少了这三样,上面全部四层都只是观点。
知识层 · Knowledge
结构化命题:法域、工具、维度、义务、主体、关系。这一层欠上层的是类型——这是一条法律命题,还是一条关于市场实践的观察。两者混在一起,上层就会把惯例当成要求。
推理层 · Reasoning
约束、交互集、兼容性、时间逻辑、法域复合。这一层欠上层的是可反驳性:每一个推导出的结论都要说得出它经过了哪些规则,以及在哪一天成立。一个不带日期的结论永远不会过期,也就永远不会被证明错了。
Agent 层 · Agent
类型化 MCP 工具、schema 校验的返回、可引用子集。这一层欠上层的是边界:在覆盖范围之外必须拒绝,而不是外推。这正是 KYA 里 L3 那一级要求的东西。
行动层 · Action
路由、结算、头寸、申报、监督。这一层不属于本项目——它属于用这份数据的机构。它欠下面四层的只有一件事:把版本号留在记录里。没有版本号,下面四层做的全部工作在事发之后一分钱都不值。
这五层和下面六层构建管线的关系
五层是说明它是什么,六层是说明它怎么被造出来的。L1–L2 由构建管线的 01–02 实现,L3 由 03–06 实现,L4 是 MCP server,L5 不在本仓库内。之所以两套都写出来,是因为只讲架构听起来像 PPT,只讲管线读起来像 changelog。
三条正交的轴
哪三条轴决定一条记录能不能进入结构性候选
每条记录带三条互不替代的轴:这是哪一类主张(法律命题还是市场事实)、它被溯源到什么程度、以及那部法律文书是否已施行。三者的交集给出结构性候选。它是必要条件,不是充分条件:时效与独立复核这两条轴还压在上面,六条全过,一条记录才可以作为现行有效法被引用。
| 轴 | 它回答的问题 | 不这么做会发生什么 |
|---|---|---|
| claim_class | 这是一条法律命题,还是一条关于市场怎么做的观察? | 「主要发行方通常持有短期国债」会被当成「规则要求持有短期国债」端出去,而且读起来毫无破绽。 |
| evidence_tier | 这条依据的是官方条文原文,还是一份转述、一则新闻、一次监管者的口头表态? | 制度层级的确认会被悄悄抬升成条文层级的确认,而抬升的那一刻没有任何痕迹。 |
| status | 这部法律文书今天是否已经施行? | 一部已通过、尚未施行的法规被当作现行有效法引用。这是无接地模型最常犯的那一类错。 |
为什么是三条轴,而不是一个评分
把它们压成一个「置信度 0.87」会同时毁掉三件事:一条溯源极好的市场事实,和一条溯源很差的法律命题,会得到相近的分数,而它们的用途完全不同;「尚未施行」会被算成一种不确定性,而它其实是一个确定的事实。可引用与否是一个布尔判断,不是一个阈值。
实现 · 六层构建管线,每一层都由上一层推导而来
六层构建管线,各自重算什么
没有一层是手写的副本。上一层改了,下一层重算;如果重算的结果和写下的分析不一致,构建流程把它作为一条发现暴露出来,而不是悄悄改掉其中一边。
义务记录
基础事实。一条记录 = 一条经溯源的 (法域 × 工具 × 维度) 法律命题,经 schema 校验。
分析层
两两兼容性矩阵,以及六个约束交互集:把复合分析从散文变成可查询的数据。
通道层
有向的 起点 → 目的地 边,每条读自入境关口,携带可行性类别与真正起约束作用的机制。
计算层
compose() 从一张按法域的信号表重新推导每条通道的类别,再与写下的分析做差分。不一致会被作为发现列出,而不是被静默修正。
时间引擎
compose(as_of=…) 施加每一项已排期的法律变更,所以同一条通道今天读到一个类别,制度施行之后读到另一个。US → UK 在 2027 年 10 月 25 日翻为干净的类别 I。
约束基底
最深的一层:一条通道的类别,由两端法域各自对八项约束(C1–C8)的立场,经交互集规则复合而成,而不是只看一道入境关口。
CI 里的闸门
构建流程会拒绝的东西
纪律写在 CI 里才算数。下面每一条都是一次会让构建失败的拒绝,而且每一条都配一个负向测试——一条故意违规的记录,如果它通过了,测试就失败。这一步是必要的:一道从来没有咬过人的闸门,和一道不存在的闸门,在日志里长得一模一样。
| 闸门 | 它拒绝什么 | 它在防哪一种失败 |
|---|---|---|
| 溯源闸门 | 一条记录不能声称一项它拿不出来源的确认。 | 确认层级被悄悄抬升。 |
| 类别闸门 | 市场事实不能进入律师看到的那个界面。 | 行业惯例被当成法律要求。 |
| 施行闸门 | 已通过、尚未施行的法规不能被作为现行有效法引用。 | 待生效制度被读成已生效制度。 |
| 一致性闸门 | 重新推导出的通道类别若与写下的分析冲突,不能被静默合并。 | 数据集内部两处说法不一,而两处都看起来是对的。 |
| schema 闸门 | 不符合 schema 的记录不能进入构建。 | 下游的每一个消费者各自去猜字段形状。 |
没做完的那部分
闸门修不了的那部分
闸门是防御,不是治疗。它们能拦住一条撑不住的主张被端出去,却不能把它变成撑得住的。只有一手条文核对能消掉那笔负债,而这件事从不作假。
登记册在十二个法域上做深,而不是铺广。通过结构性筛选的那一批——法律命题、官方原文已核、已施行——仍要过时效与独立复核两关,今天还没有一条走完;其余在制度层级确认,一手核对仍在进行。那个队列作为逐格待办清单公开,而不是留作暗示。两百个国家意味着一次抓取,而一次抓取说不出哪条规则真正起约束作用。这里的价值在于数据里的判断。
法规动得足够快,正好要求这种纪律:台湾的制度是在上一次构建当天下午三读通过的。所以登记册带版本、带日期,每条主张都携带它被读取的那一天。它提供的不是对一切的覆盖,而是对它所覆盖的那些通道,一份带来源和日期、机器可查并明确标示复核边界的研究说明。