ApFramework Logo
Published on

为 AI Agent 构建企业语义层:从可信查询到受控行动

Authors
  • avatar
    Name
    Shoukai Huang
    Twitter
一队徒步者沿着山脊前进,象征企业 Agent 建设需要受控的共同路径
企业 Agent 的语义层建设需要把理解、权限和行动组织成可验证的共同路径(Photo by Benjamin Chambon on Unsplash

目录

企业开始给 Agent 接入数据仓库、CRM、ERP 和 MCP 工具之后,常常会遇到一个反直觉的问题:模型已经足够聪明,为什么它仍会给出彼此矛盾的指标、连错对象,或者在不该执行的地方触发业务动作?

真正的问题不是 Agent 能否“访问更多数据”,而是企业是否把数据背后的含义、权限和证据写成了它无法绕过的契约。

设想一个很具体的任务:芝加哥仓库发生重大延误。管理层要求 Agent 找出所有受影响的 VIP 客户订单,并暂停该地区相关产品的数字营销活动。它看似只是一次跨系统查询,实际上同时包含六个问题:什么才算“受影响”?谁是“VIP”?订单、库存、客户和活动能否这样关联?当前用户能看到哪些客户信息?暂停活动是否允许自动执行?事后如何解释这次决定?

数据目录、Ontology、RAG 和 MCP 都有价值,但没有任何一个单独回答这六个问题。面向 Agent 的语义层,正是在这里发挥作用。

这篇文章的判断:语义层不是整个答案

这篇文章不把语义层当成一个产品类别,而把它视为企业 Agent 的基础架构能力。它先回答“业务语言如何变成可信查询”,再回答“可信结论如何在权限与风险边界内变成业务动作”。

核心判断是:语义层决定 Agent 是否理解对了业务世界;Action Contract 定义一个业务动作如何安全执行;策略层裁决当前这次动作是否获准。 三者协作,才构成一个能进入运营流程的 Agent。

如果只需要只读、单领域的指标问答,语义层可以很轻:几个被业务确认的指标、关系和查询接口就足够。只有当 Agent 开始跨域判断、代表用户调用工具或改变运营系统时,控制面才必须变得完整。把这两种场景分开,是避免过度建设和低估风险的起点。

什么是面向 AI Agent 的企业语义层

先从第一性原理出发。一个 Agent 要可靠地完成跨系统业务任务,企业至少要把下面三组内容写成可审阅、可验证、可运行时执行的定义与约束。

分组包含什么回答的问题不能只靠什么
语义定义对象与术语、指标与维度、关系、实体映射、时间粒度、合法查询路径“客户”“VIP”“受影响订单”在业务上是什么意思,能怎样计算和关联?表名、外键猜测或模型临时生成的 SQL
控制定义身份委派、数据策略、Action Contract、审批、幂等与补偿谁能看什么?谁能改变什么?动作应如何安全执行?system prompt 或一个通用 HTTP 工具
证据定义血缘、来源、版本、新鲜度、执行轨迹、评估样例为什么相信这个结果?出错后如何回放?一段流畅的自然语言解释

本文所说的语义层,主要是第一组:它以业务对象而不是物理表为中心,统一定义对象、属性、指标、维度、关系、时间口径、实体映射与合法查询路径。它的产物不是“更多 schema”,而是一套可以稳定复用的业务含义。

例如,VIP 需要有明确的计算口径和 Owner;“受影响订单”需要指定履约状态、仓库关系、事件确认状态与快照时间;CRM 与 ERP 中的客户 ID 需要说明是否可对齐。若这些含义没有被定义,模型即使能生成正确形式的 SQL,也无法保证业务结论正确。

这张表也解释了为什么“换更强的模型”通常不是根治。模型负责理解意图、补足上下文、选择有限集合中的下一步;但业务定义、权限裁决和写入约束必须由可测试的系统能力承担。上下文不只是文档,它还包括被系统强制执行的业务边界。

这里的“定义与约束”不要求每个概念都落成一个独立微服务。它指的是一份可被人审阅、被程序验证、被运行时执行的约定。例如,指标定义要写清公式、时间粒度、默认筛选和 Owner;行动契约要写清谁可以执行、何时需要审批、失败后如何恢复。

这也划出了确定性的边界。VIP 的计算、订单的合法关联、字段的脱敏都应尽可能由确定性规则完成;“这次延误是否值得优先通知客户”“暂停范围是否需要缩小”则可以由 Agent 结合证据提出建议。不要让模型承担前一类本可被系统验证的职责,也不要假装后一类业务判断可以被一张 schema 自动解决。

从可信查询到受控行动:三层责任如何分工

语义层不是 Action Contract 的上位词,更不是策略引擎的别名。它们处理的是同一个业务任务中的不同问题,顺序也很明确。

业务意图
  → 语义层:解析对象、指标、关系与可用口径
  → Query Contract:以受限输入返回可验证的业务证据
  → Action Contract:把建议转为带前置条件和恢复机制的业务操作
  → 策略层:基于身份、范围、时机和风险裁决允许 / 拒绝 / 审批
  → 业务系统执行,并留下审计事实
组件核心职责不负责什么
语义层定义业务事实及其合法计算与关联单独决定写入权限或执行事务
Query Contract将语义封装为输入受限、输出带证据的查询能力处理业务动作的审批与补偿
Action Contract(行动契约)定义一个动作的参数、前置条件、dry-run、幂等、审批与补偿判断当前委托人是否有权在此刻执行
策略层依据委托身份、Agent、资源范围、风险和上下文作出允许、拒绝或审批裁决重新解释 VIP、收入或订单关系的业务口径

Action Contract 必须使用语义层的对象和查询结果。否则,“暂停营销活动”就会退化成向一个 API 传 ID 列表,系统无法知道范围是否真对应“受影响的 VIP 客户”,也无法审查前置条件是否成立。

策略层则是动态裁决点。同一个 pause_campaigns 动作可以有固定的执行协议,但对“哪个员工委托的 Agent、在什么区域、覆盖多少预算、是否已经批准”的答案每次都不同。因此,Action Contract 规定“怎样安全地做”,策略层决定“这一次是否允许做”。

Data Catalog、Ontology、RAG 与 MCP 各自处在什么位置

语义层之所以容易被讲得模糊,是因为它总和相邻能力一起出现。前一节已经划清了语义、行动契约和策略的责任;这里再把它与常被一并提及的能力分开,避免把一个层误当作所有问题的答案。

能力主要回答的问题对 Agent 的价值不应承担的职责
Data Catalog数据在哪里、谁拥有、何时更新、血缘如何?找到权威资产,判断质量与新鲜度定义所有业务指标和业务动作
Ontology企业有哪些对象,它们在业务上如何相互关联?让 Customer、Order、Warehouse 不只是表名直接替代查询编译、权限或事务约束
Semantic Layer指标怎样计算、关系怎样使用、哪些查询有效?将业务词汇映射为受控的查询计划单独授权高风险写入
RAG / 记忆哪些文档、例外、历史经验与当前任务相关?提供非结构化解释和补充证据充当指标口径的唯一来源
MCP / Tool APIAgent 如何发现并调用能力?标准化调用界面和参数交换充当身份、策略和审计边界
Action Contract什么变更可由谁在何种条件下执行?让建议转化为可治理的业务操作解释所有数据语义

dbt 的 Semantic Layer 将指标定义集中在建模层并自动处理关联;Snowflake 的 Semantic Views 则把业务概念、指标、实体及关系作为数据库中的语义对象。两者都说明了语义层的核心:让下游使用者基于同一业务定义查询,而不是反复复制计算逻辑。dbt Semantic LayerSnowflake Semantic Views

但必须保留一个边界:语义层让 Agent 知道答案应如何计算;Action Contract 与策略层决定它能否把答案变成操作。 如果把这两件事都叫作“语义层”,架构看起来简洁,运行时的责任却会变得含混。

Data Catalog 不是业务语义的替代品

Data Catalog 是语义层的重要输入。它能够告诉团队某张表来自哪个系统、由谁负责、多久刷新、经过哪些转换、是否带有敏感标签。这些信息决定一个数据资产是否值得被 Agent 使用。

但 Catalog 不能自动解决“收入”到底是签约额、回款额还是净收入,也不能裁定销售部门和财务部门口中的“客户”是否是同一个业务对象。它能让人和系统找到数据;业务 Owner 仍需把数据放进稳定、可争议、可版本化的定义中。

Ontology 不等于图数据库,也不等于查询引擎

Ontology 的价值在于让企业从业务世界而不是物理表结构建模。Customer、Order、Warehouse 可以跨 CRM、ERP、仓储系统拥有不同 ID 和不同生命周期,但它们仍是同一类业务对象。Object、Property 和 Link 让这种含义可以被显式表达。

这不要求所有企业都引入 RDF、OWL 或图数据库。关系可以存在于语义模型、数据产品、领域服务或受治理的映射层中。关键不在存储形态,而在关系是否有明确业务含义、权威来源和可验证的使用规则。

RAG 和 MCP 为什么不能替代语义层

RAG 擅长从制度文档、客服记录和历史案例中找出与当前任务相关的文字证据。它非常适合解释“为什么这批订单需要特殊处理”,却不应成为 net_revenueVIP 唯一口径的裁决者。业务指标应有一个可审核的主定义,文档检索负责补充例外、背景和说明。

MCP 或其他 Tool API 解决的是“Agent 如何调用能力”,不是“这次调用是否被允许”。把一个数据库查询或营销 API 封装为 MCP 工具,确实可以减少 Agent 直接拼接 SQL 的机会;但若工具没有最小权限、参数校验、身份委派和审计,它仍然只是一条更标准化的特权通道。

参考架构:语义核心、Agent 控制面与证据演化层

从企业架构看,一个可运行的 Agent 系统可以分为四个相互协作的部分。

  1. 数据与映射基础:连接数据仓库、业务系统和事件流;记录权威来源、实体 ID、映射规则、数据质量和新鲜度。
  2. 语义核心:以业务对象而不是源表为中心,定义对象、属性、关系、指标、维度、口径和合法查询路径。
  3. Agent 控制面:把查询能力和业务动作封装成有 schema 的契约;由策略引擎裁决身份、范围、风险和审批;通过网关统一执行和记录。
  4. 运行与演化面:维护版本、Owner、血缘、golden cases、回归评估、异常追踪和变更记录。

这不是又一张“大而全平台图”。它的价值在于把可替换的技术和不可省略的责任分开:你可以使用现有数据平台、独立语义服务或领域模型实现语义核心;但查询不能绕过定义,动作不能绕过策略,任何一次结果都不能脱离证据。

企业 Agent 的语义核心、控制面与演化层架构
企业 Agent 的语义核心与控制面:语义模型负责“含义与合法查询”,策略和行动契约负责“授权与改变”,评估层负责让两者持续可验证。

在这四部分中,语义核心需要管理的不是“所有元数据”,而是会直接改变 Agent 结论的那一小组业务事实:对象、关系、指标、维度、时间、合法 Join、同义词、权威来源和版本。把范围压缩到这个最小内核,反而更容易让业务 Owner 对它负责。

控制面则应坚持一个简单的运行时原则:模型表达意图,策略系统裁决权限,业务系统执行并留下事实。 这三件事不能由同一个 prompt 代替。工具注册表定义设计时允许什么,网关在运行时检查这一次调用能否通过。

AWS 的 Agentic AI 参考架构同样将数据、知识、编排及治理/安全分别处理。Apache Ossie 试图让 datasets、relationships、metrics 和 AI context 在工具间交换,也说明语义模型需要可版本化、可消费的接口,而不是锁死在某个聊天应用的提示词里。AWS Prescriptive GuidanceApache Ossie

仓库延误案例:语义、策略与行动各做什么

回到开头的仓库延误。一个可靠的流程不应是“把全部 schema 放入 prompt,再让模型调用两个 API”,而应是下面这条链路。

第一步:确认事件是可用事实。 延误事件必须有来源、发生时间、确认状态和关联仓库;未确认的预警不能与已确认的运营事实混用。

第二步:由语义核心解析影响范围。 “受影响订单”不是任意订单的模糊筛选,而是一个有 Owner 的业务定义:仍待履约、履约仓库为 Chicago、库存项受该事件影响,并且状态以某个时间点的快照为准。“VIP 客户”也必须指向已批准的指标口径,而不是让模型猜测消费额阈值。

第三步:执行受限查询并输出证据。 Agent 调用的是类似 assess_delivery_impact 的查询契约,输入为事件 ID、区域和时间窗口,输出为订单集合、聚合金额、所使用的指标版本、数据新鲜度和来源。Snowflake 把 verified queries 作为帮助自然语言分析系统学习已验证逻辑的机制;无论采用何种产品,核心原则相同:高价值问题要有可回归的已验证样例。Snowflake verified queries

第四步:把行动变成提案,而非隐式副作用。 Agent 可以依据结果生成“暂停哪些区域、哪些产品、多久”的提案,却不应该直接执行。此时进入 Action Contract:营销系统中的 pause_campaigns 要声明操作范围、权限要求、冲突条件、过期时间、幂等键、审批人和恢复动作。

第五步:由策略而不是模型作最终裁决。 策略引擎基于“谁委托了哪个 Agent、在当前会话中、对哪个客户范围、尝试什么动作、满足何种条件”返回允许、拒绝或需要审批。MCP 可以承载该调用,但它不替代这次裁决。对于暂停大范围活动这类可逆但影响显著的操作,默认先审批;对于更高风险的支付、删除或价格改写,审批和补偿路径应更严格。

第六步:让每一次结论都可解释、可回放。 记录语义模型版本、输入事件、查询参数、策略决策、审批记录、动作结果和补偿动作。这样业务负责人追问“为什么这批活动被暂停”时,系统能给出证据链,而不只是复述 Agent 的推理。

这条链路承认不确定性:Agent 仍可能需要澄清区域、仍可能遇到实体对齐失败、仍可能因数据延迟而拒绝执行。它追求的不是“永不犯错”,而是把错误限制在可发现、可拒绝、可恢复的边界内。

仓库延误场景的读、建议、执行闭环
同一个业务任务包含两条不同的链路:语义层确保影响评估可复算,策略和 Action Contract 确保业务变更可授权、可审批、可回放。

将前文的责任链落到这个案例中,业务和技术团队会更容易对齐。下面的对照说明 Query Contract 与 Action Contract 分别承接什么:

Query Contract
  目标:评估 event_id 对订单和客户的影响
  允许输入:已确认事件、区域、时间窗口
  固定含义:受影响订单、VIP 客户、数据新鲜度
  输出证据:口径版本、来源、快照时间、异常项

Action Contract
  目标:暂停特定区域和产品的营销活动
  前置条件:影响评估完成;范围未超阈值;委托人具备权限
  控制:dry-run、审批、幂等键、过期时间、补偿动作
  输出证据:策略决策、审批记录、执行结果、恢复记录

前者的主风险是算错、连错或用到了过期数据;后者的主风险是越权、误操作和不可恢复。它们共同服务一次业务决策,但测试方法和责任人并不相同。

如何建设:从一个高价值决策开始,而不是全企业大图

最常见的失败方式是以“全企业 Ontology”立项。它听起来完整,却会迅速陷入跨部门定义争论和长期维护成本。更可行的起点是选择一个同时满足三个条件的决策:业务价值高、跨系统语义冲突明显、错误后果可控且可评估。

可以按六步推进。

  1. 选定决策与失败预算:写清 Agent 的目标、禁止项、最坏后果,以及先停在“查询”“建议”还是“执行”。
  2. 建立最小业务词汇:只定义该决策所需的对象、状态、指标、关系、同义词和业务 Owner;不要从源表数量倒推对象数量。
  3. 完成映射与数据证明:为每个关键属性记录权威来源、ID 规则、更新频率、质量断言和实体对齐例外。
  4. 编译两类契约:为只读分析定义 Query Contract,为业务变更定义 Action Contract。前者强调合法口径和查询范围,后者强调前置条件、审批、幂等和补偿。
  5. 把控制写进运行时:工具白名单、参数 schema、最小权限、策略裁决、人工门禁和审计日志必须在网关和下游系统中执行,不应只出现在 prompt。
  6. 用真实任务持续验证:维护 golden questions、预期查询或预期结果、越权场景、动作 dry-run 和恢复场景。评估不仅看最终回答,还要检查工具参数、执行轨迹、任务完成和业务效果。

这是一条“先读、后建议、再执行”的路径。只读场景先证明指标和关联的可靠性;建议场景再证明证据、解释和人工协作;只有当权限、审批和补偿已具备时,才把某些动作交给 Agent。

从单一高价值决策闭环扩展企业 Agent 语义层的六步路线图
建设顺序应从一个可以验证的业务决策开始,而不是从覆盖全部系统的概念图开始。

何时需要更完整的语义与控制能力

场景推荐起点不应跳过的控制
单一数据域的只读问答指标定义、字段描述、只读查询和结果引用数据权限、查询范围、结果新鲜度
跨域运营分析业务对象、实体对齐、合法关系、golden queries数据血缘、口径版本、异常与缺失数据处理
可触发业务动作的 AgentQuery Contract + Action Contract + 策略网关身份委派、审批、幂等、补偿、全链路审计

这张表提供了一个比“是否已经有 Ontology”更实用的成熟度判断。只有当业务任务要求跨域判断和动作写回时,才值得为它增加完整的动力层与治理投入;反过来,一旦任务具备这些特征,再把系统当作普通聊天机器人就会低估风险。

把语义当作长期产品来运营

语义模型会随业务改变。产品线合并、区域重组、财务口径调整、主数据迁移,都会让昨天正确的定义在今天失效。因此,真正的 Owner 模型至少包含三方。

角色对语义层负责什么
业务 Owner定义指标、例外、可接受风险和动作审批规则
数据 Owner确保映射、血缘、新鲜度、质量断言和实体对齐
平台与安全团队提供契约运行时、身份委派、策略、审计、回归与事故响应

所有高价值语义对象都应具备版本、Owner、变更原因和验证记录。指标改动不只是 YAML diff;它可能改变 Agent 的决策范围。工具新增也不只是注册一个 endpoint;它是在增加一把可访问生产资源的钥匙。

这正是“治理是结构属性”在语义层中的含义:把规则写入模型、接口、策略和测试,而不是等 Agent 出错后再追加一条提示词。

从“能跑”到“可信”的运营指标

语义层上线后,团队不应只监控调用量和模型成本,还要监控定义是否仍然有效。一个务实的指标面板可以包括:语义对象的 Owner 覆盖率、关键指标的版本与验证覆盖率、golden query 的回归通过率、因数据新鲜度或权限而被拒绝的比例、动作的 dry-run/审批/补偿次数,以及人工推翻 Agent 建议的原因。

这些指标把“语义债务”变成可运营的问题。若同一个概念频繁被临时例外覆盖,说明它的定义太粗;若同一个高价值问题不断被人工改写查询,说明关系或查询契约没有覆盖真实任务;若大量动作在审批环节被拒绝,说明 Agent 的建议边界或策略规则需要重审。语义层不是一次建模项目,而是一项持续校准的业务产品。

结语:先让一个决策可信地闭环

面向 AI Agent 的语义层不是一个更漂亮的数据字典,也不是给 LLM 喂更多 schema 的办法。它是把业务含义变成可复用、可验证查询契约的核心能力。

当 Agent 要进入运营流程时,语义层还必须与身份、策略、行动契约、审计和评估共同工作。否则,企业得到的只是一个更会说话的查询界面,而不是一个值得授权的业务伙伴。

不要先问 Agent 能连接多少数据。先选一个关键决策,回答四个问题:它依据什么含义做判断?它能访问什么?它凭什么执行?出错后如何解释和恢复?当这四个问题有了可运行的答案,企业才真正开始拥有面向 Agent 的语义层。

附录:参考资料与校准说明

校准说明

  • 文中将 dbt 和 Snowflake 作为“指标、关系和已验证查询如何帮助 Agent”的公开实例,不据此推导任一产品在所有企业场景中的优劣。
  • Apache Ossie 代表语义模型互操作的方向,其规范和生态仍在演进,不应被视作企业采购的兼容性承诺。
  • 文中所称 Action Contract 是一个架构模式,不是特定厂商的固定产品名。它的审批、补偿与策略实现必须按行业、系统边界和风险等级设计。

名词与概念解释

  • Data Catalog(数据目录):记录数据资产的位置、Owner、血缘、质量和敏感性等运行信息的系统。
  • Ontology(本体/业务对象模型):用业务语言定义对象、属性和关系的模型,例如“订单由客户下达,并由仓库履约”。
  • Semantic Layer(语义层):将指标、维度、关系和查询约束统一为可复用业务定义的能力。
  • RAG(检索增强生成):先检索相关文档或知识,再把结果提供给模型生成回答的模式。
  • MCP(Model Context Protocol):让 Agent 发现和调用外部工具的一种标准化接口协议;它本身不替代授权系统。
  • Action Contract(行动契约):描述业务变更如何被调用、校验、审批、记录和补偿的受治理接口约定。

参考资料