《Ontology 入门与实践手册》

07 构建方法(下):定义动作与规则、绑定数据、验收与演进

第 06 篇产出了名词层的骨架:对象类型和关系。本篇在骨架上加上"动词"——动作、规则和权限;再把它绑定到真实数据上;最后讨论怎样验收、怎样持续演进,以及怎样用大模型辅助建模。概念定义见第 04 篇,这里聚焦做法。

1. 第六步:定义动作

1.1 从能力问题里找动作

动作的来源有两个:能力问题清单里的"动作类"问题,以及访谈时记下的动词。对示例商城 V1,可以整理出这样一份清单:

动作作用对象典型发起者风险等级
创建售后单订单行客户、客服、AI 客服低(可撤销)
审核售后单售后单客服中
确认退货验收售后单、退货包裹仓库验收员中
发起退款售后单客服高(涉及资金,渠道退款后难撤回)
审批超阈值退款处于"待审批"的发起退款动作实例客服主管高
关闭工单客服工单客服低

风险等级决定后面的审批和自动化程度,必须由业务负责人确认。

1.2 为每个动作写定义卡

按第 04 篇的六要素(动作、对象、前置条件、执行者、结果、副作用)为每个动作写一张定义卡。写卡时最常被遗漏的是下面四个设计点:

  1. 审批绑定参数。主管批准的不是"这个售后单可以退款",而是"由客服小林、对售后单 AS-2045、退款 899.00 元、原路退回、在今天 18:00 前有效"。参数一变,审批就失效。否则可能出现"批的是 899 元,退的是 8990 元"。审批本身不是一个独立的业务对象上的动作,而是这一次"发起退款"动作实例上的一个环节:实例先进入"待审批",主管执行"审批"后才继续。
  2. 幂等。同一个请求重复提交时只生效一次。幂等键要标识"这一次退款决定",而不是"这一次网络调用":由动作引擎在创建动作实例时生成 action_instance_id(或由调用方在决定退款时生成一次 request_id),之后所有重试和回调都带同一个键。不要把重试次数或金额放进键里——前者让每次重试都变成"新请求",后者会把两笔金额相同的合法分次退款误判为重复。
  3. 失败、超时与补偿。退款动作要调用支付渠道、改售后单状态、发短信。这种"每一步都准备好撤销或补救办法"的设计,常被称为 Saga 模式。但要注意两点。第一,超时不等于失败:渠道超时只说明"不知道结果",钱可能已经退出去了。正确做法是让动作实例进入"结果未知",用同一个幂等键查询渠道:确认已成功就前滚(把售后单更新为已退款);确认未受理才用同一个键重试;多次查询仍无法确认就转人工。期间售后单保持"退款中",这笔金额在"可退金额"里先冻结。第二,资金步骤是"不可撤销的那一步":渠道退款一旦成功基本撤不回来,它之前的步骤可以补偿(撤销),它之后的步骤(改状态、发短信)只能重试、向前完成,不能回滚。所以"渠道退款成功但改状态失败"时,补救办法是重试改状态,而不是再退一次或把售后单打回"待退款"。
  4. 两层状态。售后单有业务状态(待退款、退款中、已退款);每一次"发起退款"本身也有执行状态(待执行、待审批、执行中、已完成、结果未知、补偿中、需人工)。两层分开记录,才能回答"这笔退款为什么卡住"。
图 7-1:"发起退款"动作实例的执行状态
图 7-1:"发起退款"动作实例的执行状态
图 7-2:审批绑定参数
图 7-2:审批绑定参数

2. 第六步(续):定义规则与权限

2.1 规则表

规则独立登记,动作只引用规则编号:

编号类型内容被哪些动作引用版本负责人
R01约束订单行累计退款不超过实付金额创建售后单、发起退款v1财务
R02派生自正向包裹签收次日起 7 天内具备无理由退货资格(法定底线,见《消费者权益保护法》第二十五条;平台可以放宽、不能收紧)创建售后单、审核售后单v1客服运营
R03约束生鲜类商品不适用无理由退货创建售后单v1客服运营
R04决策单笔退款超过 500 元需主管审批(示例阈值)发起退款v2客服运营
R05约束同一订单行不能同时存在两个进行中的售后单创建售后单v1客服运营

几条经验:

2.2 权限矩阵

动作AI 客服一线客服客服主管仓库验收员
创建售后单申请(客户确认后提交)执行执行查看
审核售后单建议执行执行查看
确认退货验收查看查看查看执行
发起退款建议申请(超阈值)/ 执行(阈值内)执行无
审批超阈值退款无无执行无

注意权利是按动作分别授予的:AI 客服对"创建售后单"有申请权,对"发起退款"只有建议权,对审批没有任何权利。开放权利的顺序建议是:先查看,再建议,再申请,最后才是执行;高风险动作是否允许 Agent 执行,要用下文的影子模式数据说话。

2.3 一次规则变更的完整流程

以 R04 从 v1(示例:300 元)调整为 v2(示例:500 元)为例,一次规则变更应该这样走:

图 7-3:一次规则变更的完整流程
图 7-3:一次规则变更的完整流程

这里的关键在第 3、4、6 步:影响分析要列出所有引用 R04 的动作(本例只有"发起退款"),回归测试要覆盖 300 到 500 元之间的边界金额;发布后,生效时间之前提交的退款仍按 v1 解释,审计时不会混淆;生效时已经处于"待审批"的动作实例,按提交时的规则版本处理。如果规则写在代码里,这些事每一件都要靠人记着;写在规则表里,大部分可以自动完成。

3. 第七步:绑定数据

数据绑定是把本体里的对象类型和属性,对应到真实系统里的表、字段或接口。没有绑定,本体只是一张漂亮的图。

3.1 映射表

对象类型来源主键关键属性映射写入方式
客户会员系统 membermember_no等级 ← level;手机号 ← mobile(脱敏)只读
订单行订单系统 order_itemitem_id实付 ← paid_amount;SKU ← sku_id只读
售后单售后系统 refund_apply(拆分)apply_id状态 ← status(按枚举映射表转换)经售后系统接口
退款单支付系统 refund_txnrefund_no状态 ← refund_status经支付网关接口
发货单(正向与退货)物流系统 waybillwaybill_no签收时间 ← signed_at(权威来源);方向 ← direction只读
装运关系(发货单—订单行)物流系统 waybill_itemwaybill_no + item_id数量 ← qty只读

3.2 三个关键决定

3.3 身份归并:一步一步来

"客户有两个账号"是示例商城最常见、也最容易出错的问题。身份归并可以按下面的顺序做:

  1. 定权威编号:裁决人确认以会员号为客户主键,其他编号都要归到会员号上。
  2. 用强关系归并:系统里已有明确绑定关系的(小程序账号绑定了会员号),直接归并,置信度最高。
  3. 用强属性候选:没有绑定关系、但手机号完全一致的,列为候选;同一手机号可能是家人共用,所以只作候选,不自动合并。
  4. 人工确认:候选交给客服或数据管家确认,确认结果写回绑定关系,下次就成为强关系。
  5. 对 Agent 透明:归并状态要让 Agent 知道。对于未确认的候选,"小售"不能把两个账号的订单混在一起回答,而应请客户提供订单号或在会员页绑定账号。只凭订单号和手机号核验身份偏弱(家人共用、订单号外泄),涉及售后办理时,最好再向该订单的收货手机发送验证码。

这个过程的要点是:能确定的自动做,不确定的交给人,所有结论都留痕。如果公司已有主数据系统,以上大部分工作应由它完成,本体直接引用结果(见第 05 篇)。

图 7-4:身份归并五步
图 7-4:身份归并五步

3.4 数据质量检查

绑定之后,第一件事是跑一遍质量检查:必填属性是否缺失、基数是否违反(一个售后单是否关联了两个订单行)、枚举值是否都能映射、金额是否为负。W3C 的 SHACL 标准就是做这类校验的:用"形状"描述数据应满足的条件,对照实际数据生成校验报告,并可区分违规、警告、提示等严重程度。不用 SHACL 也可以用其他工具实现同样的检查,关键是检查要自动化,并在每次数据或本体变更后运行。

如果平台支持从已有模型自动生成本体初稿(例如微软 Fabric IQ 可以从 Power BI 语义模型生成),也要留出时间手工补全主键、关系绑定等内容——自动生成只是起点。

4. 第八步:验收

验收不是看图"像不像",而是用测试说话。

测试类型怎么做示例
能力问题测试为每个能力问题准备标准答案,比对执行结果而非查询语句CQ3"还能退多少"在 30 个样例订单上全部正确
动作正向测试正常参数下动作能否完成,结果是否符合定义卡阈值内退款一次完成,状态和通知正确
动作负向测试违规参数是否被拦截,拦截原因是否清楚超额退款、重复申请、生鲜无理由退货均被拒
权限测试不同角色执行同一动作,结果是否被正确限制AI 客服尝试直接执行退款被拒
故障测试模拟外部系统失败,看补偿是否生效支付渠道超时后进入"结果未知",先查询再处理,不产生第二笔退款
拒答与澄清超出范围的问题能否拒答或追问客户问换货(V1 不包含)时转人工

上线前建议先跑影子模式:Agent 照常给出判断和动作建议,但不真正执行,由人工处理并对比结果。可以关注这些指标:对象误配率(找错客户或订单行)、重复申请率、审批驳回率、补偿触发率、人工接管率。指标稳定达到约定水平后,再逐步开放执行权。阈值要由业务负责人按风险来定,这里给一组示例值供参考:对象误配率低于 0.5%、动作建议与人工处理不一致率低于 3%,连续两周达标,并且覆盖过一次大促。

4.1 测试用例怎么写

建议用"前提—操作—预期"的格式写测试用例,业务人员也能看懂并参与:

编号前提操作预期
T01订单行实付 299 元,已退 0 元;售后单待退款客服发起退款 299 元成功;售后单进入退款中;生成退款单
T02同上,已退 200 元客服发起退款 120 元被 R01 拦截,提示可退金额为 99 元
T03实付 899 元;售后单待退款客服发起退款 899 元进入待审批;审批卡片带金额与有效期
T04T03 已获批有人把金额改为 799 元后提交(仍不超过实付、仍超过 500 元)原审批失效,要求重新审批
T04b同 T03有人把金额改为 989 元后提交被 R01 拦截:超过实付 899 元
T05商品为生鲜,已签收 2 天AI 客服为客户创建无理由退货售后单被 R03 拦截,返回规则编号与原因
T06支付渠道模拟超时发起退款动作实例进入"结果未知",售后单保持"退款中"并冻结这笔金额;按同一幂等键查询渠道后再前滚或重试,不产生第二笔退款
T07AI 客服身份直接调用提交退款动作被权限拦截:AI 客服只有建议权

每条用例都对应至少一条规则或一个能力问题。用例集本身也要版本化:规则改了,相应用例的预期要一起改。

5. 第八步(续):演进

本体上线只是开始。业务会变,规则会调,新的系统会接入。

6. 用大模型辅助建模

大模型已经能显著降低建模的体力活。有实践者估计,本体和图谱初稿的成本可降到过去的十分之一甚至更低(个别实践者的经验估计,未经独立核实)。分工可以这样划:

适合交给大模型必须由人决定
从访谈记录和文档中抽取候选名词、动词"下单"是事件还是关系,"批次"是否独立成对象
生成同义词表、对象和关系初稿部门之间定义冲突时听谁的
从表结构推测字段含义、生成映射草稿某个例外是否升级为正式规则
为能力问题生成测试样例、边界用例高风险动作的自动化程度
检查命名、断链、明显矛盾出了问题由谁承担
图 7-5:用大模型辅助建模:模型出初稿,人做裁决
图 7-5:用大模型辅助建模:模型出初稿,人做裁决

需要警惕的问题:

一个可以直接使用的提示词骨架:

你是本体建模助手。根据以下访谈记录,列出候选对象类型、关系和规则。
要求:
1. 每个候选标注它能帮助回答哪条能力问题(编号见附件);回答不了的单独列出。
2. 区分"对象 / 属性 / 状态 / 角色 / 关系体",并说明判断理由。
3. 对名称相近但可能不同的概念,列为"待确认",不要合并。
4. 不要编造访谈中没有出现的规则;推测内容标注"推测"。

7. 常见问题

问:动作定义卡要写到多细?

以"另一个工程师拿到卡片就能实现、业务人员拿到卡片就能验收"为标准。参数的类型和单位、每条前置条件对应的规则编号、审批绑定哪些参数、失败后怎么办,这些必须写清;实现细节(调用哪个接口的哪个版本)可以留给技术文档。

问:所有动作都要做幂等和补偿吗?

涉及外部系统、可能被重试的动作都要做幂等;涉及多个步骤、中途失败会留下"半截状态"的动作都要设计补偿。像"关闭工单"这种单步、可撤销的低风险动作,可以简化。

问:影子模式要跑多久?

没有固定时长,看指标是否稳定,以及是否覆盖了业务的典型波动(比如大促、月底)。示例商城的演练里设定为两周,只是一个示意。

问:数据绑定时发现源系统的数据质量很差,要先治理再建本体吗?

不必等全部治理完。可以先把本体建起来,用校验规则把问题数据挡在 Agent 可用范围之外,同时把校验报告交给数据负责人逐步治理。本体反而能帮你把数据质量问题看得更清楚。

问:大模型生成的初稿能直接用吗?

不能直接用。初稿的价值在于节省体力活,但必须经过三道关:自动检查(命名、断链、追溯到能力问题)、领域专家评审、裁决人确认。尤其要警惕名字相近的概念被错误合并。

本篇要点

参考引用

  1. 《Ontology Development 101: A Guide to Creating Your First Ontology》,Natalya F. Noy、Deborah L. McGuinness,Stanford University。原文
  2. 《Shapes Constraint Language (SHACL)》,W3C Recommendation,2017-07-20。原文
  3. 《Action types: Overview》,Palantir Foundry 官方文档。原文
  4. 《Generate an ontology (preview) from a semantic model》,Microsoft Learn。原文
  5. 《Decision Model and Notation (DMN) 1.6》,Object Management Group (OMG)。原文
  6. 《Action Ontology:让企业 Agent 从“会调用”到“能负责”》,皓月惊鸿 Chatshouse。Cubox,原文
  7. 《Ontology本体论实践教程:很多人会问,用CRUD拆开写不也一样吗?》,月夜烛峰。Cubox,原文
  8. 《从本体论到本体建模,从本体建模到 AI 原生—我这一年关于本体的系统性复盘》,何明璐 人月聊IT。Cubox,原文
  9. 《EvoOntology 如何自动构建本体?(实战)》,王磊 噪声之下。Cubox,原文
  10. 《01-认识 Ontilio:把业务世界建模成可运行的本体》,OntologyHub。Cubox,原文
  11. 《准备上知识图谱和本体(Ontology)?要什么团队、选什么场景、花多少成本 | 人人都是产品经理》,叶小钗。Cubox,原文
  12. 《我做了一套本体Ontology工程系统,让Agent能读懂企业数据》,windom Yu 硅基斥候S01。Cubox,原文
  13. 《LLM Wiki + Ontology:让企业知识从“可检索”走向“可行动”》,划小船。Cubox,原文
  14. 《一文读懂本体四大核心技术:RDF、OWL、SPARQL、SHACL,看懂语义层完整工作流》,女王的专属领地 AI产品观察局。Cubox,原文
  15. 《分享一个 AI 本体智能应用开发平台设计方案》,月夜烛峰。Cubox,原文
  16. 《EvoOntology: A Self-Evolving Ontology Layer for Data Agents》,Chong 等(中国人民大学),arXiv:2609.15779,2026。原文
  17. 《Action types: Webhooks》,Palantir Foundry 官方文档。原文
  18. 《中华人民共和国消费者权益保护法》第二十五条,国家市场监督管理总局发布文本。原文