SuperSonic 语义层构建统一数据语义模型:从痛点到落地的实战指南
【免费下载链接】supersonicSuperSonic is the next-generation AI+BI platform that unifies Chat BI (powered by LLM) and Headless BI (powered by semantic layer) paradigms.项目地址: https://gitcode.com/GitHub_Trending/su/supersonic
如果你被问过一句“帮我拉一下上周的订单数据”,第一反应往往是:得先找一个会写 SQL 的人。SuperSonic 是统一了 Chat BI 与 Headless BI 的 AI+BI 平台,它的 SuperSonic 语义层改变的就是这个流程:先在语义模型里把指标、维度及其业务含义定义好,之后自然语言提问就能被系统直接解析执行。这篇文章带你一步步把它搭起来。
“要个数”是怎么变成瓶颈的
多数团队里,数据需求的路径是这样的:业务同学用业务语言描述需求,数据工程师翻译成 SQL,出数后发现口径对不上。“订单量”这三个字,销售算的是“已支付订单”,财务算的是“已结算订单”,两个数差 5%,还都“正确”。
问题出在哪:业务概念长在人的脑子里,表里存的只是技术字段。语义层补的正是这个缝隙。
架在表上方的一本“业务字典”
把语义层理解成一本放在物理数据和业务人员之间的字典:一边是表名、字段名、聚合逻辑,另一边是业务同学听得懂的指标和维度,中间的对应关系由它统一维护。
这一层建好后,四件事同时被解决:
- 统一业务语言:“转化率”只有一个定义,哪个部门来问,数都一样;
- 降低技术门槛:业务人员用大白话提问,不用背表结构;
- 保证口径一致:聚合方式、过滤条件写死在模型里,“同指标两个数”从此消失;
- 提升分析效率:从提问到 SQL 再到图表,省掉一轮人工翻译。
SuperSonic 里这层有两个入口:Chat BI 界面负责“问”,业务人员对着数据聊天;Headless BI 界面负责“定义”,数据工程师在没有前端的情况下维护语义模型。一个定义、一个消费,共用同一套模型——这就是两者的交汇点。
语义层三大件 🧩
| 组件 | 职责 | 所在位置 |
|---|---|---|
| 语义模型管理 | 指标、维度、模型的创建、编辑、版本与权限维护 | webapp/packages/supersonic-fe/src/pages/SemanticModel/ |
| 领域管理 | 按业务领域归置模型,防止语义库越堆越乱 | webapp/packages/supersonic-fe/src/pages/SemanticModel/DomainManager.tsx |
| 语义解析引擎 | 自然语言转 S2SQL 结构化查询,再生成可执行 SQL | headless/chat/src/main/java/com/tencent/supersonic/headless/chat/ |
模型管理入口是SemanticModel目录下的ModelManager.tsx;指标表单在 Metric 子目录的MetricInfoCreateForm.tsx,计算公式和聚合方式就是在那里填的。
语义模型构建三步走
第一步:指标和维度怎么配
指标和维度是模型的两种积木。新建指标时要回答三个问题:
- 计算公式:比如
sum(order_amount); - 聚合方式:求和、计数、平均、去重,选哪种取决于定义;
- 可绑定维度:这个指标能从哪些角度切——时间、区域、渠道等。
维度还能带层级:“大区”是“省份”的父级,“省份”是“城市”的父级。配好后,下钻提问才成立。
第二步:模型之间怎么关联
一个查询要跨表(运单表接车辆表)时,需要声明两个模型的语义关系:谁是源模型、谁是目标模型,连接条件是什么(如waybill.vehicle_id = vehicle.vehicle_id),关系类型是一对多还是一对一。入口在SemanticGraph/components/目录的ModelRelationFormDrawer.tsx,解析引擎靠它生成正确的关联 SQL。
第三步:把物理字段映射成业务语义
物理字段天生是技术味的,要做三类转换:
- 字段名映射:
amt映射成“订单金额”,系统才知道“挣了多少钱”对应它; - 取值映射:状态码
1/2/3映射成“在途/已签收/已退回”,问“已签收的运单”才能被解析; - 类型映射:存成字符串但表达时间的字段,标记为日期类型,时间问句才对得上。
扩展机制与权限分级 🛡️
SuperSonic 是可插拔框架:解析与翻译链路通过 Java SPI 提供扩展点,你可以写自己的语义解析器注册进去,不用动主流程。有私有行业词表、自研词典的团队,这里是接入点。
权限分三级,管的是不同的东西:
| 级别 | 控制什么 | 典型场景 |
|---|---|---|
| 数据集级 | 能否使用该语义模型 | 外包分析师只能看到本项目模型 |
| 列级 | 能看到哪些指标/维度 | 销售可见订单量,不可见毛利 |
| 行级 | 结果里能看到哪些数据 | 区域经理只能看到本区域运单 |
落地案例:给物流公司建一套语义模型
一家中小物流公司,有三张表:运单表、车辆表、仓库表。按顺序搭:
- 指标:时效(
delivery_duration求平均)、准时率(准时数/总数)、运费成本(freight_cost求和); - 维度:线路区域、仓库、时间(到日);
- 关系:运单与车辆按
vehicle_id多对一,运单与仓库按始发/到达多对一; - 映射:状态码转业务词,
departure_time标记为日期类型。
建完,业务同学在聊天框直接问:“本月华东线路的平均时效是多少,按仓库拆开?”解析引擎先把问句翻成 S2SQL:
SELECT warehouse, avg(delivery_duration) FROM s_waybill WHERE route_region = '华东' AND stat_date = '本月' GROUP BY warehouse再针对物理表生成可执行 SQL 并出图。“本月”“华东”的定义全部来自语义层,而不是提问人的记忆。
三个避坑建议
- 渐进式构建:先搭最常用的 5~10 个指标,用起来再扩——小而准的模型好过大而错的;
- 让业务确认口径:指标入库前,找提需求的人确认公式与聚合方式,把口径锁进模型而不是脑子里;
- 盯语义解析失败率:某问句总是解析错,多半是字段缺业务别名或取值映射,先补映射,别改数据。
下一步从哪开始
今天就能做三件事:① 挑一个真正在用的核心指标,在语义模型模块里把配置完整走一遍;② 用领域管理把已有模型按业务域归置;③ 拿几个高频自然语言问题在 Chat BI 里跑,对照人工口径逐条核对。对不上就先查语义层——大多数错在定义层。
【免费下载链接】supersonicSuperSonic is the next-generation AI+BI platform that unifies Chat BI (powered by LLM) and Headless BI (powered by semantic layer) paradigms.项目地址: https://gitcode.com/GitHub_Trending/su/supersonic
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考