本体知识库说明书 · v3.0 · 2026-09-07正本 docs/handbook.md · 版本记录 docs/handbook-CHANGELOG.md

本体知识库说明书

版本:v3.0 · 2026-09-07 · 本版新增第六章《可判定与编译》并将工作流程改为三期。历次版本、每版改了什么见文末附录 · 修订记录;每版定稿同时导出一份带版本号与日期的 HTML 存于 docs/。

本书的用途:这是信贷业务本体知识库的完整说明。第一至四章是架构说明——知识库由哪些构件组成、每个构件是什么、存成什么样、最终呈现为什么;第五章是执行纪律——供 LLM 在处理知识分类时遵照执行:按照该章的判定流程与纪律,对全部业务知识做一轮完整分类,归入本书定义的架构;第六章是可判定与编译规范——定义知识如何从"可引用"升到"可判定",如何编译成生产只读的产物,以及动作执行与数据写回的契约。 理论基础:Palantir 本体论(Ontology)。 本书的边界:平台四层架构中,本书只覆盖本体层(语义定义与登记)及两个伸出去的钩子——接地规范(第三章)与 LLM 分类纪律(第五章);数据加工、应用与自动化、权限治理由协作平台与行方系统承担(见 1.1 架构图)。


第一章 · 架构总览

1.1 理论基础:Palantir 本体论

Palantir Foundry 的 Ontology 是把企业业务世界建成"数字孪生"的方法论:不直接面对成百上千张数据表,而是先用少数几类构建块(Building Blocks)把业务世界描述清楚——对象类型(世界上有什么)、属性(它们处于什么状态)、链接类型(它们如何关联)、动作类型(我们能对它们做什么)、函数(如何从已知算出未知)——再把每个构建块逐一"接地"到真实数据。这样,业务语言和数据语言之间有了一层稳定的语义层:业务同事用业务词汇讨论和沉淀知识,数据自动跟随;数仓改表改字段,只动接地层,知识本身不失效。

从平台整体看,Foundry 的完整技术栈分四层:数据层把数据接进来、清洗加工成数据集(银行场景即核心、信贷、征信、押品等源系统与数仓管道);本体层把表变成业务概念——行变对象、列变属性、关联变链接,本书的六构件就活在这一层;应用与自动化层让语义产生行动(操作型应用、分析、事件驱动的自动化、LLM);安全与治理贯穿所有层。本书只覆盖本体层,外加两个伸出去的钩子:向下伸进数据层的接地规范(第三章),向上伸进应用层的 LLM 分类纪律(第五章)。其余的层由协作平台与行方现有系统承担:

平台四层架构与本书边界 应用与自动化层 —— 让语义产生行动 操作型应用(工作台 · 审批 · 处置) 分析(图谱 · 字段库) 自动化(事件驱动) LLM 知识分类(第五章 · 可作系统提示词) 语义供应用与自动化调用 本体层 —— 把表变成业务概念【本书辖区】 产出不是数据,是一套人和机器共用的业务语义 六构件语义定义(第一 · 二章) 关系矩阵与图谱约束(1.2 · 4.2) 知识图谱(第四章 · 实时编译) 函数表 · 动作卡(登记簿,非运行时) 接地:行变对象 · 列变属性 · 关联变链接 数据层 —— 把数据弄进来、弄干净(行方数仓) 源系统(核心 · 信贷 · 征信 · 押品) 管道加工(清洗 · join · 聚合) 接地与字段匹配:grounding · C 词典(第三章 · 二期) 安全与治理 —— 贯穿各层:访问控制 · 审计 · 全链路血缘 实线实色=本书覆盖 虚线淡色=平台 / 行方系统承担,本书不覆盖 安全治理在本书内的落点仅两处:属性敏感轴(2.2)与出处溯源(3.4),其余由平台承担。
平台四层架构与本书边界

1.2 两张总图与关系矩阵

图一 · 本体构件分类——顶部是 DOC 原文档输入层:知识的源头,每条构件的 source 都指向原文档的段落锚,任何知识都可溯源到它来自哪份文件;中部是六类构件与它们的关系(实线=结构与读写,橙虚线=挂载:规则型函数指向宿主);底部虚线框是第二阶段 · 数据字段匹配层【二期】:

本体构件分类 DOC · 原文档 —— 知识的输入源每条构件的 source 都指向 DOC 段落锚:任何一条知识都能溯源到它来自哪份原文件 输入 · 溯源 两端=对象 归并 宿主=某个对象(属性不无主) 作用于 · 产出 写入 读 写产物(落库) 挂动作 挂属性 挂接口=对全体实现者生效 ③ 链接 · R对象之间的边 ① 对象 · N一切构件的宿主锚点 接口 · IF同形对象的归并 ④ 动作 · A机构侧的受治理操作 ② 属性 · P存着的值 ⑤ 函数 · F计算 / 规则 两类型 橙色虚线=挂载(仅规则型函数):规则永不悬空,宿主只能是已建档的 动作 / 属性 / 函数(计算型) / 接口。 第二阶段 · 数据字段匹配(二期)C · 对照词典属性 ↔ SDK ↔ 数仓列;对象/链接的 grounding 与动作落表同期回填
图一 · 本体构件分类

图二 · 细分构件框架——每类构件的内部细分:

细分构件框架 知识构件 6 类身份 ① 对象类型 有身份标识的存在 · 二分 实体 客户 · 账户 · 商户 · 坐席 含制度物:账单 · 催收案件 事件 支用 · 还款 · 提额申请 含登录 · 定位;征信快照等动作产物(product_of) ② 属性 存着的值 · 五轴标注 来源 事实 | 推断 | 构造 结构 标量 | 枚举 | 结构组 | 集合 写入方 客户|动作|函数|时间驱动 归属 专有 | 共享(进字段库) 敏感 明文 | 脱敏 | 禁展示 ③ 链接类型 对象之间的边 结构 structural · 持有 / 挂靠 派生 derived · 推理器自动算出 因果 causal · 证据性 · 可被推翻 ④ 动作类型 按职能域分类(开放清单)· 六要素 授信审批 核准额度 · 拒绝申请 贷中管理 调额 · 调价 · 受理提额申请 交易管控 冻结 · 解冻 · 支付开关 催收 · 账务 外呼 · 分案 | 记账 · 核销 标记 对客/对内 | 隐式 | 职能域业务可增补 ⑤ 函数 由输入定出输出 · 两类型 计算型 读属性 → 算出值 六型:查询|编辑|流式|模型集成|通知|API 规则型 带 if 的许可判定 宿主:动作|属性|函数(计算)|接口 接口 Interface —— 第 6 类身份:归并机制(审核产物,业务输入不填) 可受理 · 可质押 · 可核销;可作规则宿主,对全体实现者一次生效
图二 · 细分构件框架

构件关系矩阵——任意两类构件之间是什么关系、靠哪个字段落地。读法:先行后列,取右上三角(矩阵对称,左下省略);"无直接关系"也是结论,不许私搭关系。

这张矩阵连同 4.2 的图谱约束,属于框架层约束:管构件之间的结构,由平台校验、违反即数据错误——与函数表里管业务的"规则"是两个层面(四个术语的分工见 1.7)。

对象 N 属性 P 链接 R 动作 A 函数 F 接口 IF
对象 N 对象间不直连——任何对象间关系都必须立一条链接 宿主(host):属性挂在对象名下 两端(from / to):链接两端必须都是对象 作用于 / 产出(target / product ↔ product_of 互指):动作施加于对象,可产出新对象 读 / 产出(inputs / outputs):计算型可读对象、可产出新对象;条件引用(refs):规则型条件可引用对象 实现(implementers):同形对象归并为接口的实现者
属性 P ↖ 属性间无直接关系;同口径多宿主经共享池共用正本 语义层无关系(属性不能作链接端点);接地层由外键列支撑链接(关系表 grounding · 【二期】) 写入(side_effects ↔ writer 互指):动作改属性值 读 / 写产物(inputs / outputs ↔ writer);条件引用(refs):规则型的条件读属性(不含宿主);挂载(host):规则型挂属性=取值约束 形状声明(shape):接口要求实现者具备某些属性,值永远在实现者身上
链接 R ↖ ↖ 链接间无关系 无直接边(本框架链接实例经接地产生;Palantir 支持动作建立/断开链接,暂不引入) 遍历:计算型可沿链接跨对象聚合(如客户在贷总余额,治理阶段登 inputs) 无直接关系
动作 A ↖ ↖ ↖ 动作不直接调用动作,衔接经事件驱动显式串联;唯一性按名称+三要素(执行主体、作用目标、产物)查重 挂载(host ↔ conditions 互指):规则型挂动作=执行前置条件,动作表 conditions 引用其编号;分工(无直接边,经属性中转):计算型出建议值落属性、动作读属性核定落地 签名 / 作用于(shape / target):接口声明动作签名;受理动作可作用于接口(参数化)
函数 F ↖ ↖ ↖ ↖ 挂载(host):规则型可挂计算型=输入 / 输出红线;计算型之间无直接边(产物经属性中转) 挂载(host):规则型挂接口=对全体实现者一次生效(批发)
接口 IF ↖ ↖ ↖ ↖ ↖ 接口间继承 Palantir 支持(extends),本框架暂未引入

1.3 一句话总纲

对象是骨架,属性是状态,动作和函数推动状态变化,规则给变化划界,接口把同形归并。(规则是函数的一个类型,与计算并列,同住一张函数表。)

四个核心判定题贯穿全书:执行主体是谁(机构操作者=动作,客户=事件对象)、改不改状态(改=动作,只出数只判定=函数)、存着的还是算出来的(属性 vs 计算型函数)、带不带 if(规则型函数)。

1.4 工作流程:三期

阶段 谁 做什么 产出级别
一期 · 知识登记 业务 / 产品 按第五章纪律把业务知识写成六类构件,登入第二章的各张登记表。此阶段不接触数据字段 L2 · 可引用:定义清楚、结构完整、有出处,人和 LLM 可以引用它说话
二期 · 数据接地 数据团队 把知识钉到真实数仓:回填各表的 grounding、建对照词典、逐级核实。本书表格中标 【二期】 的字段即此阶段填写和确认 仍是 L2:接了地的知识可以用数据验证,但还没有机器可执行的形式
三期 · 可判定与编译 use case 小组 + 本体管理员 给已核实的条目补可判定字段(条件树、允许状态、参数范围、状态判定与迁移、观测指标、执行去向),过编译闸门后切为 active,编译成产物。本书表格中标 【三期】 的字段即此阶段填写;规范见第六章 L1 · 可判定:机器能按它判断"合不合法、处于什么状态"。生产只读 L1 编译出来的产物,不读登记表本身

三期不是串行的三道工序,而是每条知识各自要走完的三级台阶:一条规则可以在支用段已到 L1,而在催收段还停在一期。use case 是推动条目走完三级的组织单位(见 6.1 与辅助登记 U)。

后续 · 衍生与治理(本说明暂不涉及):在原始字段之上做衍生(衍生指标、衍生模型)时再引入的内容——关系真理强度标定(derived / causal)、计算型函数的完整治理(细分六型、输入清单、版本与边界红线)、接口归并等。

1.5 总览导航表

构件 ID 前缀 存储表 一期填什么 【二期】 【三期】(第六章)
对象 N 对象表 objects.yaml 定义 + 实体/事件二分 grounding 回填 —(对象无可判定字段;grounding verified 是其属性/动作进 L1 的前提)
属性 P 属性表 attributes.yaml(枚举取值登在 values) 宿主 + 五轴判定 writer 补齐、crosswalk 状态轴:state_axis · when(判定)· transitions(迁移)
链接 R 关系表 relations.yaml 两端 + 基数 grounding;kind 标定(衍生阶段,暂不涉及) —
动作 A 动作表 actions.yaml(一条记录=一张动作卡) 整卡填齐 grounding allowed_states · params_schema · writes · dispatch · metrics(feedback 的结构化升级)
函数 F 函数表 functions.yaml 计算型只立壳(编号+名+产物);规则型填齐(语句+宿主) 计算型的细分 / 输入 / 版本(数据应用治理阶段);规则挂接口归并(后续归并) 规则型:expr(条件树)· fail_msg · severity;计算型:inputs/outputs 全部接地 + 版本 pin
接口 IF 接口表 interfaces.yaml 不填 后续归并产生 无自有字段;挂接口的规则编译时展开到各实现者(6.3.5)

辅助登记(服务知识、本身不是知识):C 对照词典(属性↔数仓列,【二期】)、DOC 文档登记(出处锚,一期起用)、S 切片(工作分区)、U use case(一个决策的闭环链路:成员清单 + 四步叙事 + Agent 查阅点,【三期】,见 6.10)、X 冲突登记、G 缺口清单。区分判据:删掉它,对世界的描述会不会少一块——会=构件,不会=辅助。

1.6 三条全表通用约定

  1. 引用一律用 ID:宿主、写入方、两端等跨表引用一律填构件 ID(如 host: A-042),不填名字——改名不断链。给人读的文档处采用"名字(ID)"双写。
  2. 双名:每张表都有 zh(中文名)与 en(英文名);规则型函数的 en 填语句短名(如 accept-within-24h)。
  3. 三态填写:有值=知道;none=确认无/不适用(合法记录,本身是知识);留白=尚未梳理(缺口,审核打回)。"必填"的含义是必须表态:不许沉默,允许说没有。

1.7 常用术语速查

本书反复出现的几个词,先在这里说清楚:

术语 英文 白话解释
构件 Building Block 描述业务世界的六类基本单元:对象、属性、链接、动作、函数、接口。Palantir 称之为构建块。
宿主 host 一条知识挂靠的上级构件,回答"这条知识是关于谁的"。属性的宿主是它描述的那个对象;规则的宿主是它约束的那个构件。
挂载 attach 规则与宿主之间的关系。规则不能独立存在,必须挂在某个构件上,并在那个构件被使用的时刻接受检查——挂在动作上就在动作执行前查,挂在属性上就在值写入时查。
机构操作者 operator Palantir 术语:机构内有权执行动作的人员或系统(坐席、审批员、策略引擎)。动作采集的输入只来自机构操作者;客户不是操作者,客户的行为以"事件"对象被记录。
职能域 functional domain 动作的分类轴:执行主体隶属的业务职能(审批 · 贷中管理 · 管控 · 催收 · 账务…)。"一个执行主体一张卡"保证每张卡唯一归属;清单从操作清单归纳,开放增补。
接口 Interface Palantir 术语:描述对象类型形状与能力的抽象类型——不背数据、不可实例化,对象类型"实现"接口即保证符合其形状。本书用它做同形归并。与 API / SDK 接口无关,后者一律写作"API""SDK 字段"。
实现者 implementer 实现某接口的对象——登记在接口的 implementers 清单里,登记时机器校验其确实具备接口声明的形状。
归并 consolidation 把多个形状相同的对象抽象成一个接口,使规则"一条管一族",不必逐个对象抄写。
计算型 / 规则型 computation / rule (ftype) 函数的两个类型:计算型读属性、算出值;规则型给出许可判定、必须声明宿主。同住函数表,靠 ftype 字段区分。
规则 rule 本书中专指函数表里 ftype=规则 的业务条目(如"还款状态正常才收单")——管业务世界允许不允许。不用于框架自身:框架层的要求叫约束或建模原则。
约束 constraint 框架层的结构要求——链接两端必须是对象、宿主必填、矩阵之外不许私搭关系。机器可校验,违反即数据错误。对应 Palantir 的模式级校验(链接基数、主键必填、属性类型);注意 submission criteria 是业务条件,归本书的"规则"(2.5)。
建模原则 best practice "建模"=把业务知识整理成本体构件这件事;原则是做这件事的指引——拆并口诀、特例写法、边带属性应升格对象。对谁都生效:业务同事手工登记、LLM 按第五章批量分类,遵循的是同一套;因机器拦不住,最终靠审核把关。对应 Palantir 的 Ontology design best practices。
共享池 shared property pool 跨对象同口径属性的正本库——物理上就是属性表中 ownership=共享 的条目,口径写一遍管一族。对应 Palantir 的 Shared Properties。
口径 caliber 一个值的精确算法与含义边界——含不含税、按哪个时点取数、四舍五入到哪一位。同名不同口径,是数据对不上的最常见原因。
接地 grounding 把纸面上的知识与数仓里的真实表、真实列钉在一起。接了地的知识才能用数据验证;没接地的知识只是文字。
出处锚 source anchor 指向原文档具体段落的定位串(如 DOC-2026-031#p5),保证每条知识都能一键回到它出自的原文。
发号 ID issuance 构件编号由平台统一发放、终身不回收,保证所有 ID 引用永不断链。
壳 stub 只登记编号、名称与产物的最小条目。先占个位,让别处的引用有合法指向,细节留到后续阶段补齐。
骨架卡 skeleton card 动作卡的壳:六要素暂空的卡,盘点时批量生成、随后补齐。
六要素 / 三要素 six / three essentials 动作卡的六要素=executor · target · product · params · side_effects · reversibility;三要素=其中的 执行主体 · 作用目标 · 产物,与名称一起作唯一性查重。
产物 product 动作造出的新对象(受理→结论、查征信→快照)。动作卡 product 与该对象的 product_of 互指;客户自己做出的事件不填 product_of。
门类 gate 挂在动作上的规则的检查类别:状态门 / 客群门 / 开关门 / 位段门——登记在函数表,动作卡渲染条件时用。
条件引用 refs 一条规则的条件里读到的其余构件 ID(不含宿主)——用于反查"改这条属性口径波及哪些规则"。
切片 slice 工作分区——按业务线(如额度成长)划分的整理与审核单元,S 号登记。
缺口 gap 尚未梳理的空白——留白字段、缺宿主、缺出处都算。登 G 缺口清单,审核打回补齐;与 none(确认无)严格区分。
冲突登记 conflict log 两条知识矛盾时的处理方式:只登记、不裁决、不静默覆盖,X 号登记交人裁决。规则条件范围重叠且结论不同,同样按此处理。
L2 / L1 referable / decidable 知识的两个成熟级别。L2=可引用:定义、结构、出处齐全(一期)并已接地(二期),人和 LLM 可引用;L1=可判定:补齐了机器可执行的可判定字段并通过编译闸门(三期),生产可依赖。对应登记条目 status 的 verified 与 active。
可判定字段 decidable fields 三期补在登记条目上的机器可执行形式:规则的条件树、动作的允许状态 / 参数范围 / 写入清单 / 执行去向 / 观测指标、状态轴的判定与迁移。人话字段(statement、definition)仍是正本,可判定字段是它的可执行翻译。
条件树 condition tree 本书规定的受限表达式形态:all / any / none 嵌套的结构化条件,叶子只能比较已接地的属性、动作参数和常量;不是自由代码。见 6.2。
状态轴 state axis 被标记为承担生命周期状态的枚举型属性(如账户账单状态)。它的取值就是状态,附带闭世界的判定规则(when)与迁移表(transitions)。见 6.3.3。
编译产物 compiled artifacts 从 active 条目确定性生成、带版本号与校验和的文件(ontology.json、states.sql、agent_tools.json、dispatch_map.json、card.md、manifest.json)。生产系统只读产物,不读登记表。见 6.5。
执行记录 action instance 一次动作提交在本体中留下的事件对象(product_of=该动作),带幂等键、参数、目标户清单、本体版本号与生命周期状态(已提交→已批准→已发送→已回执→已观测)。见 6.8。
写回 writeback 本体产物(执行记录、判定结果、策略取值、执行回执、观测指标)落入本体自有的写回库并物化进数仓的过程。写回 ≠ 反写业务系统的库。见 6.9。
判定服务 decision service 运行层的第一形态:无状态在线服务,读产物,回答"处于什么状态 / 这个动作合不合法及原因 / 发往哪里",不存客户数据、不拥有写路径。见 6.7。

1.8 建模守则与核心原则(源自 Palantir Best Practices)

以下守则与原则取自 Palantir 官方的 Ontology design best practices,是生成语义层内容时要遵守的规矩——即把业务知识整理成对象、属性、链接、动作、函数、接口这六类构件的时候(无论是业务同事手工登记,还是 LLM 按第五章批量分类),都按这些守则做。它们属于 1.7 定义的建模原则层:靠人判断与审核执行,机器拦不住。每条标注它在本书的落点:已内建的照做即可,标"新增纪律"的是本节新立的要求。

七条设计守则:

守则 含义 在本书的落点
建模现实,不建模系统 对象代表真实世界的实体,不是某个源系统或部门的表示法 2.1"身份标识揭示对象、别被表名迷惑"
有意识地取舍属性 每条属性都应有明确的业务或技术价值,不照搬源表的列 2.2 definition 必填;"快照日期是数据机制元数据,不是业务属性"(5.1 P4)
跨团队协作设计 本体设计拉上多部门干系人 status=verified 要求三方对齐;S 切片分区;X 冲突登记
一个对象只代表一样东西 每个对象类型只对应一种现实存在,不把几样东西揉进一个对象——例:不要建一个"客户账户"对象把人和账户混在一起,人是客户(mpc_uid 标识)、账户是贷款账户(acct_no 标识),两个标识就是两个对象,用链接相连。反面是**"上帝对象"**:一个对象为每个新场景不断加字段,最后什么都装 2.1 标识语义示例(mpc_uid vs acct_no)。高危预警:客户、贷款账户是最容易被堆属性的对象——新场景要加的东西,先问"这是客户本身的属性,还是另一样东西的属性";是后者就立新对象用链接挂上,不给核心对象增肥
选对工具 人或智能体的决策用动作,自动化的数据加工用管道 2.4 执行主体判定;2.5"writer=F 对应管道产出"防误读段
共性归接口,不造大对象 几种对象有一批共同的属性和动作时(提额申请、分期申请、提现申请都有提交时间、受理状态、受理动作),不要把它们合成一个"申请"大对象再用一堆字段区分类型——那样每种申请的专有字段对别的申请都是空的,对象"又宽又稀疏";而是各自保持独立对象,把共同的那部分抽成一个接口(可受理),让它们各自实现 2.6 接口定义与 Facility 例子;归并判据:三个以上对象同形才归并;规则挂接口一条管一族
记录决策 对象、属性、链接的设计决定要写下来 每条知识带出处锚+asOf/by;平台审计日志

四条核心原则:

原则 含义 在本书的落点
领域驱动 "本体建模的是真实世界,不是源数据"——抵制列→属性的直接映射 1.4 第一阶段不接触数据字段:纸面知识先行,二期才接地——整个两段式流程就是这条原则的制度化
三次法则 同一个东西建了三次,就该重构归并;每个概念只留一个正本 共享池(口径正本只登一份);接口归并判据;函数表是规则的唯一全集
对扩展开放、对修改封闭 保护核心模型,让建设者在其上扩展 新增纪律:对象定义升到 verified 后即为定稿——新场景通过新链接、新属性、新接口在其上扩展,不回改已定稿的定义;确需改定义的,走冲突登记交审核裁决
组合优于深继承 多接口组合能力,不搞深层继承链 一个对象可实现多个接口;接口间继承暂未引入(见 1.2 矩阵接口×接口格)

第二章 · 构件详解

本章逐一说明六类构件。每节的结构:局部关联图 → 定义与判定 → 细分类别 → 相连关系 → 存储表(字段词典+样例)。局部关联图中的编号 ❶❷❸… 与"相连关系"表的行号一一对应——看图找线,对号读表。

2.1 对象(N · 紫色)

对象与其相连构件 ❶ 两端都是对象 对象之间不直连,关系必经链接 ❹ 实现接口 接口只声明形状,值在对象上 ❺ 读 · 产出 对象可作输入或输出 ❷ 宿主 属性描述某个对象的状态,不无主 ❸ 作用于 施加于对象、改其状态 ❸ 产出新对象 重组→新借据、查征信→快照 链接 · R对象之间的边 接口 · IF同形对象的归并 函数 · F计算型 属性 · P存着的值 动作 · A机构侧的受治理操作 对象 · N 有身份标识的实体或事件 类型≈一张表,实例≈一行 实体 | 事件 ❻ 接地(第二阶段) 对象钉到数仓的主档表与身份列;没有主档表的对象(如商户)标记后登缺口——由数据团队回填
对象与其相连构件

定义与判定

按 Palantir 的定义,对象类型是真实世界中某一类实体或事件的模式定义("the schema definition of a real-world entity or event");对象是对象类型的一个实例,对应一个具体的真实世界实体或事件。官方给的类比最直观:对象类型相当于一张数据集,对象相当于其中的一行——"客户"是对象类型,某一位具体客户是一个对象;"支用事件"是对象类型,某一笔具体支用是一个对象。

由此推出对象的两个特征:每个实例有唯一身份标识(Palantir 中即主键属性,我们登记为 identity 列),因此能被逐个指认、清点数量;每个实例有自己的生命周期,产生、变化、终止都可追踪。判定时问一句:它能不能落成"一行"——有没有一个标识把这一个和那一个分开?"支用事件"能,一笔一行,是对象;"风险"不能,它是程度描述,落不成行,不是对象。

来自数据侧的辅助判据:身份标识列揭示对象。数据里每出现一种起标识作用的列(ref_nbr、merchantName、agentcode),背后就站着一个对象类型。判断对象看标识,不要被表名迷惑。

对象是一切构件的宿主锚点:属性描述对象、链接连接对象、动作作用于对象、函数读写对象的属性、规则经它们间接挂到对象。

细分类别(二分,即 type 字段的取值——沿用 Palantir 的实体 / 事件)

Palantir 对对象类型的定义是"真实世界实体或事件的模式定义",本书沿用这一刀,不再细分:

type 本质 例子 关键特征
实体 独立存在的主体,跨事件持续 客户、贷款账户、商户、坐席;账单、催收案件(机构流程造出的制度物,同样是实体) 生命周期长,状态可被反复改写
事件 某一时刻发生的一次记录 支用、还款、提额申请;登录足迹、设备定位、征信快照 一次发生一条,只追加不改写

最重要的分界:客户发起的行为(支用/还款/申请)归"事件"——动作类型只收录机构侧的操作。Palantir 原文对此的支撑:对象类型是 "schema definition of a real-world entity or event",且官方例子直接列出 "customer orders or financial transactions"——客户做的事在官方口径里就是对象;而动作类型 "capture data from operators in your organization",客户不在其列(三段原文与推理见 2.4)。

动作产物标记(product_of,机器推导):有一类对象不是客户做出来的,而是机构动作留下的产物——机构查征信是一个动作(A 号),返回并留存的征信快照就是这个动作的产物;外呼是动作,通话记录是产物;受理支付是动作,借据是产物。产物对象不限二分:事件(征信快照、通话记录)和实体(借据、账户、券)都可以是动作的产物;多个动作产同一类对象时 product_of 多值(借据←受理支付/放款/重组/转分期)。产物对象在 product_of 字段写产出它的动作号,与动作卡的 product 字段互指(同一条边的两个视角,如同 writer ↔ side_effects)。判据不靠人猜"谁触发":出现在某张动作卡 product 里的对象,就是它的产物——机器可推导、可校验。客户自己做出的事件(支用、还款、申请、登录、定位)没有 product_of,是常态。

这是 2.4"观测与干预分离"红线在对象侧的落点,审查义务只落在事件对象上:product_of 非空的事件是机构干预留下的痕迹,进模型特征前须显式审查,否则模型学到的是"机构何时出手"而不是客户风险。实体的 product_of 只是来源溯源(记录哪个动作造出它),不带审查义务。(本段口径由 X-046 收口:原「事件专用」放宽为实体、事件都可填。)

相连关系(对应图中编号)

图中线 方向 含义
❶ 两端=对象 链接 ↔ 对象 链接的两端必须都是对象
❷ 宿主 属性 → 对象 每条属性必须挂在一个对象名下
❸ 作用于 · 产出 动作 → 对象 动作施加于对象;有的动作产出新对象(分案→案件、重组→新借据、查征信→征信快照)——产物对象的 product_of 与动作卡的 product 互指
❹ 实现接口 接口 ⇢ 对象 同形对象归并为接口的实现者;接口只声明形状,值永远在对象上
❺ 读 · 产出 函数 ↔ 对象 计算型函数可以对象为输入,也可产出对象集
❻ 接地【二期】 对象 → 数仓 对象钉到数仓的主档表与身份列(类型≈表、实例≈行);无主档表的标记后登缺口——字段见下文 grounding 子字段表

标识语义示例(易错点):mpc_uid 标识的是客户(人),acct_no 标识的是贷款账户——两个标识符就是两个对象;记录它们对应关系的映射表,是"客户-持有→贷款账户"这条链接的实例清单。用 acct_no 的表记录的是账户的事,用 mpc_uid 的表记录的是人的事——属性归宿主时按此判断。

存储表:对象表 objects.yaml

字段 含义 取值/格式
id 对象编号,终身不回收 N + 三位序号(发号器发放)
zh / en 中文名 / 英文名 文本
type 二分 实体 | 事件
product_of 是哪个动作的产物(实体、事件都可填) A 号,可多值(· 分隔),与该动作卡的 product 互指;客户自己做出的事件为空
definition 业务定义(人话) 文本
grounding 对象接地:实例住在哪张表。第一阶段留空 见下表 · 【二期】
source 出处 DOC-ID#pN 锚(可命中原文)或手填文本
status 本条登记的核实进度 draft(草稿)| verified(三方对齐已核实)
asOf / by 当前状态定格日 / 经手负责人 日期 / 人名

grounding 子字段(【二期】数据团队回填):

四个子字段各回答一个问题(沿用"对象类型≈一张表、对象≈一行"的类比):

子字段 回答的问题 例子与判据
dw_table 实例住在哪张表?——对象的主档表,一个对象类型只认一张 客户 → mpc_user_profile,贷款账户 → icpmms_cust_info。判据:这张表里身份列不重复且覆盖全体实例。身份列在别的表里作外键出现的(订单表里的 acct_no),不算主档,归各条链接的 grounding
identity 哪一列是身份?——让每一行成为"这一个"的列,即 Palantir 的主键属性 客户 → mpc_uid,账户 → acct_no,提额申请 → req_id。"数得清"靠它数:一列一个、绝不重复。用数仓的话说就是业务主键(自然键):有主档表时通常就是那张表的主键;但数仓表未必声明了 PK,identity 认的是"业务上起唯一标识作用的列",不看有没有 PK 约束;no_master 的对象则是从别的表借来当身份用的列(商户的 merchantName 是订单表的普通列)
no_master 有没有真正的主档表?——true=没有,实例是从别人的表里扫出来的 商户:数仓没有"商户表",merchantName 只作为订单表的一列反复出现,只能 DISTINCT 扫出商户清单。这是质量标记:接地是权宜之计,同名异写会被数成两个;同时登缺口清单反馈数据团队补主档
verify 核实到哪一步了? candidate → judged → verified,只许数据角色推进。与条目级 status 相互独立(定义核实了 ≠ 接地核实了)

样例(覆盖实体 / 事件、动作产物与 grounding 三种状态):

- { id: N001, zh: 客户, en: Customer, type: 实体,
    definition: 在体系内开户的个体(人),
    grounding: { dw_table: mpc_user_profile, identity: mpc_uid, verify: verified },
    source: DOC-2026-001#p3, status: verified, asOf: '2026-08-07', by: trista }

- { id: N009, zh: 贷款账户, en: LoanAccount, type: 实体,
    definition: 客户名下的授信账户,额度/管控/账期的宿主,
    grounding: { dw_table: icpmms_cust_info, identity: acct_no, verify: verified },
    status: verified }

- { id: N015, zh: 商户, en: Merchant, type: 实体,
    definition: 消费订单的交易对手方,
    grounding: { dw_table: fact_order, identity: merchantName, no_master: true, verify: judged },
    status: draft }                              # 无主档表:从订单表 DISTINCT 扫出

- { id: N021, zh: 提额申请, en: LimitIncreaseRequest, type: 事件,
    definition: 客户主动发起的提升授信额度请求,一次提交为一个实例,
    grounding: null,                             # 第一阶段留空,二期回填
    source: DOC-2026-031#p4, status: draft, by: leo }

- { id: N025, zh: 登录足迹, en: LoginTrace, type: 事件,                # 客户触发,无需标记
    grounding: { dw_table: fact_login, identity: login_id, verify: judged } }

- { id: N027, zh: 征信快照, en: CreditBureauSnapshot, type: 事件, product_of: A-063,   # 查征信动作的产物
    definition: 机构向征信机构查询后返回并留存的报告快照,
    grounding: null, status: draft }

- { id: N030, zh: 账单, en: Statement, type: 实体,             # 制度物,仍是实体
    definition: 按账期对账户未清项归集生成的应还清单,
    grounding: { dw_table: fact_statement, identity: stmt_id, verify: verified } }

2.2 属性(P · 粉色)

属性与其相连构件 ❶ 宿主 属性≈列,列不能脱离表;宿主须已建档 ❷ 写入 动作改值 · 与副作用互指 ❸ 读 ❹ 写产物 落库后来源=推断 ❺ 挂载=取值约束 值写入或校验时检查(额度不得超过 2000 万) 对象 · N属性描述的"谁" 动作 · A机构侧操作 函数 · F计算型 函数 · F规则型 · 带 if 属性 · P 对象某个特征的值 只存当前值 · 五轴标注 归属=共享:口径正本只登一份,多宿主共用 ❻ 接地(第二阶段) 属性经 C 对照词典钉到数仓的一列(业务名 ↔ SDK 名 ↔ 库.表.列),一条属性可对多列; 词典为空=该属性暂不可用数据验证——由数据团队回填
属性与其相连构件

定义与判定

按 Palantir 的定义,属性是某类实体或事件的一个特征的模式定义("the schema definition of a characteristic of a real-world entity or event");属性值是该属性在某个具体对象上的值。沿用"对象类型≈一张表、对象≈一行"的类比:属性≈这张表的一列,属性值≈这一行在这一列上的取值——"授信额度"是贷款账户表的一列,某个账户的授信额度 500 万是一个属性值。

由此推出属性的两个特征:必有宿主——列不能脱离表存在,属性必须挂在某个对象类型上;只存单值——一个对象在一个属性上只有一个当前值("a conventional object property contains a single value"),历史不塞进属性(见下文约束)。判定时问:"它描述的是谁的什么?"——答不出"谁",说明宿主对象还没建档,先回去立对象。

属性与函数的分界只有一句话:存下来的是属性,算出来的是函数。计算得到的值一旦落库,就取得属性身份、照常登记,只是要在"写入方"字段指回产出它的那个函数——这样任何人看到这个字段,都知道它不是原始事实,而是计算结果。

细分类别(五轴——不是子类,是每条属性同时取值的五个维度)

轴 取值 为什么要标
origin 来源 事实 | 推断 | 构造 防泄漏红线的落点:推断类不得作为原始特征回流进模型(与事件对象的 product_of 配合审查)。事实=世界原样记录(还款金额);推断=算出来的(风险分群);构造=制度定义(账单日)
structure 结构 标量 | 枚举 | 结构组 | 集合 枚举须配 enum_ref(取值集进取值字典);结构组=位段编码类整组登记,禁止逐位散登;集合=多值并存
writer 写入方 客户提交 | A-xx | F-xx | 时间驱动 | null 哪个主体有权写入该值——必须指向已建档构件(F 号须为计算型函数);null=写入方未明(缺口),升 verified 前必须补齐
ownership 归属 专有 | 共享 共享=多对象同口径(金额/时间戳),口径正本进共享池,各宿主只写引用——口径写一遍管一族
sensitive 敏感 明文 | 脱敏 | 禁展示 脱敏红线落到字段级,直接回答界面如何处理

结构轴速判(按顺序问,命中即停):

  1. 值内部还分段吗?→ 结构组
  2. 能同时有多个值吗?→ 集合
  3. 取值是有限清单吗?→ 枚举
  4. 都不是 → 标量

枚举:什么算枚举

例子 能否列完 结论
受理状态:待受理 / 已受理 / 已拒绝 能 枚举
交易金额 不能 标量

共享池:口径正本库

要点 说明
解决什么问题 同一口径的属性出现在多个对象上(支用、还款、订单都有"金额"),各自登记会被抄写多遍并逐渐漂移——有的写含税、有的写不含
做法 口径正本只登一份(host 写成多个宿主对象的列表),各宿主处只引用不复制;修改一处、全体宿主同步生效
它是什么 不是一张新表——物理上就是属性表中 ownership=共享 的那部分条目;平台字段库为它提供检索入口
对应 Palantir Shared Properties

属性只有当前值(约束)

Palantir 原文支撑:属性值是单数——"a property value refers to the value of a property on an object";"a conventional object property contains a single value"。普通属性里没有历史;Palantir 要保留历史时,用的是下面三个机制,没有一个是普通属性:

机制 是不是属性? 官方原文 / 特点 承载什么历史 本框架
时序属性 Time Series Property 是一种特殊属性类型,不是普通属性——属性只是句柄,历史存在 Foundry 专门的时序库里 "stores a history of timestamped values" 连续量随时间的变化(余额走势) 不引入:我们没有时序库,接地对象是行方数仓,数仓里的历史本来就是"一日一行 / 一笔一行"的事实表——即事件对象的形态。余额走势建成"日余额快照"事件对象:有身份(账户+日期)、可挂链接、可被规则 refs 引用;塞进属性则三者皆无,且与"只存单值"约束冲突
编辑历史 Edit History 不是属性——是与当前值分开存的审计日志 默认关闭、逐对象类型开启;只记用户经动作做的编辑,不记数据同步 谁在何时把哪个属性从 A 改成 B 平台审计日志
动作日志 Action Log 不是属性——是对象 "models all action submissions as object types" 每次动作提交本身 采用:变化建成事件对象

结论:普通属性只有当前值;要历史,Palantir 三条路都在属性之外——换特殊类型、开审计日志、或建成对象。

完整例子 · 额度四件套:

东西 归类 说明
初始额度 属性 写入方=授信审批动作;首次核定后不变——不变的值也是属性
当前额度 属性 写入方=调额动作;每次调额被覆盖
额度调整记录 事件对象 一次一条,带调整前后额度、时间、原因;product_of=调额动作
调额 动作 动作卡填 product=额度调整记录、side_effects=写当前额度,三者关系即齐

要看"额度怎么一步步变到今天":沿"账户→调整记录"链接按时间排,不翻当前额度的历史值。

相连关系(对应图中编号)

图中线 方向 含义
❶ 宿主 属性 → 对象 属性≈列,列不能脱离表;宿主必须是已建档对象
❷ 写入 动作 → 属性 动作改属性值;与该动作卡的 side_effects 互指(同一条边的两个视角)
❸ 读 属性 → 函数(计算型) 函数以它为输入——函数的 inputs 清单就是模型特征表
❹ 写产物 函数(计算型)→ 属性 算出的值落库成属性,写入方指回该函数;来源轴必为"推断"
❺ 挂载=取值约束 函数(规则型)⇢ 属性 值写入或校验时检查(如"授信额度不得超过 2000 万")
❻ 接地【二期】 属性 → 数仓列 经 C 对照词典钉到 库.表.列,一条属性可对多列;词典为空=暂不可用数据验证

存储表:属性表 attributes.yaml + 取值字典 states.yaml

字段 含义 取值/格式
id / zh / en 编号(P+三位)/ 双名
host 宿主对象 N 号;归属=共享时为 N 号列表
origin / structure / writer / ownership / sensitive 五轴(见上表)
definition 业务口径 文本
enum_ref structure=枚举时必填;=集合时可选(成员字典) states.yaml#锚
sub_fields structure=结构组时必填 位段子字段清单(子字段可自带 enum_ref)
crosswalk 接地词典行 C 号列表 · 【二期】;空=尚未接地(数据验证判"不可测")
state_axis / when / transitions · 【三期】 状态轴字段:承担生命周期状态的枚举型属性在此登记判定与迁移 见 6.3.3;本书不另设状态表
source / status / asOf / by 同对象表 status 三态见 6.1

样例(覆盖:事实枚举 / 推断脱敏 / 建议值与核定值对照):

- id: P003
  zh: 受理状态
  en: AcceptStatus
  host: N021
  origin: 事实
  structure: 枚举
  writer: A-042                    # 只有受理动作能写它
  ownership: 共享                   # 各类申请同款口径
  sensitive: 明文
  definition: 申请当前的受理进度
  enum_ref: states.yaml#accept_status
  crosswalk: [C011]                # 【二期】
  source: DOC-2026-031#p4
  status: draft

- id: P002
  zh: 内部行为评分
  en: BehaviorScore
  host: N001
  origin: 推断                      # → 推断值,不得当原始特征回流
  structure: 标量
  writer: F001
  ownership: 专有
  sensitive: 脱敏
  status: draft

# 建议值 vs 核定值——两个属性、两个写入方(见第五章易混边界)
- { id: P004, zh: 建议额度, en: SuggestedLimit, host: N009,
    origin: 推断, writer: F001 }    # 模型吐的建议,版本一换就变
- { id: P010, zh: 初始额度, en: InitialLimit, host: N009,
    origin: 事实, writer: A-001 }   # 审批核定的决策事实,永不再变

取值字典 states.yaml(枚举型属性的取值明细——每个取值本身是一条知识):

- dim: accept_status
  attr: P003                       # 挂回属性
  values:
    - { value: P, zh: 待受理, source: DOC-2026-031#p4 }
    - { value: A, zh: 已受理, source: DOC-2026-031#p4 }
    - { value: R, zh: 已拒绝, source: DOC-2026-031#p4 }

落点说明:states.yaml 是取值字典的逻辑名;当前实现把取值直接登在属性条目的 values 字段上(每个取值一条 { value, label },结构组的位段取值登在 sub_fields),不另建文件。第六章的状态轴字段(when / transitions)同样挂在属性上——状态的宿主、取值、写入方本来就在属性条目里,不再新建状态表。

2.3 链接(R · 灰色)

链接与其两端 ❶ 两端都是对象 · 天然双向 一个链接类型两向可遍历,不必"客户→账户""账户→客户"各建一条;两端可为同一对象类型(自连) 对象 · Nfrom 端(客户) 对象 · Nto 端(贷款账户) 链接 · R 两个对象类型间的关系 ≈ 两张表之间的 join 动词命名(持有)· 方向 · 基数 1:1 / 1:N / N:1 / N:M ❷ 遍历 · 聚合 计算型沿边跨对象聚合 函数 · F计算型 kind=真理强度(衍生阶段标定) structural 必然为真 | derived 沿边推出 | causal 可被推翻 ❸ 接地(第二阶段) 链接钉到数仓的外键列(一对一 / 一对多)或映射表(多对多),每一行=一条链接实例,基数由此可验证 属性不作端点,但语义层的边在接地层靠外键列支撑——由数据团队回填
链接与其两端

定义与判定

按 Palantir 的定义,链接类型是两个对象类型之间一种关系的模式定义("the schema definition of a relationship between two object types");链接是这种关系在两个具体对象之间的一个实例。沿用表/行的类比:链接类型≈两张表之间的一个 join(官方原话 "analogous to that of a join between two datasets"),一条链接≈join 结果里的一行——"客户持有贷款账户"是链接类型,某位客户与其名下某个账户的对应关系是一条链接。

由此推出链接的三个特征:两端必须都是对象——join 只能连表,属性、动作、函数都不能作为链接端点(自连也允许:员工↔上级,两端是同一对象类型);天然双向——一个链接类型两个方向都可遍历,不必为"客户→账户"和"账户→客户"各建一条;有基数——一对一、一对多、多对多;多对多的链接由独立的映射表支撑,其他由外键列支撑(这正是二期接地的落点)。判定时问:"它连接的是哪两个对象?"链接用业务动词命名,标明方向与基数。

边不承载属性与历史(建模原则):链接本身不带属性、不带时间区间。当一段关系需要携带金额、时点、状态时,把它升格为对象——客户与商户的"消费"关系带金额,所以订单是对象而不是一条边。判据:想给边加字段的那一刻,就是该立对象的那一刻。

细分类别(kind——真理强度,衍生分析阶段标定,业务输入不填)

kind 含义 谁产生 使用端
structural 结构 定义上必然为真(客户-持有-账户) 业务输入默认值 进 OWL 硬推理,打架即矛盾
derived 派生 沿已有边推出(客户-消费于-商户) 后续归并:只存推导路径,不存实例 查询层现算不存
causal 因果 证据支持、可被推翻(登录骤降→逾期风险升) 数据分析产出自带 随证据更新,不进硬推理

相连关系(对应图中编号)

图中线 方向 含义
❶ 两端都是对象 · 天然双向 对象 ↔ 链接 ↔ 对象 两端必须是已建档对象(可为同一类型,自连);一个链接类型两向可遍历,不必两个方向各建一条;动词命名、标方向与基数
❷ 遍历 · 聚合 函数(计算型)⇢ 链接 计算型可沿链接跨对象聚合(客户在贷总余额);固定且高频的遍历应沉淀为真链接
❸ 接地【二期】 链接 → 数仓 钉到外键列(一对一 / 一对多)或映射表(多对多);每一行=一条链接实例,基数由此可验证

存储表:关系表 relations.yaml

字段 含义 取值
id / zh / en R+三位 / 双名(动词)
kind 真理强度 structural | derived | causal(默认 structural)
from / to 两端对象 必须 N 号
cardinality 基数 1:1 | 1:N | N:1 | N:M | 1:0..1(N:M 由映射表接地)
grounding 接地 · 【二期】 { dw_table, columns[], verify }
source / status / asOf / by 同上

样例(映射表接地 / 外键接地各一):

- id: R001
  zh: 持有
  en: holds
  kind: structural
  from: N001                       # 客户(mpc_uid)
  to: N009                         # 贷款账户(acct_no)
  cardinality: '1:1'
  grounding: { dw_table: _cohort_map, columns: [mpc_uid, acct_no], verify: verified }   # 【二期】
  status: verified

- id: R012
  zh: 发生于
  en: occursOn
  kind: structural
  from: N009
  to: N021
  cardinality: '1:N'
  grounding: { dw_table: fact_limit_req, columns: [acct_no], verify: judged }           # 【二期】
  status: draft

2.4 动作(A · 青色)

动作与其相连构件 ❶ 作用于 操作施加于哪个对象(target) ❷ 产出 造出新对象,与其 product_of 互指 ❶ 作用于接口 一张卡管全部申请事件 ❺ 无直接边 建议值经属性中转 ❹ 前置条件 执行那一刻检查,不满足即拦截 ❸ 写入 改属性值,与其 writer 互指 对象 · N作用目标 对象 · N(产物)受理结论 · 新借据 · 快照 函数 · F计算型 接口 · IF声明签名 函数 · F规则型(挂载于动作) 属性 · P副作用写入的值 动作 · A 机构操作者的受治理写操作 ≈带权限的表单+一次写入 参数 · 条件 · 编辑 · 留痕 ❻ 接地(第二阶段) 执行日志钉到数仓表与列(执行者 · 动作码 · 时间 · 结果);无日志的动作登缺口——由数据团队回填
动作与其相连构件

定义与判定

按 Palantir 的定义,动作类型是"用户可以一次采取的一组对象、属性或链接编辑"的模式定义("the definition of a set of changes or edits to objects, properties, or links that a user can take at once");动作是该定义的一次具体执行(一次提交)。它是本体的"动能"(kinetics):在遵守机构管控与治理的前提下让数据发生变化——因此动作采集的是机构操作者(operator,机构内有权执行操作的人员或系统:坐席、审批员、策略引擎)的输入,是机构一侧改变业务状态的唯一受治理入口。

类比:动作类型≈一张带权限校验的业务表单+一次事务性写入——表单规定谁能填、填什么、提交前查什么;提交即一次写入,写完留一条日志。"受理提额申请"是动作类型,策略系统在某时刻对某笔申请做出的那一次受理是一个动作。

由此推出动作的五个特征(每一条都对应 Palantir 动作类型的一个组成部分,也对应动作卡上的一处):

特征 Palantir 对应 落到动作卡
有执行者、有权限——谁能做是定义的一部分 permissions("authorized employees … can perform the action") executor · category
有输入参数——每次执行带的变量 parameters params
编辑范围事先声明——改哪个对象、造什么、写哪些属性 rules(create / modify / delete object,add / remove link) target · product · side_effects
提交前有条件——不满足则不得执行 submission criteria conditions(规则型函数挂载,2.5)
执行留痕、可追溯——每次提交是一条记录 action log · edit history reversibility;grounding(接地)

判定时问两个问题:

判定①在 Palantir 原文中的依据(三段定义合起来推出,逐条可引):

官方原文 出处 推出什么
"An object type is the schema definition of a real-world entity or event." 例子明列 "customer orders or financial transactions" Ontology core concepts / overview 客户下单、金融交易这类"客户出手做的事",官方归为对象
action types "enable you to capture data from operators in your organization";kinetics = "enabling change while complying with organizational controls and governance" Ontology overview 动作只采集机构内操作者的输入、在机构治理下改变数据——客户不是 operator
"An action type is the definition of a set of changes or edits ... that a user can take at once." 权限例:"authorized employees ... can perform the action" Action types overview 动作是"用户可采取的编辑",面向将要发生的操作;客户已发生的支用、还款是事实,只能被记录,不能被"采取"。官方文档从未把客户或外部方描述为动作的执行者

三段合起来:客户的行为是真实世界的事件→对象;动作的执行者限定为机构内操作者→客户行为不构成动作;动作是"可采取的编辑"而非"已发生的记录"→形状也对不上。除原文依据外,只收录机构侧操作在业务上还有三条理由:

理由 说明
治理性 只有机构自身的操作可以被规则约束、在执行前被拦截;客户的行为只能被观测,无法被"禁止发生"
观测与干预分离 防止数据泄漏的根基:机构的干预记录(如主动查征信)若混进"客户行为"特征,模型学到的是机构何时干预,而不是客户本身的风险
数据形状不同 机构操作的日志天然带执行者、动作码、执行结果三件套;客户行为的记录只有金额、时间、类型

细分类别(category=职能域:谁的手,就是谁的类)

动作按职能域分类——执行主体隶属的业务职能。纪律"一个执行主体一张卡"保证了每张卡只属于一个职能:分类天然互斥且完备,业务同学判定零成本("这是谁的地盘")。

职能域是开放清单,由业务增补:清单不是本书定死的,而是从各机构的操作清单盘点归纳出来的枚举字典(与 states.yaml 同类维护)。业务同学建卡时找不到合适职能即可新增,审核只做去重归并。下表按信贷生命周期列出常见职能域作为起点,供对照,不是上限:

生命周期 职能域(示例) 动作例子
贷前 获客与营销 投放名单、发放优惠券
贷前 准入与反欺诈 黑名单拦截、人工反欺诈复核
贷前 授信审批 核准额度、拒绝申请、要求补件
贷中 贷中管理 客户额度与价格的调整:调额、受理提额申请(系统执行,策略归此队)、调整利率、给予费率优惠
贷中 交易管控 冻结、解冻、支付开关
贷后 贷后监控 触发预警、下调风险等级
贷后 催收 外呼、分案、记录还款承诺
贷后 账务 记账、核销、自动出账
全程 客服 受理投诉、人工改资料
全程 合规与风控管理 策略上线审批、模型上线审批

增补规矩三条:① 按执行主体归属命名("这个操作是哪个团队 / 哪个系统的职责"),不按动作效果命名("冻结类"不是职能域,冻结属于交易管控);② 新增前先查同义("贷中管理"与"额度管理"取其一);③ 同一执行主体的动作只能落在一个职能域——若一个团队的动作横跨两域,说明域切得不对,交审核归并。

规矩 ③ 的两个例子——催收坐席做外呼、分案、记录还款承诺三件事,若有人把"记录还款承诺"填成"客服",催收坐席就横跨了两域:改回"催收"即可(域看执行者归属,不看动作长相)。若卡上执行者写"风控策略团队",而它既核准额度(授信审批)又调额(贷中管理),有两条修法:把执行者写细——实际执行的是"授信决策引擎"与"额度策略系统"两个系统,各归各域;或承认这两个域在本机构就是同一团队的地盘,合并为一个域。哪条都行,交审核定,但不允许留着"一个执行者、两个域"——那会让下一张卡不知该填哪个域。

其余维度不占分类轴,各归其位:

维度 落点 谁负责
对客 / 对内 facing 可选标记——判据:客户能否感知本次状态变化 人选标
触发方式 implicit 标记——true=系统自动执行、无人点按钮,照样建档 人选标
编辑效果 不设字段:有 product=创建型,仅 side_effects=变更型——平台自动推导(对应 Palantir 的 create / modify object 规则类型) 机器推导
受理模式 不是类别:"一张卡带事件类型参数、管全部申请类事件"的参数化模式,由卡的形状(target=接口+params 含事件类型)识别 机器识别

拆卡与并卡——业务大词先在时间线上走一遍:数几个执行主体、停几站。

判据 拆成多张卡(命中任一即拆) 并成一张卡(命中即并)
执行主体 中途换人 全程同一执行主体
条件检查时点 不同步骤各查各的 同一套条件、一次检查
中间态 中间能停留、可查询 一步到位、无中间态
可逆性 各步撤销方式不同 同一种撤销方式
产物 各步产物不同 同形状 × N——参数化合并,差异进 params

走一遍时间线的例子——业务说"提额审批"。沿时间线数站:客户提交 → 系统受理 → 模型算分 → 审批员核准 → 系统生效写额度。逐条对表:执行主体换了(系统→审批员→系统);条件检查时点不同(受理查"还款正常、开关打开",核准查"模型分≥阈值、不超上限");中间能停(受理后停在"待审",客服可查);撤法不同(受理拒了可重提,额度生效了要走调额回退);产物不同(受理结论 / 审批结论 / 当前额度)。五条全中,拆成三张:受理提额申请(系统)/核准提额(审批员)/调额生效(系统)——每张恰好一个执行主体、一个检查时点、一种撤销方式。反例:受理提额申请 / 受理分期申请 / 受理提现申请,形状完全相同、只差申请类型——"同形状 × N",并成一张卡,事件类型进 params。

口诀:一张卡=一个执行主体+一个检查时点+一种撤销方式。 拆错不要紧,审核会复核。 纪律:一个执行主体一张卡,动作须唯一(审核按名称+三要素——执行主体、作用目标、产物——组合查重)。

相连关系(对应图中编号)

图中线 方向 含义
❶ 作用于 动作 → 对象 / 接口 target:操作施加于谁;受理类动作可作用于接口——一张卡带事件类型参数,管全部申请类事件
❷ 产出 动作 → 对象 product:有的动作造出新对象(受理→结论、外访→还款承诺、重组→新借据);与该对象的 product_of 互指
❸ 写入 动作 → 属性 side_effects:改哪些属性值;与属性的 writer 互指(同一条边的两个视角)
❹ 前置条件 函数(规则型)⇢ 动作 挂载:规则挂动作=执行那一刻的检查;不满足即拦截(卡内 conditions 逐条引用 F 号)
❺ 无直接边(经属性中转) 函数(计算型)⇢ 属性 → 动作 计算型只出建议值(模型分、建议额度),产物落进属性;动作把该属性当参数读或在条件里引用,核定与落地由动作完成——分工是流程约定,不是字段关系。动作之间同样不直接调用,衔接经事件驱动显式串联
❻ 接地【二期】 动作 → 数仓 执行日志钉到数仓表与列(执行者 · 动作码 · 时间 · 结果);无日志的动作登缺口——数据团队回填

存储表:动作表 actions.yaml(每条记录即一张"动作卡")

与其他五张表同为 YAML 列表,一条记录=一张动作卡。整卡在第一阶段填齐——正在描述动作的人最清楚它的参数、副作用、可逆性;空腔显式写 none("无参数""不可逆"是知识,沉默空白是缺口)。六要素=executor · target · product · params · side_effects · reversibility;骨架卡=六要素暂空的记录(盘点时批量生成、随后补齐)。

字段 回答的问题 取值 / 规矩 何时填
id / zh / en 编号(A+序号)/ 双名(动词短语) 第一阶段
category 职能域——执行主体属于哪个业务职能 授信审批 | 贷中管理 | 交易管控 | 催收 | 账务 …(开放清单) 第一阶段
facing 对客还是对内(可选标记) 对客 | 对内——判据:客户能否感知本次状态变化 可选
executor 执行主体(机构操作者) 人(坐席/审批员)/ 系统(策略引擎)/ 混合 第一阶段
target 操作施加于谁 N 号 | P 号 | IF 号 第一阶段
product 产出什么 文本或 N 号(产出新对象时,该对象 product_of 指回本动作) 第一阶段
params 每次执行的输入变量(0..N 个) 列表;判据:会被规则引用或审计回看的才进 第一阶段
side_effects 顺带发生什么 写哪些属性(P 号,该属性 writer 指回本动作)、发什么通知 第一阶段
reversibility 能否反悔、怎么反悔 可逆 | 带条件可逆 | 不可逆 第一阶段
implicit 有人点按钮吗 true=系统自动执行 第一阶段
conditions 执行前置条件——挂在本动作上的规则 规则型函数 F 号清单;正本(语句、门类、出处)在函数表,此处只引用不复制;渲染时按编号拉取 第一阶段
refs 上述字段之外还涉及的对象 / 属性 ID 联想选择,不许自由造词 第一阶段
feedback 怎么知道这个动作做得好不好 观测指标+回看窗口 第一阶段
grounding · 【二期】 动作的接地:执行日志在数仓哪张表哪些列 { table, columns }——数据团队填写 【二期】
source / status / asOf / by 出处 / 状态 / 时点 / 填写人 同全表通用约定(1.6);status 三态见 6.1 第一阶段
allowed_states · params_schema · writes · dispatch · metrics · 【三期】 可判定字段:允许状态 / 参数范围 / 写入清单 / 执行去向 / 观测指标 见 6.3.2;只补在 verified 条目上 【三期】

样例(一张整卡:受理提额申请——参数化受理、系统隐式执行):

- id: A-042
  zh: 受理提额申请
  en: accept-limit-increase
  category: 贷中管理
  facing: 对客
  executor: 额度策略系统
  target: N021                     # 提额申请(事件)
  product: 受理结论
  params: [事件类型, 渠道]
  side_effects: [P003]             # 受理状态:该属性 writer = A-042(互指)
  reversibility: 拒绝可重试
  implicit: true
  conditions: [F110, F112]         # F110 还款状态=Normal 才收单 · F112 提额总开关=ON;语句与出处在函数表
  refs: [N021, P003]
  feedback: 受理时效分布(提交→结论);月度拒绝率按渠道
  grounding: null                  # 【二期】数据团队回填,如 { table: fact_limit_req, columns: [acpt_sts] }
  source: DOC-2026-031#p5
  status: draft
  asOf: '2026-08-06'
  by: trista

2.5 函数(F · 计算蓝 / 规则橙)

函数与其相连构件(计算型 · 规则型) ❶ 读(inputs) 读哪些属性 / 对象=特征清单 ❷ 写产物(outputs) 落库成属性 · writer 互指 ❸ 挂载(host,四选一) ❹ 条件引用(refs) 条件读的其余构件 属性 · P / 对象 · N输入 属性 · P(产物)来源=推断 · writer=本函数 动作 · A执行前置条件 属性 · P取值约束 函数 · F(计算型)进出口红线 接口 · IF族级批发 · 一次生效 属性 · P(条件读)如:还款状态 函数 · F 逻辑单元:输入→输出,不改变世界 计算型算出一个值 规则型给出一个裁决 ❺ 接地(第二阶段) 函数本身不接地:数仓里只有它的脚印——落库的输出列经属性 / C 词典接地;知识层补记"这一列是算出来的"
函数与其相连构件(计算型 · 规则型)

定义与判定

按 Palantir 的定义,函数是运行在本体之上的自定义逻辑单元(custom logic on the Ontology):读取对象、属性与链接,返回一个结果——一个计算值,或一组"打算怎么改"的编辑意图;函数本身不落库,要改变本体,只能把编辑意图交给动作提交。本框架据此把函数定义为:由确定的输入得出确定的输出、且不改变世界的逻辑单元。

类比:函数≈一台只出结果、不改数据的计算器——喂进去值,出来一个值或一个"行 / 不行";对数仓同学来说,它≈一段加工逻辑(视图、存储过程、模型脚本),知识库只登记它的进出口,不登记内部实现。"额度评估模型"是一个函数(类型),某日对某客户跑出的那次评分是它的一次执行。

由此推出函数的三个特征:

特征 含义 落到函数表
只读不写——不改变世界 读值、算值、给裁决,都不改任何状态;产物落库以属性身份登记,治理级写入(核定额度、改状态)仍只能走动作(2.4 判定②) outputs 指向属性 / 对象,该属性 writer 指回本函数
进出口明确——黑盒边界 吃什么(inputs)、吐什么(outputs)、吐得准不准(版本指标);建模方法、特征工程、超参数不进知识库 inputs · outputs · versions;内部实现不设字段
规则型必有宿主——没有独立存在权 每条规则都要声明它约束的是哪个已建档构件,并由宿主决定它在哪一刻被检查;答不出宿主,登记就没完成 host(必填)· refs

按输出的性质,函数分为两个类型(ftype),判定各有一问:

ftype 输出是什么 判定问句 例子
计算型 一个值(评分、分群、比率、窗口聚合、模型输出),落库后以属性身份登记 "这个值是存着的,还是算出来的?"算出来的→计算型函数(存着的→属性,2.2) 催收评分、额度评估模型
规则型 一个许可判定——允许 / 拦截、必须 / 不得 "这句话带不带条件(如果 / 当 / 超过 / 不得 / 必须 / 除非)?"带条件的约束→规则型函数 还款状态正常才可提额;额度不得超过上限

两类共享同一骨架——都有输入面(读什么值、查什么条件)和输出面(吐出什么值、给出什么裁决)——因此同住一张函数表,靠 ftype 区分。它们与动作的分界始终不变:函数只出数、只判定,不改变世界;改变世界的只有动作。

规则并入函数的依据:Palantir 没有独立的"规则"构件——条件式约束散落在几处:动作的提交准则(submission criteria)、动作参数校验(parameter validation)、自动化的触发条件(Automate conditions)、函数内部的判断逻辑。它们的共同形状都是"给定条件→给出裁决",与计算型函数同为"输入→输出",只是输出是布尔裁决而非数值。本框架把这些并为函数的规则型,用 host 记录 Palantir 会把它挂在哪:

我们的宿主 Palantir 中对应的落点
A 动作 submission criteria——动作提交前必须满足的条件
P 属性 parameter / property validation——写入值时的校验
F 函数(计算型) 函数进出口的治理约束(哪些特征禁入、输出可用于何处)
IF 接口 接口级共享——对全体实现者一次生效

与 Palantir 的对应(防误读):Palantir 中属性取值有三条路径——管道产出(backing datasource,不经动作)、动作写回(Action writeback)、派生属性(运行时现算);其"编辑函数"只产出编辑意图,必须经动作提交才落库。我们的 writer=F 对应的是管道产出与派生属性这两条路(模型分 T+1 批量落库),不是"函数绕过动作直接编辑本体"。

计算在数据里是隐形的:数仓里只有它的脚印(落库的输出字段),而这些字段与原始事实字段外观无异——所以必须由知识层补记"这一列是算出来的"(属性来源=推断、writer 指回函数),防泄漏审查才有抓手。

细分类别

第一层:类型(ftype,第一阶段必填)

ftype 输出是什么 第一阶段填什么 例子
计算 一个值(落库成属性)或新对象 只立壳:id+名+outputs 催收评分、额度评估模型
规则 一个许可判定 填齐:语句+宿主 还款状态正常才可提额

计算型的细分(subtype 六型,沿用 Palantir 的函数分类,数据应用治理阶段标注):

subtype 含义 备注
查询 只读试算,不落库
编辑 批量写回属性 写回路径与目标属性的 writer 互指
流式 实时计算
模型集成 评分模型 / LLM 版本指标记在 versions
通知 输出为"给谁发什么"
API 调用 调外部数据 外部数据必经建档函数进入

规则型的细分(host 四类宿主)——选宿主判据:"这条规则想在哪一刻被检查":

host 语义 检查时机 占比
A 动作 执行前置条件 动作执行那一刻拦截 最多
P 属性 取值约束 值写入 / 校验时 次之
F 函数(计算型) 输入 / 输出边界红线 特征清单提交、输出被引用时 治理红线专用
IF 接口 族级批发 族内任何成员命中时 少数(省抄写)

refs——条件引用的其余构件:一条规则往往连着不止一个构件:"还款状态非 Normal 不得提额"读的是属性 P011、拦的是受理动作 A-042。

特例的写法(不设例外机制):

函数表是规则的唯一全集:宿主为单个动作的条件同样在此登记发号,动作表 conditions 字段按编号引用渲染——全局检索规则只需扫一处。

相连关系(对应图中编号)

图中线 方向 含义
❶ 读 属性 / 对象 → 函数(计算型) inputs:读哪些属性、对象——特征清单;边界规则(host=F)审查的正是这个"进口"
❷ 写产物 函数(计算型)→ 属性 / 对象 outputs:产物落库成属性(来源=推断,其 writer 指回本函数,互指)或产出新对象
❸ 挂载 函数(规则型)⇢ 动作 / 属性 / 函数(计算型)/ 接口 host:四选一,规则永不悬空——挂动作=执行门槛;挂属性=取值上限;挂函数=进出口红线(输入禁区与输出用途,不碰模型内部);挂接口=对全体实现者一次生效
❹ 条件引用 函数(规则型)⇢ 属性 / 对象 refs:条件里读的其余构件(不含宿主);改口径时反查波及范围
❺ 接地【二期】 函数 → 数仓 函数本身不接地:数仓里只有它的脚印——落库的输出列经属性 / C 词典接地;知识层补记"这一列是算出来的"

存储表:函数表 functions.yaml

分期义务:计算型第一阶段只立壳(id+名+outputs——发现"算出来的字段"时顺手立一行,让属性的 writer 有合法指向),其余在数据应用治理阶段补齐;规则型第一阶段就要填齐(语句+宿主)——写规则的人最清楚它约束谁。

字段 适用类型 含义 何时填
id / zh / en 全部 F+序号 / 双名(计算型 en 为名词,规则型 en 为语句短名 slug) 第一阶段
ftype 全部 · 必填 计算 | 规则 第一阶段
outputs 计算 产物落回哪些属性(P 号)或产出对象(N 号) 第一阶段
subtype 计算 六型(查询/编辑/流式/模型集成/通知/API调用) 治理阶段
inputs 计算 读哪些属性/对象——特征清单 治理阶段
caliber 计算 口径说明 治理阶段
versions 计算 [{ver, metrics{ks, lead_time…}, asOf}]——指标是版本元数据,不是知识条目 治理阶段
statement 规则 规则语句(人话,含完整适用条件) 第一阶段
host 规则 · 必填 宿主:A/P/F/IF 号——指向未建档名字直接拒收 第一阶段
gate 规则(宿主为动作时) 门类:状态门 | 客群门 | 开关门 | 位段门——动作卡渲染条件行时用 第一阶段
refs 规则 条件引用的其余构件 ID 清单(不含宿主)——引用未建档的先立档 第一阶段
owl_status 规则 是否进入一致性推理:已进 OWL | 待写入 | 建模约定不进 OWL
expr / fail_msg / severity / manual · 【三期】 规则 可判定字段:条件树 / 失败提示 / 拦截强度 / 不可机器判定标记,见 6.2、6.3.1 【三期】
source / status / asOf / by 全部 同上;status 三态见 6.1

样例(计算型壳与完整各一 + 规则型四类宿主各一):

# —— 计算型 · 壳(第一阶段)——
- { id: F013, zh: 催收评分, en: CollectionScore, ftype: 计算, outputs: [P021], status: draft }

# —— 计算型 · 完整(治理阶段)——
- id: F001
  zh: 额度评估模型
  en: LimitEvalModel
  ftype: 计算
  subtype: 模型集成
  inputs: [N009, P002]
  outputs: [P004]                  # P004 的 writer 指回 F001(互指)
  caliber: 输出建议额度与风险分层,T+1 批量
  versions:
    - { ver: v2, metrics: { ks: 0.41 }, asOf: '2026-08-01' }
  status: draft

# —— 规则型(第一阶段填齐;四类宿主各一)——
- { id: F110, en: no-increase-unless-normal, ftype: 规则,
    statement: 还款状态非 Normal 不得提额,
    host: A-042, gate: 状态门, refs: [P011] }   # P011=还款状态:条件读它,闸门在受理动作
- { id: F115, en: limit-cap-20m, ftype: 规则,
    statement: 授信额度不得超过 2000 万 IDR, host: P001 }   # 约束的就是宿主本身,refs 无
- { id: F130, en: no-bill-amount-in-model, ftype: 规则,
    statement: 账单金额不得作为因子进入逾期预测模型,
    host: F010, refs: [P030] }               # P030=账单金额:禁它进入宿主函数的输入

# 特例=并列的独立规则,条件互斥(不设例外机制)
- { id: F120, en: accept-within-24h, ftype: 规则,
    statement: 非大额申请事件提交后 24 小时内必须给出受理结论, host: IF01 }
- { id: F121, en: large-withdraw-48h, ftype: 规则,
    statement: 大额提现申请(≥5000 万)提交后 48 小时内必须给出受理结论, host: IF01 }

2.6 接口(IF · 虚线框)

接口与其相连构件 ❶ 实现 · 归并(implementers) 同形的一族;登记时校验名下确有 shape 属性 ❹ 作为作用目标 受理动作 target=接口,一张卡管一族 ❷ 挂载(批发) 一条规则管一族 ❸ 声明形状(shape) 属性要求+动作签名,不拥有值 对象 · N 提额申请实现 可受理 对象 · N 分期申请实现 可受理 对象 · N 提现申请实现 可受理 动作 · A受理申请(参数化) 函数 · F规则型 属性 · P / 动作 · A提交时间 · 受理状态 · 受理动作 接口 · IF 对象类型的形状与能力 ≈体检标准表,不是报告 抽象 · 不背数据 · 类型层 ❺ 接地:无 接口不接地:它不背数据集、不能实例化——实现者各自接地;规则查找路径:实例 → 对象类型 → 接口 → 挂着的规则
接口与其相连构件

定义与判定

按 Palantir 的定义,接口(Interface)是"描述对象类型的形状与能力的本体类型"("an Ontology type that describes the shape of an object type and its capabilities")。它是抽象的:不背数据集、不能直接实例化——对象类型是具体的,接口只声明"实现(implement)它的对象类型必须具备什么形状";一个对象类型可以实现多个接口。面向接口写的规则、动作和工作流,对所有实现者一次生效——这就是官方所说的多态(polymorphism)。

类比:接口≈体检标准表,对象类型≈体检报告——标准表规定"必须查这几项",数值永远在报告上;也≈数仓里一份只有列名、没有数据的模板表结构。Palantir 官方例子:Facility(设施)接口声明"设施名称、位置"两条属性;机场、工厂、维修机库三个对象类型都实现它,各自再带专有属性;工作流面向 Facility 写一次就能处理三者,日后新增第四种设施只要实现该接口,现有工作流零改动兼容。对应到我们:可受理接口声明"提交时间、受理状态、受理动作",提额申请、分期申请、提现申请都实现它。

由此推出接口的三个特征:

特征 含义 落到接口表
声明形状,不拥有值 规定"实现者必须有这几个属性、支持这几个动作",值永远在实现者身上;登记实现关系时机器校验其名下确有形状要求的属性 shape(P 号+A 号)
类型层生效,不参与执行 每笔业务实例各走各的;接口只是规则查找路径上的一站:实例 → 对象类型 → 接口 → 挂着的规则 implementers
规则的批发渠道 规则挂对象是零售(一条管一个),挂接口是批发(一条管一族);新成员登记实现即自动继承全部接口规则 由函数表 host=IF 号反查

在本框架中,接口用作同形对象的归并机制,判定分三步:

名称辨析:本书的"接口"专指 Palantir Ontology 的 Interface(对象形状的抽象类型),与 API / SDK 接口无关——后者在本书一律写作"API""SDK 字段"。

细分类别(已知与候选)

状态 接口 归并的是什么
已知 可受理 各类申请事件的三态受理(待受理 / 已受理 / 已拒绝)
已知 可质押 可作押品的对象
已知 可核销 可被核销的债权对象
候选 可冲抵、可出账、可管控、可计息、可触达(催收合规红线)、可上报、可撤销 等同一句规则要抄第二遍时再归并

相连关系(对应图中编号)

图中线 方向 含义
❶ 实现 · 归并 对象 → 接口 implementers:哪些对象类型实现此接口;登记时校验同形(名下确有 shape 要求的属性)
❷ 挂载 函数(规则型)⇢ 接口 host=IF 号:一条规则管一族,对全体实现者一次生效;新成员自动继承
❸ 声明形状 接口 ⇢ 属性 · 动作 shape:属性要求(P 号)+动作签名(A 号)——只声明,不拥有值
❹ 作为作用目标 动作 → 接口 受理类动作 target=接口:一张卡带事件类型参数,管全部实现者(2.4 ❶)
❺ 接地 —— 接口不接地:它不背数据集,实现者各自接地

存储表:接口表 interfaces.yaml

字段 含义 取值 / 规矩
id / zh / en IF+序号 / 双名 命名"可+动词"
definition 这个能力 / 形状是什么 人话一句
shape.properties 形状要求:属性槽位 [{ slot, ref, state_axis? }]——slot 是槽位名;ref 优先指共享属性的 P 号(口径写一遍管全族);尚无共享属性时 ref 为 null,由各实现者 bindings 指定;state_axis=true 表示实现者绑定的属性必须是状态轴(6.3.3)且取值集合相同
shape.actions 形状要求:动作签名 A 号列表——动作 target 为本接口,一张卡管全族(2.4 ❶)
implementers 实现者清单 [{ id: N 号, bindings?: { slot: P 号 }, verify }]——bindings 只在该实现者用了不同 P 号时填;登记时机器校验每个槽位在该实现者名下确有对应属性且同结构(枚举取值一致);verify 沿用 3.3 状态机
rules 挂在本接口上的规则 不存:由函数表 host=IF 号反查(❷);编译时按 implementers 展开(6.3.5)
note / source / status / asOf / by 同各表通用约定 status 三态见 6.1;进 active 的前提见 6.3.5(实现者全部 active、槽位全部接地)

样例(可受理:一个槽位已有共享属性、一个槽位靠绑定):

- id: IF01
  zh: 可受理
  en: Acceptable
  definition: 客户发起的申请类事件都经同一套三态受理(待受理 / 已受理 / 已拒绝)
  shape:
    properties:
      - { slot: 受理状态, ref: P003, state_axis: true }   # P003 已是共享属性(多宿主),实现者无需绑定
      - { slot: 提交时间, ref: null }                       # 尚无共享属性:各实现者 bindings 指到自己的 P 号,登缺口待合并
    actions: [A-042]
  implementers:
    - { id: N021, bindings: { 提交时间: P0xx }, verify: judged }
    - { id: N022, bindings: { 提交时间: P0yy }, verify: judged }
    - { id: N023, bindings: { 提交时间: P0zz }, verify: candidate }
  note: 客户行为的准入规则挂受理动作或本接口
  source: 归并审核 2026-xx-xx
  status: draft

接口进不了 L1 的常见原因是接地不齐而非接口本身:三个实现者里有一个的"提交时间"没有 verified 的词典行,整条接口规则就不能编译(6.3.5 不允许一族里一半能判一半不能判)。因此接口归并的工作清单,实际上等于"把这一族的共享属性接齐"。


第三章 · 数据字段匹配(第二阶段)

第一阶段产出的知识是"纸面"的:定义清楚、结构完整,但尚未与真实数据钉在一起。第二阶段由数据团队完成四类接地——即前文各表中标 【二期】 的字段。

3.1 四类接地一览

接地对象 落点 内容 判据/要点
对象 → 表 对象表的 grounding 主档表 + 身份列 主档表唯一:"身份列不重复且覆盖全体实例";身份列在其他表作外键出现的归链接;没有主档表的标 no_master 并登缺口
属性 → 列 C 对照词典 知识名 ↔ SDK 名 ↔ 数仓列 + 脱敏样例 一条属性可对多列;空词典=该知识不可用数据验证
链接 → 外键 关系表的 grounding 外键列或映射表 每一行=一条关系实例;基数由此可验证
动作 → 日志表 动作表 grounding 字段 执行记录所在表列 执行者/动作码/结果三件套所在

3.2 C 对照词典 crosswalk.yaml

C 对照词典与其相连构件 ❶ 指回属性(ref) 知识侧业务名 · 一条属性可多词条 ❷ 产品侧名 sdk_field:行方文档 / SDK 字段 ❸ 数仓侧列 dw_column + 脱敏样例 ❹ 运行时翻译 业务名 → 真实表列再查数 不经此表 对象 / 链接 / 动作各用自身 grounding 属性 · P业务名:"受理状态" SDK 字段acceptStatus 数仓列…acpt_sts 数据校验器用真实数据验知识 对象 · N / 链接 · Rgrounding 在各自表内 C · 对照词典 属性的接地登记(辅助) 一行=一个词条:三方一名 ≈属性→列映射 · 数据字典页 ❺ 核实进度 verify(只许数据角色推进) candidate 机筛提名 judged 人工确认 sampled 样例核对 verified 三方一致
C 对照词典与其相连构件

定义与判定

C 对照词典是属性的接地登记:一个词条=一条属性在三个世界里的名字对齐记录——知识侧的业务名("受理状态")、产品 / SDK 侧的字段名(acceptStatus)、数仓侧的库.表.列(fact_limit_req.acpt_sts)——并带一个"经数据核实"的进度章(verify)。它是辅助登记,不是构件(删掉它,对世界的描述不会少一块,只是知识暂时验证不了)。

用数仓的话说,它是属性语义层与字段物理层之间的桥接表:attributes.yaml 回答"这个属性是什么"(口径、来源、敏感……与数仓无关),crosswalk 回答"这个属性在哪"——一条属性可对多列(实时 / 日切 / 快照各一列),一列也可服务多条属性,典型的多对多,所以拆成独立的中间表:一行一个对应关系,各带样例与核实进度。修改、查找、分工都落在这张表上——数仓改名只动它,机筛提名只往它追加行,数据角色只有它的写权限。对象、链接、动作的接地是"一次定、少变"的结构事实,嵌在自身表的 grounding 字段里即可,不经此表。

类比:在 Palantir 中,对象类型背后有 backing datasource,每条属性都映射到该数据集的一列——属性与列的映射是本体接地的基本单位。C 词典就是这张"属性 → 列"映射表,只多了两样:中间夹一层产品 / SDK 名(三方对齐,因为行方文档与数仓命名不同),以及一个核实进度。对数仓同学它≈数据字典(data dictionary)里"业务名 ↔ 物理列"那一页,附加脱敏样例作证据。

由此推出词典的三个特征:

特征 含义 落到词典表
三方一名——一行钉住三个名字 业务名 / SDK 名 / 数仓列指的是同一个东西;一条属性可对多列(多个词条) ref · sdk_field · dw_column
只做翻译,不改知识 知识条目永远写人话;数仓改表名只改词典这一行,知识一个字不动 dw_column 可变,ref 不变
有证据、有进度 脱敏样例证明"真的是它";verify 四态只许数据角色推进 sample · verify · asOf · by

判定——什么进词典、什么不进:

为什么要这本词典,而不直接把表名写进知识里:

理由 说明
知识保持人话 规则写"授信额度不得超过 2000 万",而不是 "credit_limit ≤ 20000000"——业务同事能读,知识脱离数仓也独立成立
校验时充当翻译 用真实数据验证知识时,校验器现场翻词典,把业务名词解析成真实的库.表.列再去查数——没有词条,知识永远只是文字,验证不了
变更防火墙 数仓明年改表名,只改词典这一行,知识条目一个字不动、所有规则照常可验

相连关系(对应图中编号)

图中线 方向 含义
❶ 指回属性 词典 → 属性 ref:知识侧业务名——一条属性可对多个词条
❷ 产品侧名 词典 → SDK 字段 sdk_field:行方文档 / SDK 中的字段名
❸ 数仓侧列 词典 → 数仓列 dw_column:库.表.列;sample 为脱敏证据
❹ 运行时翻译 校验器 ⇢ 词典 校验知识时把业务名解析为真实表列再查数;无词条则该条知识不可验
❺ 核实进度 verify 四态 candidate → judged → sampled → verified,只许数据角色推进(3.3)

字段词典

字段 含义 取值/格式
id 词条编号 C + 三位序号
ref 知识侧:指回属性 P 号(❶)。对象与链接的接地各在其登记表的 grounding 内,不经此表 P 号
sdk_field 产品/SDK 侧字段名(❷) 文本
dw_column 数仓侧 库.表.列(❸) 文本
sample 脱敏样例值——证明"真的是它"的证据(账号类必须掩码) 文本
verify 核实进度(四态,❺) candidate | judged | sampled | verified
asOf / by 核实定格日 / 经手数据角色 日期 / 人名

verify 四态逐个说(只许数据角色推进):

值 含义 谁推进
candidate 机筛提名——"这一列像是它",尚无人确认 机筛自动产生
judged 人工确认——业务/数据同学看过,认定对应关系成立 人工判定
sampled 样例核对——抽真实值比对过(分布、空值率、格式都对得上) 数据角色
verified 三方一致——知识口径、SDK 定义、数仓实值全部对齐,词条正式收录 数据角色

样例(一个已收录词条 + 一个刚提名词条)

- { id: C011, ref: P003, sdk_field: acceptStatus,
    dw_column: fact_limit_req.acpt_sts, sample: "P / A / R",
    verify: verified, asOf: '2026-08-07', by: 数据同学 }

- { id: C012, ref: P002, sdk_field: behaviorScore,
    dw_column: cust_info.cscore, sample: none,
    verify: candidate }                     # 机筛刚提名,待人工确认

3.3 verify 核实状态机(全体接地记录通用)

所有接地记录——对象与链接的 grounding、词典行——共用同一套核实进度,且只许数据角色推进:

candidate(机筛提名)→ judged(人工确认)→ sampled(样例核对,词典专有)→ verified(三方一致)

它与知识条目自身的 status(draft/verified)相互独立:定义核实了不等于接地核实了,两个进度条各自推进——一个对象可以定义已 verified 而 grounding 还是 candidate,反之亦然。

3.4 DOC 文档登记 registry.yaml

出处锚的登记处(第一阶段起即使用)。文档上传即登记:DOC 编号、sha256 去重、上传人、关联切片;解析后切成带锚点的段落(如 DOC-2026-031#p5),全库构件的 source 指向这些锚——每条知识都能一键回到原文。

- { id: DOC-2026-031, title: 额度调整管理办法, sha256: 9f2a…,
    uploader: leo, date: '2026-08-07', slices: [额度成长], status: 已抽取 }

第四章 · 知识图谱

4.1 建成后长什么样

定义与判定

知识图谱是六张登记表的可视化编译产物:节点=对象、属性、动作、函数、接口的登记行,边=链接以及各表里互指的字段(宿主、写入方、target、host……)。它不另存数据——从登记表实时编译,改表即改图;点击任何节点应能回到它的登记行、出处锚与接地状态。

类比:登记表≈账本,图谱≈按账本自动画出的地图;Palantir 里对应的是 Ontology Manager 的对象类型关系图与 Vertex 的图探索视图——同样是从本体定义现算出来的,不是另一份数据。

由此推出图谱的三个特征:

特征 含义
只读、可再生 图上没有任何东西是"画上去"的,删了图重编译一模一样;要改图,改表
形状即约束 每种边只允许出现在特定颜色的节点之间(4.2 约束表);一条不该出现的边就是一条错数据
一图两读 结构读法看骨架(对象与链接),治理读法看橙色虚线(规则挂在哪、管着谁)

判定:"这张图上的东西能否在某张登记表里找到那一行?"找不到的不该出现在图上;反过来,登记表里已互指的关系(属性 writer 指向动作、动作 side_effects 指向属性)在图上只画一条边。

样例:提额业务线

下图是"提额"业务线建成后的样例(节点编号与第二章样例一致):

知识图谱案例 · 提额业务线 持有 发生于 宿主 宿主 宿主 读 写产物 写入 作用于(参数化) 挂载 挂载 挂载 实现 · 归并 客户N001 · 实体 贷款账户N009 · 实体 提额申请N021 · 事件 授信额度P001 · 事实 建议额度P004 · 推断 受理状态P003 · 枚举 额度评估模型F001 · 计算型 受理提额申请A-042 · 贷中管理 还款状态正常才收单F110 · 规则 · host=A-042 非大额 24h 内受理F120 · 规则 · host=IF01 大额 48h 内受理F121 · 与 F120 互斥 可受理 IF01 · 接口(申请类事件归并) 灰实线=链接 · 粉线=宿主 · 青线=动作作用于 / 写入 · 蓝线=函数读 / 写产物 · 橙虚线=规则挂载 · 灰虚线=实现接口
知识图谱案例 · 提额业务线

读图路径(按颜色):

看什么 图上
骨架(紫+灰) 客户 持有 贷款账户,提额申请 发生于 账户——三个对象由两条链接串起
状态(粉) 授信额度挂在账户上;建议额度、受理状态挂在申请上——每条属性一条粉线指回宿主
算值(蓝) 额度评估模型 F001 读 授信额度、写产物 建议额度(P004 来源=推断,writer=F001)
出手(青) 受理动作 A-042 作用于 "可受理"接口(参数化受理,一张卡管全部申请事件),写入 受理状态
划界(橙虚线) F110「还款状态正常才收单」挂在受理动作上(执行前置条件);F120「非大额 24h 内受理」与 F121「大额 48h 内受理」并列挂在"可受理"接口上——条件互斥、对全体实现者一次生效,没有"例外"
归并(灰虚线) 提额申请 实现 "可受理"接口;分期申请、提现申请实现同一接口即自动继承 F120 / F121

4.2 建造标准

颜色(六色定案,全平台一致):

构件 色 浅底 / 描边 / 深字(浅色模式参考值)
对象 N 紫 #EEEDFE / #534AB7 / #3C3489
属性 P 粉 #FBEAF0 / #993556 / #72243E
动作 A 青 #E1F5EE / #0F6E56 / #085041
函数 F · 计算型 蓝 #E6F1FB / #185FA5 / #0C447C
函数 F · 规则型 橙 #FAECE7 / #993C1D;边色 #D85A30
链接 R 灰(边色 #888780) 链接画成边,不画节点
接口 IF 灰虚线框(无填充) 第六类构件;虚线以示抽象类型——不背数据、不可实例化

同一构件按类型分色:计算型与规则型同属函数,但在图上必须一眼可辨"这是算值的"还是"这是划界的",故保留两色。

线样式:

样式 含义
灰实线 链接(对象↔对象);双端箭头=双向语义
粉实线 宿主(属性→对象)
青实线 动作的作用于(→对象 / 接口)/ 写入(→属性)/ 产出(→对象)
蓝实线 / 弧线 计算型函数的读(属性 / 对象→函数)/ 写产物(函数→属性 / 对象,弧线避让)
橙虚线 挂载(规则型函数→宿主:动作 / 属性 / 函数 / 接口)——虚线专属规则,一眼识别"这是约束不是结构"
橙点线(可隐藏层) 条件引用(规则型函数⇢refs 里的属性);默认隐藏,改口径查波及时打开
灰虚线 实现 · 归并(对象⇢接口)

图谱约束(自动校验,违反即数据有错):

  1. 灰实线只出现在 紫↔紫(链接两端必须是对象);粉实线只出现在 粉→紫(属性必有宿主对象);
  2. 青节点的边只有 作用于 / 写入 / 产出 三种;蓝节点的边只有 读 / 写产物 两种;青蓝之间无直接边(分工经属性中转,2.4 ❺);
  3. 橙节点必有一条挂载边,不允许悬空;挂载边终点只能是 青 / 粉 / 蓝 / 接口框;
  4. 灰虚线只出现在 紫⇢接口框;接口框本身不带粉线(接口不拥有属性值)。

第五章 · 执行纪律(供 LLM 遵照)

本章目的:LLM 处理知识分类时,遵照本章的判定流程与纪律,对输入的全部业务知识做一轮完整分类,归入第一至四章定义的架构。本章可独立作为系统提示词使用。

5.0 总纲

对象是骨架,属性是状态,动作和函数推动状态变化,规则给变化划界,接口把同形归并。任何一条业务知识拆开后只会是这六类构件之一(规则是函数的一个类型)。判定的目标不是贴标签,而是逼出这条知识缺失的部分(宿主、执行者、出处、条件边界)。你只做整理和追问,不做裁决、不编造出处。

5.1 六问判定流(按顺序,命中即停)

P1 带条件吗?(如果 / 当 / 超过 / 不得 / 必须 / 除非)
   → 是规则:登函数表,ftype=规则。追问:
     a. 宿主是谁?(约束哪个动作/属性/函数/接口)——答不出=知识未完成,禁止挂未建档的名字
     b. 条件里还引用了哪些构件?→ 登 refs(不含宿主);引用未建档的先立档
     c. 它是不是某条已有规则的特例?→ 不设例外机制:写成独立条目,把适用范围写进条件里,
        并回改被特化的那条,使两条条件互斥;范围重叠而结论不同=冲突,登记不裁决

P2 说的是一个操作吗?执行主体是谁?
   → 机构操作者(审批/调额/催收/冻结/核销)= 动作。按六要素建卡。
     ⚠️ category 填职能域——执行主体隶属的业务职能(授信审批 / 贷中管理 / 交易管控 / 催收 / 账务 / 客服 …,开放清单:
        找不到合适的可新增,按执行主体归属命名、先查同义);对客/对内选标 facing;系统自动执行标 implicit
     ⚠️ 与函数的分界:只出数、只判定、不改状态的不是动作(转 P1/P3);真正改状态的才是动作
   → 客户(支用/还款/申请)= 对象(事件),转 P5 建档。
     ⚠️ 客户行为的准入校验是规则,宿主=机构对应的受理动作(参数化;系统自动执行也建档,标隐式)
   → 大词(审批/重组/开户)先拆:模型算分=计算型函数、阈值裁决=规则型函数、核准落地=动作;
     客户申请=事件对象、新造之物=产物对象

P3 它是算出来的吗?(评分 / 分群 / 比率 / 窗口聚合 / 模型输出)
   → 是函数:登函数表,ftype=计算。只立壳(id+名+outputs)。追问:产物落到哪个字段?
     ⚠️ 函数输出落库后是属性:来源=推断,写入方指回函数——防泄漏的字段级根源
     ⚠️ KS/精度/提前量是函数版本元数据,不单独成条
     ⚠️ 函数只出数不做主:见到"模型直接决定",追问阈值(规则)与生效动作在哪

P4 它描述某个东西的状态或口径吗?
   → 是属性。先答宿主(答不出先回 P5 立对象),再打五轴:
     来源(事实|推断|构造)/ 结构(标量|枚举|结构组|集合)/
     写入方(客户提交|A号|F号|时间驱动|null)/ 归属(专有|共享)/ 敏感(明文|脱敏|禁展示)
     ⚠️ 结构=枚举 → 取值逐个登进取值字典;=结构组 → 整组登记,禁止逐位散登
     ⚠️ 建议值与核定值是两个属性:模型吐的(推断/写入方=F)≠ 动作核定的(事实/写入方=A)
     ⚠️ 快照日期(ds / rpt_date 等)是数据机制元数据,不是业务属性
     ⚠️ 属性只登当前值:一段会变化的历史(额度调整、状态变更)不塞进属性,立事件对象(product_of=写它的动作)

P5 它有自己的身份标识吗?(有主键 / 编号,能逐个指认;有生命周期)
   → 是对象。定二分(实体|事件),记身份标识;若是某个动作的产物(查征信→征信快照、重组→新借据),填 product_of=该动作号。
     ⚠️ 标识字段揭示对象:出现新标识符=存在新对象(人的标识与账户的标识是两个对象)
     ⚠️ 别被表结构骗:对象可能藏在别的表的某一列里

P6 它连接两个对象吗?
   → 是链接。记动词、方向、基数。kind 不填(默认 structural)。
     ⚠️ 两端必须都是已建档对象;属性/动作/函数不能当端点

5.2 动作拆并纪律

大词先走时间线:数几个执行主体、停几站,逐条对表——

判据 拆(命中任一即拆) 并(命中即并)
执行主体 中途换人 全程同一执行主体
条件检查时点 不同步骤各查各的 同一套条件、一次检查
中间态 中间能停留、可查询 一步到位、无中间态
可逆性 各步撤销方式不同 同一种撤销方式
产物 各步产物不同 同形状 × N——参数化合并,差异进 params

口诀:一张卡=一个执行主体+一个检查时点+一种撤销方式。动作须唯一:一个执行主体一张卡(按名称+执行主体、作用目标、产物查重)。拆错不要紧,审核复核。

5.3 填写纪律

  1. 三态:知道→填值;确认无→填 none(合法知识);不知道→留白(缺口)。禁止为凑格式编造。
  2. 动作卡整卡填齐:六要素+conditions 全填,空腔显式 none;只有 grounding 留给第二阶段。
  3. 函数分型填写:计算型只立壳(id+名+outputs),六型、inputs、versions 不追问;规则型第一阶段填齐(语句+宿主),条件边界写进语句。
  4. kind 与接口不生产:链接不填 kind;永远不主动创建接口——发现同一条规则要写第二遍时,仅提示"此处或可归并接口,交审核"。
  5. 每条知识必须锚出处:能命中原文→ DOC-ID#pN;口述→记录原话并标手填。无出处只能存草稿。
  6. 引用用 ID:宿主、写入方、两端一律填已建档构件 ID;找不到→先立档(对象或骨架卡)再引用,禁止裸名字。
  7. 发现矛盾不改写:与已有知识冲突时引导登记冲突条目,禁止静默覆盖任何一方。规则条件范围重叠且结论不同,同样按冲突登记,不做默认裁决。
  8. 【二期】【三期】字段不填:grounding、crosswalk 留空(六张表一致),那是数据团队的职责;expr、allowed_states、when / transitions 等可判定字段也不填——它们只补在 verified 条目上,由 use case 小组按第六章完成,LLM 分类阶段不写。

5.4 输出模板(七节,对应存储路由)

## 1. 对象表(按实体 / 事件分节)
| 对象 | en | type | 产物于(动作号) | 定义 | 身份标识 | 出处 |
## 2. 属性表
| 属性 | en | 宿主 | 口径 | 来源 | 结构 | 写入方 | 归属 | 敏感 | 出处 |
## 3. 关系表
| 链接 | en | 源对象 → 目标对象 | 基数 | 出处 |
## 4. 动作表(整卡:六要素+条件;含受理模式与隐式动作)
| 动作 | en | 职能域 | 对客/对内 | 隐式 | 执行者 | 作用对象 | 产物 | 参数 | 副作用 | 可逆性 | 出处 |
  每个动作附条件行:| 门类 | 条件语句 | 出处 |
  (每行入函数表规则型:host=本动作、gate=门类;动作表 conditions 只引用其编号)
## 5. 函数表 · 计算型(壳)
| 函数 | en | 产物落到哪个字段/属性 | 出处 |
## 6. 函数表 · 规则型
| 规则 | en 短名 | 条件语句(含完整适用范围) | 宿主(已建档构件 ID) | 门类(宿主为动作时) | 引用构件(refs) | 出处 |
## 7. 接口表——不填(后续归并阶段归并)

5.5 易混边界速查(13 条)

# 陈述 归类 关键一步
1 逾期天数 属性 存着的(写入方=时间驱动)
2 180 天逾期次数 函数(计算型) 算出来的
3 风险分群 计算型函数产物→属性 标推断+写入方=F
4 客户还款 对象(事件) 执行主体=客户
5 机构坐席外呼 动作 执行主体=机构操作者
6 利率 3% 属性=规则参数 双登记(属性表+函数表规则型)
7 还款承诺(PTP) 对象 动作的产物
8 白名单放行 函数(规则型) 独立条目:适用客群写进条件,与通则条件互斥
9 KS 0.536 函数版本元数据 不入图谱
10 在贷重组 大词拆三件套 申请=事件、执行=动作、新借据=产物、门槛=规则
11 建议额度 vs 初始额度 两个属性 函数产建议(推断/F),动作做核定(事实/A)
12 初始额度 · 当前额度 · 额度调整 两个属性+一个事件对象+一个动作 初始额度=属性(写入方=授信审批动作,之后不变);当前额度=属性(写入方=调额动作,被覆盖);额度调整记录=事件对象(一次一条,product_of=调额动作);调额=动作。历史不塞进属性,沿"账户→调整记录"链接按时间排
13 客户登录 · APP 定位 对象(事件) 客户发起,不是动作;不带 product_of(对照:机构查征信=动作,征信快照=其产物)

5.6 完整性校验(提交前逐条过)


第六章 · 可判定与编译(第三阶段)

本章目的:前两期把知识登记清楚并钉到数据上,产出 L2(可引用);本章定义第三期——把已核实的知识补成机器可执行的形式、过闸门、编译成生产只读的产物,产出 L1(可判定)。本章同时规定动作执行的契约(6.8)与数据写回的规范(6.9)。 本章的边界:本章只定义"知识如何变成可执行、产物长什么样、生产怎么依赖它";判定服务与调度服务的工程实现、各业务系统的接入代码不在本书内,以 6.7 / 6.8 的契约为接口与科技对接。 参照:Palantir 的 Action 定义(Parameters · Submission criteria · Rules · Side effects)、资源状态(experimental / active / deprecated)、Ontology 元数据 → OSDK 代码生成、AIP Agent 工具配置。本章把这几样机制落成登记表字段与产物;与 Palantir 的差异在 6.7 说明。

6.1 三级状态与三层产出

定义与判定

每条登记条目的 status 从两态扩为三态(退役另计):

status 级别 含义 谁能依赖它 谁推进
draft — 草稿:登记了但未核实 无人 填写人
verified L2 · 可引用 三方对齐已核实:定义、结构、出处齐全;二期接地视表而定 人、LLM、平台页面、叙事 收口人确认
active L1 · 可判定 可判定字段齐全并通过 6.4 全部闸门;已进编译,生产依赖 编译器、判定服务、Agent 工具、数仓视图 本体管理员手动切换(机器只报"已具备切换条件")
retired — 退役(≈ Palantir deprecated):不再使用,保留记录与去向 无人;编译器跳过 收口人 + 管理员

active 是一个承诺,不是一个计算结果。 机器可以算出"这条已满足 L1 全部条件"(6.4),但把它切成 active 意味着向生产承诺:编号与名称冻结、口径不再静默变更、下游可以 pin 版本依赖它。承诺由人做,所以 active 只能由本体管理员切换;平台把"具备条件"作为派生标记(level = L1-ready)展示,不替人切。

由此推出 active 条目的三条保护(对应 Palantir 对 active 资源的保护:不能删除、API name 不能改):

保护 内容 违反时
不可改名删除 id、zh / en、宿主、端点、状态轴取值不得直接修改或删除 合规检查 error;要改先降级到 verified,并登记降级原因与替代条目
不可静默改口径 expr、allowed_states、transitions、params_schema、writes 的任何修改 = 一次新版本(6.6),须走 PR 审批合入 未经审批的修改不进编译
级联 对象降级 / 退役时,其属性、挂在它上的动作与规则同时失去 L1 资格;状态轴属性降级时引用它的 allowed_states 同时失效 编译闸门挡回,直到相关条目处理完

三层产出与谁读什么

① 知识域(人写、审批合入)      登记表 YAML · 唯一事实源 · 三态 status
        │ 合入 master 触发
② 编译域(CI 自动、人不介入)   只读 active 条目 → 6.4 闸门 → 6.5 产物(带版本号 + 校验和)
        │ 按 pin 住的版本号分发
③ 生产域(只读产物,永不反写登记表)
        评分管线 · 数仓视图 · 判定/调度服务 · Agent 工具 · 速查卡
        │ 发现口径错 → 回到 ①(改登记册,不改代码)

生产读的是产物,不是登记表;登记表可以每天改,产物按版本发布。这条分离是三期的核心纪律。

6.2 条件树规范(受限表达式)

定义与判定

条件树是本书规定的唯一可判定表达形态:一棵由 all / any / none 嵌套的结构化条件树,叶子只做"已接地属性 / 动作参数 / 常量"之间的比较。它不是代码、不是自由表达式字符串——沿用 Palantir submission criteria 的形态(条件按 all / any / none 组合,每个根条件配失败提示),原因有三:机器校验"变量是否接地"只需查字段不必解析语法;同一棵树可确定性地翻译成 SQL、JSON、Python 等目标方言;业务同事能在表单里逐条填,不必写代码。

规则的人话语句 statement 仍是正本;expr 是它的可执行翻译。两者不一致时以 statement 为准并登记冲突(X),不许改 statement 去迁就 expr。

结构

expr:
  all:                                   # all | any | none,可嵌套
    - { var: P014, op: ">=", value: 30 }
    - { var: P014, op: "<=", value: 90 }
    - any:
        - { var: P063, op: "=", value: true }
        - { var: P063, op: "is_null" }
fail_msg: 账户逾期天数须在 30–90 天内才可进入逾期重组       # 每个根条件必填,人话

叶子字段:

字段 含义 取值 / 规矩
var 左操作数:属性号 只能是 P 号,且该属性的 crosswalk 至少有一条 verify=verified 的词条;否则该规则不可编译(not_compilable),停留 L2
op 运算 白名单:= != < <= > >= in not_in between is_null not_null days_since contains(枚举 / 集合成员)
value 右操作数:常量 字面量或取值字典里的码值;枚举型属性的 value 必须在该属性 values 内
param 右操作数:动作参数名 只在规则宿主为动作时允许;名字必须在该动作 params_schema 内
var2 右操作数:另一属性 同 var 约束;用于"实际还款 ≥ 应还金额"这类属性间比较
offset 常量偏移 仅对数值 / 日期允许 + - 常量(如 到期日 + 3 天);不允许其他算术

不允许:自定义函数、跨对象遍历(条件只看宿主对象及其属性;跨对象条件先立计算型函数把值落成属性)、任何有副作用的操作、引用实例数据以外的上下文(时间用 days_since 相对表达,不写绝对日期)。

三态填写沿用 1.6:expr 留白=尚未翻译(缺口,停留 L2);expr: none=确认此规则不可机器判定(如"催收话术不得含威胁性措辞"),标 manual: true,编译时进 card.md 不进 ontology.json。

样例(L089 逾期重组窗口,宿主 A-10)

- id: L089
  statement: 逾期分支须账户 OVERDUE_DAYS ∈ [30, 90] 双闭区间才展示/受理逾期重组入口与预付;OVERDUE_DAYS 缺失→fail-closed
  host: A-10
  refs: P014·P063
  expr:
    all:
      - { var: P014, op: "not_null" }            # 缺失即 fail-closed:not_null 放第一条
      - { var: P014, op: "between", value: [30, 90] }
  fail_msg: 逾期天数不在 30–90 天窗口内(或缺失),不可受理逾期重组
  severity: block
  status: active

编译器由 expr 自动抽取 expr_vars: [P014],不手填;refs 里有而 expr 未引用的属性(P063)提示"条件未覆盖",作 warn。

6.3 各表可判定字段

本节字段全部标 【三期】;一期、二期字段不动。

6.3.1 规则型函数(rules.yaml)

字段 含义 取值 / 规矩
expr 条件树 6.2;宿主为动作时在动作提交前求值,宿主为属性时在值写入时求值,宿主为计算型函数时在函数运行前求值,宿主为接口时展开到各实现者后按上述三种时点求值(6.3.5)
fail_msg 被拦下时给人看的一句话原因 必填(expr 非 none 时);进判定服务的返回与审计日志
severity 拦截强度 block(不合法即拒绝)| warn(放行但记录)——"须 / 不得"默认 block,"宜 / 建议"为 warn
manual 不可机器判定标记 true 时 expr 须为 none;进速查卡,不进判定
expr_vars 条件引用的属性号 派生,编译器从 expr 抽取;与 refs 比对出"条件未覆盖"提示

6.3.2 动作(actions.yaml)

字段 回答的问题 取值 / 规矩
allowed_states 在宿主对象的哪些状态下允许执行 [{ axis: P号, values: [码值…] }];axis 必须是标了 state_axis 的属性,values 必须在其取值字典内。多个 axis 之间为 all
precondition 执行前置条件的完整条件树 派生,不手填:编译器把 allowed_states 与 conditions 中各规则的 expr 合取而成。只属于本动作的条件也先立规则再挂 conditions(规则正本永远在函数表,2.5)
params_schema 每个参数的类型与允许范围 [{ name, type, ref | values | range, required, default }];允许值优先引用取值字典(ref: P号,等价于 Palantir 的 value type 复用),不在字典里的才自写 values / range
writes 执行会做哪些编辑 [{ op: modify | create | link | unlink, target: P号 | N号 | R号, from: param:名 | const:值 | context:user | context:now }];是 side_effects / product 的结构化版本——三者互指:writes 里每个 modify 的 P 号须出现在 side_effects,每个 create 的 N 号须出现在 product,反之亦然
dispatch 执行去向 { system, entry: api | webhook | file_manual, payload_map: {参数名: 系统字段}, human_gate: required | optional | none, ack: 回执方式, callback: 结果回传方式 };不可逆动作 human_gate 必须为 required
metrics 怎么判断做得好不好(feedback 的结构化升级) [{ name, definition, window, columns: [C号…], direction: higher_better | lower_better, threshold? }];columns 指向已 verified 的词典行;旧 feedback 文字保留作说明,metrics 为 none 表示确认无观测口径(本身是缺口,登 G)

样例(A-48 上传重组名单与方案,三期字段;一期字段略):

- id: A-48
  zh: 上传重组名单与方案
  target: N050·N051·N052·N005
  side_effects: P143·P138·P140·P141·P139
  conditions: L286
  reversible: 可逆(重新上传覆盖)
  # —— 三期 ——
  allowed_states:
    - { axis: P007, values: [O] }                      # 账户账单状态 = 已逾期
    - { axis: P011, values: [NONE, LOCK_PART] }        # 冻结态:未锁定或部分冻结
  params_schema:
    - { name: 名单账户, type: object_set, ref: N002, required: true }
    - { name: 本金减免比例, type: number, range: [0, 0.5], required: true }
    - { name: 可选期数, type: enum, values: [3, 6, 12], required: true }
    - { name: prepayRequired, type: boolean, default: false }
    - { name: prepayAmount, type: number, range: [0, null] }
  writes:
    - { op: create, target: N050, from: param:名单账户 }
    - { op: modify, target: P143, from: const:true }
    - { op: modify, target: P139, from: const:UNACTIVE_PLAN }
  dispatch:
    system: 重组配置后台
    entry: file_manual                                 # 现阶段只能人工上传:产出校验过的文件 + 执行记录号
    payload_map: { 名单账户: acct_no, 本金减免比例: principal_waive_pct, 可选期数: tenor_options }
    human_gate: required
    ack: 上传成功回执(人工登记)
    callback: A-10 受理结果回流(客户确认/拒绝/超时)
  metrics:
    - { name: 名单确认率, definition: 客户确认方案户数 / 名单户数, window: 14d, columns: [C0xx], direction: higher_better }
    - { name: 确认后30天再逾期率, definition: 确认后 30 天内再次逾期户数 / 确认户数, window: 30d, columns: [C0xx], direction: lower_better }
    - { name: 减免让利额 vs 实际回收, definition: 累计减免金额与确认后实际回收金额, window: 60d, columns: [C0xx], direction: higher_better }
  status: verified                                     # 待 metrics 的 columns 接地后可切 active

6.3.3 状态轴(attributes.yaml 的三期字段)

本书不新建状态表:状态就是某个枚举型属性的取值,宿主、取值字典、写入方都已经在属性上,状态机字段直接挂在该属性上。

字段 含义 取值 / 规矩
state_axis 标记此属性承担生命周期状态 true;一个对象可有多个状态轴(账户有账单状态、冻结态、开通状态),彼此正交
when 状态判定:从其他属性算出当前处于哪个取值 [{ value, expr, priority }],按 priority 顺序求值、命中即停,末尾必须有 default 兜底;仅对 origin=推断的状态轴填(事实型状态由系统写入,不需判定);expr 变量须接地
transitions 迁移表 [{ from, to, via: A号 | N号(事件) | time:表达式, irreversible?: true }];闭世界:未列出的迁移即非法迁移;终态标 terminal: true

判定纪律:每个取值至少出现在一条迁移的 from 或 to 中(否则是孤儿状态);不可逆的 irreversible 必须显式标;动作发起了但对方尚未响应的那段时间必须是一个登记的取值("名单已上传·未确认"这类中间态不许隐含在别的状态里——这是运营最该跟进的窗口)。

样例(P007 账户账单状态,示意值,登记时以实际编号为准):

- id: P007
  zh: 账户账单状态
  host: N002
  structure: 枚举
  values: [{value: U, label: 未出账}, {value: N, label: 已出账}, {value: F, label: 已还清}, {value: O, label: 已逾期}]
  # —— 三期 ——
  state_axis: true
  when: none                                           # 事实型:由账务系统写入,不推断
  transitions:
    - { from: U, to: N, via: N045 }                    # 账单出票事件
    - { from: N, to: F, via: A-63 }                    # 还款冲抵
    - { from: N, to: O, via: "time: days_since(P0xx 到期日) >= 1 且未还清" }
    - { from: O, to: F, via: A-63 }
    - { from: F, to: U, via: "time: 下一账期开始" }

6.3.4 对象、链接、计算型函数

这三类没有自己的可判定字段,但有进 L1 的前提:

构件 L1 前提
对象 identity 非空;grounding.verify = verified(主档表 + 身份列);否则其属性的条件树无法落到"哪一行"
链接 grounding 已填(外键列或映射表),否则跨对象的写入(writes 里的 link)不可执行
计算型函数 inputs / outputs 全部指向已接地属性;versions 至少一条且 pin 住(生产读固定版本,不读 latest)

6.3.5 接口(interfaces.yaml)

接口没有自己的可判定字段,但挂在接口上的东西要在编译时展开到每个实现者,因此有三条规定:

规定 内容
规则展开 宿主为接口的规则(2.5 "一条管一族"),其 expr 里的 var 写接口声明的形状属性;编译器按 implementers 逐个展开,把形状属性映射成该实现者的具体 P 号,得到 N 份实例化的 expr。求值时点随实现者所在的动作 / 属性写入而定
进 L1 的前提 implementers 清单齐全且每个实现者 active;每个实现者对形状声明的每条属性都有 verify=verified 的词典行——任一实现者接不了地,整条接口规则不进编译(不允许"一族里一半能判、一半不能判")
动作与状态 allowed_states 的 axis 只能是具体对象的状态轴,不能写接口(状态值在实现者身上,接口不拥有属性值,2.6);动作 target 为接口时,params_schema 的 ref 同样先展开到实现者再校验

现状说明:登记表目前尚无 interfaces.yaml(1.5:一期不填、归并阶段产生),缺口表中的"接口候选"仍为 open。接口的三期规定在归并完成前不产生编译产物,但条件树的写法从现在起就按本节执行,避免归并后返工。

6.4 编译闸门(条文编号供合规检查引用)

编译只读 active 条目;下列闸门任一不过,整批挡回,不出产物。编号 6.4.x 与合规检查页的 clause 一一对应。

条文 闸门 判据 严重度
6.4.1 出处齐 每条 active 条目 source 非空且锚可命中 DOC 段落锚存在 error
6.4.2 变量已接地 expr / when / metrics 引用的每个属性有 verify=verified 的词典行 crosswalk 查表 error
6.4.3 无死规则 expr 不恒真不恒假;同宿主规则的条件范围重叠且结论不同的已登冲突并裁决 区间分析 + X 表状态 error
6.4.4 状态闭世界 when 有 default;transitions 无孤儿取值;irreversible 显式;每个状态轴至少一条迁移 图连通性 error
6.4.5 动作一致 allowed_states 的 axis 是状态轴且 values 在字典内;writes ↔ side_effects / product 互指;params_schema 的 ref 存在;不可逆动作 dispatch.human_gate=required 字段互查 error
6.4.6 active 保护 与上一版本比对:active 条目未改名、未删、未改宿主;口径变更走了新版本 diff error
6.4.7 冲突阻断 涉及 active 条目的 X 冲突全部 resolved X 表状态 error
6.4.8 破坏性变更标记 本次相对上版是否含破坏性变更(6.6),若含则版本号 major 必须递增 diff + manifest error
6.4.9 条件覆盖 refs 里有而 expr 未引用的属性 集合差 warn
6.4.10 观测缺口 active 动作 metrics 为 none 字段 warn

6.5 编译产物与 manifest

产物清单

每件产物都是从 active 条目的特定字段确定性生成——同一份登记表编译两次得到字节相同的产物;产物里没有任何手写内容(禁止手改,改了下次编译即被覆盖)。

产物 从哪些字段生成 谁读 用途
ontology.json 对象(id / type / identity / grounding)、属性(五轴 + values + crosswalk + 状态轴 when / transitions)、链接、规则 expr + fail_msg + severity、动作 allowed_states / precondition / params_schema / writes 评分管线、判定服务、校验器 状态推断 + 动作守门
states.sql 状态轴的 when(按 priority 展开为 CASE WHEN)+ crosswalk 的真实列名 数仓 v_lifecycle_state 视图 全库一个状态口径;每日质检基线
agent_tools.json use case 的 agent_touchpoints + 动作 allowed_states + 对象 / 属性可见范围 + dispatch.human_gate 策略 Agent Agent 只能查配置范围内的对象与属性、只能调当前状态下合法的动作;写操作按 human_gate 要求人确认
dispatch_map.json 动作 dispatch 调度服务 动作 → 目标系统、入口、载荷映射、回执方式
card.md 全部 active 条目的人话字段(statement / definition / 迁移表 / metrics 定义),含 manual 规则 运营、风控、新人 速查卡;自动生成,禁止手改
manifest.json 版本号、源提交号、编译时间、每件产物的 sha256、闸门报告(每条 6.4.x 的通过 / 命中数)、active 条目清单 所有消费端 pin 版本;回答"我依赖的是哪一版"

产物落在 dist/ontology/v<major>.<minor>.<patch>/,一版一目录,旧版不删。

与 Palantir 的对应

ontology.json ≈ Ontology Full Metadata(唯一源的机器可读版);agent_tools.json ≈ AIP Agent 的工具配置(Object query 的对象 / 属性范围、Action 工具的确认开关);manifest 版本 ≈ OSDK 包版本。states.sql 与 dispatch_map.json 是 Palantir 没有的——因为它有常驻运行层,状态与去向在运行时算;我们是只读产物,必须提前编译(6.7)。

6.6 版本与发布纪律

版本位 递增条件(相对上一版) 例
major 破坏性变更:active 条目删除 / 改名 / 改宿主;状态轴删取值或删迁移;params_schema 收紧(范围变小、必填变多);writes 删项;allowed_states 收紧 重组窗口从 [30,90] 改为 [45,90]
minor 兼容新增:新 active 条目;新状态取值或新迁移;params_schema 放宽;新 metrics 新增"已上传·未确认"中间态
patch 不改判定结果的修订:fail_msg 措辞、definition、card.md 文案、metrics 的 definition 说明 改一句失败提示

纪律:

  1. 发布=合入 master 触发 CI 编译;cloud-migration 等工作分支只做草稿与预览编译(产物标 -preview,生产不得使用)。
  2. 生产按 manifest 里的版本号 pin,不拉 latest;每条信号、每条写回都带 ontology_version(6.8 / 6.9)。
  3. 回滚=把 pin 指回旧版本号,不回退登记表;登记表只前进。
  4. major 变更须在发布说明里列出受影响的消费端与迁移指引;6.4.8 闸门强制。

6.7 运行层演进:A 编译产物 → B 判定与调度服务 → C 全量运行层

Palantir 的 Ontology 是一个常驻运行层:应用的读走它(对象由 backing dataset 支撑)、写走它(Action 提交时现场评估 submission criteria 并写回)、变化被它感知(Automate 监控属性变化触发效果)。因此 Palantir 不登记状态迁移——迁移在运行中"涌现"。

我们的知识层与 Palantir 同构,运行方式分三档演进;三档读的是同一份登记表与同一套产物,区别只在谁来执行判定:

档 形态 Ontology 在哪 进入条件
A · 编译产物(本轮) 各系统在部署时嵌入产物,各自判定;状态由 states.sql 事后算;非法迁移靠每日质检事后发现 不在请求路径上 第六章定稿;首批条目 active;M7 编译跑通
B · 判定与调度服务(use case 的目标形态) 无状态在线服务:接收"名单 + 动作 + 参数 + 各户当前属性值",返回状态、allow / deny 与原因、去向;按 dispatch 发信号;写执行记录与审计。站在写路径上,不站在数据路径上:不存客户数据、不查业务库、不改造业务系统 在写路径上(每个受管动作经它) 知识就绪(use case 涉及条目 active);服务有独立托管(不与知识编辑平台同进程);目标系统暴露入口;6.8 契约与科技确认
C · 全量运行层(远期) 对象由数据集支撑、读写都经 Ontology、变化实时感知 在读写路径上 实时数据通道;科技改造各系统写入口;平台持有客户数据的安全与合规审批;红线改写

状态迁移在三档里都显式登记(6.3.3)。A 档把迁移表编译成 SQL 与 tools_by_state;B 档在线读同一张表现场判;C 档也不例外——涌现式的代价是中间态会被整个漏掉("名单已上传·未确认"曾经就是这样漏的),显式闭世界才能做孤儿状态闸门与非法迁移探测。Palantir 自己也把"状态=X 才允许"写在每个 Action 的 submission criteria 里,只是散在各动作上;本书把它收拢成状态轴上的一张迁移表,再编译回各动作的 allowed_states。

B 档的判定服务不是 C 档的替代,而是它的内核:先接收调用方递来的值做判定,等实时数据通道与写回机制建好,再让它自己取数、自己执行编辑,即升级为 C 档。

6.8 动作执行契约

B 档下每个受管动作的完整生命周期,以及各环节 Ontology 提供什么、要求什么:

① 意图     调用方(策略 / 模型 / 人)递交:动作号 · 参数 · 目标户清单(含各户状态相关属性的当前值)· 调用方标识
② 判状态   按状态轴 when 算每户当前取值(事实型状态直接取递来的值)
③ 判合法   allowed_states → precondition(含 conditions 各规则的 expr)→ params_schema;任一不过 = deny + fail_msg
④ 定去向   按 dispatch 得到目标系统、入口、载荷映射
⑤ 人工闸门 human_gate=required 的动作:审批人看到"合法清单 + 被拦清单及原因",批准后才进 ⑥
⑥ 发信号   向目标系统发指令(api / webhook / 生成待上传文件);entry=file_manual 时产出校验过的文件 + 执行记录号,由人上传
⑦ 回执     目标系统 ack(成功 / 失败 + 原因)
⑧ 结果     目标系统 / 客户侧结果按 callback 回流;按 metrics 口径观测

信号与记录的字段

字段 含义 规矩
instance_id 执行记录号,幂等键 每次意图一个;重发同一 instance_id 不重复执行
action_id / params 动作号与参数 参数经 params_schema 校验后的规范值
targets 目标户清单 每户带状态判定结果;被拦的户单列,各带命中规则号 + fail_msg
ontology_version 判定所依据的产物版本 必带;审计与回放的依据
decided_by / approved_by 判定服务实例 / 审批人 人工闸门的执行人与时间
dispatch 去向、入口、发送时间 同 dispatch_map
ack / result 回执与结果 回流后写回(6.9)

纪律

  1. fail-closed:判定服务不可用、产物版本缺失、任一必需属性值缺失时不发——宁可延迟,不错发。
  2. 不可逆动作强制人工闸门(6.3.2 dispatch.human_gate=required);Agent 发起的写操作按 agent_tools.json 的确认要求执行,与 Palantir Action 工具的"执行前需用户确认"同义。
  3. 执行记录是本体里的事件对象(product_of=该动作),有自己的状态轴:已提交 → 已批准 → 已发送 → 已回执 → 已观测(失败 / 拒绝为分支终态)。所有动作的中间态都落在执行记录上,不再散落。
  4. 影子模式:一个 use case 首次接入时,判定与路由照做、信号只记不发,与现行流程比对被拦清单,口径核对无误后再切真发。
  5. 每条判定(allow 与 deny)都写审计日志:instance_id、户、命中规则、fail_msg、版本号。

6.9 写回规范

定义与判定

写回是本体产物落入数据世界的过程:执行记录、判定结果、策略取值、执行回执、观测指标写入本体自有的写回库,再物化进数仓供分析与下一轮使用——对应 Palantir 的 Action 编辑进 writeback dataset 并物化回数据底座。

一条线必须划清:写回 ≠ 反写业务系统的库。写回的目标只有本体自己拥有的存储;评分、审批、触达、账务系统的表,本体一行不碰。这样"业务系统不改造"与"数据可写回"同时成立。

三条原则

  1. 先登记,后写回:任何写回的字段都必须先是登记表里的构件——执行记录、拦截记录、名单、回执结果各立对象或属性,writer 指回执行它的动作 / 函数,origin 标清事实还是推断,带出处。没登记的东西不许写回;这是本体写回与"随便落一张表"的本质区别,也是回流数据能进下一轮分析而不污染模型的保证。
  2. 两层落点:本体写回库(服务实时写,含全部中间态)→ 每日物化到数仓的本体专属命名空间(如 ontology_wb.*),数仓侧只读。
  3. 每条写回带 ontology_version 与 instance_id,任何一条回流数据都能回答"按哪一版口径、哪次动作产生的"。

四类写回场景

类 场景 写什么 谁写(登记为) 谁读
① 动作留痕(事实) 执行记录 动作号、参数、户清单、版本号、生命周期状态 调度服务(系统执行的动作) 每日质检、审计、看板;中间态跟进
拦截记录 被拦户 + 命中规则号 + fail_msg + 版本 判定服务 非法迁移探测;规则命中率;发现规则没落地 / 写错 / 有绕过
人工闸门记录 审批人、批准 / 否决、原因、覆盖了哪条规则 审批动作(人) 追溯"谁批的";override 频繁的规则回到知识层改口径
路由记录 发到哪个系统、入口、ack 时间 调度服务 排障、跨系统对账
② 决策取值回流(推断) 本轮策略参数 被选中、减免比例、期数、预付门槛、渠道、时点 上传名单类动作(如 A-48) 下一轮分析;进模型特征前须过 2.4 干预痕迹审查
名单成员标记 is_in_list、批次号、上轮参数 同上 对照分组、去重
模型分与分层 分数、概率、客群段 计算型函数 F(origin=推断) 策略圈池、回测
③ 执行结果与响应(事实,来自回执) 触达结果 送达 / 接通 / 回复分类 触达系统回调 → 通知事件的属性 渠道效果、四旋钮调优
客户响应 确认 / 拒绝 / 超时未响应(如 A-10 结果) 受理动作(系统) 状态迁移;中间态跟进名单
系统执行结果 成功 / 失败 / 生效时间 目标系统 ack 执行记录状态推进;重发判断
④ 观测回流(计算) 按 metrics 算出的结果 确认率、30/60 天再逾期率、减免 vs 回收,挂在执行记录上 计算型函数 F,按 metrics 的 window 跑 策略迭代、看板、"做砸了"的判定
状态快照 每户每日状态轴取值 states.sql 视图物化 / 判定服务 全库一个口径;迁移探测基线

执行记录对象模板

- id: N0xx                                   # 编号由发号器发放
  zh: 动作执行记录
  en: ActionInstance
  type: 事件
  product_of: A-48·A-39·…                     # 凡走 6.8 契约的动作都产它
  identity: instance_id
  definition: 一次受管动作的提交、判定、发送与回执的完整记录
  grounding: { dw_table: ontology_wb.action_instance, identity_col: instance_id, verify: judged }
# 其属性:执行状态(状态轴,取值 已提交/已批准/已发送/已回执/已观测/失败/拒绝)、动作号、参数快照、
# 目标户数、被拦户数、ontology_version、approved_by、sent_at、ack_at —— 各自 writer 指回调度 / 审批 / 回执动作

6.10 use case 辅助登记(usecases.yaml)

use case 是推动条目走完三级的组织单位(1.4):一个真实决策 + 它闭环所需的构件清单 + Agent 在链路上的查阅点。它是辅助登记(删掉它,对世界的描述不会少一块),不是第七类构件;结构沿用切片 / 业务段的"成员清单 + 叙事",多四个字段。

字段 含义 规矩
key / title / decision 编号(U+序号)、名称、一句人话决策 decision 须所有参与者能复述,如"今天推谁、用哪个渠道 / 话术 / 时点"
sections 四步叙事:发现 → 决策 → 动作 → 反馈,各步按"事件→动作→函数→产物"语法写核心链路 只引用活跃构件号;与业务场景叙事同一套渲染与校验
members 成员清单 [{ id, role: 提名 | 已确认 | 已剔除, by, at }]——AI 提名后人工逐条确认;只有已确认成员计入就绪度
not_in_ontology 明确不进本体的策略层内容 本月做多少户、预算、排序优先级、模型超参……(判据:"下个月预算翻倍这条要改吗")
agent_touchpoints Agent 在链路哪一步查阅哪些构件 [{ step, reads: [构件号…], needs: L2 | L1, action?: A号 }]——编译进 agent_tools.json;needs=L1 的查阅点在成员未 active 前标"未就绪"
readiness 就绪度 派生:已确认成员中 draft / verified / active 各多少、agent_touchpoints 中未就绪的数量

6.11 第三阶段填写纪律与完整性校验

填写纪律:

  1. 可判定字段只补在 verified 条目上;draft 条目先走一期二期。
  2. 人话正本优先:expr 与 statement、writes 与 side_effects、metrics 与 feedback 不一致时,以人话为准登冲突,不改人话迁就机器字段。
  3. 变量必须接地:写 expr / when / metrics 之前先确认引用属性的词典行已 verified;未接地的登缺口,不硬写。
  4. 中间态必须登记:写 transitions 时逐条问"动作发起了但对方没响应,这段时间它算什么"。
  5. 不可逆必须显式:irreversible 与 human_gate=required 成对出现。
  6. 切 active 是管理员的动作:机器报"具备条件",人切;切换记入 audit(谁、何时、依据哪次闸门报告)。

完整性校验(切 active 前逐条过):


附录 · 修订记录

约定:每次向线上推送新版说明书,在下表顶部加一行——版本号、日期、是否已上线、这一版改了什么(写给读者看的一段话,不是提交信息)。本表是版本记录的正本;docs/handbook-CHANGELOG.md 只指向这里。版本号规则:major=架构性变化(分期、新章节、构件分类),minor=条文口径增补或裁决收口,-draft 后缀=评审中、未合入 master。

版本 日期 状态 这一版做了哪些修改
v3.0 2026-09-07 已上线 新增第六章《可判定与编译(第三阶段)》:知识从"可引用(L2)"升到"可判定(L1)"的全套规范——6.1 status 三态(draft → verified → active,active 由本体管理员手动切换并受保护);6.2 条件树规范(结构化条件、运算白名单、变量须已接地、失败提示必填);6.3 各表可判定字段(规则 expr / fail_msg / severity,动作 allowed_states / params_schema / writes / dispatch / metrics,状态轴 when / transitions,接口的编译展开);6.4 十条编译闸门;6.5 六件产物与 manifest;6.6 版本纪律;6.7 运行层演进 A→B→C;6.8 动作执行契约;6.9 写回规范;6.10 use case 辅助登记(四步:发现 → 决策 → 动作 → 反馈);6.11 三期填写纪律。第一章:1.4 工作流程由两段改为三期并引入 L2 / L1;1.5 导航表加三期列与 U use case;1.7 新增八个术语。第二章:2.2 / 2.4 / 2.5 字段表加三期字段指引,2.2 补取值字典落点说明;2.6 接口表字段重定义(shape 拆为属性槽位+动作签名、implementers 带 bindings、新增"归并优先合并属性"判定)。第五章:5.3 第 8 条加"三期字段 LLM 分类阶段不填"。建立版本体系:本附录 + 带版本号日期的 HTML 导出(scripts/export-handbook.mjs,图内嵌)
v2.2 2026-08-25 已上线 X-046 收口:2.1 的 product_of 从"事件专用"放宽为实体、事件都可填(可多值,与动作卡 product 互指);2.4 落点段明确干预痕迹审查义务只落在事件对象上,实体的 product_of 只是来源溯源。合规检查同步撤掉"事件专用"警告
v2.1 2026-08-20 已上线 纲要增补动作判定第三问"作用对象收敛到真被编辑的":target 只登真被改写 / 处置的对象,落点(核销在哪笔交易、放款进哪个钱包)由链接表达;据此收口 10 个动作(Leo)
v2.0 2026-08-16 已上线 定稿:六构件框架(规则并入函数作为规则型、"资格"改为接口);全部构件详解图重绘;五构件+规则框架双向验证;说明书页构件 8 节
v1.1 2026-08 上旬 已上线 初版上平台:六章结构、PayLater 实例化;说明书页改为交互式两张总图,点格子出详情