《Ontology 入门与实践手册》

04 核心概念详解:对象、属性、关系、动作、规则、权限

前三篇讲了本体是什么、为什么要。这一篇是整个系列的"概念字典":逐个解释本体的六个核心要素(外加动能层里负责计算的"函数"),并用示例商城的售后业务说明每个要素该怎么理解、怎么写、容易在哪里出错。后面的方法篇(第 06、07 篇)和实战篇(第 10 篇)都以这里的定义为准。

1. 全景:名词的一半与动词的一半

本系列把本体分成两半:

注意:这里的"名词层"不是数据分析领域常说的"指标语义层"(dbt、Cube 这类管理指标口径的产品,见第 05 篇)。

"动能层"这个说法来自 Palantir 文档里的 kinetic 一词,意思是让本体"动起来"的那部分。Palantir 文档里的动能元素是动作、函数和动态安全;本系列把"规则"单列出来,是为了强调它可复用、有版本。只有名词的本体,Agent 只能解释业务;加上动词,Agent 才可能在规矩之内办事。

图 4-1:名词层与动能层全景
图 4-1:名词层与动能层全景
要素一句话解释示例商城中的例子
对象类型一类业务事物的定义;它的每个具体个体叫对象"售后单"是对象类型,AS-2001 是一个对象
属性对象的特征,有类型、单位和取值范围售后单.申请金额(元,两位小数)
关系两类对象之间有名字、有方向、有数量约束的联系售后单 针对 订单行(每个售后单恰好一个)
动作一次完整的、受控的业务变更发起退款:校验、建退款单、改状态、通知、留痕
规则必须成立的条件或判断逻辑退款金额不超过 实付金额 减去 已退金额
函数只计算、不改业务状态的逻辑可退金额 = 实付 − 已退 − 在途(退款中)
权限谁可以看哪些对象和字段、可以执行哪些动作客服可发起退款,超阈值须主管审批

2. 对象类型与对象

对象类型是"一类东西"的定义,例如"订单";对象是其中具体的一个,例如订单 O-1001。这和编程里"类"与"实例"、数据库里"表定义"与"一行数据"的关系类似,但有一个关键区别:对象类型对应的是业务上承认存在的东西,而不是某张表。

2.1 表是来源,不是对象

一位做建模的实践者总结过一句很实用的话:"表是来源,不是领域对象。"数据库里的一行,可能是下面任何一种:

所以建模时不要"一表一对象"。示例商城的售后系统里可能有一张 refund_apply 大宽表,混着售后单信息、退款信息和审批信息;在本体里,它应该被拆成"售后单""退款单""审批记录"三个对象类型,各有各的身份和生命周期。

图 4-2:表是来源,不是对象
图 4-2:表是来源,不是对象

2.2 身份:对象必须"认得出来"

每个对象类型都要有主键(唯一标识一个对象的字段)。跨系统时更要明确"以谁为准":客户可能在会员系统、小程序、客服系统里各有一个编号,本体里的"客户"要么选定一个权威编号,要么建立映射,把多个编号归到同一个客户对象上。身份不清,后面所有关系和规则都会出错。

2.3 角色与阶段:换状态不换身份

两个常见的建模判断:

2.4 接口与共享属性

多个对象类型共有的特征,可以抽成接口(描述一组对象类型共同"形状"的定义)或共享属性。例如"收货地址"同时出现在客户、订单、发货单上,只定义一次,三处共用,避免出现三种地址格式。

3. 属性

属性是对象的特征。一个合格的属性定义,至少包含:

项说明例:售后单.申请金额
名称与说明业务名、英文名、一句话含义申请金额 / requested_amount / 客户本次申请退回的钱
数据类型与单位数字、文本、日期、枚举等;金额要写单位和精度数值,元,两位小数
取值范围枚举值、上下限、格式大于 0
是否必填缺失时如何处理必填
来源来自哪个系统哪个字段,或由函数计算售后系统 refund_apply.amount

有两类属性值得单独说明:

4. 关系

关系是两类对象之间的业务联系。它和数据库里的外键或表连接看起来相似,本质却不同:外键是技术实现,关系是业务承诺。一个完整的关系定义包括:名称(用动词,如"包含""针对")、两端的对象类型、方向、基数(数量约束,如一对一、一对多)。

关系起点 → 终点基数说明
下单客户 → 订单一对多一个订单只属于一个客户
包含订单 → 订单行一对多,至少一行没有订单行的订单无意义
对应订单行 → 商品多对一每行恰好一个 SKU
针对售后单 → 订单行多对一一个订单行可以有多次售后
装运发货单 → 订单行多对多(带数量)一个包裹可装多行,一行也可能拆到多个包裹;判断无理由退货期,要沿这条关系找到该订单行所在正向包裹的签收时间
退货寄回售后单 → 发货单(退货包裹)多对零或一一个退货包裹可能装着多个售后单的商品
产生售后单 → 退款单一对多允许分次退款
关联工单 → 售后单多对多一次投诉可能涉及多个售后单

4.1 什么时候把关系升级为对象

当一段关系自己有属性、有历史、有责任人时,它就应该成为一个独立的对象,这类对象常被称为关系体。"订单行"就是典型:它连接订单和商品,又有自己的数量、单价、优惠分摊。

售后单承载的是一次诉求的处理过程,更准确地说是一个过程对象,但它同样起着关系体的作用:把订单行、退款单和退货包裹连在一起。如果偷懒,直接在客户和商品之间连一条"退过货"的关系,那么"同一件商品退了两次""第一次被驳回、第二次通过"这些事实就无处记录,"这位客户退过几次货"也没法准确回答。有建模者的经验是:历史和责任,应该挂在关系体上。

5. 动作

动作是一次完整的、受控的业务变更。它和"调用一个接口""改一个字段"的区别在于:动作围绕业务目标,而不是围绕数据字段。Palantir 把一次动作定义为一个事务(transaction,一组修改要么全部生效、要么全部不生效),它包含参数、规则、提交条件和副作用,产生的修改会写回数据。要注意,这里的事务只覆盖本体内对象的修改;调用外部系统(比如支付渠道)不在这个事务里。Palantir 的做法是区分两类外部调用:必须先成功的"写回"(失败则整个动作不生效),和本体修改之后才执行、尽力而为的"副作用"。

一位作者把业务动作归纳为六个要素,本系列沿用这个拆法:

要素含义发起退款
动作名称和业务意图为一个售后单发起退款
对象作用于哪些对象、需要哪些参数售后单、退款金额、退款原因
前置条件执行前必须满足的规则售后单状态为"待退款";金额不超过可退金额
执行者谁可以发起、谁需要批准客服发起;超过示例阈值 500 元时,这次动作先进入"待审批",由客服主管批准后才执行
结果对哪些对象产生什么修改新建退款单;售后单进入"退款中"
副作用系统外的连带影响调用支付渠道退款(写回步骤:必须成功,需幂等);短信通知客户(尽力而为,失败可补发);审计日志由动作引擎同步记录
# 动作定义卡(示意,非任何平台的真实语法)
action: initiate_refund        # 发起退款
target: AfterSalesCase         # 售后单
params:
  amount: { type: decimal, unit: CNY, min: 0.01 }
  reason: { type: enum, values: [质量问题, 无理由, 少件, 其他] }
preconditions:
  - rule: case_status_is_pending_refund
  - rule: amount_within_refundable      # 退款金额不超过可退金额
approval:
  - when: amount > 500                  # 示例阈值(规则 R04)
    require_role: 客服主管              # 动作实例先进入"待审批",批准后才执行
edits:
  - create: Refund
  - set: AfterSalesCase.status = 退款中
writeback: payment_gateway.refund       # 必须成功的外部调用;超时视为"结果未知",先查询再决定
side_effects: [notify_customer]         # 尽力而为,失败可补发;审计日志由动作引擎同步记录
idempotency_key: request_id             # 调用方在"决定退款"时生成一次,所有重试原样复用

关于最后一行多说一句:幂等键标识的是"这一次退款决定",不是"这一次网络调用"。所以不要把重试次数放进键里(每次重试的键都不同,幂等就失效了),也不要把金额放进键里(同一售后单两笔金额相同的分次退款会被误判为重复)。

两个容易混的概念:

图 4-3:动作的六个要素
图 4-3:动作的六个要素

6. 规则

规则是"必须成立的条件"或"如何做判断的逻辑"。它在本体里常以四种形式出现:

类型作用示例
约束(不变式)任何时候都必须成立累计退款金额不超过订单行实付金额
前置条件某个动作执行前必须满足发起退款时售后单必须处于"待退款"
派生规则由已知事实推出新事实自签收次日起超过 7 天的订单行(以它所在正向包裹的签收时间为准),"无理由退货资格"为否;7 天是《消费者权益保护法》第二十五条规定的法定底线,平台可以放宽、不能收紧
决策规则按条件给出处理结论按金额与商品类别决定审批级别

决策规则常写成决策表。OMG 发布的 DMN 标准(决策模型与表示法)就是专门描述这类业务决策的规范,可与流程建模标准 BPMN 配合使用。一张决策表最好只回答一个问题,并写明命中策略(多行同时满足时怎么办)。下面把"能不能无理由退"和"要不要审批"拆成两张表,都采用"唯一命中"(任何输入只会命中一行):

表一:无理由退货资格(规则 R02、R03)

商品类别自签收次日起的天数无理由退货资格
非生鲜不超过 7 天有
非生鲜超过 7 天无(质量问题仍可申请售后)
生鲜任意无(质量问题走补偿流程)

表二:审批级别(规则 R04)

单笔退款金额审批要求
不超过 500 元客服直接处理
超过 500 元客服主管审批

规则建模的两条经验:一是规则应独立定义、可被复用,有实践者的标准是"被两个以上动作引用时值得独立出来";二是规则要有版本,每次执行都记下用的是哪一版;三是标出规则的来源:法规、平台政策、商家承诺的优先级不同,比如 7 天无理由退货是法规底线,平台规则只能在它之上放宽。

还有一个技术细节值得新手了解:OWL 一类的本体语言默认采用开放世界假设——没写的信息只是"未知",不等于"不存在";而数据库和校验工具通常采用封闭世界假设——没有就是没有。比如客户档案里没有记录过敏信息,在开放世界里是"不知道",在封闭世界里是"无过敏"。因此只有 OWL 定义而不配 SHACL 这类校验,线上数据的缺失和错误很难被拦住。

7. 状态机:把动作和状态连起来

动作改变对象的状态,状态又决定哪些动作可以执行。用状态机(列出所有状态和允许的转换)把它画出来,是检查动作设计是否完整的好办法:

图 4-4:售后单状态机
图 4-4:售后单状态机

注意区分两层状态:一层是业务对象的状态(售后单处于"待退款");另一层是动作执行实例的状态(这一次"发起退款"处于待审批、执行中、已完成、结果未知还是需人工处理)。比如支付渠道超时:售后单保持"退款中",动作实例进入"结果未知"——超时只说明不知道结果,不等于失败,要先查询渠道再决定下一步。把两层混在一起,是动作设计里最常见的错误之一(第 07 篇会再谈)。

8. 权限

权限决定谁能看到哪些对象和字段、能执行哪些动作。本体里的权限通常有三个粒度:对象级(能看哪些售后单)、字段级(能否看到客户手机号)、动作级(能否发起退款)。对 Agent 来说,还要区分四种权利:

权利含义示例商城的初始设置
查看能读取对象和关系AI 客服可查看本人会话涉及的订单和售后单
建议能给出处理方案,但不提交AI 客服可建议退款金额和理由
申请能提交动作,等待他人批准客服可申请超阈值退款,由主管批准;AI 客服经客户确认后可申请创建售后单
执行能直接让动作生效主管可批准;小额自动退款需单独开放

两条原则:Agent 的权限不能超过它所代表的人;本体层的权限应尽量复用业务系统已有的权限,而不是另造一套——两套规则一旦不一致,排查和审计都会变得非常困难(第 09 篇详述)。

图 4-5:对 Agent 来说的四种权利
图 4-5:对 Agent 来说的四种权利

9. 不同出处的叫法对照

本系列PalantirMicrosoft Fabric IQOWL / 语义网
对象类型 / 对象Object type / Object实体类型 / 实体实例类 / 个体
属性Property属性数据属性
关系Link type关系对象属性
动作Action type无直接对应(可由 Agent 等能力承接)无直接对应
函数Function无直接对应;派生值可用计算列近似。聚合类的计算对应它的"指标",沿用 Power BI 语义模型里的 DAX 度量(DAX 是 Power BI 的公式语言)无直接对应
规则动作规则与提交条件规则(自然语言描述)公理;配合 SHACL 校验
权限动态安全、标记遵循 Fabric 工作区与项目权限,以及 OneLake 安全和源端的行级、对象级、列级安全(RLS / OLS / CLS)不在标准范围内

注:Fabric IQ 本体截至 2026 年 10 月仍为预览版,已支持继承、命名空间、命名版本和 RDF / Turtle / OWL 的导入导出,功能变化较快,请以官方文档为准。

10. 把六要素串起来:售后单的完整定义

前面分别讲了六个要素。下面把它们放到一个对象类型上,看一份完整的定义长什么样。这也是第 06、07 篇建模时每个核心对象最终要产出的东西:

部分内容
名称与含义售后单(AfterSalesCase):客户针对某个订单行提出的一次退货、退款诉求及其处理过程
身份主键为售后系统的申请编号;权威来源为售后系统
构型过程对象(同时起关系体的作用):承载一次诉求的处理过程,连接订单行、退款单和退货包裹,自身有状态和历史
主要属性类型(仅退款 / 退货退款)、申请数量(不超过购买数量减去已退数量)、申请金额(元,两位小数)、原因(枚举)、状态(见状态机)、创建时间、处理人
派生属性是否超出无理由退货期(由该订单行所在正向包裹的签收时间和规则 R02 计算)
关系针对 订单行(多对一,必填);产生 退款单(一对多);退货寄回 退货包裹(可选,一个退货包裹可能装着多个售后单的商品);关联 客服工单(多对多)
状态机待审核 → 待退货 / 待退款 → …… → 已退款 / 已关闭(见第 7 节)
相关动作创建售后单、审核售后单、确认退货验收、发起退款、关闭售后单;超阈值的发起退款需经"审批"(作用于待审批的动作实例)
相关规则R01 累计退款上限(含累计退货数量不超过购买数量);R02 无理由退货期;R03 生鲜除外;R04 审批阈值;R05 不得重复申请
权限客户本人可查看自己的售后单;客服可查看和处理;AI 客服只能查看本会话涉及的售后单
负责人业务定义:客服运营;数据映射:数据平台

这张卡片同时服务三类读者:业务人员看"含义、状态、规则";工程师看"身份、来源、关系";AI Agent 通过工具读取的,也正是这些内容。

11. 常见问题

问:规则到底属于名词层还是动能层?

两边都有。描述"什么必须成立"的约束(如累计退款上限)更接近名词层,它在任何时候都应成立;描述"做某件事前要满足什么"的前置条件更接近动能层。本系列把规则统一放在动能层介绍,是因为在企业实践中,规则最常在动作执行时被检查。

问:函数和动作怎么区分?

一个简单的判断:执行完以后,业务数据有没有变化。"计算可退金额"不改任何数据,是函数;"发起退款"会新建退款单、改变售后单状态,是动作。函数可以被动作调用,反过来不行(Palantir 的编辑函数能算出一组修改,但同样要包装成动作执行才会生效)。

问:每个属性都要写那么详细吗?

核心对象的关键属性要写全,尤其是金额、状态、时间这类容易引发争议的属性。次要属性可以先只写名称和来源,等它被某个能力问题用到时再补全。

问:权限写在本体里,和业务系统的权限会不会冲突?

所以建议本体尽量"引用"而不是"复制"业务系统的权限:业务系统决定某个客服能看哪些订单,本体只额外规定 Agent 在动作上的权利(查看、建议、申请、执行)。两者的边界在第 09 篇有更细的讨论。

问:对象类型越细越好吗?

不是。对象类型拆得越细,关系越多、维护越难。判断标准是:拆开后的两类对象,是否有不同的属性、不同的动作或不同的规则。如果没有,就用一个属性来区分,而不是拆成两类。

本篇要点

参考引用

  1. 《Ontology building: Overview》,Palantir Foundry 官方文档。原文
  2. 《Action types: Overview》,Palantir Foundry 官方文档。原文
  3. 《Functions: Ontology edits》,Palantir Foundry 官方文档(经本项目调研报告收录)。原文
  4. 《What is ontology (preview)? — Microsoft Fabric IQ》,Microsoft Learn。原文
  5. 《OWL 2 Web Ontology Language Document Overview (Second Edition)》,W3C Recommendation,2012-12-11。原文
  6. 《Shapes Constraint Language (SHACL)》,W3C Recommendation,2017-07-20。原文
  7. 《Decision Model and Notation (DMN) 1.6》,Object Management Group (OMG)。原文
  8. 《Ontology Development 101: A Guide to Creating Your First Ontology》,Natalya F. Noy、Deborah L. McGuinness,Stanford University。原文
  9. 《本体建模过程案例:FDE如何根据业务口述建立静态本体?》,基线沉思。Cubox,原文
  10. 《我用微软开源工具Ontology Playground可视化了本体推理,顺便在建模层对照了一遍》,基线沉思。Cubox,原文
  11. 《Action Ontology:让企业 Agent 从“会调用”到“能负责”》,皓月惊鸿 Chatshouse。Cubox,原文
  12. 《Ontology本体论实践教程:很多人会问,用CRUD拆开写不也一样吗?》,月夜烛峰。Cubox,原文
  13. 《从本体论到本体建模,从本体建模到 AI 原生—我这一年关于本体的系统性复盘》,何明璐 人月聊IT。Cubox,原文
  14. 《一文读懂本体四大核心技术:RDF、OWL、SPARQL、SHACL,看懂语义层完整工作流》,女王的专属领地 AI产品观察局。Cubox,原文
  15. 《深入浅出学习本体论(Ontology):从哲学根基到实践应用概要》,Tom 汤姆的技术雷达。Cubox,原文
  16. 《WorkBuddy+金蝶云星空落地一席谈:权限怎么管》,老丁 老丁AI。Cubox,原文
  17. 《什么是Palantir本体论?不难理解,在12306买一次车票就懂了》,月夜烛峰。Cubox,原文
  18. 《Action types: Webhooks》,Palantir Foundry 官方文档。原文
  19. 《中华人民共和国消费者权益保护法》第二十五条,国家市场监督管理总局发布文本。原文
  20. 《网络购买商品七日无理由退货暂行办法》第十条,中国政府网。原文