首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >我从0到1自己设计了一套本体驱动ERP:架构全景拆解

我从0到1自己设计了一套本体驱动ERP:架构全景拆解

作者头像
本体与AI
发布2026-09-09 20:46:09
发布2026-09-09 20:46:09
20
举报

 · 第6篇

去年有个朋友看完我之前写的本体工程文章,问了我一个问题:"你说了这么多本体建模、OWL推理、知识图谱,到底落地长什么样?能不能给我看看整体架构?"

我当时的回答是:"还没画完。"

说实话,从概念到架构这条路,我走了差不多半年。中间推翻了三次设计,踩了一堆坑——比如一开始把本体层和业务逻辑层混在一起,结果改一个规则就要改三个地方;又比如用Neo4j做语义层,发现属性图模型跟OWL推理根本不是一个路子。

今天我终于可以把这套架构完整摊开来说了。从底层存储到上层AI Agent,每一层做什么、为什么这么做、踩过什么坑,全部讲清楚。

■ 先说清楚:这不是传统ERP,也不是数据中台

很多人听到"本体驱动ERP",第一反应是——"这不就是数据中台吗?或者知识图谱加了个壳?"

不是。三个东西的定位完全不同:

传统ERP:业务流程驱动。采购、库存、财务,每个模块自己一套数据结构,模块之间靠接口对接。数据模型是硬编码的,改一个字段要改三张表。 数据中台:数据统一驱动。把各系统的数据汇聚到一处,做清洗、标准化、建模。但它不做语义——数据标准化了,但"同一个客户在不同系统叫不同名字"这种语义问题,它不管。 本体驱动ERP:语义驱动。先把业务领域的概念和关系定义清楚(本体),再让数据按这个语义模型来映射。关键在哪?不是"把数据搬一块",而是"让所有系统对同一个词的理解是统一的"——"客户""供应商""合同""风险",不管哪个系统用,意思都一样。

打个比方:

传统ERP像各自盖楼的房地产公司——每栋楼有自己的地基、管线、门牌号,想从A楼走到B楼要出大门再进另一扇门。

数据中台像统一物业——把各栋楼的公共区域统一管理了,但每栋楼的内部结构还是各管各的。

本体驱动ERP像先画城市规划图再盖楼——先定义好道路网络、功能分区、市政管线,然后每栋楼按规划来建。这样不管盖多少楼,整个城市的语义是统一的。

传统ERP vs 数据中台 vs 本体驱动ERP传统ERP流程驱动,各自为政采购自有数据库存自有数据财务自有数据⚠ 模块间靠接口对接⚠ 数据模型硬编码⚠ 改字段改三张表数据中台数据统一,语义缺失统一数据湖清洗/标准化/建模采购库存财务✓ 数据汇聚统一⚠ 不解决语义问题⚠ "张三""张先生"谁识别?本体驱动ERP语义驱动,全局统一本体语义层概念定义 + 关系定义 + 规则所有系统共享同一语义模型采购库存财务+AI✓ 语义统一✓ 实体消歧自动✓ AI可理解业务逻辑

■ 四层架构:从数据到AI Agent

我参考了Palantir的Ontology架构设计思路,但做了适合自己场景的改动。Palantir的四层是:物理数据层→本体映射层→本体语义层→应用与AI层。我照搬了核心思想(语义映射而非数据搬运),但在具体实现上做了调整。

我的架构也是四层,但名字和内容不一样:

本体驱动ERP:四层架构全景L4 · AI Agent 层spring-ai-alibaba编排的Agent集群(约20个高级Agent并发)供应链Agent风险分析Agent合规审查Agent推演推理Agent...更多AgentL3 · 语义层(本体核心引擎)OWL本体定义 + 推理规则 + 实体消歧 + 权限控制OWL本体模式SWRL推理规则实体消歧引擎语义权限控制L2 · 数据映射层(虚拟语义视图)不搬数据,只做语义映射:把各系统的数据按本体模型做虚拟映射ERP数据CRM数据合同数据供应商数据风险数据...更多数据源→ 映射到本体L1 · 存储层(双库并行)PostgreSQL存业务数据 + Neo4j存关系图谱 + Jena TDB2存OWL本体PostgreSQLNeo4jJena TDB2↑ Agent调用语义接口↑ 语义映射读本体定义↑ 映射层读存储层原始数据

逐层展开来说。

■ L1 · 存储层:双库并行,各有分工

我用三个存储引擎:

PostgreSQL:存业务数据——订单、合同、供应商、项目等。关系型数据库做事务处理很成熟,没必要硬换。 Neo4j:存实体关系图谱——"供应商A供应物料B""合同C涉及项目D""风险E传导到项目F"。这些多跳关系用图数据库查,比SQL快10倍以上。 Apache Jena TDB2:存OWL本体定义和推理结果。本体是"知识骨架",不是业务数据,用三元组存储最合适。

踩过的坑:一开始我想只用Neo4j,把本体定义也存成节点和边。结果发现属性图模型跟OWL的类/属性/限制完全不是一个路子——你没法在Neo4j里表达OWL的传递性属性、等价类、属性链。后来把本体单独用Jena TDB2存,Neo4j只存映射后的实体关系,各干各的,反而更清晰。

另一个坑:数据同步。PostgreSQL和Neo4j之间的数据怎么保持一致?我的做法是用事件驱动——PostgreSQL数据变更时,触发一个事件,Neo4j监听并更新对应的图谱节点。不是实时同步(有1-2秒延迟),但对查询场景够用了。

■ L2 · 数据映射层:不搬数据,只做语义映射

这是我从Palantir学来的核心设计:原始数据不物理迁移,只做虚拟语义映射

什么意思?举个例子:

ERP系统里有个"供应商表",字段是 vendor_id, vendor_name, vendor_type

CRM系统里有个"客户表",字段是 customer_code, customer_name, customer_level

这两个表有同一个实体——比如某家公司既是供应商又是客户。但在两个系统里,它叫不同的名字、用不同的ID。

传统做法是:把两表数据搬到数据中台,做清洗、做ID映射。数据搬运、ETL、存储三份,维护成本高。

我的做法是:在本体语义层定义一个"企业实体"(EnterpriseEntity),然后把两个表的数据虚拟映射到这个本体实体上。ERP的vendor_id映射为EnterpriseEntity的erpId属性,CRM的customer_code映射为EnterpriseEntity的crmId属性。本体实体是一个虚拟视图,底层数据还在各自的系统里。

这么做有什么好处?

1. 不用搬数据——各系统的数据还在原来的地方,不需要ETL。 2. 语义统一——不管ERP叫"供应商"还是CRM叫"客户",在本体层面它们都是"企业实体",属性是统一的。 3. 权限继承——本体层的权限控制可以精确到实体和属性,ERP系统的人只能看到erpId,CRM系统的人只能看到crmId,但推理机能看到完整的企业实体。

踩过的坑:虚拟映射听起来很美,但实现起来有一个大问题——查询性能。跨系统虚拟映射意味着每次查询都要实时从源系统取数据,延迟可能到几秒甚至几十秒。我的折中方案是:高频查询的数据做缓存(Redis),低频查询走实时映射。缓存命中率大概80%,够用了。

■ L3 · 语义层:整个架构的心脏

语义层是本体驱动ERP最核心的一层,也是跟传统架构差别最大的地方。它干了四件事:

1. OWL本体模式定义

用OWL定义业务领域的概念结构——类、属性、关系、限制。供应链领域的核心本体大概有这些:

核心类: EnterpriseEntity(企业实体) ├── Supplier(供应商) ├── Customer(客户) Material(物料) Contract(合同) Project(项目) Order(订单) RiskEvent(风险事件) ComplianceRule(合规规则) 核心关系: supplies(供应商 → 物料) involves(合同 → 项目) affects(风险事件 → 项目) requires(合规规则 → 合规对象) 传导到(风险 → 风险)——传递性属性

2. SWRL推理规则

定义业务推理逻辑。比如"战略供应商的合同金额超过50万,需要供应链总监审批"——这条规则在OWL里是一条SWRL公理,推理机自动推导,不用写代码。

我在供应链场景里大概写了40多条SWRL规则,覆盖审批、风险传导、合规检查三大类。

3. 实体消歧引擎

这是参考Palantir的Link Engine做的。不同系统里同一个实体的表述不一样——ERP叫"华为技术有限公司",CRM叫"华为",合同系统叫"华为终端有限公司"。消歧引擎根据名称相似度、法人信息、注册地址等属性,自动合并为同一个本体实体。

实现方式我用了Neo4j的图算法 + 一个自定义的相似度计算,准确率大概85%,剩下15%需要人工确认。对于企业级应用来说,85%自动消歧已经省了大量人力。

4. 语义权限控制

权限控制内嵌在语义层,不是应用层做的。精确到实体/属性级别——某用户能看"供应商A的名称和地址",但不能看"供应商A的报价和历史订单金额"。

这个设计也是照Palantir学的——它把权限做在Ontology里,AI Agent继承本体权限,不会泄露用户没权限看的数据。我用的是Apache Jena的SPARQL查询 + 自定义的权限过滤函数,每次SPARQL查询都自动注入权限条件。

■ L4 · AI Agent层:让大模型理解你的业务

最后一层是AI Agent,基于spring-ai-alibaba框架构建。规划支持约20个高级Agent并发。

为什么不用裸的大模型API?因为裸LLM不懂你的业务——它不知道"战略供应商"是什么概念,不知道"风险传导"的逻辑链怎么走,不知道"审批流"有哪些规则。这些业务知识全在本体语义层里,Agent必须通过语义接口来获取。

我的Agent设计是这样的:

供应链Agent:回答采购、库存、供应商相关的问题。调用语义接口获取实体和关系,而不是直接查数据库。 风险分析Agent:分析风险传导路径。"如果供应商A出了合规问题,哪些合同和项目会受影响?"——这个问题需要沿着本体定义的关系链走,普通RAG做不到。 合规审查Agent:检查合同、采购是否符合合规规则。调用SWRL推理结果,直接拿到"哪些对象需要合规审查"的结论。 推演推理Agent:做兵棋推演级别的分析——"如果我们换掉供应商A,供应链会有什么连锁反应?"这种问题需要本体推演,不是简单的数据查询。

我做了一个关键决定:Agent不直接接触底层数据库,只通过语义层的接口来获取信息。为什么?两个原因:

1. 安全:Agent继承了本体层的权限,不会输出用户无权看到的数据。 2. 可控:Agent的推理基于本体定义的业务逻辑,幻觉问题大幅减少——因为本体约束了LLM的推理范围。

这跟Palantir AIP的做法其实一样——大模型不直接读原始数据,而是通过Ontology语义接口拿结构化知识,基于这些真实知识来生成回答。

■ 三个最大的坑

坑1:本体层和业务逻辑层混在一起

第一版设计里,我把SWRL推理规则写在了业务逻辑层(Java代码里)。结果是:改一条审批规则,要改Java代码、改数据库、改流程引擎——三处联动,维护成本巨大。

后来我把推理规则全部移到OWL本体层,业务逻辑层只负责"执行推理结果"。改规则只改OWL文件,其他层不用动。这才是本体驱动架构的正确姿势——规则在语义层,执行在业务层

坑2:Neo4j做语义层不够用

之前试过用Neo4j替代Jena做整个语义层。结果发现Neo4j的属性图模型没法表达OWL的高级特性(传递性属性、属性链、等价类推理)。而且Cypher查询跟SPARQL不是一个路子——SPARQL是W3C标准的语义网查询语言,Cypher是图数据库方言,语义表达能力差很多。

最终方案:Neo4j只存映射后的实体关系图谱,OWL本体和推理交给Jena。各干各擅长的事。

坑3:AI Agent的上下文管理

20个Agent并发跑,每个Agent都有自己的对话上下文。如果Agent之间要共享推理结果(比如风险分析Agent发现了一个传导路径,推演Agent需要用这个结果做进一步分析),上下文传递就很麻烦。

我的解决办法是:用本体层做Agent之间的信息共享——AgentA的推理结果写入本体层(作为一个新的OWL个体),AgentB通过语义接口读取这个个体。本体层变成了Agent之间的事实共享层。

踩过的三个大坑坑1:规则和逻辑混在一起改一条审批规则要改Java+DB+流程引擎✓ 规则移到OWL本体层✓ 业务层只执行推理结果✓ 改规则只改OWL文件坑2:Neo4j做语义层不够属性图模型无法表达OWL高级特性✓ Neo4j只存实体关系图谱✓ OWL本体交给Jena✓ 各干各擅长的事坑3:Agent上下文共享20个Agent并发推理结果怎么传递?✓ 推理结果写入本体层✓ 其他Agent通过语义接口读取✓ 本体层=Agent事实共享层

■ 供应链切入:为什么先做供应链

这套架构规划覆盖五个方向——本体建模、数据融合、智能分析、监察辅助、合规治理。但我选择供应链作为切入点,有三个原因:

1. 关系复杂度高——供应商、物料、合同、项目、订单之间的多跳关系,正好能发挥图数据库和本体推理的优势。 2. 数据源多——ERP、CRM、合同系统、供应商平台……多源数据正好需要语义映射来统一。 3. 有真实痛点——风险传导分析、跨供应商比价、合规审查,这些都是传统系统做不好的场景,本体驱动方案有明显优势。

供应链做完之后,往纪检监察方向扩展也不难——纪检场景本质上也是"关系网络分析""风险传导""合规审查",只不过领域概念从"供应商""合同""风险事件"换成了"公职人员""权力关系""违纪线索"。本体结构可以复用,只需要扩展领域概念和推理规则就行。

■ 互动时间

看完这套架构,你有什么想法?

两个问题:

1. 如果你要设计一套本体驱动的系统,你会选哪个领域切入?供应链、金融风控、医疗、还是其他? 2. 你觉得这四层架构里,哪一层最难落地?我猜大部分人会说L3语义层——你觉得呢?

评论区聊聊,我逐条回复。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • ■ 先说清楚:这不是传统ERP,也不是数据中台
  • ■ 四层架构:从数据到AI Agent
  • ■ L1 · 存储层:双库并行,各有分工
  • ■ L2 · 数据映射层:不搬数据,只做语义映射
  • ■ L3 · 语义层:整个架构的心脏
  • ■ L4 · AI Agent层:让大模型理解你的业务
  • ■ 三个最大的坑
  • ■ 供应链切入:为什么先做供应链
  • ■ 互动时间
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档