本书的用途:这是信贷业务本体知识库的完整说明。第一至四章是架构说明——知识库由哪些构件组成、每个构件是什么、存成什么样、最终呈现为什么;第五章是执行纪律——供 LLM 在处理知识分类时遵照执行:按照该章的判定流程与纪律,对全部业务知识做一轮完整分类,归入本书定义的架构。
理论基础:Palantir 本体论(Ontology)。
本书的边界:平台四层架构中,本书只覆盖本体层(语义定义与登记)及两个伸出去的钩子——接地规范(第三章)与 LLM 分类纪律(第五章);数据加工、应用与自动化、权限治理由协作平台与行方系统承担(见 1.1 架构图)。
Palantir Foundry 的 Ontology 是把企业业务世界建成"数字孪生"的方法论:不直接面对成百上千张数据表,而是先用少数几类构建块(Building Blocks)把业务世界描述清楚——对象类型(世界上有什么)、属性(它们处于什么状态)、链接类型(它们如何关联)、动作类型(我们能对它们做什么)、函数(如何从已知算出未知)——再把每个构建块逐一"接地"到真实数据。这样,业务语言和数据语言之间有了一层稳定的语义层:业务同事用业务词汇讨论和沉淀知识,数据自动跟随;数仓改表改字段,只动接地层,知识本身不失效。
从平台整体看,Foundry 的完整技术栈分四层:数据层把数据接进来、清洗加工成数据集(银行场景即核心、信贷、征信、押品等源系统与数仓管道);本体层把表变成业务概念——行变对象、列变属性、关联变链接,本书的六构件就活在这一层;应用与自动化层让语义产生行动(操作型应用、分析、事件驱动的自动化、LLM);安全与治理贯穿所有层。本书只覆盖本体层,外加两个伸出去的钩子:向下伸进数据层的接地规范(第三章),向上伸进应用层的 LLM 分类纪律(第五章)。其余的层由协作平台与行方现有系统承担:
图一 · 本体构件分类——顶部是 DOC 原文档输入层:知识的源头,每条构件的 source 都指向原文档的段落锚,任何知识都可溯源到它来自哪份文件;中部是六类构件与它们的关系(实线=结构与读写,橙虚线=挂载:规则型函数指向宿主);底部虚线框是第二阶段 · 数据字段匹配层二期:
图二 · 细分构件框架——每类构件的内部细分:
构件关系矩阵——任意两类构件之间是什么关系、靠哪个字段落地。读法:先行后列,取右上三角(矩阵对称,左下省略);"无直接关系"也是结论,不许私搭关系。
这张矩阵连同 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),本框架暂未引入 |
对象是骨架,属性是状态,动作和函数推动状态变化,规则给变化划界,接口把同形归并。(规则是函数的一个类型,与计算并列,同住一张函数表。)
四个核心判定题贯穿全书:执行主体是谁(机构操作者=动作,客户=事件对象)、改不改状态(改=动作,只出数只判定=函数)、存着的还是算出来的(属性 vs 计算型函数)、带不带 if(规则型函数)。
| 阶段 | 谁 | 做什么 |
|---|---|---|
| 第一阶段 · 知识输入 | 业务 / 产品 | 按第五章纪律把业务知识写成六类构件,登入第二章的各张登记表。此阶段不接触数据字段 |
| 第二阶段 · 数据字段匹配 | 数据团队 | 把知识钉到真实数仓:回填各表的 grounding、建对照词典、逐级核实。本书表格中标 二期 的字段即此阶段填写和确认 |
后续 · 衍生与治理(本说明暂不涉及):两个阶段完成后,在原始字段之上做衍生(衍生指标、衍生模型)时再引入的内容——关系真理强度标定(derived / causal)、计算型函数的完整治理(细分六型、输入清单、版本与边界红线)、接口归并等。
| 构件 | ID 前缀 | 存储表 | 第一阶段填什么 | 二期及后续 |
|---|---|---|---|---|
| 对象 | N | 对象表 objects.yaml | 定义 + 实体/事件二分 | grounding 回填二期 |
| 属性 | P | 属性表 attributes.yaml(+取值字典 states.yaml) | 宿主 + 五轴判定 | writer 补齐、crosswalk二期 |
| 链接 | R | 关系表 relations.yaml | 两端 + 基数 | grounding二期;kind 标定(衍生阶段,暂不涉及) |
| 动作 | A | 动作表 actions.yaml(一条记录=一张动作卡) | 整卡填齐 | 仅 grounding二期 |
| 函数 | F | 函数表 functions.yaml | 计算型只立壳(编号+名+产物);规则型填齐(语句+宿主) | 计算型的细分 / 输入 / 版本(数据应用治理阶段);规则挂接口归并(后续归并) |
| 接口 | IF | 接口表 interfaces.yaml | 不填 | 后续归并产生 |
辅助登记(服务知识、本身不是知识):C 对照词典(属性↔数仓列,二期)、DOC 文档登记(出处锚,第一阶段起用)、S 切片(工作分区)、X 冲突登记、G 缺口清单。区分判据:删掉它,对世界的描述会不会少一块——会=构件,不会=辅助。
host: A-042),不填名字——改名不断链。给人读的文档处采用"名字(ID)"双写。accept-within-24h)。none=确认无/不适用(合法记录,本身是知识);留白=尚未梳理(缺口,审核打回)。"必填"的含义是必须表态:不许沉默,允许说没有。本书反复出现的几个词,先在这里说清楚:
| 术语 | 英文 | 白话解释 |
|---|---|---|
| 构件 | 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 号登记交人裁决。规则条件范围重叠且结论不同,同样按此处理。 |
以下守则与原则取自 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 矩阵接口×接口格) |
本章逐一说明六类构件。每节的结构:局部关联图 → 定义与判定 → 细分类别 → 相连关系 → 存储表(字段词典+样例)。局部关联图中的编号 ❶❷❸… 与"相连关系"表的行号一一对应——看图找线,对号读表。
按 Palantir 的定义,对象类型是真实世界中某一类实体或事件的模式定义("the schema definition of a real-world entity or event");对象是对象类型的一个实例,对应一个具体的真实世界实体或事件。官方给的类比最直观:对象类型相当于一张数据集,对象相当于其中的一行——"客户"是对象类型,某一位具体客户是一个对象;"支用事件"是对象类型,某一笔具体支用是一个对象。
由此推出对象的两个特征:每个实例有唯一身份标识(Palantir 中即主键属性,我们登记为 identity 列),因此能被逐个指认、清点数量;每个实例有自己的生命周期,产生、变化、终止都可追踪。判定时问一句:它能不能落成"一行"——有没有一个标识把这一个和那一个分开?"支用事件"能,一笔一行,是对象;"风险"不能,它是程度描述,落不成行,不是对象。
来自数据侧的辅助判据:身份标识列揭示对象。数据里每出现一种起标识作用的列(ref_nbr、merchantName、agentcode),背后就站着一个对象类型。判断对象看标识,不要被表名迷惑。
对象是一切构件的宿主锚点:属性描述对象、链接连接对象、动作作用于对象、函数读写对象的属性、规则经它们间接挂到对象。
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 的表记录的是人的事——属性归宿主时按此判断。
| 字段 | 含义 | 取值/格式 |
|---|---|---|
| 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 } }
按 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 敏感 | 明文 | 脱敏 | 禁展示 | 脱敏红线落到字段级,直接回答界面如何处理 |
结构轴速判(按顺序问,命中即停):
| 例子 | 能否列完 | 结论 |
|---|---|---|
| 受理状态:待受理 / 已受理 / 已拒绝 | 能 | 枚举 |
| 交易金额 | 不能 | 标量 |
| 要点 | 说明 |
|---|---|
| 解决什么问题 | 同一口径的属性出现在多个对象上(支用、还款、订单都有"金额"),各自登记会被抄写多遍并逐渐漂移——有的写含税、有的写不含 |
| 做法 | 口径正本只登一份(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 对照词典钉到 库.表.列,一条属性可对多列;词典为空=暂不可用数据验证 |
| 字段 | 含义 | 取值/格式 |
|---|---|---|
| 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 号列表 · 二期;空=尚未接地(数据验证判"不可测") |
| source / status / asOf / by | 同对象表 |
样例(覆盖:事实枚举 / 推断脱敏 / 建议值与核定值对照):
- 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 }
按 Palantir 的定义,链接类型是两个对象类型之间一种关系的模式定义("the schema definition of a relationship between two object types");链接是这种关系在两个具体对象之间的一个实例。沿用表/行的类比:链接类型≈两张表之间的一个 join(官方原话 "analogous to that of a join between two datasets"),一条链接≈join 结果里的一行——"客户持有贷款账户"是链接类型,某位客户与其名下某个账户的对应关系是一条链接。
由此推出链接的三个特征:两端必须都是对象——join 只能连表,属性、动作、函数都不能作为链接端点(自连也允许:员工↔上级,两端是同一对象类型);天然双向——一个链接类型两个方向都可遍历,不必为"客户→账户"和"账户→客户"各建一条;有基数——一对一、一对多、多对多;多对多的链接由独立的映射表支撑,其他由外键列支撑(这正是二期接地的落点)。判定时问:"它连接的是哪两个对象?"链接用业务动词命名,标明方向与基数。
边不承载属性与历史(建模原则):链接本身不带属性、不带时间区间。当一段关系需要携带金额、时点、状态时,把它升格为对象——客户与商户的"消费"关系带金额,所以订单是对象而不是一条边。判据:想给边加字段的那一刻,就是该立对象的那一刻。
| kind | 含义 | 谁产生 | 使用端 |
|---|---|---|---|
| structural 结构 | 定义上必然为真(客户-持有-账户) | 业务输入默认值 | 进 OWL 硬推理,打架即矛盾 |
| derived 派生 | 沿已有边推出(客户-消费于-商户) | 后续归并:只存推导路径,不存实例 | 查询层现算不存 |
| causal 因果 | 证据支持、可被推翻(登录骤降→逾期风险升) | 数据分析产出自带 | 随证据更新,不进硬推理 |
| 图中线 | 方向 | 含义 |
|---|---|---|
| ❶ 两端都是对象 · 天然双向 | 对象 ↔ 链接 ↔ 对象 | 两端必须是已建档对象(可为同一类型,自连);一个链接类型两向可遍历,不必两个方向各建一条;动词命名、标方向与基数 |
| ❷ 遍历 · 聚合 | 函数(计算型)⇢ 链接 | 计算型可沿链接跨对象聚合(客户在贷总余额);固定且高频的遍历应沉淀为真链接 |
| ❸ 接地二期 | 链接 → 数仓 | 钉到外键列(一对一 / 一对多)或映射表(多对多);每一行=一条链接实例,基数由此可验证 |
| 字段 | 含义 | 取值 |
|---|---|---|
| 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
按 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 | 动作是"用户可采取的编辑",面向将要发生的操作;客户已发生的支用、还款是事实,只能被记录,不能被"采取"。官方文档从未把客户或外部方描述为动作的执行者 |
三段合起来:客户的行为是真实世界的事件→对象;动作的执行者限定为机构内操作者→客户行为不构成动作;动作是"可采取的编辑"而非"已发生的记录"→形状也对不上。除原文依据外,只收录机构侧操作在业务上还有三条理由:
| 理由 | 说明 |
|---|---|
| 治理性 | 只有机构自身的操作可以被规则约束、在执行前被拦截;客户的行为只能被观测,无法被"禁止发生" |
| 观测与干预分离 | 防止数据泄漏的根基:机构的干预记录(如主动查征信)若混进"客户行为"特征,模型学到的是机构何时干预,而不是客户本身的风险 |
| 数据形状不同 | 机构操作的日志天然带执行者、动作码、执行结果三件套;客户行为的记录只有金额、时间、类型 |
动作按职能域分类——执行主体隶属的业务职能。纪律"一个执行主体一张卡"保证了每张卡只属于一个职能:分类天然互斥且完备,业务同学判定零成本("这是谁的地盘")。
职能域是开放清单,由业务增补:清单不是本书定死的,而是从各机构的操作清单盘点归纳出来的枚举字典(与 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 号) |
| ❺ 无直接边(经属性中转) | 函数(计算型)⇢ 属性 → 动作 | 计算型只出建议值(模型分、建议额度),产物落进属性;动作把该属性当参数读或在条件里引用,核定与落地由动作完成——分工是流程约定,不是字段关系。动作之间同样不直接调用,衔接经事件驱动显式串联 |
| ❻ 接地二期 | 动作 → 数仓 | 执行日志钉到数仓表与列(执行者 · 动作码 · 时间 · 结果);无日志的动作登缺口——数据团队回填 |
与其他五张表同为 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) | 第一阶段 |
样例(一张整卡:受理提额申请——参数化受理、系统隐式执行):
- 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
按 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 词典接地;知识层补记"这一列是算出来的" |
分期义务:计算型第一阶段只立壳(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 | |
| source / status / asOf / by | 全部 | 同上 |
样例(计算型壳与完整各一 + 规则型四类宿主各一):
# —— 计算型 · 壳(第一阶段)——
- { 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 }
按 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 ❶) |
| ❺ 接地 | —— | 接口不接地:它不背数据集,实现者各自接地 |
| 字段 | 含义 |
|---|---|
| id / zh / en | IF+序号 / 双名 |
| shape | 共同形状:属性要求(P 号)+动作签名(A 号) |
| implementers | 实现者 N 号列表(登记时校验同形) |
| note / source / status / asOf / by | 同上 |
样例:
- id: IF01
zh: 可受理
en: Acceptable
shape: [提交时间, 受理状态(P003), 受理动作(A-042)]
implementers: [N021, N022, N023]
note: 客户行为的准入规则挂受理动作或本接口
status: draft
第一阶段产出的知识是"纸面"的:定义清楚、结构完整,但尚未与真实数据钉在一起。第二阶段由数据团队完成四类接地——即前文各表中标 二期 的字段。
| 接地对象 | 落点 | 内容 | 判据/要点 |
|---|---|---|---|
| 对象 → 表 | 对象表的 grounding | 主档表 + 身份列 | 主档表唯一:"身份列不重复且覆盖全体实例";身份列在其他表作外键出现的归链接;没有主档表的标 no_master 并登缺口 |
| 属性 → 列 | C 对照词典 | 知识名 ↔ SDK 名 ↔ 数仓列 + 脱敏样例 | 一条属性可对多列;空词典=该知识不可用数据验证 |
| 链接 → 外键 | 关系表的 grounding | 外键列或映射表 | 每一行=一条关系实例;基数由此可验证 |
| 动作 → 日志表 | 动作表 grounding 字段 | 执行记录所在表列 | 执行者/动作码/结果三件套所在 |
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 } # 机筛刚提名,待人工确认
所有接地记录——对象与链接的 grounding、词典行——共用同一套核实进度,且只许数据角色推进:
candidate(机筛提名)→ judged(人工确认)→ sampled(样例核对,词典专有)→ verified(三方一致)
它与知识条目自身的 status(draft/verified)相互独立:定义核实了不等于接地核实了,两个进度条各自推进——一个对象可以定义已 verified 而 grounding 还是 candidate,反之亦然。
出处锚的登记处(第一阶段起即使用)。文档上传即登记:DOC 编号、sha256 去重、上传人、关联切片;解析后切成带锚点的段落(如 DOC-2026-031#p5),全库构件的 source 指向这些锚——每条知识都能一键回到原文。
- { id: DOC-2026-031, title: 额度调整管理办法, sha256: 9f2a…,
uploader: leo, date: '2026-08-07', slices: [额度成长], status: 已抽取 }
知识图谱是六张登记表的可视化编译产物:节点=对象、属性、动作、函数、接口的登记行,边=链接以及各表里互指的字段(宿主、写入方、target、host……)。它不另存数据——从登记表实时编译,改表即改图;点击任何节点应能回到它的登记行、出处锚与接地状态。
类比:登记表≈账本,图谱≈按账本自动画出的地图;Palantir 里对应的是 Ontology Manager 的对象类型关系图与 Vertex 的图探索视图——同样是从本体定义现算出来的,不是另一份数据。
由此推出图谱的三个特征:
| 特征 | 含义 |
|---|---|
| 只读、可再生 | 图上没有任何东西是"画上去"的,删了图重编译一模一样;要改图,改表 |
| 形状即约束 | 每种边只允许出现在特定颜色的节点之间(4.2 约束表);一条不该出现的边就是一条错数据 |
| 一图两读 | 结构读法看骨架(对象与链接),治理读法看橙色虚线(规则挂在哪、管着谁) |
判定:"这张图上的东西能否在某张登记表里找到那一行?"找不到的不该出现在图上;反过来,登记表里已互指的关系(属性 writer 指向动作、动作 side_effects 指向属性)在图上只画一条边。
下图是"提额"业务线建成后的样例(节点编号与第二章样例一致):
读图路径(按颜色):
| 看什么 | 图上 |
|---|---|
| 骨架(紫+灰) | 客户 持有 贷款账户,提额申请 发生于 账户——三个对象由两条链接串起 |
| 状态(粉) | 授信额度挂在账户上;建议额度、受理状态挂在申请上——每条属性一条粉线指回宿主 |
| 算值(蓝) | 额度评估模型 F001 读 授信额度、写产物 建议额度(P004 来源=推断,writer=F001) |
| 出手(青) | 受理动作 A-042 作用于 "可受理"接口(参数化受理,一张卡管全部申请事件),写入 受理状态 |
| 划界(橙虚线) | F110「还款状态正常才收单」挂在受理动作上(执行前置条件);F120「非大额 24h 内受理」与 F121「大额 48h 内受理」并列挂在"可受理"接口上——条件互斥、对全体实现者一次生效,没有"例外" |
| 归并(灰虚线) | 提额申请 实现 "可受理"接口;分期申请、提现申请实现同一接口即自动继承 F120 / F121 |
颜色(六色定案,全平台一致):
| 构件 | 色 | 浅底 / 描边 / 深字(浅色模式参考值) |
|---|---|---|
| 对象 N | 紫 | #EEEDFE / #534AB7 / #3C3489 |
| 属性 P | 粉 | #FBEAF0 / #993556 / #72243E |
| 动作 A | 青 | #E1F5EE / #0F6E56 / #085041 |
| 函数 F · 计算型 | 蓝 | #E6F1FB / #185FA5 / #0C447C |
| 函数 F · 规则型 | 橙 | #FAECE7 / #993C1D;边色 #D85A30 |
| 链接 R | 灰(边色 #888780) | 链接画成边,不画节点 |
| 接口 IF | 灰虚线框(无填充) | 第六类构件;虚线以示抽象类型——不背数据、不可实例化 |
同一构件按类型分色:计算型与规则型同属函数,但在图上必须一眼可辨"这是算值的"还是"这是划界的",故保留两色。
线样式:
| 样式 | 含义 |
|---|---|
| 灰实线 | 链接(对象↔对象);双端箭头=双向语义 |
| 粉实线 | 宿主(属性→对象) |
| 青实线 | 动作的作用于(→对象 / 接口)/ 写入(→属性)/ 产出(→对象) |
| 蓝实线 / 弧线 | 计算型函数的读(属性 / 对象→函数)/ 写产物(函数→属性 / 对象,弧线避让) |
| 橙虚线 | 挂载(规则型函数→宿主:动作 / 属性 / 函数 / 接口)——虚线专属规则,一眼识别"这是约束不是结构" |
| 橙点线(可隐藏层) | 条件引用(规则型函数⇢refs 里的属性);默认隐藏,改口径查波及时打开 |
| 灰虚线 | 实现 · 归并(对象⇢接口) |
图谱约束(自动校验,违反即数据有错):
本章目的:LLM 处理知识分类时,遵照本章的判定流程与纪律,对输入的全部业务知识做一轮完整分类,归入第一至四章定义的架构。本章可独立作为系统提示词使用。
对象是骨架,属性是状态,动作和函数推动状态变化,规则给变化划界,接口把同形归并。任何一条业务知识拆开后只会是这六类构件之一(规则是函数的一个类型)。判定的目标不是贴标签,而是逼出这条知识缺失的部分(宿主、执行者、出处、条件边界)。你只做整理和追问,不做裁决、不编造出处。
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)。
⚠️ 两端必须都是已建档对象;属性/动作/函数不能当端点
大词先走时间线:数几个执行主体、停几站,逐条对表——
| 判据 | 拆(命中任一即拆) | 并(命中即并) |
|---|---|---|
| 执行主体 | 中途换人 | 全程同一执行主体 |
| 条件检查时点 | 不同步骤各查各的 | 同一套条件、一次检查 |
| 中间态 | 中间能停留、可查询 | 一步到位、无中间态 |
| 可逆性 | 各步撤销方式不同 | 同一种撤销方式 |
| 产物 | 各步产物不同 | 同形状 × N——参数化合并,差异进 params |
口诀:一张卡=一个执行主体+一个检查时点+一种撤销方式。动作须唯一:一个执行主体一张卡(按名称+执行主体、作用目标、产物查重)。拆错不要紧,审核复核。
none(合法知识);不知道→留白(缺口)。禁止为凑格式编造。## 1. 对象表(按实体 / 事件分节)
| 对象 | en | type | 产物于(动作号) | 定义 | 身份标识 | 出处 |
## 2. 属性表
| 属性 | en | 宿主 | 口径 | 来源 | 结构 | 写入方 | 归属 | 敏感 | 出处 |
## 3. 关系表
| 链接 | en | 源对象 → 目标对象 | 基数 | 出处 |
## 4. 动作表(整卡:六要素+条件;含受理模式与隐式动作)
| 动作 | en | 职能域 | 对客/对内 | 隐式 | 执行者 | 作用对象 | 产物 | 参数 | 副作用 | 可逆性 | 出处 |
每个动作附条件行:| 门类 | 条件语句 | 出处 |
(每行入函数表规则型:host=本动作、gate=门类;动作表 conditions 只引用其编号)
## 5. 函数表 · 计算型(壳)
| 函数 | en | 产物落到哪个字段/属性 | 出处 |
## 6. 函数表 · 规则型
| 规则 | en 短名 | 条件语句(含完整适用范围) | 宿主(已建档构件 ID) | 门类(宿主为动作时) | 引用构件(refs) | 出处 |
## 7. 接口表——不填(后续归并阶段归并)
| # | 陈述 | 归类 | 关键一步 |
|---|---|---|---|
| 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(对照:机构查征信=动作,征信快照=其产物) |