很多人发现,指标平台、ChatBI、Data Agent 都在谈"语义层",但谈的其实不是同一个概念。这篇写给数据负责人和架构师:指标语义层只解决"数字如何计算",而支撑 AI 做归因和分析的"企业世界语义层"到底要建哪些语义,以及它和指标平台的语义层差在哪。
这几年只要聊到数据,指标平台、ChatBI、NL2SQL、Data Agent,几乎绕不开"语义层"三个字。但很多时候,大家说的其实不是同一个语义层。
它主要解决这类具体问题:销售额怎么算、利润怎么算、GMV 是否包含退款、活跃用户如何定义、权限如何控制。
这类能力非常重要——没有指标语义层,企业的数据治理基本无从谈起。这也正是大多数指标平台的语义层所覆盖的范围。
但对 Data Agent 来说,光有指标语义层是远远不够的。除了"利润是多少"这类数值问题,老板必定要问"利润为什么下降""下一步应计划是什么",这些问题背后,需要理解的不只是数字了。
亿问 Data Agent 将这类语义称为企业世界语义层。它不是描述数字,而是描述企业本身:企业里有哪些对象?对象之间是什么关系?对象有哪些状态?状态又如何变化?企业怎么定义时间、组织、业务规则?以及——这些语义最终如何被执行?
简单来说:指标语义层回答"数字如何定义",企业世界语义层回答"企业如何运转",它至少包含以下九种语义。
这是大家最熟的一层,比如:销售额 = 销量 × 单价;利润 = 收入 − 成本;库存周转率 = 销售成本 / 平均库存。它解决的是指标口径、聚合逻辑、统计粒度和权限边界——这是整个企业世界语义层的基础,但也只是基础。
很多企业问答场景里,最常见的问题反而不是指标,而是业务属性。
| 常见用户提问 | 系统必须知道的关键信息 |
|---|---|
| 平均处理时长是多少分钟? | 若数据库存的是 3600,则"3600 秒 = 60 分钟"是关键信息 |
| FY25 销售额是多少? | FY25 = 2024/07 ~ 2025/06,或企业自己定义的财年规则 |
| 人民币销售额是多少? | USD → RMB 对应的汇率规则 |
| 本科以上员工有多少? | 高中 < 本科 < 硕士 < 博士 |
这不是字符串比较,而是一条条实打实的业务语义定义。在很多企业项目里,这类语义出现的频率远高于复杂指标——业务人员张口就是业务语言,不会用数据库语言说话。
很多系统知道表跟表之间怎么 Join,但企业真正关心的从来不是 Join,而是业务对象之间的关系,如客户→订单→商品,集团→事业部→区域→门店。所以当老板问"哪些客户导致了华东区销售额下降",系统必须理解:客户是谁、客户和订单是什么关系、订单和商品是什么关系、商品又和区域是什么关系。这几层关系理不顺,哪怕 SQL 写得再对,也答不到点子上。更进一步,企业的组织结构往往是递归层级的(集团 → 华东事业部 → 上海/杭州分公司 → ……),这已经不是简单 Join 能表达的了。
企业里的数据大致分两类:事件数据(下单、支付、退款、点击)天生带一个时间点,回答"发生了什么";状态数据(库存、余额、在岗人数、应收账款余额)描述"某个时间点的状态"。订单可以直接累加,但库存和余额不能。如果语义层分不清状态和事件的区别,那很多经营分析从一开始就错了。
企业里常见的时间语义包括财年(FY)、YTD/QTD/MTD、同比/环比/周对齐同比/春节同比、T+1/T+2 新鲜度规则。"本财年销售额"和"自然年销售额"往往是两个完全不同的问题;问"春节期间销售同比",系统需要知道"今年春节和去年春节各自对应的日期范围",而不是简单比较日历日期。企业时间语义本质上是一整套企业时间认知体系。
用户问"今年每个月销售额是多少",假设 2 月没有任何销售记录,很多系统会直接跳过 2 月。但经营的人真正想看到的是:1 月 100 万、2 月 0、3 月 120 万。因为没有发生,也是一种业务事实。企业分析关注的是一个完整的业务世界,而不是数据库里恰好存在的记录。
企业世界不是一张二维表,而是一层套一层的层级结构——组织架构、区域层级、商品层级。很多经营分析本质上就是在这些层级结构里来回钻取和汇总。
前面的语义大多属于企业已经存在的知识,由企业提前建好、系统持续复用。但真实的经营分析还有另一类需求——它们在你提问之前并不存在。
比如分析师提问"我想看看不同年龄层用户的消费情况",紧接着追问"不要按公司原来的年龄段划分,改成 10~20、20~40、40~60、60 以上"。这里的年龄分层不是企业事先定义好的维度,而是分析过程中临时冒出来的新维度。再比如业务负责人突然提"我希望观察一个新指标 F = A × B − C",这个指标昨天还不存在。
先定义 → 审核 → 发布 → 使用
产生假设 → 定义观察方式 → 验证假设
所以在亿问 Data Agent 里,语义并不是完全静态的——用户完全可以在分析过程中动态产生新的业务语义(动态维度、动态指标、动态分析对象),这些定义都不需要提前建模,系统会先把它转换成 LogicForm,再映射到实际数据去执行。扛得住这些临时需求,靠的是 LogicForm 足够强的表达力。指标层常用的 MQL 大多只能"取哪个指标、按哪个维度聚合",而 LogicForm 还能做嵌套查询、临时切分区间的动态分组、多币种汇率换算,整整高出一个级别——表达力越强,能稳定覆盖的业务问题就越多。
这是亿问 Data Agent 最关注的一层。很多系统都能描述语义,但描述完就结束了——语义停留在文档、配置表或元数据系统里。如果语义最终不能被执行,那它仍然只是文档。
自然语言 → 业务理解 → LogicForm → SemanticDB → SQL / API / URL / Agent 动作在亿问 Data Agent 里,这条链路是完整跑通的。核心思想是:模型负责理解问题,语义基础设施负责执行问题。其中从自然语言到 LogicForm 的"业务理解",由自研引擎 Alisa 完成,它要同时扛住四道生产级约束——5 秒内响应、近似无限的上下文、稳定一致的输出、复杂业务语义,缺一不可。也正因如此,我们坚定地选择 NL2LogicForm2SQL 这条路,而不是 NL2SQL。
概括来说,企业世界语义层让系统开始具备从"What"走向"Why"的能力。
指标语义层(也是指标平台语义层的主要形态)能回答"找出 25~30 岁且复购两次以上的用户"——这本质上是一个筛选问题。但如果继续追问"为什么这批用户复购率更高""最近为什么变少了""哪些商品、渠道、活动影响最大""应该优先运营哪些用户",问题就从指标定义进入了业务理解的范畴,系统需要理解这些对象以及它们之间的关系:用户 → 订单 → 商品 → 活动 → 渠道 → 组织 → 时间。
擅长回答"销售额是多少?"
解决的是"让 AI 找到正确的数字"
支撑"为什么下降?哪些客户导致下降?哪些因素影响最大?下一步应该怎么办?"
解决的是"让 AI 理解这些数字为什么会变化"
前者让系统具备查数的能力,后者让系统开始具备分析的能力。
回看过去十年,语义层最重要的使命是解决数字一致性问题,因此指标语义层成了主流,也成了多数指标平台的标配。而随着 Data Agent 一路发展,企业要表达的东西越来越多了——指标、属性、对象、关系、状态、时间、层级、动态定义、规则、权限、执行动作……这些加在一起,才共同构成了一个企业世界。
因此,可以这样理解语义层:
描述数字,解决"数字如何定义"
描述企业,解决"企业如何被理解"
帮企业不断探索新问题,解决"新的问题如何被表达"
当 AI 真正参与经营分析、归因解释、报告生成和业务决策时,这三种能力缺一不可。
指标平台的语义层主要是指标语义层,解决"数字如何定义"——比如销售额、利润、库存周转率怎么算、口径是否一致、权限怎么控制。企业世界语义层在此之上,还描述企业里的对象、关系、状态、时间、层级、规则和执行动作。前者让 AI 找到正确的数字,后者让 AI 理解这些数字为什么会变化,从而支撑归因和分析。
亿问 Data Agent 把它拆成九种:指标语义、属性语义、对象关系语义、状态语义、时间语义、全集语义、层级语义、动态语义和执行语义。前八种描述企业是什么、怎么运转,执行语义负责把这些理解真正跑成 SQL、API 或 Agent 动作。
大模型直接生成 SQL 在企业场景里很难同时满足复杂业务语义、稳定输出、5 秒内响应和近似无限上下文这四道约束。亿问 Data Agent 让模型只负责理解问题,把执行交给语义基础设施:自然语言先经自研引擎 Alisa 转成 LogicForm,再映射到 SemanticDB 执行,表达力和稳定性都高出一个级别。
动态语义指在提问之前并不存在、分析过程中临时产生的业务语义,比如用户临时指定的年龄分层、临时定义的新指标 F = A × B − C。传统指标平台要走"定义 → 审核 → 发布 → 使用",而亿问 Data Agent 允许用户在分析过程中动态产生新语义,系统先转成 LogicForm 再映射到数据执行,不需要提前建模。
如果目标只是统一核心指标口径、让各部门在同一套口径下问数,指标平台的语义层就足够。但如果希望 AI 进入经营分析、做归因解释、异常预警和报告生成,就需要把对象、关系、状态、事件等语义补齐——这正是企业世界语义层相对指标平台语义层多出来的部分。
★ 为亿问自有技术术语。词条详见「技术词典」栏目。