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

- Name
- Shoukai Huang

目录
- 目录
- 什么是面向 AI Agent 的企业语义层
- 从可信查询到受控行动:三层责任如何分工
- Data Catalog、Ontology、RAG 与 MCP 各自处在什么位置
- 参考架构:语义核心、Agent 控制面与证据演化层
- 仓库延误案例:语义、策略与行动各做什么
- 如何建设:从一个高价值决策开始,而不是全企业大图
- 把语义当作长期产品来运营
- 结语:先让一个决策可信地闭环
- 附录:参考资料与校准说明
企业开始给 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 API | Agent 如何发现并调用能力? | 标准化调用界面和参数交换 | 充当身份、策略和审计边界 |
| Action Contract | 什么变更可由谁在何种条件下执行? | 让建议转化为可治理的业务操作 | 解释所有数据语义 |
dbt 的 Semantic Layer 将指标定义集中在建模层并自动处理关联;Snowflake 的 Semantic Views 则把业务概念、指标、实体及关系作为数据库中的语义对象。两者都说明了语义层的核心:让下游使用者基于同一业务定义查询,而不是反复复制计算逻辑。dbt Semantic Layer 和 Snowflake 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_revenue 或 VIP 唯一口径的裁决者。业务指标应有一个可审核的主定义,文档检索负责补充例外、背景和说明。
MCP 或其他 Tool API 解决的是“Agent 如何调用能力”,不是“这次调用是否被允许”。把一个数据库查询或营销 API 封装为 MCP 工具,确实可以减少 Agent 直接拼接 SQL 的机会;但若工具没有最小权限、参数校验、身份委派和审计,它仍然只是一条更标准化的特权通道。
参考架构:语义核心、Agent 控制面与证据演化层
从企业架构看,一个可运行的 Agent 系统可以分为四个相互协作的部分。
- 数据与映射基础:连接数据仓库、业务系统和事件流;记录权威来源、实体 ID、映射规则、数据质量和新鲜度。
- 语义核心:以业务对象而不是源表为中心,定义对象、属性、关系、指标、维度、口径和合法查询路径。
- Agent 控制面:把查询能力和业务动作封装成有 schema 的契约;由策略引擎裁决身份、范围、风险和审批;通过网关统一执行和记录。
- 运行与演化面:维护版本、Owner、血缘、golden cases、回归评估、异常追踪和变更记录。
这不是又一张“大而全平台图”。它的价值在于把可替换的技术和不可省略的责任分开:你可以使用现有数据平台、独立语义服务或领域模型实现语义核心;但查询不能绕过定义,动作不能绕过策略,任何一次结果都不能脱离证据。
在这四部分中,语义核心需要管理的不是“所有元数据”,而是会直接改变 Agent 结论的那一小组业务事实:对象、关系、指标、维度、时间、合法 Join、同义词、权威来源和版本。把范围压缩到这个最小内核,反而更容易让业务 Owner 对它负责。
控制面则应坚持一个简单的运行时原则:模型表达意图,策略系统裁决权限,业务系统执行并留下事实。 这三件事不能由同一个 prompt 代替。工具注册表定义设计时允许什么,网关在运行时检查这一次调用能否通过。
AWS 的 Agentic AI 参考架构同样将数据、知识、编排及治理/安全分别处理。Apache Ossie 试图让 datasets、relationships、metrics 和 AI context 在工具间交换,也说明语义模型需要可版本化、可消费的接口,而不是锁死在某个聊天应用的提示词里。AWS Prescriptive Guidance 和 Apache 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 仍可能需要澄清区域、仍可能遇到实体对齐失败、仍可能因数据延迟而拒绝执行。它追求的不是“永不犯错”,而是把错误限制在可发现、可拒绝、可恢复的边界内。
将前文的责任链落到这个案例中,业务和技术团队会更容易对齐。下面的对照说明 Query Contract 与 Action Contract 分别承接什么:
Query Contract
目标:评估 event_id 对订单和客户的影响
允许输入:已确认事件、区域、时间窗口
固定含义:受影响订单、VIP 客户、数据新鲜度
输出证据:口径版本、来源、快照时间、异常项
Action Contract
目标:暂停特定区域和产品的营销活动
前置条件:影响评估完成;范围未超阈值;委托人具备权限
控制:dry-run、审批、幂等键、过期时间、补偿动作
输出证据:策略决策、审批记录、执行结果、恢复记录
前者的主风险是算错、连错或用到了过期数据;后者的主风险是越权、误操作和不可恢复。它们共同服务一次业务决策,但测试方法和责任人并不相同。
如何建设:从一个高价值决策开始,而不是全企业大图
最常见的失败方式是以“全企业 Ontology”立项。它听起来完整,却会迅速陷入跨部门定义争论和长期维护成本。更可行的起点是选择一个同时满足三个条件的决策:业务价值高、跨系统语义冲突明显、错误后果可控且可评估。
可以按六步推进。
- 选定决策与失败预算:写清 Agent 的目标、禁止项、最坏后果,以及先停在“查询”“建议”还是“执行”。
- 建立最小业务词汇:只定义该决策所需的对象、状态、指标、关系、同义词和业务 Owner;不要从源表数量倒推对象数量。
- 完成映射与数据证明:为每个关键属性记录权威来源、ID 规则、更新频率、质量断言和实体对齐例外。
- 编译两类契约:为只读分析定义 Query Contract,为业务变更定义 Action Contract。前者强调合法口径和查询范围,后者强调前置条件、审批、幂等和补偿。
- 把控制写进运行时:工具白名单、参数 schema、最小权限、策略裁决、人工门禁和审计日志必须在网关和下游系统中执行,不应只出现在 prompt。
- 用真实任务持续验证:维护 golden questions、预期查询或预期结果、越权场景、动作 dry-run 和恢复场景。评估不仅看最终回答,还要检查工具参数、执行轨迹、任务完成和业务效果。
这是一条“先读、后建议、再执行”的路径。只读场景先证明指标和关联的可靠性;建议场景再证明证据、解释和人工协作;只有当权限、审批和补偿已具备时,才把某些动作交给 Agent。
何时需要更完整的语义与控制能力
| 场景 | 推荐起点 | 不应跳过的控制 |
|---|---|---|
| 单一数据域的只读问答 | 指标定义、字段描述、只读查询和结果引用 | 数据权限、查询范围、结果新鲜度 |
| 跨域运营分析 | 业务对象、实体对齐、合法关系、golden queries | 数据血缘、口径版本、异常与缺失数据处理 |
| 可触发业务动作的 Agent | Query 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(行动契约):描述业务变更如何被调用、校验、审批、记录和补偿的受治理接口约定。