本体驱动

制造业主数据语义化实战

树懒老K

个人网站

个人微信

公众号

目 录

第1章 语义困境

“工厂里最贵的不是设备,是数据在不同系统间迷路的时间。”


§TOC0-1§

1.1 一个物料,四种说法

2019年3月,苏州某电子装配厂的夜班调度员接到了这样一个电话:

“0102003581这个料,仓库显示还有2800件,MES说已经超配了,ERP的采购单还挂着没关。到底有多少?能不能上线?”

问题不大——看起来就是生产计划变更后,三个系统对同一个物料的库存状态产生分歧。但恰恰是这个”小问题”,让这条产线在接下来的两个小时内陷入等待。排好的工单无法释放,20名操作工无事可干,下线的计划因此推迟一天。

事后复盘,事情很清楚:

四个系统里,「同一个物料」有四种描述方式。每个系统内部的数据都是规范的——字段有类型、有长度、有约束。但跨系统看,数据有结构,没有语义

这个案例不是孤例。在我接触过的制造企业中,因为主数据语义不一致导致的生产异常,几乎是”不是会不会发生、而是什么时候发生”的问题。

§TOC0-2§

1.2 三十年的信息化,留下的不是通途是孤岛

中国制造业的信息化进程,在过去二十年中走过了一条”系统驱动”而不是”数据驱动”的路。

典型的路径是这样的:

  1. 先上财务系统(用友、金蝶)→ 管钱
  2. 再上进销存 → 管物
  3. 遇到交付压力上ERP(SAP、Oracle、鼎捷) → 进销存+计划
  4. 产线管控的需求来了 → 上MES
  5. 仓库管理跟不上 → 上WMS
  6. 研发需要管理BOM → 上PDM/PLM

每一个系统都是为解决某个具体问题而引入的。每一个系统上线时,都带着自己的数据模型、编码规则和业务视角。没有人在选型的时候问一句:

“这个系统的数据,未来怎么跟其他系统对话?”

结果是:30年信息化建设,建成了一个个数据孤岛。

孤岛之间靠什么连接? 靠接口。接口靠什么维系?靠人。一个人维护一个接口文档,两个系统之间的字段映射靠Excel记录。当系统从3个增加到7个,接口从N条增加到N×(N-1)/2条时,Excel维护不过来了,人的记忆成了连接这些孤岛的唯一桥梁。

中国制造业的ERP实施,素有”不上ERP等死,上ERP找死”的说法。这句话的本意是说ERP实施之难、失败率之高。但深层次看,ERP项目失败的根本原因往往不是软件不好、不是实施团队不行,而是企业自己的业务数据没有条理——准确地说,是没有经过语义层面的梳理。

§TOC0-3§

1.3 系统集成:从接口到语义的三层演进

理解制造业数据问题的根源,先要理解系统互操作(Interoperability)的层次。

业界通常将系统互操作分为五个层级(L1-L5),从物理到语义逐级递进:

表 1-1
层级 名称 描述 典型实现
L1 物理互操作 设备能连接,协议一致 网线、Wi-Fi、TCP/IP
L2 数据格式互操作 数据能交换,格式统一 JSON、XML、CSV
L3 数据语义互操作 数据的含义一致 统一编码、术语标准
L4 动态行为互操作 系统能理解对方的业务流程 BPMN、事件驱动
L5 知识共享互操作 系统能共享和推理知识 本体、知识图谱

多数企业停留在L2。两个系统能交换数据(格式一致),但数据里的业务含义(比如「这个物料号到底代表哪个零件」、「这个状态码是什么意思」)还是靠人脑去理解。

ERP与MES之间的接口:API调用成功了,但A系统推送的”数量=100”是”件”还是”打”?——这是L2能解决的问题吗?数据格式可以统一(字段类型是decimal),但业务语义(计量单位的解释规则)需要L3。

L3(语义互操作)的缺失,是制造业信息化最深层的痛点。 它不像网络中断那样会立即报警,但会在每个”换型、变更、异常处理”的瞬间制造摩擦。

§TOC0-4§

1.4 数据沉默的综合成本

语义鸿沟的实际影响,不是”技术上不好看”,而是真金白银的损失。

显性成本

隐性成本,通常比显性成本大三到五倍:

一条铁律:当数据需要在n个系统间流转时,信息损耗随着n的增加呈指数级增长,而不是线性增长。

这是因为每一次接口调用都存在”解码-编码”的语义损耗——就像在电话里玩”传话游戏”(telephone game),每传一次就丢失一部分信息。

§TOC0-5§

1.5 「字段」与「含义」之间的鸿沟

在传统ERP系统中,”数据”被理解为一组字段和属性。

表 1-2
字段名 类型 长度
MATNR CHAR 18 0102003581
WERKS CHAR 4 3100
LGORT CHAR 4 0001
LABST DEC 13 2800

SAP顾问看到这组数据会说:”哦,工厂3100库存地点0001里的物料0102003581,库存2800件。”

但这句话的语义(”工厂”、”库存地点”、”物料”、”库存量”这些概念之间的关系)并不存储在数据库中。它们存在于SAP顾问的脑子里、存在于培训文档里、存在于实施时的口头约定里。

这就是语义鸿沟的本质:业务含义附着在人的认知上,而不是附着在数据上。

当一个A系统的顾问离开后,系统A和系统B之间的”约定”就变成了一种隐性负债。当企业需要引入AI来分析这些数据时,AI面对的不是”业务数据”,而是一堆”字段名+值”——它不知道”WERKS=3100”代表什么,不知道”LGORT”和”物料”之间的关系,更不知道”LABST”的计量单位是”件”而不是”千克”。

§TOC0-6§

1.6 本章小结

  1. 制造业信息化的核心瓶颈不是技术能力不足,而是数据有结构无语义——系统之间靠人的记忆连接,而非数据本身
  2. 系统互操作需要从L2(格式一致)升级到L3(语义一致),才能真正解决跨系统数据协同的问题
  3. 语义鸿沟的隐性成本是显性成本的三到五倍,是企业AI转型的第一道”看不见的墙”
  4. 业务含义附着在人脑而不在数据上,这导致系统之间的数据集成既是脆弱的,也是不可扩张的

在下一章,我们将引入本书的核心工具——本体论——来看它如何用形式化的方式,将”人的理解”转化为”机器可处理的语义”。


📚 延伸阅读

第2章 业务本体是什么

“物料编码是给系统看的,本体是让系统明白物料是什么的。”


§TOC1-1§

2.1 你已经在用”本体”了,只是没意识到

很多制造企业的IT架构师第一次听到”本体”这个词时,第一反应是”太学术、太遥远”。但你仔细想一下:

物料分类编码体系(ETIM、eCl@ss、UNSPSC)——把”螺栓M8×20”归到”紧固件→螺栓→公制螺栓”这个分类路径下。这是不是一种本体?是。 它定义了类(分类节点)、关系(is-a层级)、属性(材料、直径、长度、螺距)。

工艺规范中的工序定义(装配→拧紧→力矩值≥120N·m)。这是不是一种本体?是。 它定义了工序类型(类)、执行参数(属性)、工序先后关系(序列约束)。

质量判定规则(外径公差±0.05mm,超差则判为C类缺陷)。这是不是一种本体?是。 它定义了判定条件(规则)、缺陷类别(类)、影响程度(属性值)。

制造业从业者其实每天都在和”本体”打交道——只是没有用这个学术名词称呼它。

本体(Ontology)的学术定义,来自信息科学界公认的奠基者Tom Gruber(1993):

“An ontology is a formal, explicit specification of a shared conceptualization.” (本体是对共享概念体系的明确形式化规范。)

翻译成制造业的语言就是:

本体就是把你脑子里关于业务的知识,变成机器能读懂的、没有歧义的形式化模型。

§TOC1-2§

2.2 数据库 vs 本体:两个完全不同的层次

区分”数据”和”本体”很重要。这里用一个简单的比喻:

数据库是”记笔记”,本体是”构词法”。

更技术化地看,以下两个层次完全不同:

表 2-1
数据层 本体层
角色 记录事实 定义事实的”含义”
内容 物料号、数量、日期 类(物料、订单)、关系(物料-组成-BOM)、规则(BOM变更需审批)
变化频率 分钟/小时/天级 月/年/版本级
谁维护 业务操作人员 领域专家+本体工程师
示例 MATNR=0102003581, LABST=2800 物料是一种实体,它有物料号、计量单位、分类属性

两者需要共存。没有数据层,本体是空的骨架;没有本体层,数据是有结构无语义的字段堆砌。

最常见的一个误区:ERP系统的数据字典就是本体。

数据字典里记录了字段名、类型、长度、主外键关系。但这只是”语法级”的描述——它告诉系统”一个物料号是CHAR(18)”,但没有告诉系统”物料”这个概念在业务中是什么含义、跟BOM是什么关系、跟供应商是什么关系、跟质量判定规则是什么关系。

数据字典是数据库的元数据。本体是业务的元知识。

§TOC1-3§

2.3 本体的核心构件

本体之所以能描述业务知识,是因为它定义了以下几个核心构件。通过一个制造业的例子来理解:

以”螺栓M8×20”为例:

类(Class)

类就是”概念的分类”。在制造业中,类对应”XX类物料”、”XX工艺”、”XX缺陷”。

类: 物料 (Material)
    ├── 原材料 (RawMaterial)
    ├── 自制件 (ManufacturedPart)
    │   ├── 锻件
    │   └── 机加工件
    └── 外购件 (PurchasedPart)
        ├── 紧固件 (Fastener)
        │   ├── 螺栓 (Bolt)
        │   ├── 螺母 (Nut)
        │   └── 垫圈 (Washer)
        └── 电子元器件

“螺栓M8×20”是”螺栓”这个类的一个实例,而”螺栓”是”紧固件”的子类,紧固件是”外购件”的子类。

关系(Relation)

关系描述类之间或实例之间的关联。制造业中最常用的几类关系:

属性(Property)

属性描述一个类的特征维度。每个类有自己的属性集:

: 螺栓 (Bolt)
  属性:
    - 螺纹规格 (threadSize): M8
    - 长度 (length): 20mm
    - 材料 (material): 碳钢
    - 强度等级 (grade): 8.8
    - 表面处理 (finish): 镀锌

规则/约束(Axiom/Constraint)

规则是让本体”智能”的部分——它不只是描述,还能推导出新的知识。

例子: - “M8螺栓的最大扭矩不得超过25N·m” → 如果工单上的扭矩值>25,自动告警 - “A类物料的供应商必须有ISO9001认证” → 校验供应商时自动检查 - “废料不可用于返工” → 如果某零件被判为废料,系统自动阻止它进入返工序列

实例(Instance)

实例就是真实的数据行。”0102003581这个物料是M8×20镀锌螺栓”——这就是一个实例,它属于”螺栓”这个类,有具体的属性值。

实例是数据层的东西,而类、关系、属性、规则共同构成了本体层。

§TOC1-4§

2.4 本体的制造业价值:三个真实场景

场景一:BOM变更的”涟漪效应”

某汽车零部件厂的BOM工程师修改了一个中间件的BOM——把其中的一个电子料从”A型号”换成了”B型号”(兼容替换)。理论上这只是一个小改动,但实际上触发了一连串问题:

如果有了本体,BOM的变更可以自动推导出受影响的范围:

BOM变更: 零件A → 零件B (兼容替换)
推理:
  - 零件A属于"电子元器件"类 → 涉及采购品类规则
  - 零件A在BOM中的功能角色=滤波 → 替代品B必须满足相同功能属性
  - 零件A关联质检规则#301 → 需要通知质量部门更新
  - 零件A关联供应商列表 S1,S2 → 需要确认B型号供应源

这不是科幻。基于本体的推理引擎可以做到——只要BOM、物料、质检规则、供应商都被本体化,这些关联关系就可以自动追踪。

场景二:跨系统联合查询

传统方式:你想知道”这个零件质量问题导致过多少次停线”——需要从ERP查料号、从MES查生产记录、从QMS查质量报告、从设备系统查停机日志。然后人工关联。

如果ERP、MES、QMS的数据被映射到同一个本体上:

SELECT ?instance ?date ?downtime_min WHERE {
  ?instance rdf:type :QualityIssue .
  ?instance :affectsPart <物料:0102003581> .
  ?instance :relatedEvent ?event .
  ?event :eventType "停线" .
  ?event :duration ?downtime_min .
  ?event :occursOn ?date .
}

一条查询,跨四个系统,不需要人工关联数据。这就是本体作为”语义层”的价值——它不替代现有的数据库,而是提供一个统一的”视角”,让不同系统的数据可以被同一套语言查询。

场景三:AI读懂了业务

一个LLM或AI Agent在处理企业数据时,最大的障碍不是数据量,是数据含义的多样性。同样一个”数量”字段,有的系统指”件”,有的指”打”,有的指”kg”。LLM光看字段名是不知道的。

但当这些数据被本体语义化后,AI可以理解:

{
  "@type": "物料",
  "物料号": "0102003581",
  "计量单位": { "@type": "计量单位", "符号": "件", "换算系数": 1 },
  "库存量": { "@value": 2800, "@unit": "件" },
  "所属分类": { "@type": "紧固件" }
}

AI Agent现在知道了:”0102003581”是”紧固件”类的一个物料,以”件”为计量单位,当前库存2800件。它能推理出”这个物料不能用于高温场景”(因为它的材料属性是碳钢,碳钢在高温环境下强度会下降)——前提是材料属性和温度阈值也都在本体里。

把数据”说”给AI听不难。让AI”理解”数据在说什么,才是本体要做的事。

§TOC1-5§

2.5 本体与常见技术概念的区别

表 2-2
概念 和本体的关系 核心区别
数据字典 包含本体的”语法层” 只定义字段结构,不定义业务含义
ER模型 包含本体的”关系层” 聚焦于表之间的数据关联,不包含规则和推理
知识图谱 本体是知识图谱的”模式层” KG=实例数据+本体(schema)
分类编码 本体的”分类法”(taxonomy) 本体还包括关系、属性、规则,分类法只是is-a层级
机器学习模型 与本体的关系是互补 ML从数据中学模式,本体用形式化定义知识

一个重要的结论: 本体不是另一个技术工具,它是一个”元层面”的方法论。不是说”有了本体就不需要ERP、MES、数据库了”,而是”有了本体,这些系统的数据可以被统一理解、交叉引用和自动推理”。

§TOC1-6§

2.6 本章小结

  1. 本体不是新鲜事物——物料分类、工艺规范、质量规则本质上就是本体的雏形
  2. 本体的四个核心构件:类(概念分类)、关系(关联)、属性(特征)、规则(约束/推理)
  3. 数据库管”数据是什么”,本体管”数据意味着什么”
  4. 本体不是替代现有系统,而是为现有系统加上一个”语义层”
  5. 制造业中本体最直接的三类价值:自动推导变更影响、跨系统语义查询、让AI理解业务

在下一章,我们将回到制造业的现实——审视物料、BOM、工艺路线这些核心主数据,看看它们为什么是”碎”的,以及本体能从哪些地方开始入手。


📚 延伸阅读

第3章 制造业主数据全景与痛点

“你的BOM是完整的,但BOM里的物料,在不同系统里说着不同的语言。”


§TOC2-1§

3.1 主数据:制造业的”基础设施”

主数据(Master Data)是企业核心业务实体的基础数据。对于制造企业来说,主数据的范围很清晰:

表 3-1
主数据实体 核心内容 归属系统
物料 Master 物料号、名称、分类、规格、计量单位、质量属性 ERP、PLM
BOM 产品结构、物料层级、用量、版本、替代关系 PLM、ERP
工艺路线 Routing 工序序列、设备、工装、工时、工艺参数 PLM、ERP、MES
供应商 供应商编码、资质、供货范围、评级 ERP、SRM
客户 客户编码、地址、信用、价格协议 ERP、CRM
设备/产线 设备编码、能力参数、维护计划、状态 MES、EAM
质量规范 检验标准、缺陷分类、判定规则 QMS、ERP

这些主数据构成了制造业IT系统的”骨架”。所有日常业务——采购、生产、销售、库存、质量——都围绕着这些主数据运转。

但问题来了:这些主数据分属不同的系统管理、遵循不同的编码规则、面向不同的业务视角。它们之间的数据在”结构”上可以集成,在”语义”上天然断裂。

§TOC2-2§

3.2 物料:一个实体,N种身份

物料的语义断裂是最常见、也最复杂的。

以一个电子制造业的代工厂为例,一个”0805 10KΩ 贴片电阻”,在不同阶段有以下不同身份:

表 3-2
阶段 编码/标识 出处 视角
研发设计 R0805-103J PDM 技术规格
采购 603-SR0805JR-7W10K 供应商料号 供应商
ERP 030201008 企业物料编码 采购/库存
MES 030201008-V1 加版本号 生产追溯
仓储 08A-03-01-05 库位编码 仓储管理

这五套标识描述的是同一个物理实体,但在不同系统中完全独立存储。它们之间的对应关系(映射)通常由ERP的”替代料号表”或供应链部门的Excel维护。

五套系统之间靠”翻译”沟通。每一层翻译都有损耗:

PDM → ERP接口 - PDM推送新物料时,需要ERP顾问手动关联分类和属性映射 - 如果PDM和ERP的分类体系不一致(比如PDM按功能分类、ERP按采购分类),物料创建流程就需要人工干预 - 据某汽车零部件企业的统计,一个新物料在PDM-ERP之间的”语义对齐”平均耗时1.5个工作日

ERP → MES接口 - ERP发送生产工单给MES,其中包含物料号和用量 - 但ERP中的物料号是采购维度,MES需要的是”带版本的生产物料号” - 这种转换通常在中间件中做硬编码映射——同一个物料号一旦有替代料,映射表就是另一套逻辑

WMS → ERP接口 - 仓库收货时扫描供应商条码,需要在ERP中对应到企业物料号 - 如果供应商料号发生了变化,而ERP的映射表没有及时更新,收货流程就会卡住

物料的语义断裂,直接导致了一个”常识性矛盾”:一个企业的核心业务实体——物料——没有一个系统能把它讲清楚。

ERP能讲采购属性,PLM能讲技术属性,MES能讲生产属性,但没有一个系统能给出”这个物料的完整语义画像”。

§TOC2-3§

3.3 BOM:制造业的”语义枢纽”

BOM(Bill of Materials,物料清单)是制造业最核心的数据结构之一。一个产品从设计到交付,经历了多种BOM形态:

这些BOM在理想情况下应该是”一个产品在不同视角的同一组描述”。但在现实中,它们往往朝着不同的方向演变:

表 3-3
问题 后果
EBOM→MBOM的转换靠人工 转换周期长、容易出错、变更不同步
MBOM在ERP中维护,但替换料由生产现场决定 ERP中的BOM和实际生产的BOM有差异
备件BOM没有从主BOM自动派生 售后部门经常”查不到某个零件属于哪个产品”
BOM版本管理不统一 一个变更发生后,不同BOM的更新时间差了几天甚至几周

BOM的问题本质上是语义问题,不是数据结构问题。

ERP里的BOM表结构(BOM_HEADER + BOM_ITEM + COMPONENT_QUANTITY)并没有问题。问题在于:BOM的每一条记录中的”物料”是ERP物料号,”用量”是数值,”位置号”是字符串。但没有语义层面的信息去解释:

这些”元知识”没有被形式化地表达在BOM中。它们分散在:工程师的经验里、变更通知的邮件里、Andon系统的记录里——总之,不在系统能直接读取的地方。

§TOC2-4§

3.4 工艺路线:当”怎么做”脱离了”用什么做”

工艺路线(Routing)定义了产品的制造过程:工序序列、每道工序使用什么设备、需要什么工装、标准工时是多少、工艺参数是什么。

工艺路线的语义问题更加隐蔽。因为它涉及多个维度:

表 3-4
维度 内容 典型断裂场景
工序-设备 哪道工序在哪台设备上做 工艺部门写的是”CNC-01”,MES中实际用的是”CNC-02”(因为01在维修)
工序-BOM 哪道工序消耗哪个物料 MES中的工序物料消耗和ERP的BOM不匹配
工序-质量 哪道工序需要哪些检验 质量规范中的检验点和工艺路线中的工序对应关系不清晰
工序-工时 标准工时vs实际工时 ERP中的标准工时长期未更新,导致计划排程不准确

一条流水线和它的工艺路线之间的映射,本质上是”生产知识和它在系统中的表达”之间的映射。 当工艺参数变化(比如客户要求变更热处理温度),需要在工艺文件、ERP工艺路线、MES工序参数、质量检验标准四个地方同步更新。其中一个没改到,就会出现”文件写的和系统跑的不一致”。

§TOC2-5§

3.5 编码之痛:为什么”统一编码”解决不了问题

很多企业面对主数据语义断裂的第一个反应是:”那就搞一套统一的编码体系,所有系统都按这个标准来。”

听起来很合理,但实践中有三个根本矛盾让这条路走不通:

矛盾一:各业务部门需要自己的编码视角。

统一编码意味着要找到一个”同时满足所有视角”的编码方案。这在实践中几乎不可能——因为不同视角对编码的结构、长度、编码规则的要求是冲突的。

矛盾二:外部系统不认你的编码。

你的企业编码了物料号”030201008”,但供应商用的是自己的料号,客户用的是客户料号,海关用的是HS编码。企业内部可以统一编码,但企业边界到了,统一的编码就不生效了。而边界正是数据交互最频繁的地方。

矛盾三:编码变化时,牵一发而动全身。

某企业决定把物料编码从8位扩展到12位——这是”一个简单的编码规则变更”,但涉及ERP、PLM、MES、WMS、SRM五个系统,以及和30多家供应商的接口。这场变更花了6个月,投入了三个全职IT人员和两个外部顾问。

“统一编码”本质上是”用L2(格式统一)的方法去解决L3(语义一致)的问题”。 它治标不治本。真正的解不在编码本身,而在于语义层——让编码退化到”唯一标识符”的角色,把”含义”交给本体去表达,这样编码本身就不需要承载过多的业务语义了。

§TOC2-6§

3.6 为什么”数据治理项目”常常失败

过去十年,多数头部制造企业都做过大型数据治理项目。模式大体相同:成立数据治理委员会、梳理主数据资产、制定编码规范、建立数据质量评分、推行元数据管理平台。

但做得好的企业屈指可数。原因在于:

数据治理的主流思路仍然是”管理字段”,而不是”管理语义”。

一个典型的数据治理项目会定义: - 物料主数据的字段规范(类型、长度、格式) - 必填字段规则 - 数据质量KPI(完整率、准确率、唯一率)

但不会定义: - 物料之间的语义关系(比如”这个物料在BOM中的功能角色是什么”) - 物料与业务场景的关联(”这个物料被用在哪些产品系列中,哪些产线上”) - 物料变化的影响范围(”这个物料的供应商从A换到B,会影响哪些部门”)

数据治理只能保证”字段是干净的”,不能保证”业务含义是清晰的”。

而后者恰恰是企业数字化转型中更需要的——当你试图用AI来分析生产数据、用数字孪生来模拟产线、用知识图谱来追溯质量问题时,”字段干净”是不够的,”含义清晰”才是前提。

§TOC2-7§

3.7 本章小结

  1. 制造业主数据(物料、BOM、工艺路线、供应商)本身不是问题,问题在于它们在不同系统中的”含义”是断裂的
  2. 一个物料在不同阶段有N种身份标识,映射关系靠Excel和人工维护
  3. BOM从EBOM到MBOM的转换,”功能角色”和”可替代性”等元知识没有被形式化表达
  4. 工艺路线的语义断裂是跨系统协同中最隐蔽的障碍
  5. “统一编码”无法解决语义问题——真正需要的是让编码退化到标识符、把含义交给本体去表达
  6. 传统数据治理管字段不管语义,企业AI转型需要的是”含义清晰”而非仅”字段干净”

本章描述的问题,就是本书后半部分的本体方法论要解决的。从下一章开始,我们将进入方法论部分——如何从业务场景出发,建立让机器理解制造业务的本体模型。


📚 延伸阅读

第4章 业务本体建模方法论

从业务场景出发,不是从概念出发

—— 这是本体建模的第一条纪律。"


§TOC3-1§

4.1 建模之前:三个灵魂拷问

在开始画任何一个类图、定义任何一条关系之前,先问三个问题:

  1. 为谁建模? — 本体的使用者是谁?是给AI Agent读的?给数据工程师做映射用的?还是给业务部门做数据治理用的?
  2. 解决什么问题? — 本体的”对手”是什么?是跨系统查询太慢?是BOM变更总遗漏?还是AI读不懂业务数据?
  3. 边界在哪? — 本体的覆盖范围是多少?只管物料,还要管质量吗?要不要把成本也纳进来?

这三个问题回答不清楚,不要开始建模。

不要因为”本体论很酷”就去做本体。本体是一个工程工具,不是学术玩具。建模的目的是解决问题,不是追求完美的理论模型。

一个制造业本体建模项目的典型出发点:

“我们工厂的BOM变更后,采购、质量、仓库三边总有一边没收到通知。我们需要一个系统能自动推导变更影响范围,并通知所有相关方。”

从这个出发点看,本体建模的焦点就很清楚:

这就够了。不需要去建模客户、供应商、财务、人力资源——边界清晰是本体项目存活的关键。

§TOC3-2§

4.2 五步建模法

我提出的这套方法论,核心原则是:从场景出发,不是从概念出发。

第一步:业务场景分析(画活动图)

不要坐在会议室里”想”本体的概念。先去业务现场。

具体做法:画出核心业务场景的活动图(Activity Diagram),标注出每个活动中涉及的数据实体和它们的角色。

以”BOM变更”这个场景为例:

[工艺工程师发起BOM变更]
    
[修改物料A → 物料B]
    
+---------------------------------------+
|  影响分析                              |
|  1. 物料A哪些产品在用?                |
|  2. 这些产品的BOM中,A的角色是什么?    |
|  3. A还有库存吗?在哪个库位?           |
|  4. A的供应商是否可以提供B?            |
|  5. A关联的检验标准,B是否满足?        |
+---------------------------------------+
    
[生成变更通知]
    
[推送给:采购科 / 质量科 / 生产计划 / 仓库]
    
[各科反馈确认后,执行变更]

这个活动图画出来了,本体中需要哪些类、关系、属性就已经浮现出来了

表 4-1
活动图元素 对应的本体构件
物料A、物料B 类:物料
产品 类:产品
“A在哪些产品中” 关系:part-of
“A在BOM中的角色” 属性:功能角色
“A的库存” 属性:库存量
“A的供应商” 关系:supplied-by
“A关联的检验标准” 关系:has-quality-standard
“变更通知发送给采购科” 类:部门;关系:notify

这一步的价值在于:本体不是”设计”出来的,是从业务场景中”提取”出来的。

第二步:概念抽取(识别核心类)

基于活动图,提取所有关键”名词”——这些名词就是本体的候选类。

BOM变更场景中的候选类:

物料 (Material)
产品 (Product)
BOM结构 (BOMStructure)
供应商 (Supplier)
部门 (Department)
质量规范 (QualityStandard)
库存记录 (InventoryRecord)
变更单 (ChangeOrder)

在抽取时要遵守一条重要原则:“类”是概念的抽象,不是数据的表。

例如:ERP里有”物料主数据表”和”库存表”,但它们在概念层面都属于”物料”这个类——库存只是物料在某个时间点的状态。所以在本体层面不需要”物料主数据”和”库存记录”两个类,只需要”物料”类,库存量是其属性之一。

第三步:关系定义(连接类)

确定类之后,定义它们之间的关系(Relation)

关系的定义同样来自业务场景的活动图:

物料 — is-a → 物料分类        (BOM中的每个物料都属于某个类别)
产品 — has-bom → BOM结构      (产品有一套BOM)
BOM结构 — contains → 物料     (BOM中包含哪些物料)
物料 — supplied-by → 供应商   (物料从哪里采购)
物料 — has-standard → 质量规范 (物料需要满足哪些质量标准)
变更单 — affects → 物料        (变更单修改哪个物料)
变更单 — notifies → 部门      (变更需要通知哪个部门)

关系命名规则: 使用”动词+名词”的明确格式,避免歧义。

好命名:has-bomcontainssupplied-byaffects 不好命名:relates-toassociated-withlinked(语义模糊,无法支撑推理)

制造业中的关系数量通常是类的1.5-2倍。如果关系太少,说明建模粒度太粗;如果关系太多,说明可能混淆了”业务关系”和”数据关系”。

第四步:属性与约束填充(定义细节)

给每个类填充属性和约束。每个属性都要回答三个问题:

  1. 谁能看到这个属性? — 公开(跨系统可读)vs 私有(仅特定系统使用)
  2. 它的值域是什么? — 字符串、枚举值、数值范围、另一个类的实例
  3. 它是必填的吗? — 在什么场景下必须填写

以”物料”类为例:

: 物料 (Material)
  语义属性(公开的、跨系统可读的):
    - 物料号 (materialId): String [必填, 企业唯一标识]
    - 物料名称 (materialName): String [必填]
    - 物料分类 (category): 物料分类 [必填, 枚举]
    - 计量单位 (uom): String [必填, 来自UOM枚举]
    - 功能描述 (functionalDesc): String [选填]

  系统属性(特定系统的技术属性,不跨系统共享):
    - ERP物料号: String [ERP系统使用]
    - MES物料号: String [MES系统使用]
    - PDMSAP物料号: String [PDM系统使用]

  约束:
    - 重量>0且重量≤10000kg
    - 状态字段只能取: 启用/停用/待审核
    - 如果物料类别=爆炸物,则供应商必须有"危险品运输资质"

关键的区分: 语义属性(跨系统共享的业务含义)和系统属性(某个系统内部的标识符)要分开。本体管的是前者,不是后者。

第五步:验证与迭代(落地检查)

建模完成后,不要直接推给工程师编码。先做两个简单验证:

验证1:走一遍核心业务场景

用模型中的类和关系,”走”一遍BOM变更的业务流程:

变更物料A→B:
1. 找到所有"产品 has-bom BOM结构 contains 物料A" → 获得受影响产品列表
2. 检查"物料A supplied-by 供应商S" → 确认S是否也能供B
3. 检查"物料A has-standard 质量规范Q" → 确认B是否满足Q
4. "变更单 affects 物料A" and "变更单 notifies 采购科" → 自动通知

✅ 模型能支撑完整业务流程走通。

验证2:检查能否回答关键业务问题

问:"物料A在哪些产品中被使用,扮演什么角色?"
答:SELECT ?产品 WHERE { 物料A part-of ?产品 }

问:"物料A变更了,需要通知哪些部门和供应商?"
答:SELECT ?部门 ?供应商 WHERE { 物料A supplied-by ?供应商 ; 变更单 notifies ?部门 }

问:"物料A和物料B能否互换?"
答:这需要本体中定义"可替代性"规则:IF 物料A和物料B属于同类且功能属性一致 THEN 可替代

如果模型无法回答这些问题,说明建模少了某些关系或属性,需要回退。


§TOC3-3§

4.3 自顶向下 vs 自底向上:两条路线的选择

本体建模领域存在两条经典路线:

表 4-2
路线 做法 适合
自顶向下 先建立顶层框架(上层本体),再细化到具体领域 新建项目、有方法论基础
自底向上 从现有数据源出发,逐步抽象出本体概念 已有系统需要语义化、有大量遗留数据

本书推荐的策略:混合路线。

一个反模式: 从零开始追求一个”覆盖制造业所有领域的通用本体”。这是学术界的理想,但在工程实践中几乎不可能完成,也几乎不需要。你的本体只需要覆盖3-5个核心业务场景就够了。

§TOC3-4§

4.4 本体建模的”轻”与”重”

在企业实践中,本体不一定要做成OWL这样”重量级”的形式化模型。根据不同的使用场景,可以选择不同的实现”重量”:

表 4-3
重量 实现方式 可支持的推理 维护成本 适用场景
超轻 JSON Schema + 枚举约束 无推理 数据格式校验、API规范
轻量 分类法(Taxonomy) + 属性定义 层级继承 物料分类、知识库组织
中量 关系型本体(RDF/OWL LITE) 类和关系推理 跨系统查询、变更影响分析
重量 全OWL + 规则引擎 复杂推理、一致性校验 质量判定、合规检查

建议: 从轻量开始,跑通核心业务场景后再考虑升级。最成功的制造业本体项目,多数是从”一个分类法+一个关系图谱”起步的。

§TOC3-5§

4.5 本章小结

  1. 建模之前先回答三个问题:为谁建、解决啥问题、边界在哪
  2. 五步建模法:业务场景分析→概念抽取→关系定义→属性填充→验证迭代
  3. 核心原则:从业务场景出发,不是从概念出发
  4. 混合路线(自底向上+自顶向下)比单一的纯路线更适合企业实践
  5. 从轻量开始,别上来就搞OWL——“一个分类法+一个关系图谱”就能解决80%的问题

下一章,我们将用这套方法论,实际动手构建制造业最核心的三个本体模型:物料本体、BOM本体和工艺路线本体。


📚 延伸阅读

第5章 制造业主数据本体建模

“理论听起来很简单。现在我们来真的。”


前面三章是”知道”,本章是”做到”。

我以一家汽车零部件离散制造企业为背景,定义物料、BOM和工艺路线三个核心主数据的本体参考模型。这套模型可以直接用作你企业本体项目的启动模板——按需裁剪,不必照搬。

§TOC4-1§

5.1 物料本体(Material Ontology)

物料是制造业最基础、最核心的实体。物料本体的目标不是取代ERP的物料主数据表,而是为物料数据加上”含义层”。

核心类定义

物料 (Material)
  ├── 原材料 (RawMaterial)
  │   ├── 金属材料 (MetalMaterial) → {属性: 材料牌号, 表面处理}
  │   └── 非金属材料 (NonMetalMaterial)
  ├── 自制件 (ManufacturedPart)
  │   ├── 机加工件 (MachinedPart)
  │   └── 冲压件 (StampedPart)
  ├── 外购件 (PurchasedPart)
  │   ├── 标准件 (StandardPart)   → {is-a} 紧固件、密封件、轴承
  │   └── 电子元器件 (ElectronicComponent)
  │       ├── 被动器件 (PassiveComponent) → {实例: 电阻、电容、电感}
  │       └── 主动器件 (ActiveComponent)  → {实例: IC、晶体管}
  └── 辅料/耗材 (Consumable)

这不只是一个分类法。 每个类都携带该类别共有的业务规则:

核心关系

物料 — belongs-to → 物料分类          (每个物料属于一个分类)
物料 — has-property → 物料属性        (属性名-值对,如"螺纹规格: M8")
物料 — substitutable-by → 物料        (可替代物料清单)
物料 — supplied-by → 供应商           (供应商列表,含优先级)
物料 — has-quality-standard → 质量标准 (质检规范编号)
物料 — used-in → 产品                 (在哪哪些产品中使用)
物料 — stored-at → 库位               (默认存储库位)
物料 — has-lifecycle-state → 生命周期状态(新建/启用/停用/淘汰)

核心属性

每类物料有自己专属的属性集。以下是”紧固件”类的定义示例:

: 紧固件 (Fastener)
  子类:
    - 螺栓 (Bolt)
    - 螺母 (Nut) 
    - 垫圈 (Washer)
    - 螺钉 (Screw)

  通用属性:
    - 材料: {枚举: 碳钢/不锈钢/合金钢/铜/铝}
    - 强度等级: {文本, 如"8.8"、"10.9"}
    - 表面处理: {枚举: 镀锌/镀铬/发黑/磷化/达克罗/无}
    - 螺纹规格: {文本, 如"M8"、"M10×1.25"}
    - 长度: {数值mm, 如"20"}
    - 驱动类型: {枚举: 内六角/外六角/十字/一字/梅花}
    - 配合扭矩: {数值N·m, 用于产线设定}

  约束规则:
    - IF 强度等级="8.8" THEN 材料必须是合金钢或碳钢
    - IF 使用场景=户外 THEN 表面处理必须为达克罗或镀锌
    - IF 配合扭矩 > 25N·m THEN 驱动类型不可为十字

一个完整的物料实例

物料: M8×20螺栓 (0102003581)
  属于类: 螺栓 (Bolt)

  语义属性:
    - 材料: 碳钢
    - 强度等级: 8.8
    - 表面处理: 镀锌
    - 螺纹规格: M8
    - 长度: 20mm
    - 驱动类型: 外六角
    - 配合扭矩: 15N·m

  关系:
    - 所属分类: 紧固件
    - 可替代物料: [0102003582(M8×20不锈钢螺栓), 0102003590(M8×25螺栓+垫圈组合)]
    - 供应商: [A公司(优选), B公司]
    - 使用产品: [发动机总成A, 变速箱总成B]
    - 质量标准: GBT_5782-2016

对比传统ERP中的同一条物料记录,差别在哪?ERP记录只有”物料号+名称+分类+单位+采购价”,它不知道这个物料是个”紧固件”、不知道它可用于哪些产品、不知道它和另一物料的替代关系、更不知道它的配合扭矩约束。物料本体的价值,就是把这些”隐含知识”显式化。

§TOC4-2§

5.2 BOM本体(BOM Ontology)

BOM是制造业语义最密集的数据结构。一个BOM不止是一棵树,它包含了:产品的构成方式、零件的功能角色、版本迭代的轨迹、以及与上下游流程的关联。

核心类定义

BOM (BillOfMaterials)
  ├── EBOM (EngineeringBOM)    → 研发视角,功能结构
  ├── MBOM (ManufacturingBOM)  → 生产视角,制造结构
  └── SBOM (ServiceBOM)        → 售后视角,备件结构

BOM节点 (BOMNode)
  ├── 根节点 (RootNode)        → BOM的顶级产品
  ├── 组件节点 (ComponentNode) → 中间的装配层级
  └── 零件节点 (PartNode)      → 最底层的物料

BOM变更 (BOMChange)
  ├── 工程变更 (EngineeringChange)
  ├── 临时替换 (TemporarySubstitution) 
  └── 版本升级 (VersionUpgrade)

核心关系

BOM — has-root → 产品              (BOM的顶层是哪个产品)
BOMNode — contains → BOMNode       (节点包含子节点,形成层级)
BOMNode — uses-material → 物料      (节点对应哪个物料)
BOMNode — has-quantity → 数量+单位  (用量)
BOMNode — has-position → 位置号     (BOM中的位置标识)
BOMNode — has-function → 功能角色   (该节点在总成中扮演什么角色)
  ↓ 功能角色枚举: {结构支撑/传动连接/减震缓冲/电气连接/密封/过滤}
BOMNode — allowed-substitute → 物料 (该位置允许的替代物料)
BOM — derives-from → BOM           (MBOM从哪个EBOM派生)
BOM — has-version → BOM版本         (版本标识)
BOMChange — affects → BOMNode       (变更影响哪些节点)
BOMChange — impacts → 部门           (变更需要通知哪些部门)

BOM查询能力示例

有了以上关系和属性,系统可以回答以下问题:

问:”查找所有涉及’密封件’的功能角色、且有替代料的BOM节点”

SELECT ?product ?position ?material ?substitute WHERE {
  ?node :has-function "密封" .
  ?node :uses-material ?material .
  ?node :allowed-substitute ?substitute .
  ?node :belongs-to ?bom .
  ?bom :has-root ?product .
}

问:”BOM变更将影响哪些部门和物料?”

SELECT DISTINCT ?dept ?affectedPart WHERE {
  ?change :affects ?node .
  ?change :impacts ?dept .
  ?node :uses-material ?affectedPart .
}

本体的推理能力在这里就已经体现了——即使没有使用OWL推理器,仅仅是结构化的关系定义+SPARQL查询,就能实现”过去靠人脑+Excel”来完成的分析工作。

§TOC4-3§

5.3 工艺路线本体(Routing Ontology)

工艺路线连接了”设计什么”和”怎么制造”。

核心类定义

工艺路线 (Routing)
  ├── 主工艺路线 (PrimaryRouting)    → 标准制造流程
  └── 替代工艺路线 (AlternateRouting) → 当主路线不可用时的选择

工序 (Operation)
  ├── 加工工序 (MachiningOperation)
  ├── 装配工序 (AssemblyOperation)
  ├── 检测工序 (InspectionOperation)
  └── 搬运/存储工序 (LogisticsOperation)

工艺资源 (Resource)
  ├── 设备 (Machine)               → 加工设备、工装夹具
  ├── 人员 (Worker)                → 技能等级、认证要求
  └── 辅具 (Tooling)              → 模具、刀具、量具

工艺参数 (Parameter)
  ├── 加工参数 (ProcessParameter)   → 转速、进给、温度
  └── 环境条件 (EnvironmentalCondition) → 温湿度要求

核心关系

工艺路线 — belongs-to → 产品/物料     (哪个产品的工艺路线)
工艺路线 — has-operation → 工序       (按顺序排列)
工序 — requires → 资源               (设备/人员/工具)
工序 — has-parameter → 参数           (工艺参数设定值)
工序 — consumes → 物料               (该工序消耗哪些物料)
工序 — produces → 物料               (该工序产出什么)
工序 — has-standard-time → 标准工时   (设定时间)
工序 — has-quality-check → 质量标准   (检测规范编号)
工序 — before → 工序                 (前置工序,形成顺序约束)
资源 — has-status → 状态              (可用/维护/故障)
参数 — has-range → 范围               (如 "120≤扭矩≤150 N·m")

一个完整的工序实例

工序: OP-0030 - 拧紧发动机缸盖螺栓
  属于工艺路线: 发动机总成装配线

  关系:
    - before: OP-0020 (清洁缸体)
    - after: OP-0040 (气密性检测)
    - requires: 拧紧轴(设备: TIGHT-01)
    - requires: 高级装配工(人员: skill-grade-A)
    - consumes: 螺栓M8×20(物料: 0102003581) × 4件
    - has-quality-check: 扭矩验证(标准: QS-0030)

  参数:
    - 拧紧策略: 角度控制
    - 最终扭矩: {: 15, 单位: N·m, 公差: ±2}
    - 拧紧角度: {: 90, 单位: °}
    - 节拍: {: 45, 单位: s}

§TOC4-4§

5.4 三模联动:物料→BOM→工艺路线的语义链

本章的三个本体不是孤立的。它们通过关系链互相连接,形成完整的”制造语义网”:

物料(M8×20螺栓)  [used-in]  产品(发动机总成)
     [class]                           [has-bom]
紧固件类            BOM结构
     [used-in-BOM]                    [has-node]
BOM节点(位置: 0103)  [uses-material]  物料(M8×20螺栓)
     [has-function]
功能角色: "密封连接"
     [associated-routing]
工序(OP-0030拧紧)  [consumes]  物料(M8×20螺栓)
     [requires]
设备(拧紧轴TIGHT-01) 
     [has-parameter]
扭矩: 15±2 N·m

这条链说明了什么?

当工艺工程师要更换螺栓(从M8×20换到M8×25),系统可以自动回答:

  1. 影响范围 — 这个螺栓在哪些BOM中使用?在产品中扮演什么功能角色?
  2. 工艺影响 — 工艺路线中对应的工序需要调整参数吗?(长5mm可能意味着拧紧策略变化)
  3. 质量影响 — 新的M8×25是否符合原产品质量标准?
  4. 采购影响 — 当前供应商是否提供M8×25?库存是否受影响?

这就是”语义驱动”的核心价值——数据不再是孤立的字段,而是关联成一张业务”可理解”的知识网络。

§TOC4-5§

5.5 本章小结

  1. 物料本体的重点不是分类(ERP已经分类好了),而是把”隐含知识”显式化——功能角色、可替代性、配合约束
  2. BOM本体要解决的问题不是结构(ERP的BOM表结构没问题),而是”每个零件在BOM中扮演什么角色、变更它影响谁”
  3. 工艺路线本体的核心是打通”用什么做”(设备资源)和”怎么做”(工艺参数)之间的语义关联
  4. 物料→BOM→工艺路线本体通过关系链联动后,系统可以自动回答”变更一个螺栓,影响到谁、通知谁、改什么”

下一章,我们将讨论如何把ERP中的结构化数据——表、字段、外键——通过语义映射,自动转化为本体中的实例,即语义解析引擎的架构设计。


📚 延伸阅读

第6章 语义解析引擎

“把ERP的MATNR变成本体里的’物料’,这个翻译过程叫语义解析。”


§TOC5-1§

6.1 解析引擎的定位

前两章定义了本体模型(”目标长什么样”)。本章讨论的问题是:如何把现有ERP系统里的结构化数据,自动转化为本体中的实例?

这个问题之所以关键,是因为多数企业不会为了做本体而重新录入数据。数据已经在ERP表里了——几万条物料、几百套BOM、几十万条库存记录——唯一要做的是”让它们语义化”。

语义解析引擎的架构定位:

┌─────────────────────────────────────────┐
│           业务应用 / AI Agent               │
├─────────────────────────────────────────┤
│          语义层(本体+实例)                 │  ← 解析引擎的输出
├─────────────────────────────────────────┤
│             语义解析引擎                     │  ← 本章讨论
├─────────────────────────────────────────┤
│   ERP表  │  MES表  │  WMS表  │  其他   │  ← 输入:现有系统
└─────────────────────────────────────────┘

解析引擎不修改源系统的数据,也不替代现有数据库。它在数据之上叠加一个”语义视图”——读源数据、按本体模型解释、输出语义化表示。

§TOC5-2§

6.2 核心架构:三层管道

解析引擎由三层组成:

原始数据层 (Source Layer)
  ↓【提取:读表、读接口、读日志】
映射层 (Mapping Layer)
  ↓【翻译:字段→属性、表→类、外键→关系】
语义表示层 (Semantic Layer)
  ↓【输出:RDF三元组/知识图谱/JSON-LD】
消费端 (ERP顾问/AI Agent/查询工具)

第一层:原始数据层

不做转换,只读取源系统的数据。支持的数据源类型:

表 6-1
类型 方式 适用
关系型数据库 直连读表(JDBC/ODBC) ERP/Oracle/SQL Server
API REST/SOAP接口 云ERP/现代MES
文件 CSV/XML/JSON 导入 遗留系统
消息队列 Kafka/MQ 实时同步

这一层只需要知道”数据在哪儿、怎么读”,不需要理解数据的含义。

第二层:映射层(核心)

映射层的任务:把源数据中的字段、表、外键关系,翻译成本体中的类、属性、关系和实例。

映射的基本原则:

源表 → 本体类
源字段 → 本体属性
主外键 → 本体关系
枚举值 → 类或枚举属性

一个具体的映射示例——ERP物料主数据表(MARA)→ 物料本体:

表 6-2
ERP字段 映射目标 转换逻辑
MARA-MATNR 物料.materialId 直接映射
MARA-MAKTX 物料.materialName 直接映射
MARA-MATKL 物料.belongs-to 物料分类 需查找分类表T023T,获取分类名称
MARA-MEINS 物料.uom 映射到计量单位枚举
MARA-MTART 物料.rdf:type 根据物料类型决定子类(ROH→原材料, FERT→自制件)
MARA-GEWEI 物料.weightUnit 直接映射
MARA-NTGEW 物料.netWeight 直接映射
MARA-AENAM (不映射) 系统属性,无语义价值

关键点: 不是所有字段都需要映射。只映射那些有”业务含义”的字段——创建人是系统行为无需映射,但”物料分类”有业务含义需要映射。

映射定义通常用声明式配置(YAML/JSON)来管理:

mapping:
  source: "ERP.MARA"
  target_class: "Material"
  fields:
    - { source: "MATNR", target: "materialId", type: "direct", required: true }
    - { source: "MAKTX", target: "materialName", type: "direct", required: true }
    - { source: "MTART", target: "rdf:type", type: "lookup",
        lookup_table: "T134T",
        mapping: { "ROH": "RawMaterial", "FERT": "ManufacturedPart",
                   "HALB": "SemiFinishedPart", "PAKT": "PurchasedPart" }}
    - { source: "MATKL", target: "belongs-to", type: "relation",
        target_class: "MaterialCategory",
        lookup: "T023T->WGBEZ" }

映射不是一次性工作。 业务变化(新物料类型、新属性)会不断要求调整映射。映射层设计的核心要求是:修改映射”配置”,不要修改代码。

第三层:语义表示层

映射完成后的输出。可选择以下几种格式:

表 6-3
格式 特点 适合
RDF三元组 W3C标准,支持SPARQL查询 需要推理的场景
JSON-LD JSON扩展,Web友好 API输出、与AI系统对接
知识图谱(图数据库) Neo4j/JanusGraph存储 关联查询密集的场景
物化视图 关系数据库中的语义化表 不想引入新技术栈的场景

输出示例(JSON-LD格式):

{
  "@context": { "@vocab": "http://example.org/ontology/" },
  "@id": "material/0102003581",
  "@type": "Bolt",
  "materialId": "0102003581",
  "materialName": "螺栓M8×20",
  "belongsTo": { "@id": "category/fastener", "@type": "FastenerCategory" },
  "uom": "件",
  "substitutableBy": [
    { "@id": "material/0102003582" },
    { "@id": "material/0102003590" }
  ]
}

§TOC5-3§

6.3 同步策略:全量、增量与实时

确定了映射关系后,需要决定数据同步的频率和方式

表 6-4
策略 做法 适合
全量同步 定时(如每天凌晨)全量重跑所有数据 数据量小、变更不频繁
增量同步 只处理新增或变更的记录 数据量大、有更新时间戳
实时同步 变更发生时立即触发解析 需要准实时语义查询的场景
混合模式 定期全量+夜间增量 大多数企业的推荐选择

一条实操建议: 不要一开始就追求”实时同步”。先用全量同步跑通整个管道,确认映射正确性和性能,再逐步升级到增量或实时。

§TOC5-4§

6.4 一个完整的解析流程示例

以ERP物料表到物料本体的映射为例,走一遍完整流程:

输入: ERP.MARA表中一行数据

表 6-5
MATNR MAKTX MTART MATKL MEINS NTGEW LOEKZ
0102003581 螺栓M8×20 ROH 0010 0.020 (空)

Step 1: 读表 → 提取字段 → 获取所有字段值,检查必填字段(LOEKZ如果= “X”代表逻辑删除标识,跳过)

Step 2: 应用映射规则

MATNR  materialId = "0102003581"
MAKTX  materialName = "螺栓M8×20"
MTART  rdf:type = 查lookup: ROHRawMaterial
MATKL  belongs-to = 查T023T: 0010紧固件
MEINS  uom = "件"
NTGEW  netWeight = "0.020"

Step 3: 生成语义实例

@prefix ex: <http://example.org/ontology/>.

ex:material/0102003581 a ex:RawMaterial ;     注意这里用rdf:type指向RawMaterial
    ex:materialId "0102003581" ;
    ex:materialName "螺栓M8×20" ;
    ex:belongsTo ex:category/紧固件 ;
    ex:uom "件" ;
    ex:netWeight "0.020"^^xsd:decimal .

Step 4: 写入存储(图数据库/RDF三元组存储/JSON文件)

Step 5: 消费方使用

# 问:紧固件类下的所有物料
SELECT ?id ?name WHERE {
  ?id ex:belongsTo ex:category/紧固件 ;
      ex:materialName ?name .
}
 "0102003581" "螺栓M8×20"

§TOC5-5§

6.5 解析引擎的技术选型

实现语义解析引擎没有银弹。以下是根据不同场景的推荐选型:

表 6-6
技术栈 适合 注意
PySpark/ETL工具 数据量大、已有大数据管道 需要额外集成RDF输出
自定义Python脚本 快速原型、小数据量 维护成本随复杂度增长
Apache Jena / Fuseki 需要RDF存储+SPARQL查询 成熟的Java生态,但运维较重
Neo4j + Cypher 以知识图谱为消费目标 图查询快,但需额外转换RDF
Ontop (OBDA工具) 不想搬数据,直接查询原系统 性能依赖原数据库,适合查询密集场景

最务实的起步方案: Python脚本 + JSON-LD输出 + 存储在MongoDB或PostgreSQL JSONB字段中。不需要引入复杂的新基础架构。当语义层成熟后,再评估是否需要切换到RDF存储或图数据库。

§TOC5-6§

6.6 本章小结

  1. 语义解析引擎的核心任务:把ERP表数据”翻译”成本体实例,不修改源数据、不替代源系统
  2. 三层架构:数据读取→映射翻译→语义输出;映射层是核心,用声明式配置管理
  3. 不是所有字段都需要映射,只映射有业务含义的字段
  4. 起步建议:先全量同步跑通、用Python+JSON-LD做MVP、映射用配置管理不要写死在代码里
  5. 选型不要过度设计,PostgreSQL JSONB足以跑通早期阶段

下一章,我们将讨论本体不是建完就完——如何维护、演进和治理语义化的主数据。


📚 延伸阅读

第7章 本体驱动的数据治理

一个没有治理的本体,就是一棵没人维护的分类树

—— 漂亮但没用。"


§TOC6-1§

7.1 从”管字段”到”管语义”

传统数据治理的核心对象是字段。数据治理委员会定义:物料号必须18位、名称不可为空、计量单位必须是标准值。然后定期的数据质量报告告诉你:”物料字段完整率99.8%——很好。”

但仔细想想:字段完整率99.8%能说明什么?什么也说明不了。字段格式正确、值不缺失,不等于数据的业务含义在系统之间是一致的

本体驱动的数据治理,把治理对象从’字段’提升到了’语义’。

表 7-1
传统数据治理 本体驱动数据治理
治理对象 字段值 概念与关系
治理目标 数据完整性、唯一性、一致性 语义一致性、推理正确性、知识可共享
方法 规则引擎、质量评分 本体演化管理、语义冲突检测
可见价值 “物料主数据完整率99.8%” “BOM变更自动通知6个相关部门”
维护周期 季度/年度 持续(随业务变化)

这不是说字段级治理不重要。它会继续存在——对数据录入、接口校验来说,字段级规则仍然必要。但仅靠字段治理,到不了”让系统理解业务”的层面。

§TOC6-2§

7.2 本体演化的生命周期

本体不是一次建成就完事的。业务在变——新产品线、新物料类型、新工艺路径——本体必须跟着变。

本体演化的五个阶段:

【变更触发】 → 业务变化(新产品线、物料分类重组、质量规范更新)
    ↓
【变更评估】 → 影响范围多大?哪些系统、哪些部门会受影响?
    ↓
【版本创建】 → 新版本的本体模型(diff from 旧版本)
    ↓
【验证与测试】 → 在新版本上跑一遍核心业务场景,确认不影响现有推理
    ↓
【部署上线】 → 切换为新版本,通知下游消费方

变更触发事件

表 7-2
触发事件 具体场景 影响评估
新增物料类别 公司引入了电子元器件线,需新增”电子元器件”类 小:新增子类不影响现有分类
类属性变更 “计量单位”从文本改为枚举值 中:需更新映射,清洗数据
类关系变更 BOM的”功能角色”新增一个枚举值 中:影响所有BOM节点的功能角色字段
类结构调整 原来的”自制件”拆分为”机加工件”+”冲压件” 大:需重新分类现有自制件实例
映射规则变更 ERP的物料类型编码重新规划 中:更新映射配置,重新解析源数据

版本管理

本体版本管理参考语义化版本(SemVer):

MAJOR.MINOR.PATCH
- MAJOR: 不兼容的本体模型变更(类/关系/约束变化)
- MINOR: 向后兼容的变更(新增类/属性/枚举值)
- PATCH: 修复(描述修正、映射bug修复)

版本切换策略:

表 7-3
策略 做法 适合
立即切换 新版本就绪即上线 小版本变更、不影响消费方
双轨运行 新旧版本并行,消费方逐步迁移 大版本变更、多个消费方依赖
按域切换 不同业务域用不同版本 大规模本体、分步治理

§TOC6-3§

7.3 语义冲突检测

有了多个本体版本、多个映射源,语义冲突是必然发生的。常见冲突类型:

类型一:概念冲突——同一个词,不同含义

质量科定义:"良品" = "符合图纸公差要求的所有零件"
生产科定义:"良品" = "能正常装配下线、不影响总成功能的零件"

这两个定义有细微但重要的差异:生产科的”良品”包含了”虽然超差但可装配的零件”,而质量科的不包含。如果做质量追溯,得出的良品率会不同。

检测方法: 当两个部门的本体对同一个概念(如”products:GoodPart”)有不同的定义(属性、约束不同),产生冲突。

解决方式: 明确两个概念是不同的类,用不同的命名区分:

GoodPart_QC (质量科视角) — 符合图纸公差
GoodPart_Prod (生产科视角) — 可装配

应用层面再定义跨域的”质量追溯良品”查询逻辑。

类型二:关系冲突——同样的关系,不同的语义

ERP视角:物料 has-supplier = 谁卖给我们
PLM视角:物料 has-supplier = 谁认证了该物料可供应

ERP的”供应商”是采购关系,PLM的”供应商”是技术认证关系。同一关系中隐含了两种业务含义。

检测方法: 检查关系的定义(domain/range)是否一致。如果domain不同(不同类)但关系名相同,存在冲突。

解决方式: 关系重命名,区分语义:

物料 — purchased-from → 供应商  (采购关系)
物料 — certified-by → 供应商    (认证关系)

类型三:实例冲突——同一个实例,不同的属性值

ERP: 物料0102003581.netWeight = "0.020kg"
PLM: 物料0102003581.netWeight = "0.018kg" (含包装修正)

同一个物料在两个系统中重量不同。

检测方法: 当两个源系统对同一实例的同一属性映射到不同的值时,出发实例级冲突。

解决方式: - 优先规则:定义哪个系统为该属性的”权威源”(authoritative source) - 多源共存:保留两个值,加”来源”标签,消费方根据场景选择

§TOC6-4§

7.4 一致性校验:自动化的”语义质检”

建立自动化的一致性校验机制。每一轮(全量同步后)自动执行以下检查:

表 7-4
检查项 方法 通过条件
类完整性 遍历所有实例,确认每个实例都有合法的rdf:type 100%实例有type
属性完整性 对必填属性字段,确认有值 必填属性100%非空
关系一致性 遍历所有关系,确认目标实例存在 无悬空引用
约束满足 检查每个实例是否满足类的约束条件 所有约束满足
映射完整性 检查源系统表字段与本体的映射是否全覆盖 重要字段全部映射

一条核心规则:一致性校验失败时,阻止发布新版本的本体,而不是阻止产生新数据。 ——数据可以继续产生(业务不能停),但如果本体本身有问题,先别让下游消费方使用。

§TOC6-5§

7.5 治理组织:谁来做

本体治理需要三种角色:

表 7-5
角色 职责 能力要求 来源
领域专家 定义业务概念、验证本体模型的正确性 深厚的制造业务知识 业务部门(工艺、质量、采购)
本体工程师 建模、编码、维护映射配置 本体方法论+开源工具(Protégé) IT部门或外部顾问
数据架构师 治理策略、版本管理、技术平台选型 企业架构+数据管理 IT部门

常见组织模式:

数据治理委员会
    ↓
本体工作组 (领域专家 × 2 + 本体工程师 × 1 + 数据架构师 × 1)
    ↓ 按月迭代
本体评审会 (季度,委员会审核重大变更)

小团队即可起步。 初期不需要组建大型团队——一个领域专家+一个本体工程师+一个数据架构师,就能支撑一个制造企业核心主数据的本体治理。

§TOC6-6§

7.6 本章小结

  1. 本体驱动的数据治理把治理对象从”字段”提升到”语义”——字段完整率99.8%不说明业务含义一致
  2. 本体演化的五阶段管理:触发→评估→版本→验证→部署
  3. 语义冲突三种类型:概念冲突(同词不同义)、关系冲突(同名不同关系)、实例冲突(不同值)——各有因应方案
  4. 自动化一致性校验应作为每轮同步的质检环节
  5. 小团队即可起步:领域专家+本体工程师+数据架构师

📚 延伸阅读

第8章 ERP系统语义重构路线图

不推翻SAP,不替换MES

—— 在现有的系统之上,加一层'理解层'。"


§TOC7-1§

8.1 核心原则:增量演进,不是重写替换

当企业决定”让数据有语义”时,最容易掉进的误区是:要把ERP系统重构一遍。

这个想法很危险。ERP系统的更换周期一般在10-15年,SAP S/4HANA迁移动辄上亿、耗时数年。试图”用本体重构ERP”听起来很宏大,实际执行率几乎为零。

本书的核心主张是:不改ERP系统,只加语义层。

改造前:                         改造后:
┌──────┐ ┌──────┐ ┌──────┐     ┌─────────────────────────┐
│ ERP  │ │ MES  │ │ WMS  │     │    语义层 (本体+实例)     │
└──────┘ └──────┘ └──────┘     ├─────────────────────────┤
↓ 接口靠手动映射  ↓             │  语义解析引擎 (读表映射)   │
                                ├──────┬──────┬──────────┤
                                │ ERP  │ MES  │ WMS     │
                                └──────┴──────┴──────────┘

原来每个系统各管各的数据、各写各的接口。改造后,每个系统仍然独立运行,但语义层提供了一个”统一理解”的中间视角。跨系统查询、AI理解、变更影响分析——都通过语义层完成,而不是动任何一个源系统。

这条原则的好处:

  1. 风险可控 — 不碰核心ERP系统,业务完全不中断
  2. 成本可控 — 不需要大规模IT改造投入
  3. 可逆 — 如果发现方向不对,可以停掉语义层,恢复原状
  4. 渐进 — 可以从一个部门、一个场景开始,逐步推广

§TOC7-2§

8.2 三阶段路线图

第一阶段:诊断与试点(1-3个月)

目标: 选择一个业务场景,走完整套语义化流程,验证方法论和工具链。

选择试点场景的原则:

最佳候选:物料主数据查询。 几乎每个制造企业都有”物料信息分散在多系统、查不全”的痛点,而且只涉及ERP(物料主数据表),数据范围小、影响面可控。

第一阶段交付物: - 试点场景的本体模型(≤5个类,≤10种关系) - ERP物料表的映射配置 - 物料数据的语义视图(可浏览器查询) - 试点总结报告(成本、收益评估、推广建议)

第二阶段:核心推广(3-6个月)

目标: 将本体模型扩展到核心制造数据,覆盖BOM、工艺路线和质量数据。

第二阶段交付物: - 完整物料本体模型 - BOM本体 + 映射(从PLM/ERP读取BOM数据) - 工艺路线本体 + 映射(从PLM/ERP读取) - 基本本体治理流程(版本管理、冲突检测)

这个阶段的关键挑战: 多个源系统(PLM、ERP、MES、QMS)同时集成进来,映射配置增加数倍。需要一个映射管理平台来维护。

第三阶段:AI融合与组织能力建设(6-12个月)

目标: 让语义化后的数据服务于AI应用,并建立长效治理机制。

第三阶段交付物: - AI Agent接入语义层(见第9章) - 跨系统语义查询平台 - 本体治理组织常态化运行 - 知识图谱与业务本体的结合

§TOC7-3§

8.3 技术架构选型建议

表 8-1
阶段 推荐架构 技术组件
第一阶段 单机Python + SQLite/JSON文件 Python脚本、YAML映射配置、Jupyter Notebook
第二阶段 服务化部署 PostgreSQL JSONB、REST API、Flask/FastAPI、Neo4j
第三阶段 分布式平台 Apache Jena Fuseki/Neo4j、SPARQL端点、Kafka集成

不需要一步到位。 第一阶段的”Python脚本+JSON文件”方案足以验证本体的业务价值。只有当确认”确实有用”时,才进入第二阶段的服务化部署。

§TOC7-4§

8.4 成本与收益预估

以一家年营收20-50亿的离散制造企业为参考:

投入成本

表 8-2
项目 第一阶段 第二阶段 第三阶段
人力投入 2-3人×3个月 3-4人×6个月 4-6人×6个月
基础设施 无/极低 服务器2-3台 服务器5-8台
软件授权 无(全开源) 可选Neo4j企业版 同前
累计投入 ~50万 ~200万 ~400万

可量化的收益

表 8-3
收益项 年化价值 说明
减少BOM变更导致的产线停线 100-500万/年 减少因变更通知不到位导致的停线
提升跨系统数据查询效率 50-100万/年 IT部门不再需要花大量时间做数据拉取和清洗
降低数据迁移/清洗成本 80-200万/年 新系统上线时的数据迁移工作量大幅降低
AI应用快速部署 难以量化 AI排产/AI质量分析不再被”数据不通”卡住

§TOC7-5§

8.5 常见的失败模式

表 8-4
失败模式 典型表现 预防措施
追求完美模型 花了3个月还在”完善本体”,没有人用它 3个月不出成果就是失败。跑通一个场景就上线
IT驱动无业务参与 本体模型漂亮,但业务部门说”这不是我们的业务逻辑” 从第一天就拉业务部门参与建模
过重的基础设施 上了Hadoop + Jena + Neo4j,结果数据量还没达到GB级 从小做起,先有数据再说
忽略数据质量 本体建好了,但源数据质量太差,映射出来的全是垃圾 先盘数据质量,再决定能否进入本体化
没有退出机制 本体工程做了但没产生价值,又不敢停 每个阶段设”go/no-go”决策点

§TOC7-6§

8.6 本章小结

  1. 核心原则:不推翻ERP系统,在现有系统之上加语义层——风险可控、成本可控、可逆、渐进
  2. 三阶段路线图:诊断与试点(1-3月)→核心推广(3-6月)→AI融合(6-12月)
  3. 起步用Python+JSON文件,确认有价值后再服务化部署
  4. 3个月不出成果就是失败——跑通一个场景就上线
  5. 每个阶段设”go/no-go”决策点,确保方向正确

📚 延伸阅读

第9章 AI Agent × 语义化的企业数据

没有语义化的数据,AI在企业里只能做API对接

—— 读字段值但不知道字段含义。"


§TOC8-1§

9.1 为什么AI需要本体

2024年以来,LLM(大语言模型)在企业级应用的探索中遇到了一个核心瓶颈:LLM不理解企业数据。

理解”数据”和”理解数据”是两回事。LLM可以阅读SQL查询结果、解析ERP接口返回的JSON——但它不知道”WERKS=3100”代表什么。它看到了一个个字段的值,但不知道这些值之间的业务关系。

为什么会这样?因为LLM的训练数据主要来自公开互联网(网页、论文、代码库),而企业内部的业务数据——物料编码规则、BOM结构含义、工艺参数设定逻辑——不在这些训练数据里。

解决这个瓶颈有两种思路:

表 9-1
思路 做法 问题
把企业数据全部喂给LLM训练 微调(fine-tune)或RAG 成本高、数据更新不及时、LLM可能”胡扯”
用本体做语义层,LLM只负责交互 LLM查询语义层获取结构化知识 成本低、结果可追溯、知识可校验

本书支持第二种思路。本体的角色是”翻译官”——把企业数据翻译成LLM能理解的知识结构,LLM的角色是”接口”——用自然语言跟用户对话,但背后查询的是结构化的语义层。

§TOC8-2§

9.2 架构:本体层 + LLM = 可信任的企业AI

[用户提问] → "这个订单能不能在周五前交货?"
    ↓
LLM 解析意图
    ↓ 识别出需要的语义查询:
   "查询订单O相关的物料库存、在制品、供应商交货期"
    ↓
语义层(本体+实例)
    ↓ SPARQL/API
ERP+MES+WMS数据
    ↓
[结构化结果返回给LLM] → LLM组织为自然语言回答
    ↓
[用户看到] → "订单O(编号...)预计周二完成生产,周四可以发货"

这套架构的价值在于:LLM只需要”理解业务问题”和”组织回答”,不需要”背下企业数据”。 所有事实性数据都来自语义层的结构化查询——可追溯、可校验、不会胡扯。

两大应用场景

场景A:语义增强的RAG

传统RAG的做法是把文档切段、向量化、语义检索。但企业中有大量结构化数据(ERP表、BOM、库存记录)是无法用向量化检索来理解的。

语义增强RAG的做法:

用户问:"M8×20螺栓库存够不够支持下周的生产计划?"
    ↓
LLM识别出:
  1. 查询物料的实体 → M8×20螺栓 (material/0102003581)
  2. 查询物料的本体关系 → 在哪些BOM中用、用量多少
  3. 查询物料库存 → 当前库存量
  4. 对比计算 → 库存 vs 需求 = 缺口
    ↓
通过语义层执行结构化查询 → 获得计算结果
    ↓
LLM把结果组织为自然语言回答
→ "下周计划需要480件,当前可用库存为280件,缺口200件。建议触发紧急采购。"

场景B:AI Agent的决策推理

更复杂的场景,AI Agent需要利用本体中的规则和关系进行推理。

Agent任务:"评估BOM变更的影响范围"
    ↓
Agent接收BOM变更请求: 物料A → 物料B
    ↓
Agent查询本体层:
  1. 物料A的类、属性、供应商
  2. 物料A在BOM中的功能角色
  3. 物料A关联的质量标准、供应商
    ↓
Agent执行推理(规则引擎或本体推理器):
  - 物料A和B同属于"紧固件"类 → 功能可替代
  - 物料B满足物料A关联的质量标准 → 质量合规
  - 物料B有供应商C,但物料A的供应商D没有B → 需通知D
    ↓
Agent输出:影响报告(9个部门需通知、1个供应商需沟通、2条质量规范需验证)

§TOC8-3§

9.3 本体+LLM的最佳实践

实践1:让LLM生成SPARQL,不要直接查

LLM不直接访问企业数据。LLM的任务是:理解用户提问 → 转化为语义查询 → 获取结果 → 组织回答。

用户:这个物料的库存和订单情况怎么样?
    ↓
LLM生成SPARQL:
  SELECT ?partName ?qty ?inventory ?orderStatus WHERE {
    ex:material/0102003581 ex:materialName ?partName .
    ex:material/0102003581 ex:hasInventory ?inv .
    ?inv ex:quantity ?qty .
    ex:material/0102003581 ex:hasOrder ?order .
    ?order ex:status ?orderStatus .
  }
    ↓
执行SPARQL → 获得结构化结果 → LLM组织回答

LLM生成SPARQL不是完美的(可能会产生语法错误或语义错误的查询),所以需要加上查询验证层

实践2:本体驱动的不只是查询,还有约束

AI Agent不能只看数据,还要遵循业务规则。本体中的约束正好提供了这个能力:

约束规则(在本体中定义):
- IF 物料类别=危险品 THEN 仓储温度<35°C AND 仓储湿度<60%
    AI Agent在做"仓储路径优化"时:
   自动检查:目标物料是危险品→我只允许选择温湿度合规的库位
   即使LLM没有"记住"这条规则,通过查询本体也能获取

实践3:始终保持”人在环中”

对于所有影响业务决策的AI Agent输出,本体的可追溯性提供了”审计轨迹”:

Agent建议:BOM变更影响范围 = {部门A、部门B、部门C} → 需通知
    ↓
追溯:
  - Agent推理路径:物料A.substitutable-by→物料B
  - 查询来源:物料A.has-standard = QS-0030, 物料B符合QS-0030
  - 查询来源:物料A.supplied-by = 供应商D, 物料B.supplied-by = 供应商C
    ↓
可人工验证每一条推理路径是否正确

§TOC8-4§

9.4 一个完整的AI Agent示例:排产异常根因分析

场景:MES报告”产线L03今天停机2小时”,需要AI Agent分析根因。

用户输入:"L03今天为什么停工了?"
    ↓
Agent查询语义层:
  1. L03是什么? → 类: 产线, 属性: 类型=装配线, 隶属车间=3
  2. 今天L03的运行记录? → 查询关联的MES事件
  3. L03关联的BOM、工单? → 查询今天生产的产品BOM
  4. 关联的物料库存、设备状态? → 查询更广泛的上下文
    ↓
语义层返回:
  - 事件记录:08:30-10:30 因"物料短缺"停工
  - 物料:0102003581 (M8×20螺栓)
  - BOM:发动机总成BOM (螺栓用于工位OP-0030)
  - 库存:OLM仓库显示库存280件,但实际线边库为0
    ↓
Agent推理:
  1. 根因:库存数据(ERP)和线边库存(MES)不一致
  2. 深层根因:ERP的库存更新有时间差,WMS的转移单未及时确认
  3. 建议:优化WMS→ERP的库存同步频率从小时级改为15分钟级
    ↓
输出给用户:
"L03停工的根因是:M8×20螺栓在ERP显示有库存,但MES线边库存为0。
建议检查WMS→ERP库存同步延迟。是否需要我生成一份详细的根因分析报告?"

§TOC8-5§

9.5 本章小结

  1. LLM不理解企业数据——本体作为”翻译官”,把企业数据翻译成LLM能理解的知识结构
  2. 架构核心:LLM理解意图→语义层提供结构化数据→LLM组织回答——可追溯、不胡扯
  3. 两大应用:语义增强RAG(结构化+非结构化联合查询)和AI Agent决策推理
  4. 三个实践:LLM生成SPARQL需加上验证层、本体约束驱动Agent合规运行、始终保留人在环中的审计轨迹

📚 延伸阅读

第10章 实践案例:从试点到上线

“本书的所有方法论,都在这里走了一遍。”


本章基于多个制造业真实项目场景合成,企业名称和具体数据均已脱敏。


§TOC9-1§

10.1 企业背景

企业: 华东某汽车零部件制造公司(以下简称”A公司”) 规模: 年营收约35亿元,员工2600人 产品: 发动机缸盖、变速箱壳体、底盘连接件 IT系统: SAP ECC(ERP)、西门子Technomatix(MES)、自研WMS、鼎捷PLM

核心痛点: 产品结构复杂(单台发动机缸盖BOM涉及400+个物料),频繁的工程变更导致ERP-MES-PLM三边的数据经常不一致,每月平均因BOM差异导致的产线停线约2.5小时。A公司的CIO在年度IT规划中将”主数据一致性”列为P0级项目。

§TOC9-2§

10.2 项目启动(第1-2周)

项目组构成: - 项目经理 × 1(IT部门) - 领域专家 × 2(工艺科1人、质量科1人) - 本体工程师 × 1(外部顾问) - 数据架构师 × 1(IT部门)

第一步:业务场景选择。

项目组花了三天时间,走遍工艺科、质量科、采购科、生产车间,收集了17个主数据相关的痛点场景。按两个维度评估每个场景:业务价值(降低成本/提升效率/降低风险)和实施难度(数据范围/系统数量/部门跨度)。

最终选定的试点场景:BOM变更影响分析

选择理由: - 业务价值高:每次BOM变更平均需要3-5个人工确认,耗时2-4小时 - 数据范围小:只涉及ERP的物料表和PLM的BOM表 - 风险可控:试点阶段只做”影响分析”,不影响现有流程 - 可验证:手工执行一次跟系统自动执行对比,结果可对比

第二步:边界确定。

项目组明确了试点范围: - 不包括:供应商联动、成本影响分析、库位变更 - 包括:物料替代关系、质量规范关联、部门通知列表 - 时间边界:3个月出一版可用的影响分析工具

§TOC9-3§

10.3 本体建模(第3-5周)

建模对象:物料本体 + BOM本体(子集)

项目组按第4章的五步建模法操作。

Step 1: 场景活动图

画出BOM变更的业务活动图(简版):

工艺科提交变更申请
    ↓
技术审查:(1)变更可行性 (2)影响范围分析
    ↓
影响范围分析当前靠人工查:
  - 查ERP:物料在哪些BOM中被使用
  - 查PLM:物料的图纸版本、替代关系
  - 问质量科:该物料关联的检验标准
  - 问采购科:供应商是否能供新物料
    ↓
生成变更通知→推送给4个部门

Step 2: 概念抽取

从活动图中提取出候选类:物料(Material)、BOM(BillOfMaterials)、BOM节点(BOMNode)、部门(Department)、供应商(Supplier)、质量标准(QualityStandard)、变更单(ChangeOrder)。

Step 3: 关系定义

物料  used-in  BOM节点 (物料出现在BOM的哪些位置)
BOM节点  belongs-to  BOM (节点属于哪个BOM)
BOM  for-product  产品 (BOM对应哪个产品)
物料  substitutable-by  物料 (可替代物料)
物料  has-standard  质量标准 (物料关联的质量检验标准)
物料  supplied-by  供应商 (物料供应商)
变更单  affects  物料 (变更修改哪个物料)
变更单  notifies  部门 (变更需要通知哪个部门)
质量科  is-responsible-for  质量标准 (哪个部门管哪个标准)

Step 4: 属性填充

以物料类为例,项目组区分了”语义属性”(跨系统共享的业务含义)和”系统属性”(某个系统内部的标识符)。

表 10-1
属性 类型 语义/系统 来源系统
物料号 String 语义(唯一标识) ERP+PLM一致
物料名称 String 语义 ERP
物料分类 枚举 语义 ERP
功能角色 枚举 语义(本书5.2节定义) 手动补充
计量单位 枚举 语义 ERP
ERP物料号 String 系统 ERP
PLM物料号 String 系统 PLM
供应商编码 String 系统 ERP

Step 5: 验证

项目组用一个真实的BOM变更场景测试模型。

变更前物料A(螺栓M8×20)→ 变为物料B(螺栓M8×20-不锈钢)

人工验证需要查: 1. 物料A在哪些BOM中用?→ 3个产品 → 试点的模型能查到 2. 物料A的供应商能供B吗?→ 供应商S1不能 → 试点的模型能查到 3. 物料A的质量标准B满足吗?→ 满足 → 试点的模型能查到 4. 哪些部门需要通知?→ 采购科、质量科、工艺科 → 试点的模型能查到

验证通过。 模型能支撑所有核心问题,不需要回退。

§TOC9-4§

10.4 语义解析与映射(第6-8周)

数据源现状

A公司的ERP(SAP)和PLM(鼎捷)的数据情况:

表 10-2
数据 所在系统 表/接口 数据量
物料主数据 SAP MARA 直连读表 8.7万条
物料分类 SAP T023T 直连读表 450条
BOM SAP STPO/STKO 直连读表 2.3万条
替代关系 SAP MAPL 直连读表 1.2万条
质量标准 PLM API REST接口 3,000条
供应商 SAP LFA1 直连读表 1,500条

映射配置

项目组用YAML文件定义映射(全文不到200行)。以物料映射为例:

source: "SAP.MARA"
target: "Material"
mappings:
  - { src: "MATNR", target: "materialId", type: "direct" }
  - { src: "MAKTX", target: "materialName", type: "direct" }
  - { src: "MTART", target: "rdf:type", type: "lookup",
      mapping: { "ROH": "RawMaterial", "HALB": "SemiFinished",
                 "FERT": "ManufacturedPart", "PAKT": "PurchasedPart" }}
  - { src: "MATKL", target: "belongsTo", type: "relation",
      target_class: "MaterialCategory",
      lookup: "T023T" }

第一阶段只映射了19个字段——只选择了有业务语义价值的字段。A公司ERP物料表有超过100个字段,大部分是SAP的技术字段,跟业务理解无关。

全量同步

第一轮全量同步(8.7万条物料+2.3万BOM+450分类+1.2万替代关系)耗时约40分钟,输出后写入PostgreSQL JSONB字段,存储约1.2GB。

§TOC9-5§

10.5 影响分析工具上线(第9-10周)

项目组开发了一个简单的Web界面(Flask + 前端页面),让工艺科工程师输入”变更物料A → 物料B”,系统自动输出影响分析报告。

输入界面:

[变更物料号]  0102003581
[目标物料号]  0102003582
[变更类型]    兼容替换 / 非兼容替换

[生成影响报告]

输出报告:

影响分析报告
变更:物料0102003581 (M8×20螺栓/碳钢) → 物料0102003582 (M8×20螺栓/不锈钢)
变更类型:兼容替换
分析时间:2026-06-10 14:32:17

1. 影响产品(3个)
   - 发动机总成A (BOM: BOM-2024-0012)
   - 变速箱总成B (BOM: BOM-2024-0018)
   - 缸盖总成C (BOM: BOM-2024-0035)

2. 影响部门(4个)
   - 采购科:需确认供应商是否可供应0102003582
   - 质量科:需确认0102003582是否满足原质量标准QS-0030
   - 工艺科:需确认OP-0030的拧紧参数是否需要调整
   - 生产计划:需确认0102003582的到货时间

3. 供应商确认
   - 供应商S1 (提供原物料0102003581) → 需确认是否能供0102003582
   - 供应商S2 (已提供0102003582) → 无需确认

4. 质量标准(无需变更)
   - QS-0030 (紧固件扭矩验证) : 0102003582满足该标准

对比结果: 同样的变更分析,过去工艺工程师手工做需要约2小时,系统自动生成为30秒。准确率从手工的约85%提升到系统初始版本约92%(6个月后经过训练数据积累提升至97%)。

§TOC9-6§

10.6 推广复盘与改进(第11-12周)

推广阻力:

推广计划(第二阶段): 项目结束后,A公司决定将本体模型扩展到: - 工艺路线本体(接入MES数据) - 质量数据本体(接入QMS系统) - 建立基础治理流程(本体版本管理 + 季度评审会)

§TOC9-7§

10.7 项目实施检查清单

如果你打算在企业中启动类似项目,这个清单可以作为起点:

项目启动

本体建模

语义解析

验证与上线

持续治理


📚 延伸阅读

第11章 组织与团队

“本体不是纯技术活。是业务+技术+管理的三栖工程。”


§TOC10-1§

11.1 一个常见的失败模式

某企业启动了一个”主数据语义化”项目,由IT部门主导。IT团队花了两个月梳理了ERP的40多张表、定义了20个核心类、80种关系,做了一个完整的OWL本体模型。

项目评审会上,工艺科的人看了一半就说:”我们供应商的能力等级不是这么分的。”质量科的人接了一句:”你们的’质量标准’类里少了出厂检验这一项。”

IT团队很委屈——他们花了大量时间研究ERP数据字典,把表结构吃得透透的。但他们没有做的、恰恰是最重要的一步:跟业务部门坐在一起,理解他们的业务概念。

本体项目最大的失败风险不是技术选型错了,是人没组织好。

§TOC10-2§

11.2 角色定义

一个成功的本体项目,需要的不是”一两个全栈工程师”,而是三种角色的配合:

表 11-1
角色 职责 需要多少个? 从哪里来?
领域专家 定义业务概念、验证模型准确性、培训业务用户 每2-3个业务域配1人 业务部门(在岗或借调)
本体工程师 建模、配置映射、维护技术平台 1-2人 IT部门或外部顾问
数据架构师 制定治理策略、版本管理、技术架构决策 1人 IT部门

领域专家

这是整个项目中最关键的、也最容易被忽视的角色。

领域专家的日常工作是:坐在本体工程师旁边,逐条回答”这个物料分类的边界在哪”、”这两个概念有什么区别”、”这个关系在业务中是必须的还是可有可无的”。

一个好的领域专家应该具备:

本体工程师

本体工程师不是普通的后端开发。他需要同时具备:

数据架构师

数据架构师的责任是”看清楚全景”——知道本体项目跟企业整体的数据战略的关系,知道什么时候该推广、什么时候该收窄。

一名合格的制造企业数据架构师应该能回答:

§TOC10-3§

11.3 协作流程:从需求到上线

周度循环

本体项目的建设阶段,建议以周为迭代周期:

表 11-2
周几 做什么 谁参加
周一 领域专家提出本周需要建模的业务场景 领域专家+本体工程师
周二-三 本体工程师根据场景建模,有疑问随时找专家确认 本体工程师
周四 领域专家评审模型(走一遍场景,看是不是符合业务逻辑) 领域专家+本体工程师
周五 合并+部署,映射跑一遍数据,检查结果 本体工程师+数据架构师

月度评审

每月的本体评审会(参加者:项目组 + 各业务部门负责人):

季度规划

每季度一次的本体路线规划(参加者:项目组 + CIO/CTO):

§TOC10-4§

11.4 常见陷阱

陷阱一:用纯IT团队做本体

IT团队很优秀,但他们不知道”物料BOM中的功能角色”在业务中是怎么定义的。他们能建模一个语法正确的本体,但不能建模一个业务正确的本体。

对策: 把领域专家的时间排进项目计划。不要假设”有空的时候找他们聊聊就行”。每周至少固定2-3天,领域专家和本体工程师在一起工作。

陷阱二:本体工程师不懂业务

本体工程师如果只会OWL和Protégé,但不懂制造业的物料编码规则、不懂BOM从工程到制造的转换逻辑,他建模出来的东西业务部门会用不起来。

对策: 让本体工程师在生产车间待一周,了解业务流程再来建模。或者更实际的做法:让领域专家主导”概念定义”,本体工程师只负责”形式化表达”——各司其职。

陷阱三:一次覆盖太多业务域

想一次性把物料+BOM+工艺路线+质量+供应商+成本全部建模。结果团队在第一个月就陷入了”这个类的边界到底划在哪”的争论中,三个月后只完成了一个半成品。

对策: 参考第8章的三阶段路线图,一次只覆盖1-2个业务域。验证通过后再推广。

陷阱四:本体治理流程太死板

本体发布了之后,每次改动都要经过三层审批,一个新增属性的变更要等两周。业务部门等不了,直接回到Excel管理。

对策: 把变更分成”小改”(PATCH级别,本组自己审批)和”大改”(MAJOR/MINOR级别,委员会审批)——小改放权、大改审慎。

§TOC10-5§

11.5 本章小结

  1. 本体项目最大的失败风险不是技术选型,是人没组织好
  2. 三个角色缺一不可:领域专家(业务定义)、本体工程师(形式化建模)、数据架构师(战略决策)
  3. 周度迭代+月度评审+季度规划的协作节奏
  4. 四个常见陷阱不要踩:纯IT驱动、工程师不懂业务、覆盖域太大、治理流程死板

📚 延伸阅读

第12章 展望:大模型、知识图谱与业务本体

LLM不能替代本体

—— 两者融合,才是企业AI的真正入口。"


§TOC11-1§

12.1 LLM能替代本体建模吗?

一个合理的疑问:既然大语言模型这么强大,能不能直接把企业数据喂给LLM,让它”自己理解”?还需要费力做本体建模吗?

答案是否定的。 原因有三:

原因一:LLM不知道”你不知道的事”。

LLM的知识来源是公开训练数据。当它面对一个企业内部的物料编号”0102003581”时,它不知道这个编号代表什么——这个东西不存在于互联网的任何训练数据中。你可以在RAG里放一份文档说”0102003581=M8×20螺栓”,但LLM仍然不知道这个螺栓的属性(材料、扭矩、用在哪些产品上)——这些知识需要结构化关联,不是一段文档能说清的。

原因二:LLM的推理不可控。

给LLM一个BOM变更场景:”物料A换为物料B,需要通知哪些部门?”LLM可能会给出合理推测,但也可能遗漏关键部门或编造不存在的通知规则。本体的推理是确定性的——规则明确、路径可追溯。对于制造业这种”错了要出大问题”的场景,确定性推理比概率性猜测可靠。

原因三:LLM不擅长持续维护”企业事实”。

企业数据每天都在变——新物料、新BO M、新供应商。LLM的更新成本太高了(全量微调或重新索引),而本体的更新是增量式的——改一条映射、加一个新实例,几分钟的事情。

结论:LLM不是本体的替代品,而是本体的接口。

§TOC11-2§

12.2 知识图谱 + 本体:从”语义层”到”语义网络”

本书前11章讨论的本体主要是”模式层”(schema)——定义了类、关系、属性、规则。知识图谱是”实例层”——包含了具体的数据实例和它们的关联。

本体 = 知识图谱的模式层

知识图谱 = 本体(模式层) + 实例数据(数据层)

本体定义:
  类:物料、BO M、供应商、质量标准
  关系:物料 — supplied-by → 供应商、物料 — has-standard → 质量标准

知识图谱包含:
  实例:物料0102003581、供应商S1、质量标准QS-0030
  关系实例:0102003581 — supplied-by → S1、0102003581 — has-standard → QS-0030

对于制造企业来说,知识图谱是本体”活起来”后的自然产物。当语义解析引擎把ERP数据映射为本体实例后,这些实例和它们之间的关联就构成了一张知识图谱。

知识图谱在制造业中的几个成熟应用方向:

表 12-1
应用 描述 已验证的案例
追溯 物料→BOM→工单→生产记录→质量问题 三一重工灯塔工厂(第7章引用)
变更影响分析 BOM变更→影响产品→影响物料→影响供应商 本书第10章案例
相似物料推荐 同分类+同功能角色的物料推荐替代 大众物料本体(第3章引用)
故障根因分析 设备异常→关联工艺参数→关联物料批次→定位根因 一汽-大众西门子知识图谱(第3章引用)
合规检查 物料属性→关联法规要求→自动校验 Catena-X(第3章引用)

§TOC11-3§

12.3 本体与LLM融合的演进方向

短期的方向已经比较清晰。中长期来看,有几个值得关注的演进:

短期(1-2年):本体增强的RAG

这是目前最成熟的整合模式。当LLM需要回答一个业务问题时,先通过本体获取结构化的知识作为”锚点”,然后再用RAG从文档中补充非结构化的信息。

用户问:"这个零件的供应商变更会影响哪些人?"
    ↓
LLM通过本体执行结构化查询:
  → 获取供应商 → 获取与供应商关联的物料 → 获取与物料关联的部门
    ↓
LLM结合RAG获取上下文(如供应商变更的历史邮件、会议纪要)
    ↓
LLM综合回答

中期(2-3年):LLM辅助本体工程

目前本体建模仍然主要依赖人工(领域专家+本体工程师)。LLM可以在这个环节介入:

长期(3-5年):混合推理

当LLM的推理能力进一步提升后,企业级决策可能采用”混合推理”模式:

两种推理各司其职,没有谁替代谁。

§TOC11-4§

12.4 企业AI转型的”语义基座”

回到全书的核心命题:企业AI转型,不应该从”上AI系统”开始,而应该从”让数据被理解”开始。

我们回头看第1章的场景:一个物料有四种描述方式。没有语义化的数据,AI不仅不聪明,还会更蠢——它会自信地告诉你”物料0102003581的库存2800件,够用”,而不知道这个物料在MES中的真实代码和实际线边库存。

语义基座 = 本体 + 知识图谱 + 语义解析引擎

这个基座的价值不在于”很酷”,而在于它解决了三个制约企业AI落地的根本问题:

  1. 数据可信 — AI读到的不是字段值,是带有业务含义的知识——知道它理解对了
  2. 推理可追溯 — 每个结论都有明确的推理路径——可以人工验证
  3. 持续可维护 — 业务变了,只需要更新本体和映射,不需要重训AI

§TOC11-5§

12.5 写给读者的话

如果你读到了这里,大概率是企业IT架构师或ERP实施顾问,正在思考”企业AI到底怎么落地”。

我的建议,也是这本书的核心主张:

不要急着上AI。先把数据的”含义”讲清楚。

让ERP中的物料、BOM、工艺路线不只是”字段”,而是”业务实体”——让系统知道它们是什么、它们之间怎么关联、业务规则是什么。这一步做完了,AI接入只是”把LLM接上语义层”的问题。这一步不做,AI永远只能在数据表面”擦肩而过”。

从一个小场景开始。一个物料。三周映射。四个部门确认。一本书的宽度,一张Excel表的深度。

这就是你的起点。


📚 延伸阅读

树懒老K(拙一)

30年企业服务经验 · 专注AI智能体与组织变革

个人网站

个人微信

公众号

慢一点,深一度