《Ontology 入门与实践手册》

09 系统构建:分层架构、Agent 接入、选型与路线图

前面几篇讲的是"本体本身"。这一篇讲"本体所在的系统":它在整体架构里坐在哪一层、AI Agent 通过什么方式使用它(重点是 MCP 和工具调用)、有哪些产品和技术路线可选,以及一条从零到可用的分阶段路线图。

1. 分层架构

一个支撑示例商城售后的本体系统,可以分成六层:

图 9-1:本体系统的六层架构
图 9-1:本体系统的六层架构
层职责不该做的事
入口层呈现信息、收集用户意图、展示确认卡片自己实现业务规则
智能体层理解用户想做什么、规划步骤、组织回复直接访问数据库,或绕过动作改数据
能力暴露层把本体能力包装成工具,做认证、限流(限制调用频率)、日志复制一套权限规则
本体服务层定义对象和关系,执行规则校验,编排动作,记录审计替代数据库做海量计算
数据接入层对接源系统,统一身份,保证数据质量随意改写源数据
源系统保存业务数据的当前值,执行最终事务被 Agent 直接写库

一个国内厂商的说法很好地概括了分工:"AI 负责理解和编排,本体负责承载世界,数据库负责运行世界。"入口层也可以绕过智能体层直接调用能力层——客服工作台上的"发起退款"按钮,和 AI 客服调用的是同一个动作,这正是本体的价值之一。

1.1 两种流派:本体做"大脑",还是也做"肌肉"

在本体服务层要不要自己执行事务这件事上,业内有两种主张:

语义中枢型本体自持型
主张本体是语义中枢和规则权威,但不是执行引擎;事务交给下层系统本体自己拥有数据、函数、派生和行动能力,数据按本体定义持续更新
比喻本体负责"立法与审判",事务层负责"执行与善后"应用"从本体中生长出来"
优点不替换现有系统,改造小,易于渐进落地链路短、上下文一致、实时派生能力强
代价跨层一致性要额外保障需要迁移或复制数据,平台依赖重
适合已有成熟业务系统的企业,如示例商城新建系统,或数据分散且缺乏可用业务系统的场景

示例商城选择语义中枢型:业务数据留在原系统,本体保存语义、映射和轻量索引,动作最终通过售后系统和支付网关的接口落地。

1.2 一次请求穿过六层

用第 03 篇那句"外套不要了,退到原卡"走一遍,看每一层各做了什么:

层这一层做的事输出
入口层收到客户消息,带上会话身份(已登录的会员号)用户消息 + 用户身份
智能体层识别意图为"申请退货退款",抽取槽位:商品"黑色外套"、时间"上周"、退款方式"原路"结构化意图
能力暴露层校验调用者身份,把请求转成对本体工具的调用,记录调用日志工具调用
本体服务层解析客户、沿关系找到订单行;计算可退金额;按规则判断资格和审批要求;创建动作实例判断结果 + 动作实例
数据接入层按主键实时读取订单、物流签收时间;把动作写入请求转成售后系统接口调用读写请求
源系统售后系统创建售后单,返回单号业务回执

注意两点:一是身份从入口层一路传下去,每一层都知道"这是在替谁办事";二是判断集中在本体服务层,智能体层只负责理解和组织语言,不自己判断"能不能退"。

1.3 本体服务层里面有什么

本体服务层是整个系统的核心,内部通常包含六个组件:

图 9-2:本体服务层的六个组件
图 9-2:本体服务层的六个组件
组件职责示例商城的关键点
模型仓库存放本体定义及其版本,支持评审和回滚定义以文本形式放在版本库,发布时生成运行时模型
查询引擎按对象和关系检索、遍历,把请求翻译成对源系统的读操作读交易数据走实时查询,并设超时和行数上限
函数与规则引擎计算派生属性,执行约束和决策表"可退金额"只在这里计算一次
动作引擎管理动作实例的完整生命周期幂等键、参数冻结、两层状态、补偿
索引支持按名称、别名、编号快速定位对象客户手机号、订单号、商品别名
审计台账只追加地记录每次查询和动作的证据第 10 篇的"证据表"就来自这里

1.4 本体不必换数据库:逻辑层与查询改写

很多团队一听"本体",第一反应是"是不是要上图数据库,把数据搬一遍"。不一定。1.1 节说的"语义中枢"路线里,本体就是一层逻辑模型:它定义"客户""订单行""售后单"是什么,再说明每个概念在现有数据里由哪些表、字段实现。数据留在原处,查询时再翻译过去。

这条路有成熟的标准和理论基础:

放到示例商城看一个例子。Agent 想知道"客户 C-88 有哪些处理中的售后单"。在本体里,这只是沿着"客户—下单→订单—包含→订单行—被申请→售后单"走一遍,再筛选状态属于"处理中"。映射负责告诉系统:客户对应账号表(取归并后的客户编号),订单行对应 order_item,售后单对应 refund_apply,"处理中"对应几个状态码。查询改写后得到一条带几次连接的 SQL,交给订单库的只读副本执行。售后单的映射写成 R2RML,大致是这样(示意,省略了前缀声明):

# 示意:把售后申请表映射成"售后单"
<#AfterSaleCaseMap>
  rr:logicalTable [ rr:tableName "refund_apply" ] ;
  rr:subjectMap [
    rr:template "https://shop.example/after-sale/{id}" ;
    rr:class shop:AfterSaleCase
  ] ;
  rr:predicateObjectMap [
    rr:predicate shop:forOrderLine ;
    rr:objectMap [ rr:template "https://shop.example/order-line/{order_item_id}" ]
  ] .

实际项目里,你不一定要用 R2RML 和 SPARQL;很多平台用自己的映射格式和查询接口。但"概念—映射—改写—执行"这四步是共通的。虚拟化和物化也不是二选一:

方式适合什么情况要注意什么
虚拟化(查询时改写)数据新鲜度要求高、不想复制数据、源系统能承受查询复杂查询的性能取决于源库,要设超时和行数上限(见 1.3 节查询引擎)
物化(把映射结果存成图或宽表)多跳遍历多、分析量大、源系统不能承压有同步延迟,回答时要说明数据截至何时
混合交易对象实时查,历史和统计物化两边由同一份映射生成,避免口径分叉

这就是本体与 SQL 的分工:本体解释世界,SQL 负责计算。本体决定"问的是什么、谁能看什么、沿哪条关系走",数据库负责把数算对、算快。动作(写操作)不走这条路,仍按第 2 节通过业务系统的接口执行。

1.5 语义在上游,产品语义在下游

很多企业其实已经有好几套"语义":BI 里有一套指标,数据目录里有一套业务术语表,知识库里有一套概念,图数据库里有一套实体,Agent 的提示词里有一套上下文,API 又定义了一套对象。每一套都号称"单一事实来源",结果一个企业里有五六个"单一事实来源"(第 08 篇反模式 20)。

更稳妥的架构是反过来:先有一份规范语义模型(Canonical Semantic Model),再从它生成多个技术投影(Multiple Projections):给 BI 的指标定义、给 API 的数据结构、给 Agent 的工具说明、给图查询的模型、给人看的文档和自动测试。"定义一次、到处使用"真正难的不是定义一次,而是让所有系统都用同一份定义,而不是各自复制一份,再慢慢走样。

要做到这一点,这份上游模型至少需要六项能力:

能力含义示例商城怎么做
1 稳定身份对象类型、关系、指标、规则都有稳定编号,不只靠名字"客户"类型编号 ot.customer,"退款率"指标编号 m.refund_rate;改名不改编号
2 可执行定义公式、类型、粒度、单位、时间口径、约束写成机器能执行的形式,而不只是一段文字可退金额是函数,审批阈值是带版本的规则 R04(第 07 篇),而不是 Wiki 上的一句话
3 物理映射知道每个业务概念由哪些表、字段、事件或计算实现售后单对应 refund_apply,状态码有映射表(见 1.4 节)
4 关系是一等公民关系有名字、方向、数量约束,必要时带时间和属性,而不只是外键"售后单针对订单行";"账号归并到客户"带生效时间
5 指标在同一语义体系指标挂在对象上,和客户、商品、时间、组织等概念相连退款率的分子分母都定义在"订单行"上,可以按客户等级、品类切片
6 多技术投影同一份模型能生成 SQL 视图、API 结构、Agent 工具、图模型、文档和测试工具清单(2.3 节)和指标层定义(第 05 篇 4.2 节)都从模型仓库生成或校验

小团队不必一开始就造一个"编译器"。最低限度的做法是:所有定义集中放在 1.3 节的模型仓库里;指标层、工具说明、文档在发布流程中从这里生成,或者至少和它自动比对;任何下游想新增一个概念,先回到模型仓库登记。这里讲的是原则,不是某个产品。有厂商文章把它概括为"语义在上游,产品语义在下游",并借此介绍自家平台(见参考引用),读者取其思路即可。

2. Agent 怎样接入本体

2.1 MCP 是什么

MCP(模型上下文协议)是一种让 AI 应用以统一方式发现和调用外部工具与数据的开放协议。在它的规范里,服务端通过"列出工具"接口告诉客户端有哪些工具,每个工具有名称、说明和输入参数的结构定义(也可以声明输出结构);客户端通过"调用工具"接口执行,执行出错时返回带错误标记的结果,供模型调整后重试。

规范对安全有明确要求:服务端必须校验所有输入、实施访问控制、对调用限流;客户端应当在敏感操作前向用户确认、记录工具调用以便审计;并且应当始终有人能够拒绝工具调用。规范还提醒,工具上声明的"只读""破坏性"等提示信息,除非来自可信的服务端,否则不应被信任。

2.2 工具设计的六条原则

原则一:暴露业务工具,不暴露原始查询语言。有工程实践者在 OWL 本体之上做数据 Agent 时发现,让模型直接拼写图查询语句很危险:在没有开启推理的情况下,查询"某类商品"可能静默漏掉它的子类,"语法正确、结果不完整"。他的做法是提供语义明确、参数化的高层函数,把"是否包含子类"这类细节封装在工具内部。

原则二:先发现,后调用。不要一次性把几十个工具的完整说明塞给模型。一种做法是"两级暴露":先给一份轻量能力目录(工具编号、能力描述、涉及的对象类型、风险级别),模型选中后再查询该工具的详细参数和前置条件。

原则三:读写分离,标注风险。查询类工具和动作类工具分开,动作类再按风险分级。模型看到的风险标注只是提示,真正的拦截必须在服务端完成。

原则四:写操作两段式。先"试算/校验"(不产生任何修改,只返回是否通过、为什么),再"提交"。12306 对比实验里的本体工具组就包含"动作校验(干跑)"和"动作执行"两个独立工具。

原则五:返回结构化的理由。被拦截时,返回规则编号、级别和证据,而不是一句"失败"。这样模型能向用户解释,也能决定是否转人工。

原则六:工具不比人大。工具以"当前用户"的身份执行,权限由业务系统判断;接入层只负责把 Agent 用户映射到真实账号,不复制权限规则(见第 08 篇反模式 11)。

2.3 示例商城的工具清单

工具类型说明
list_capabilities发现返回能力目录:工具、涉及对象、风险级别
resolve_customer查询按手机号、订单号等解析出唯一客户对象(合并多账号)
get_case_context查询返回售后单及其订单行、退货包裹、退款单、相关规则
compute_refundable函数计算某订单行的可退金额,返回计算过程
validate_action校验对指定动作和参数做干跑,返回是否通过、命中的规则、是否需审批
submit_action动作提交动作;超阈值时进入待审批,返回执行实例编号
get_action_status查询查询某次动作的执行状态和卡点
{
  "name": "validate_action",
  "description": "对本体中已定义的动作做干跑校验,不产生任何修改。返回是否通过、命中的规则编号与证据、是否需要审批。",
  "inputSchema": {
    "type": "object",
    "description": "按动作分支:不同动作的 target_id 含义和参数各不相同",
    "oneOf": [
      {
        "properties": {
          "action": { "const": "create_case" },
          "target_id": { "type": "string", "description": "订单行编号,例如 L-2" },
          "params": {
            "type": "object",
            "properties": {
              "case_type": { "type": "string", "enum": ["no_reason_return", "quality_return"] },
              "quantity": { "type": "integer", "minimum": 1 },
              "amount": { "type": "number", "multipleOf": 0.01, "description": "申请退款金额,单位元" }
            },
            "required": ["case_type", "quantity", "amount"]
          }
        }
      },
      {
        "properties": {
          "action": { "const": "initiate_refund" },
          "target_id": { "type": "string", "description": "售后单号,例如 AS-2045" },
          "params": {
            "type": "object",
            "properties": {
              "amount": { "type": "number", "multipleOf": 0.01, "description": "退款金额,单位元" },
              "method": { "type": "string", "enum": ["original_route"] }
            },
            "required": ["amount", "method"]
          }
        }
      }
    ],
    "required": ["action", "target_id", "params"]
  }
}

上面只列了两个分支,"关闭工单"等其他动作同理各占一个分支。要点有三:一是 target_id 的含义随动作而变(创建售后单时是订单行,发起退款时是售后单),必须按动作分别写清;二是参数要有类型和单位,而不是一个笼统的 object;三是 submit_action 的参数与此相同,另加一个 request_id 作为幂等键——它在"决定办这件事"时生成一次,之后的重试都带同一个值。MCP 规范还允许为工具声明输出结构(outputSchema)和行为注解(如只读、破坏性等提示);但规范同时要求,除非来自可信的服务端,客户端不应信任这些注解,真正的拦截仍在服务端完成。

图 9-3:通过 MCP 创建售后单的调用过程
图 9-3:通过 MCP 创建售后单的调用过程

注意 AI 客服在这里提交的是"创建售后单",而不是"发起退款":按第 07 篇的权限矩阵,它对"发起退款"只有建议权,submit_action 收到它提交的 initiate_refund 会直接按权限拦截。退款要等售后单审核通过、退货验收、进入"待退款"之后,由客服发起。比如客服小林在工作台上对售后单 AS-2045 发起 899 元退款时,validate_action 会返回"通过 R01;命中 R04 v2,需主管审批",submit_action 之后动作实例进入"待审批"、参数冻结,主管老周批准后才经支付网关执行。

2.4 智能体层的三道判断

工具设计好了,智能体层自身也要守住分寸。一篇讨论意图识别的文章给出了一个清晰的分层:意图层回答"用户想做什么",权限层判断"用户能不能这样做",执行层确认"这个动作是否应该立即发生"。三者不能混为一谈,否则很容易把"理解成功"误当成"授权完成"。相应地,智能体每一轮都应在四种出口中选一个:执行、追问(缺参数或有歧义时)、拒识(超出范围时)、确认(高风险动作前)。

放到示例商城:客户说"把那件外套退了",意图层识别为"申请退货退款";本体解析出对应的订单行,权限层确认 AI 客服对"创建售后单"只有"申请"权(对"发起退款"只有建议权);执行层判断这是会产生业务后果的动作,于是选择"确认"出口——先向客户复述要退的商品、数量和金额,客户确认后再提交申请。和本体配合时,意图和槽位最好直接映射到本体里的动作和参数类型,这样意图识别的结果可以原样交给干跑校验。

2.5 安全设计要点

把本体暴露给 Agent,等于开了一扇新的门。MCP 官方的安全最佳实践和 OWASP 的大模型安全清单里,有几条与本体系统直接相关:

要点含义示例商城的做法
不做令牌透传MCP 服务不能接受并转发并非颁发给它自己的访问令牌,否则会绕过限流、校验,审计也无法分辨调用方能力暴露层不转发客户端的令牌,而是通过令牌交换(OAuth 2.0 Token Exchange,RFC 8693)换取一个面向业务系统、范围更窄、代表当前用户的新令牌,下游系统据此按用户权限判断;只有下游系统无法接受用户令牌时,才退而用服务账号加签名的用户身份声明,并在审计中同时记录两者
权限范围最小化起步只授予低风险的发现和只读范围,需要高风险操作时再逐步提升,并记录提升事件"小售"默认只有查询和干跑权限,提交动作需要单独授权
防"糊涂代理"代理服务器替多个客户端访问第三方时,必须对每个客户端单独征得用户同意,不能复用一次同意每个接入的 Agent 应用单独注册、单独授权
会话不等于认证服务端必须验证每个请求,不能仅凭会话编号认定身份;会话编号要随机、不可猜测,并与用户绑定每次工具调用都携带并校验用户身份
完全中介所有经由工具发往下游的请求都要按安全策略校验,而不是靠模型判断动作引擎和业务系统各自校验,模型的判断只作参考
记录与限流记录工具调用,并对调用频率设上限,在造成大面积损害前发现异常同一用户每分钟提交动作次数设上限,异常时告警

代表谁:三种身份要分清。同一个能力暴露层可能同时服务三类调用。一是面向客户的 AI 客服"小售",它代表已登录的客户(如会员 C-88),只能看这位客户自己的订单,只能以客户名义提交申请。二是面向员工的助手,例如客服小林工作台上的助手,它代表员工,按员工的角色和数据范围行事。三是 Agent 应用自身的身份(如"小售"这个应用),用于限流、审计和区分是哪个应用在调用。一次调用的实际权限,是"被代表的用户能做的"和"这个应用被允许做的"两者的交集:客户本人可以申请售后,但"小售"应用对"发起退款"只有建议权,所以它不能替客户提交退款。RFC 8693 把这种情况称为"委托":新令牌的主体是用户,代理方(actor)另行记录,审计时两者都能查到。

图 9-4:三种身份与权限交集
图 9-4:三种身份与权限交集

2.6 可观测与审计

出了问题时,要能回答"Agent 为什么这样做"。建议每次工具调用至少记录这些字段:

字段示例
调用编号与会话编号call-7f3a,会话 s-1029
代表的用户与 Agent 应用员工:客服小林;应用:客服工作台
工具与参数(敏感字段脱敏)submit_action;发起退款,AS-2045,899.00 元,request_id 由工作台生成
本体版本与规则版本aftersales 1.0.0;R01 v1,R04 v2
结果与耗时R01 v1 通过;R04 v2 命中,进入待审批;耗时若干毫秒
关联的动作实例ACT-0098

这些记录有三个用途:排查问题、做影子模式对比、在审计时还原决策过程。注意日志本身也包含敏感信息,要设置访问权限和保留期限。

2.7 工具说明怎么写

工具说明是 Agent 在运行时读到的"操作手册",写得好不好直接影响它选对工具、填对参数。一位作者把它概括为"工具说明是 Agent 的运行时知识"。比较一下同一个工具的两种写法:

写法工具说明问题或优点
差refund:退款接口,参数 id 和 amount不知道 id 是什么编号,不知道金额单位,不知道会不会真的退钱
好submit_action:提交本体中已定义的业务动作。target_id 为售后单号(形如 AS-开头),amount 单位为元、两位小数。提交前应先调用 validate_action;若命中审批规则,动作进入待审批而非立即执行。不支持修改已有退款金额。说明了编号格式、单位、调用顺序、可能的结果和边界

写工具说明的几条经验:

2.8 平台里的现成做法

商业平台已经在提供类似能力。Palantir 的 Ontology MCP 把应用范围内的对象类型、动作类型和查询函数暴露为 MCP 工具,外部 Agent 可以读取对象、执行预先定义的动作、调用查询函数,并受应用层面的范围限制;它与另一个面向开发者、用于搭建和修改本体结构的 Palantir MCP 是两回事。Palantir 文档还展示过一种配置:让 AI 提出的修改只是"暂存",由人审查后才生效,并记录决策的来龙去脉——这是可以选择的配置方式,并不是所有场景的默认行为。微软 Fabric IQ 的本体也把"供 AI Agent 使用同一套业务词汇"作为主要目标之一(目前为预览版)。

3. 选型

路线代表适合注意
商业运营本体平台Palantir Foundry / AIP;Microsoft Fabric IQ 本体(预览)预算充足、需要完整动作与写回、愿意平台化闭源,平台依赖重;预览版功能可能变化
指标语义层加数据 AgentSnowflake、Databricks 的语义与指标能力;dbt、Cube 等指标语义层以分析问数为主,数据已在数仓写操作和业务动作能力弱
图数据库与 RDF 平台Neo4j(属性图);Stardog、TopBraid 等(RDF/OWL)关系复杂、需要推理或严格校验动作和业务写回需另建
国内本体平台多家厂商的本体应用平台需要中文支持、私有化部署公开材料多为厂商自述,务必做概念验证
开源组合与自研薄层YAML 或 OWL 定义本体,关系数据库加图扩展,自建 MCP 服务团队有工程能力,想先小步验证开源项目成熟度差异大,选型前读源码

选型时建议回答六个问题:

  1. 需要写回和业务动作,还是以只读分析为主?
  2. 现有数据主要在哪个平台?能否就近建设?
  3. 是否有私有化部署、数据不出境、完全离线的要求?
  4. 团队熟悉的是 SQL、图查询还是语义网技术?
  5. 预算和持续运维能力如何?
  6. 将来想换平台时,本体定义能否导出?(尽量让本体定义以文本形式保存在版本库里)

对示例商城这样的场景,一条务实的路线是:先用自研薄层(YAML 定义本体、规则表、少量 MCP 工具)跑通退货退款闭环,验证价值和团队能力之后,再决定是否迁移到商业平台。

3.1 演练:示例商城的打分表

把六个问题变成可打分的维度,按业务需要设权重。下面是一次演练性质的打分(满分 5 分,分数代表"与示例商城需求的匹配度",不是对产品的客观评价):

维度权重自研薄层商业运营本体平台指标语义层加数据 Agent
写回与业务动作30%4(自己实现,可控)52
与现有系统的贴合20%5(直接对接现有接口)3(需要接入平台)4
部署与合规15%533
团队技能匹配15%434
成本10%424
可迁移性10%5(定义在自己版本库)23

按权重计算,自研薄层在这个演练中得分最高。但请注意:打分的前提是示例商城有工程团队、有可用接口、范围小。换一家系统老旧、团队薄弱的公司,结论可能完全相反。打分表的价值不在分数,而在于逼着团队把"我们最在意什么"说清楚。另外,这张表没有单列"上线周期"和"持续运维负担":自研薄层起步快,但动作引擎、审计、权限对接都要自己长期维护;商业平台起步慢、运维多由厂商承担。如果这两项对你很重要,应当加进来重新算。

3.2 概念验证怎么做

不论选哪条路线,正式投入前都应做一次概念验证。建议把它设计成一次"用能力问题考试":

  1. 准备考题:从第 06 篇的能力问题里挑 8 到 10 个,覆盖查询、判断、动作三类,每题准备标准答案。
  2. 准备考场:用脱敏的真实数据,至少包含身份重复、部分退款、遗留状态码这些"脏"情况。
  3. 考三件事:答案对不对(结果正确率)、过程对不对(工具和参数是否正确、是否越权)、改起来难不难(现场改一条规则,例如把审批阈值从 500 改成 800,看需要多久、影响哪些地方)。
  4. 看非功能:查询耗时、并发表现、日志是否完整。
  5. 写结论:哪些能力问题过了、哪些没过、没过的原因是平台限制还是建模问题。

第 3 点里的"现场改规则"特别能看出差别:有的方案改一条配置即可,有的需要改代码、重新部署。

4. 路线图

图 9-5:分阶段路线图
图 9-5:分阶段路线图
阶段目标交付物进入下一阶段的条件
0 准备定范围、定裁决人范围卡、能力问题、术语表业务负责人签字确认
1 只读Agent 能准确回答查询和判断类能力问题对象与关系、数据绑定、质量报告、只读工具能力问题测试通过率达标
2 建议Agent 能给出正确的动作建议动作定义卡、规则表、干跑校验、影子模式报表影子模式指标连续稳定
3 有限执行低风险动作自动执行,高风险走审批审批流、补偿机制、审计台账无重大事故,人工接管率可接受
4 扩展换货、价保等新场景复用已有对象公共核心模型与场景应用分离按新场景重新走一遍阶段 0

扩展阶段有一个值得提前规划的结构:把客户、商品、订单这些跨场景共用的定义放在公共核心模型(注意它不是第 05 篇说的指标语义层),售后、营销、风控等场景应用只声明自己需要用到哪些对象、关系、工具和权限。这样新场景接入时复用而不是复制。

4.1 每个阶段最容易出的问题

阶段常见问题应对
0 准备范围越谈越大;裁决人只挂名用能力问题卡范围;裁决人参加每周评审
1 只读身份归并和数据质量问题集中爆发预留数据治理时间;低置信度归并交人工
2 建议建议和人工处理不一致,但原因说不清每条不一致都记录原因,分到"理解错 / 数据错 / 规则缺"三类
3 有限执行外部系统故障导致中间状态幂等、补偿、两层状态;先在低峰时段开放
4 扩展新场景另起炉灶,复制了一套客户定义公共核心模型评审,新对象先查重

5. 非功能要求清单

类别要求说明
性能查询有超时、返回行数和并发上限防止 Agent 发起过大的查询拖垮源系统
一致性本体写入、质量检查、索引更新作为一次整体操作,失败整体恢复;索引与源系统之间的同步(如变更数据捕获 CDC)要监控新鲜度,需要最新值的判断一律回源查询避免 Agent 在"本体已改、索引未改"的中间状态下工作
可用性本体服务不可用时,客服工作台可退回到原有系统操作本体是增强,不应成为单点
安全以用户身份执行、最小权限、敏感字段脱敏见 2.5 节
审计工具调用和动作执行全量记录,只追加不修改见 2.6 节
可迁移本体定义可导出为文本降低平台锁定风险
可测试有独立的测试环境和能力问题回归集每次变更先在测试环境跑一遍

6. 常见问题

问:一定要用 MCP 吗?

不一定。MCP 的好处是标准化,同一套工具可以被不同的 Agent 框架和客户端使用。如果你的 Agent 只在一个内部框架里运行,用普通的函数调用或内部接口也可以。关键是本篇第 2.2 节的那些设计原则,而不是协议本身。

问:本体服务会不会成为性能瓶颈?

如果交易数据都实时回源查询,确实会增加延迟。常见的缓解办法是:主数据和关系建索引,交易数据只按主键查询,并对热点查询做短时缓存。对客服场景来说,正确性通常比几百毫秒的延迟更重要。

问:本体服务层和业务中台是什么关系?

可以互补。业务中台提供可复用的业务服务(如统一的退款服务),本体在其上提供统一的语义、规则和面向 Agent 的动作入口。如果中台的服务已经很规范,本体的动作可以直接编排中台服务。

问:本体服务出故障时,客服还能工作吗?

应该能。设计时就要保留"降级通道":本体服务不可用时,AI 客服停止办理动作、只做安抚和转人工;客服工作台退回到原有业务系统的操作界面。等服务恢复后,再核对故障期间人工办理的单据,必要时补录审计记录。

问:要不要一开始就支持多个 Agent?

不必。先服务好一个 Agent 和一个人工入口(如客服工作台),证明"人和 Agent 用同一套动作"可行。多 Agent 接入时,主要的新增工作是为每个 Agent 应用单独注册、单独授权和单独记录日志。

本篇要点

参考引用

  1. 《Model Context Protocol Specification: Tools(2025-11-25 版)》,Model Context Protocol 官方规范。原文
  2. 《Model Context Protocol Specification: Security Best Practices(2025-11-25 版)》,Model Context Protocol 官方规范。原文
  3. 《LLM06:2025 Excessive Agency》,OWASP Gen AI Security Project。原文
  4. 《Ontology MCP (OMCP): Overview》,Palantir Foundry 官方文档。原文
  5. 《Why create an Ontology?》,Palantir Foundry 官方文档。原文
  6. 《Ontology building: Overview》,Palantir Foundry 官方文档。原文
  7. 《What is ontology (preview)? — Microsoft Fabric IQ》,Microsoft Learn。原文
  8. 《Cube MCP Server》,Cube 官方文档(经本项目调研报告收录)。原文
  9. 《neo4j/mcp》,Neo4j 官方 GitHub(经本项目调研报告收录)。原文
  10. 《一文读懂怎么让 Agent 理解业务,别一上手就写 Prompt!》,陈思州 Datawhale。Cubox,原文
  11. 《AI FDE 从一句话到运行系统:本体平台背后的真实架构》,OntoFlow本体平台 AbutionGraph。Cubox,原文
  12. 《什么是Palantir本体论?不难理解,在12306买一次车票就懂了》,月夜烛峰。Cubox,原文
  13. 《Palantir平替-“平民级”本体应用开发平台:4个步骤完成交付》,OntoOS-本体智能 AbutionGraph。Cubox,原文
  14. 《Ontology(本体)Part 3:Ontology (OWL) 驱动的数据分析智能体设计与实战》,Fan 技术与艺术认知。Cubox,原文
  15. 《LLM Wiki + Ontology:让企业知识从“可检索”走向“可行动”》,划小船。Cubox,原文
  16. 《分享一个Ontology本体论的AI实操演示,从实际业务看懂本体价值》,月夜烛峰。Cubox,原文
  17. 《WorkBuddy+金蝶云星空落地一席谈:权限怎么管》,老丁 老丁AI。Cubox,原文
  18. 《我做了一套本体Ontology工程系统,让Agent能读懂企业数据》,windom Yu 硅基斥候S01。Cubox,原文
  19. 《分享一个 AI 本体智能应用开发平台设计方案》,月夜烛峰。Cubox,原文
  20. 《自称开源版 Palantir:一张图让每个 AI 决策都查得到来龙去脉》,AhaAaron Hey AI Coder。Cubox,原文
  21. 《RFC 8693: OAuth 2.0 Token Exchange》,IETF,2020。原文
  22. 《R2RML: RDB to RDF Mapping Language》,W3C Recommendation,2012-09-27。原文
  23. 《OWL 2 Web Ontology Language Profiles (Second Edition)》,W3C Recommendation,2012-12-11。原文
  24. 《Ontop Guide: Introduction》,Ontop 项目官方文档(自由大学博尔扎诺与 Ontopic 支持)。原文
  25. 《企业AI真正缺的不是 SQL,而是Semantic Layer》,本体论应用 AbutionGraph(厂商文章:作者团队开发 OntoFlow 等本体产品,文中观点带有产品立场)。Cubox,原文