随笔 / 数据平台 / AI

语义层不是指标词典,是 AI 用数据的控制面

· AI/Agent 数据平台 语义层

AI 时代的语义层,不该被做成一本没人翻的指标词典。真正能活下来的语义层,是把业务语义变成可执行契约,小而硬,先服务高频决策和 Agent 调用。

半年前我聊过一个判断:AI 进企业,不是来替人查报表的,它真正动手改写的是数据平台的职责边界。那一篇我讲得比较散,落点放在控制面这个整体上。

这一篇我想收窄,只盯控制面里最容易被做烂的那一个对象,语义层。

为什么要单独拎出来讲。因为我最近接触的团队里,搞语义层的越来越多,搞完之后没人用的也越来越多。这两件事同步发生,本身就值得停下来想清楚。

先说最常见的死法

语义层最经典的死法,是把它做成一本指标词典,做成一个统一口径项目。立项的时候理由正当得挑不出毛病,做完之后躺在那里没人翻。

我给你一个有画面感的场景。季度会上老板问,上季度营收多少。销售总监说 860 万。财务总监说 825 万。运营总监说 902 万。同一个公司,同一个季度,同一个指标,三个数字。

插图:季度会上同一个指标,三个总监给出三个都对却合不到一起的答案

不是谁算错了。销售算的是已签合同金额,财务算的是实际到账,运营算的是平台成交总额,还含后来退款的订单。每个口径在自己的部门里都自洽,都对。

最常见的反应是什么?立项做统一口径,把这三个定义写进一本指标词典,发下去,让大家以后都用这一版。

问题就在这里。把三个口径写进词典,不等于让三个部门达成共识。共识是谈出来的,不是定义出来的。词典解决的是“这是什么”这个文档问题,它没解决“谁说了算、什么时候用哪个、不用哪个会出事”这些活的问题。

一家做数据平台咨询的公司,复盘了几十个项目之后说了一句很重的话:

语义层失败的瓶颈几乎从来不是技术,是数据本身,以及让组织对数据含义达成共识这件事。失败模式是人的,不是架构的。

这句话我反复想。它把锅从工程师手里挪开了,放到了一个更难处理的地方。

词典还有一个更深的毛病。它只回答“这是什么”,没回答 Agent 真正需要的那一连串问题:这个指标什么时候能用,默认怎么用,不能怎么用,谁对它负责,这个口径有没有过期,别人一般怎么问它。这些信息,词典里一行都没有。

于是就有了 shadow analytics,影子分析。这个词听着学术,说人话就是:用户绕过你这套官方体系,自己开个 Excel 算。一份被广泛引用的数据说,影子 IT 占了官方 IT 将近八成,而商业智能是其中最大的一块。电子表格再不规范,它对人好用。你做的官方体系对人不友好,人就回去用 Excel。

插图:精心搭建的官方数据体系空着没人进,旁边简陋棚子里挤满了自己开 Excel 算数的人

dbt Labs 自己也承认过这件事。业务用户觉得难用,就会退回老办法。投入的钱浪费了不说,数据孤岛还继续活着。

更狠的是事故证据。有人复盘 dbt 早期的 Metrics Layer 是怎么死的:仪表盘动不动超时,Snowflake 的账单一个月能飙五千美元,最后整个团队放弃。一位亚马逊的 BI 工程师讲过一件事,他把同一个指标在四个语义层里各定义了一遍,四个里有三个对不上。同一个指标,四套系统,三个答案。

中文世界有它自己的版本,叫数据中台烂尾。失败率六成以上,最后沦为 PPT 工程。一位制造企业的 CDO,中台做了三年,预算花了几百万,老板问效果,答不上来。第一原因不是技术不行,是中台被当成了 IT 交付项目。技术交付完了,不等于业务交付完了。

所以语义层和数据中台,死的是同一种病。把它当成一个交付物,而不是一个要被持续使用、持续对齐的契约。

真正能活下来的是可执行契约

问题从来不是要不要做语义层,是怎么做才不至于做成一本词典。

我的判断是:真正能活下来的语义层,是把业务语义变成可执行契约。注意这四个字,可执行。意思是它不光写在那里,它跑得起来,查得出错,卡得住越权,还能把错喂回去改自己。

一个可执行契约,至少要有七个组件。我先把它们报一遍,再一个一个说人话:指标、权限、SQL 生成、血缘、样例、评测、反馈闭环。

排在第一的是指标。注意,这里说的指标,不是你在 wiki 上写一段话描述清楚就完了的那种。它得是一段能被引擎直接吃下去、自动吐出 SQL 的声明。你只定义一次,往后不管谁、在哪个工具里调它,拿到的都是同一条确定性的查询。dbt 的 MetricFlow 干的就是这个,把指标定义翻译成查询;Cube 和国内的 Aloudata 也都在做。Aloudata 有句话讲得特别不留情面,说指标说明文档根本不等于可执行语义层。文档里写的定义,约束不了查询怎么跑。真正的语义层,得把指标定义变成可计算、可查询、能被审计的资产。潜台词就一句:你存在 wiki 里的那一页,不算数。

第二块是权限。七块里头它最容易被忽视,也最能一眼区分你做的到底是词典还是契约。做法上的差别很具体:行级、列级的权限,要在 SQL 还没生成的时候就先编进查询里,而不是等 Agent 把查询拼出来再去核对。这套做法有个名字,compile-time governance,编译期治理,意思是查询还没落地,权限就已经卡死了。一位独立实践者讲过它的机制:在指标这一级挂角色权限,调用方 token 里要是缺这个角色,连表达式都还没开始解析就被挡回去,连报错信息都不会把那条受限的公式漏出来;多租户的场景下,租户 ID 会被自动 AND 进每一条查询。Cube 说的也是这个意思,治理得在 SQL 之前发生,先让 Agent 生成查询再去检查,那是外行做法。这块真正的分量在于,它把敢不敢把数据交给 Agent 这件事,从出事之后再去补救,挪到了出事之前就工程化掉。Agent 最后拿到手的结果,权限那一层早就过滤干净了,它压根碰不到自己不该看的数据。

插图:一道闸门在数据到达 Agent 之前就把越权部分拦下,只放行过滤后的结果

第三是 SQL 生成。这是整个契约的可执行核心。定义一次,到处生成,不依赖某个分析师还记得住复杂的 join 路径。人记不住的东西,交给机器每次重新算。

第四是血缘。从一个指标,能追到它下面的字段,再追到字段背后的源表。做影响分析,做可信度判断,都靠它。这一块目前算半成熟。dbt 因为模型和指标同源,有原生的血缘。但很多企业是靠外挂一个数据目录来补的,那不算语义层自带的能力。

第五块是样例。它要等到 AI 时代才真正变得关键。行话叫 golden queries,或者 verified queries,翻译过来就是一批标准问法配上对应的期望查询,相当于告诉 Agent,这种问题你就该这么答。Snowflake 的 Cortex Analyst 走的就是这条路,它读的是语义视图,不是原始表,而视图里头嵌着一批已经验证过的查询样例。这里有个细节特别有意思,Snowflake 给语义模型卡了两个硬上限,2MB 大小、32K token。上限本身就是一种表态,它是在逼你往小而精里做,不让你往大而全里铺。

第六块是评测。判断语义层值不值钱,盯一个数字就够:在它的约束之下,Agent 把一句自然语言变成正确查询的成功率有多高。dbt 跑过一个 benchmark,语义层一罩上去,换哪个模型准确率都在九成八以上,差距小到可以忽略。他们自己从这组数字里得出一个结论,我反复琢磨了好几遍:在语义层查询这件事上,用哪个模型几乎不重要,因为任务已经被约束得足够具体。我再把这句话翻译一下,语义层的价值压根不是让 AI 变聪明,它是把问题空间收窄到一个 AI 想出错都难的范围里。

第七是反馈闭环。Agent 答错了,怎么把这个错误回流,去修正语义。这一块整体还早期。最具体的是 Snowflake 的做法,它基于使用数据去建议常见问题,人来验证,验证通过就加入 verified queries,再从这些 SQL 泛化出更通用的语义概念。大多数厂商现在还停留在给个赞、踩一下,收一点人工信号,离真正的闭环还远。

把这七块收一下。可执行契约不是哪个厂商已经完整做出来的产品,它是一套正在成形的工程标准。指标、权限、SQL 生成、评测这四块已经落地。样例是 AI 时代新加进来的。血缘和反馈闭环还半成熟。所以今天你要建语义层,该问的不是选哪个工具,而是这七个组件,先硬哪几个。

反共识,别做大而全,要做小而硬

到这里我要说一个反共识。

AI 时代的语义层,不该追求大而全,应该追求小而硬。先服务高频决策和 Agent 调用,再慢慢沉淀出企业本体。

插图:一条窄但铺到头的实路,对比一张铺得很大却到处断点走不通的网

这个判断和现在市面上的主流叙事是反着来的。现在很多厂商,尤其是国内的厂商,推的是大而全叙事:统一语义层、全域指标、企业本体,一次性全建模。听起来无比正确。但这恰恰就是前面那一节讲的死法的源头。

汇丰银行的 McClafferty 带过一个项目,他的做法是先从小处做起,先统一几个关键的业务定义,再往外扩。他有句原话:

把数据分析师从中间抽走,让业务和数据直接对接,洞察才能以思考的速度产出。

同一段话里他点了三个反面教训。第一,一次性全量建模,结果就是延期、倦怠、零价值。第二,业务逻辑锁在某个专有 BI 或仓库模型里,逼你以后花大钱重建。第三,一边过度追求理想架构,一边业务还在对着不一致的数据失去信任。这三句话,每一句我都见过真实的团队在踩。

dbt 自己也写过一篇,叫 Semantic Layer in Pieces。它的核心建议是:找一个使用频率高、价值大、但范围窄的东西开始,别从那种宽泛的高管仪表盘开始。用最小的建模迁移量,换最大的影响。它举的例子是从客户获取成本这一个指标切入。dbt 的会议 Coalesce 上也有人讲,别在第一天就想着煮海。先建模那二十到五十个真正驱动高管讨论的指标,收入、毛利率、活跃用户、流失,定义一次,接进两三个 BI 工具,用看得见的一致性去建势头。

字节跳动的数据平台负责人公开说过一件事。字节明确拒绝了纯中台制,用的是中台加业务伙伴制,目的就是规避中台脱离业务需求、造轮子自嗨的风险。“造轮子自嗨”这五个字,几乎是对大而全语义层最精准的病理解剖。

Snowflake 那个 2MB 上限,本质也是同一个态度的工程化。它不让你大而全,逼你小而精。

这里我要诚实补一句。统一口径本身不是个错的目标。错的是把它当成 Day 1 的建设目标。口径统一应该是小而硬的语义层跑起来之后,自然沉淀下来的结果。你把口径统一当起点,就掉进了一个无底洞:让所有人对所有指标达成共识。那是 Big Bang 失败模式的组织版本。

再诚实一句。先做高频指标、再沉淀企业本体,这个顺序,目前还没有一个像汇丰那样公开走通的案例来完整验证它。厂商的叙事恰好和我相反。我这个判断,是基于工程直觉的推理,它和小而硬的逻辑是自洽的。但它是不是真能从指标语义的闭环,一路演进到企业本体,还需要实践来证明。我愿意把它当成一个有依据的押注,而不是一个已经验证的结论。

语义层是控制面,不是说明书

最后一节,我想把这件事说回它真正在 AI 时代扮演的角色。

语义层不是数据中台的说明书。它是 AI 用数据的控制面。

这不是我一个人想出来的话术。Forrester 已经正式把 Agent Control Plane 认定为一个独立的市场品类来评估。它的核心原则是,治理必须独立于构建平台和编排平台之外,才能提供独立的可见性,才能执行一致的策略。中文技术社区也独立得出了同一个框架。有人说,语义层正在变成数据加 AI 时代的数据消费控制面。把治理下沉到语义层,而不是散落在一张张报表和一个个 prompt 里,是企业级可用性的分水岭。

Dremio 有一篇文章,标题就是这条进化路径:从数据字典到 AI 副驾驶。它点出的关键转变是,治理要内建,不能外挂。在下游工具上打安全补丁,永远会留下缝隙。

Cube 有一段话,几乎逐字命中了我一直想表达的判断:

AI Agent 不需要更多对表的访问,它们已经有足够多的访问了。它们需要的是理解和护栏,是每个指标的一致定义、正确的 join 路径,以及在查询运行之前就强制执行的访问规则。这就是语义层。

这段话我没什么可补充的。它把“为什么是控制面”讲透了。Agent 现在不缺数据访问的入口,它缺的是在访问之前就被约束好的边界。

这里也要诚实。语义层是控制面的核心组成,是其中语义和数据那一半,但它不是全部。一个完整的控制面,还需要上下文层,需要可信和可观测层,需要本体和动作层。有人指出过语义层单独解决不了的问题:Agent 可能在更高的抽象层运作,它通过聚合、总结、重新表述,绕过你的行级权限。语义层本身没有消费敏感性这个概念。比如对一个部门的薪酬做聚合,就可能泄露本该受限的人力数据。

所以准确的说法是:语义层是控制面的前提,不是控制面的全部。

收束

把这一篇和几个月前那一篇放在一起,我的判断可以收成一句话。

数据平台这一轮真正被改写的,不是入口,是责任。语义层是这套责任里最关键、也最容易做烂的一个对象。你把它做成指标词典,它就会变成一本没人翻的说明书,被 Excel 轻松绕过。你把它做成可执行契约,小而硬,先服务高频决策和 Agent 调用,它才会真正进入 AI 时代的数据基础设施。

最后给你一个判断标准。

判断一个团队的语义层做得对不对,不用看它覆盖了多少指标,建模建得多全。看一件事就够了:半年之后,它还在被用,还是已经变成了新的历史债。

订阅 / 联系

下一篇继续从这里接上

新文章会同步到 RSS;也可以直接发邮件给我。