另辟蹊径的 Text2SQL,不用大模型也能搞 chatBI

简介: 润乾报表NLQ组件摒弃大模型路线,采用规则词典与领域知识库,将自然语言精准转化为MQL查询语言,实现稳定、低成本、可维护的ChatBI。其核心在于结构化语义解析,避免“幻觉”,支持复杂多表关联与计算,适用于企业级BI场景,是可靠高效的自然语言查询解决方案。

随着 AI 大模型的技术突破,用自然语言与数据进行对话的 ChatBI 概念也变得火热起来,人们普遍认为这件事终于具备了可行性。于是,业界很自然地沿着大模型(LLM)这条技术路线进行探索,期待它能理解业务人员的随意提问并直接返回数据结果。

然而,理想很丰满,现实却有点骨感:LLM 方案始终存在“幻觉”问题,而且成本高昂、部署与调优过程也相当复杂。

我们注意到,在 BI 这个特定场景下,业务人员用于查询数据的自然语言,其实并没有日常对话那么随意和复杂。诸如“上月销售额”、“销量最高的产品”、“北京地区的客户销售额”这类问题,其语义模式实际上是可抽象、可结构化的。润乾报表 NLQ 组件正是基于这一洞察,绕开了大模型的技术路线,通过一套精密的“规则词典”,同样实现了高效、可靠的自然语言查询。

核心机制:它不是“大脑”,而是“交通指挥塔”
你可以把大模型想象成一个博览群书、反应迅捷的“天才”,但它有时会“自由发挥”。而润乾 NLQ,则像一个一丝不苟、精通所有交规和地图的“交通指挥塔”。它的工作,不靠灵感,靠的是一套预先录入的、极其详尽的“城市交通手册”——也就是它的词典,也就是领域知识库。

承载领域知识的词典
这套词典是 NLQ 的灵魂,远不止是几个同义词那么简单,而是一个结构化的知识库:

数据元数据词典:明确定义了有哪些表(如订单表)、哪些字段(如客户名称、订单金额),以及它们的数据类型(文本、数字、日期)。这是最基础的“地图”。

业务语义词典:这是让 NLQ“懂业务”的关键。

维词:定义了像年、月、省份、产品类别这样的分析维度。NLQ 知道“月”是从日期字段里提取出来的一个层次。

指标:定义了像销售额、月活数这样的业务指标。关键是,指标可以绑定计算公式!比如“销售额”可能就是“单价 × 数量”,而“毛利率”则有更复杂的计算逻辑。这杜绝了 LLM 胡编乱造公式的可能。

常数词:枚举出的维度值,比如看见“北京”就知道要对应“城市”维下的具体 ID。

……

查询逻辑词典:这是理解用户意图的“语法手册”。

比较词:如大于、不超过、在... 之间。每个词都对应一个表达式,比如“大于”对应?1 > ?2,其中?1 是字段,?2 是值。

聚合词:如总和、平均数、最多,对应 SQL 中的 SUM,AVG,MAX 等函数。

无效词:如请帮我查一下、那个,这些在分析时会被过滤掉,提高语句解析的准确率。
……

从自然语言到 MQL 的标准化转换
在 BI 场景中,绝大多数查询都可以归纳为对维度、指标、条件的不同组合,这正是模式化查询的基础。润乾 NLQ 定义了专用的MQL(Metrics Query Language)作为中间查询语言,专门用于描述这种模式化的 BI 查询需求。

用户输入的相对规范的自然语言,会首先被转换成结构化的 MQL 语句,再转换成 SQL 到数据库查询并返回结果。
6f7cb2798bed4f5ed5d6e4c82b98a965_1762750883043100.png
事实上,大多数 Text2SQL 技术都会采用某种中间查询语言来解决自然语言到 SQL 转换的精确性问题。这样可以将不确定性限制在自然语言到中间语言的转换环节,而确保从中间语言到 SQL 的生成是精确的。润乾 NLQ 也是同样机制,不同之处在于,其专用的 MQL 采用了类 SQL 的语法而不是常见的 json 结构,而且在查询覆盖范围要远比大多数 Text2SQL 更为广泛。

例如,"40 岁以上雇员姓名、年龄、城市和省"这样的单表明细查询,NLQ 能够精准识别年龄过滤条件并返回所需字段;而"每月订单数 "这样的单表聚合分析,MQL 会自动按月份分组并完成计数计算。

在处理复杂业务逻辑时,MQL 同样表现出色。面对"订单编码,商品名称,供应商名称和城市 "这样的多表关联查询,NLQ 能够自动解析表间关系,准确关联三张表中的信息;而对于"每年的付款数和总销售金额 "这类多表对齐分析,MQL 也可以实现不同事实表在同一时间维度下的指标对齐计算。

更复杂的是,MQL 还能应对"订单金额总和大于 20 万元的女员工 "这样的子表聚合条件查询,NLQ 会先在订单表中按员工聚合金额,再将结果作为条件过滤员工信息。即使是"月连涨天数大于 5 天 "这样的复杂指标计算,MQL 也能通过内置函数准确实现业务逻辑。

一个具体的查询过程
当用户输入“去年北京发往青岛的订单”时,NLQ 会启动一套精密的解析流程:

词汇切分与过滤:NLQ 首先将句子拆解为“去年”、“北京”、“发往”、“青岛”、“订单”等关键令牌,并过滤掉“的”等无实际查询意义的虚词。

词典匹配与语义关联:

去年→ 匹配到“年”维词,其表达式自动计算为 year(ADDYEARS(now(),-1))。

北京 / 青岛→ 匹配到“城市”维的常数词,看到“北京”“青岛”,NLQ 知道它对应“城市”维下的一个具体 ID,自动完成语义映射。

发往→ 识别为关键动词,该动词关联到“发货”字段簇。字段簇是 NLQ 的核心特色:这里的动词 "发往" 关联的 "发货" 字段簇,实际上是一个预定义的语义包,其中包含了发货城市、收货城市、发货时间等多个相关字段。NLQ 据此智能理解 "北京" 应对应发货城市,"青岛" 应对应收货城市。通过“发往”这个动词,就知道了涉及“发货地”和“收货地”两个地址的匹配,从而精准构建查询条件。

订单→ 匹配到“订单”实体,确定了查询的主表及需要返回的默认字段集。

MQL 生成:将所有匹配结果组装成一条结构化的 MQL 语句。该语句清晰地描述了查询逻辑:从订单表,筛选出“发货城市为北京、收货城市为青岛、订单年份为去年”的所有记录,并返回预设的订单核心信息。

执行与返回:MQL 引擎将逻辑转换为底层数据库可高效执行的 SQL,最终将精准的查询结果返回给用户。

硬核优势:在 BI 战场上“稳、省、简”
这套基于规则的设计,在企业 BI 场景下带来了实实在在的好处:

稳定可靠,告别“幻觉”:NLQ 的词典是“知之为知之,不知为不知”。如果用户的查询中有一个词(比如“用户活跃度”)没有在词典中定义,NLQ 会明确告诉你“无法识别”,请求换种说法。它不会像 LLM 那样,为了给出一个答案而编造一个看似合理实则错误的结果。这样不仅解决了中间语言到 SQL 的精确性问题,同时也依靠词典实现了从自然语言到中间语言的精确,从而保证整个流程都是精确的。这种精确性对于依赖数据决策的 BI 场景至关重要。

成本极低,部署简单:规则引擎计算开销很小,普通 CPU 服务器即可流畅运行多个并发任务,实现私有化部署的成本可比大模型方案降低一两个数量级。相比之下,大模型方案通常需要昂贵的 GPU 集群和复杂的 RAG 等配套技术栈,显得笨重而复杂。

知识透明,可调试、可维护:当业务逻辑变化时,比如“销售额”的计算规则需要扣除运费,管理员只需要在指标词典里修改一下公式。整个过程像修改配置文档一样清晰、可控。而 LLM 方案则需要重新收集数据、微调模型,过程是个黑盒,且成本高昂。

其实不止于 SQL:它自带了一个“计算引擎”
事实上,MQL 生成的执行逻辑并不完全是 SQL,它背后站着 DQL 和 SPL 两大“护法”。

DQL(Dimensional Query Language):负责把复杂的多表关联查询,在语义层简化成逻辑上的单表查询。用户问“上海的客户买了哪些北京生产的产品”,这种涉及客户表、订单表、产品表的多层关联,DQL 在背后默默搞定,让 NLQ 可以像查询单表一样轻松。

SPL(Structured Process Language):当遇到 SQL 写起来都头疼的复杂计算时,SPL 就登场了。比如计算“移动平均”、“客户留存率”、以及“月活数量”等。NLQ 可以调用封装好的 SPL 脚本进行后计算,对于 BI 场景,它能实现的查询功能,要比传统 Text2SQL 的范围更为丰富。

前面流程图中所示的“MQL->SQL”过程实际上是简化的表述。在实际执行过程中,MQL 会根据查询的复杂程度,智能地选择执行路径:简单的查询由 DQL 直接生成 SQL 到数据库执行;涉及复杂计算时,则会分解为SPL+DQL的组合,其中 DQL 负责将多表关联逻辑转换为 SQL 查询,而 SPL 则处理那些 SQL 难以表达的复杂计算逻辑。

da96863a50f5bd5a0857b8dcc16a2f25_1762750883323100.png
客观吐槽:“边界”也很清晰
当然,NLQ 并非完美,它的局限性同样源于其设计:

灵活性是硬伤:它无法理解“卖得最火的几个货”这种随意的口语。它需要相对规范的语言,比如“销量前十名的产品”。它的强大建立在“词典”的完备性上,对于词典之外的“新词”和“新说法”,它是真的“无能为力”。

知识更新需要人工:NLQ 不具备举一反三的学习能力。一个新的业务指标上线,必须由管理员手动添加到词典中,它才能被查询。

“双打”或许是最佳组合
既然 LLM 长于“灵活理解”,NLQ 善于“精准执行”,那么为何不让它们组队呢?

一个非常理想的架构是:LLM 作为“智能前台”,负责与用户进行多轮、随意的口语对话,理解其核心意图,并将其“翻译”成 NLQ 所能识别的、相对规范的自然语言指令。

这里的妙处在于:让 LLM 完成从“随意文字”到“规范文字”的转换,这远比让它直接生成某种结构化的 MQL 要简单。而且,转换后的文字业务用户能看懂,而直接生成 MQL 或 SQL 则难以由不懂技术的 BI 用户确认正确性。经过确认后,再由 NLQ 这个“可靠后台”精准执行,最终得到一个既符合用户意图、又准确的结果。

这样,既享受了 LLM 的交互友好性,又保证了 NLQ 的查询准确性和低成本,可谓鱼与熊掌兼得。

当 ChatBI 的探索大多集中于大模型这一虽然广阔但充满不确性的“主航道”时,润乾 NLQ 以其独特的“规则引擎”别辟蹊径,为我们提供了另一种经过实践验证的可靠选择。它或许没有大模型那般“万能的想象力”,但在 BI 这个需要确定性、可靠性与成本控制的领域,这种专注于“解决特定问题”的另辟蹊径,无疑是一条值得重视的务实之路。

相关文章
|
25天前
|
编解码 人工智能 自然语言处理
牛B, 我去,新手小白也能使用InfiniteTalk搭建属于自己的数字人啦 ,真的太简单啦!!!
小华同学带你解锁AI高效工具!InfiniteTalk创新“稀疏帧配音”技术,实现口型、表情、身态协同演进,支持I2V/V2V双模式,确保长视频ID/背景稳定,流畅跨片段衔接,助力课程、宣传、电商等多场景降本增效。
367 6
|
12天前
|
存储 弹性计算 应用服务中间件
阿里云服务器多少钱一年?38元、68元、99元、199元配置价格清单
阿里云服务器爆款优惠:38元/年轻量服务器适合个人博客,99元/年ECS经济型适合中小网站,199元/年u1实例满足企业高性能需求。配置涵盖2核2GB至2核4GB,带宽3-5Mbps,ESSD云盘,新老用户可享限时抢购,高性价比入门首选。
|
16天前
|
数据采集 机器学习/深度学习 数据可视化
基于python大数据的小说数据可视化及预测系统
本研究基于Python构建小说数据可视化与预测系统,整合多平台海量数据,利用爬虫、数据分析及机器学习技术,实现热度趋势预测与用户偏好挖掘。系统结合Django、Vue等框架,提供动态交互式可视化界面,助力平台精准运营、作者创作优化与读者个性化阅读体验,推动网络文学数据智能化发展。
|
12天前
|
运维 监控 网络协议
云拨测:当“正常变更”摧毁全球网络时,谁来守护你的业务可用性?
一次权限变更,引发全球边缘网络瘫痪4小时,数百万网站返回 5XX,连状态页也宕机。故障源于“正常的变更”,暴露了企业对服务商的盲目信任。当内部监控失效,唯有云拨测能从真实用户视角,独立验证“服务是否可用”。
105 13
|
1月前
|
缓存 前端开发 Java
深入理解 Java 类加载器:双亲委派机制的前世今生与源码解析
本文深入解析Java类加载器与双亲委派机制,从Bootstrap到自定义加载器,剖析loadClass源码,揭示类加载的线程安全、缓存机制与委派逻辑,并探讨SPI、Tomcat、OSGi等场景下打破双亲委派的原理与实践价值。(238字)
265 8
深入理解 Java 类加载器:双亲委派机制的前世今生与源码解析
|
9天前
|
监控 Java C语言
Java内存排查太难?阿里云操作系统控制台上线「内存诊断」新利器
帮助用户结合应用和操作系统的角度,快速揪出 Java 应用内存占用的元凶。
|
10天前
|
人工智能 自然语言处理 数据可视化
AI 数据分析产品推荐:更高效、更可控的智能报告解决方案
在与客户的共创中,我们发现数据团队仍被困在周报、月报的重复劳动中,AI 生成的报告往往结构松散、缺乏深度,无法直接使用。这引发我们对智能分析范式的重新思考,推出了 「智能融合报告」,确立了一种新的协作方式:您作为“总设计师”编排思路,AI 作为“超级工匠”精准执行。通过这种方式,您能够将业务经验融入分析框架,全程掌控生成过程,获得结构严谨、洞察深入且可复用的分析成果。如果您在寻找更高效、更可控的智能报告解决方案,这篇凝结我们实践思考的文章值得一读。
|
10天前
|
人工智能 自然语言处理 测试技术
研发、测试提效攻略:利用Apipost AI 6 大核心功能实现接口测试全流程
Apipost 通过 AI 实现接口从设计到测试的全流程自动化,支持智能提取文档、一键补全参数、自动生成用例与断言,大幅提升研发与测试效率,推动接口测试向智能化、规范化升级。
|
25天前
|
弹性计算 搜索推荐 异构计算
阿里云服务器多少钱一年?整理2025年最新爆款服务器排行榜
阿里云2025年优惠持续,轻量服务器200M带宽38元/年起,ECS 2核2G 99元/年,2核4G 199元/年,4核16G 89元/月,8核32G 160元/月,香港轻量25元/月起,新老用户同享,续费不涨价。
520 6