通过问答生成SQL:大模型时代BI的最佳解决方案
AskTable 是一款基于先进的大型语言模型(LLM)的智能数据问答解决方案,旨在帮助企业快速进行数据查询和决策。它集成了意图识别、知识检索、问题解析、数据查询和可视化输出等多种功能。用户通过自然语言提问,即可获得数据分析结果,从而实现更加灵活、高效的数据驱动决策。
解决什么问题
企业高层面临的挑战
-
• 低效的数据查询与决策流程:企业高层在进行新项目或决策时,往往需要迅速获得数据支持,但传统方法(如向数据分析师请求数据)通常效率较低,且响应时间较长。
-
• 决策慢,灵活性差:决策过程中的数据需求往往是即时的,依赖传统数据分析师处理数据,往往不能快速适应快速变化的需求。
使用 ChatBI 后,高层可以通过简单的自然语言查询获取实时数据,节省了与分析师沟通的时间,极大提升了决策效率。
业务一线面临的挑战
-
• SQL 门槛高:业务人员通常缺乏足够的数据库查询知识,尤其是在复杂的 SQL 查询语句的编写上,技术壁垒较高。
-
• 业务与技术的融合困难:业务人员需要兼顾业务理解、数据分析和技术实现,但缺乏跨领域的综合能力,使得数据分析和决策变得困难。
ChatBI 将繁琐的 SQL 查询隐藏在自然语言后面,业务人员只需通过简单的语言提问,就能获得数据分析结果,降低了技术门槛,并且更符合业务需求。
支持的数据库或文件类型
ChatBI 支持多种流行数据库以及文件格式的查询,能够满足各种企业的数据需求。以下是支持的主要数据库和文件类型:
类型 | 支持版本 | 说明 |
MySQL | 5.7/8.0 | 流行的开源数据库 |
PostgreSQL | 14/15/16 | 流行的开源数据库 |
PolarDB MySQL | 5.7/8.0 | 阿里云-云原生数据库(MySQL 兼容) |
PolarDB PostgreSQL | 14/15/16 | 阿里云-云原生数据库(PostgreSQL 兼容) |
Oracle | 18c | 主流商用关系型数据库 |
OceanBase | 4.2 及以上 | 分布式关系型数据库(MySQL 兼容) |
TiDB | 8.1.0 及以上 | 分布式关系型数据库 |
ClickHouse | 22.12 及以上 | 分布式列式数据库 |
StarRocks | 3.x | 分布式分析型数据库 |
Hive | 3.x | 分布式分析型数据库 |
Excel 文件 | .xlsx/.xls | - |
CSV 文件 | .csv | 支持常见分割符包括逗号、制表符等 |
架构解读
下面是整个系统架构的概览,展示了 ChatBI 如何利用自然语言理解能力将用户的查询转化为 SQL 查询并执行。
知识库建设
为了提高自然语言处理的精度和业务适应性,知识库的建设至关重要。企业内部的业务知识和规则常常是 ChatBI 精确理解用户需求的关键所在。
在企业内部,为了提高效率,常常会形成许多约定俗成的简称和规则。这些信息在内部交流中无需多言,大家自然心知肚明。但对于一个外来的 AI 来说,这些“大家都知道”的信息却是陌生的。
要让 AI 真正“懂你”,就需要对它进行训练,让它也能学会并掌握这些“大家都知道”的信息。我们将这类信息归纳为“业务知识”,它是企业文化与经验的沉淀,是帮助 AI 提升理解力的关键所在。
在 AskTable ,您可以通过以下四种方式来添加您企业的业务知识:
-
1. 术语库
-
2. 训练师
-
3. 专属偏好
-
4. 元数据
术语库
术语库帮助 AskTable AI 理解企业内部特有的术语。例如,当“铁盒子”在企业中代表“发动机”时,可以将这一约定添加到术语库中,确保 AI 在处理相关查询时能准确理解。
当 AskTable 接收到包含这些术语的查询请求时,会参考术语库中的定义,将术语转换为标准业务语言后进行分析,让查询结果更加贴合用户需求。
训练师
AskTable AI 的能力会随着用户反馈不断优化。通过点赞或提供训练数据,您可以帮助 AI 更快地学习如何更好地生成答案。训练数据包括用户提出的问题及其对应的正确 SQL 查询。
借助这些数据,AI 可以迅速掌握企业的具体需求,持续提高回答的精准度和实用性。
专属偏好
专属偏好让 AskTable AI 更懂用户的提问意图。比如,当数据库中包含多年的数据,您可以预设偏好,仅让 AI 查询最近一年的数据,从而避免不必要的筛选。
通过设置专属偏好,您可以进一步细化 AI 的查询范围,让其更准确地匹配用户需求,为您节省时间并提高工作效率。
元数据
元数据是对数据的“数据”描述,提供了数据的背景信息,如结构、格式和含义。这些信息让 AI 能够更准确地解读和处理数据,从而提升查询的精准度和效率。
AskTable 会自动从数据库中提取元数据,包括数据库、表、字段的信息,以及字段备注。即使没有备注,系统也会自动生成相关信息。所有元数据将汇总并存储在 AskTable 的 Meta Brain 中,为后续查询和分析提供支持。
元数据在数据查询中的作用体现在多个方面,比如:
示例 1:枚举值
例如,一个字段记录性别,其中 sex=1 表示男性,sex=2 表示女性。当用户查询“性别为男”的数据时,AI 会基于元数据自动生成查询条件 sex=1,无需用户明确说明。
示例 2:特定格式
例如,一个字段记录基金的星级评价,使用从 ★ 到 ★★★★★ 的格式。如果用户查询“四星以上的基金有多少”,元数据会帮助 AI 理解星级格式,自动生成正确的查询条件:
-
• 错误:
select count(*) from fund where star >= 4;
-
• 正确:
select count(*) from fund where star in ('★★★★','★★★★★')
通过元数据的加持,AskTable 能更深入地理解数据的实际含义,为您生成更精准的查询结果,助力高效决策。
AI 生成 SQL
利用自然语言处理能力自动生成 SQL ,从而满足各种特定场景。
适应场景
-
1. 开发者不想针对不同的用户需求,实现不同的问答逻辑,想通过一个页面提供统一查询服务
-
2. 开发者不想使用 AskTable 的 UI 界面,想自己实现一个 UI 界面
-
3. 开发者想自己访问数据库,而不是通过 AskTable 访问数据库。
举个例子:
用户查询:获取所有在2021年销售超过1000件的产品
生成的 SQL 查询:
{ "question": "获取所有在2021年销售超过1000件的产品", "prepared_statement": "SELECT name, sales FROM products WHERE year=2021 AND sales>1000", "parameters": {}, "header": { "name": "姓名", "sales": "销售额" }}
通过 ChatBI,用户只需用简单的自然语言提出问题,系统即可自动生成对应的 SQL 查询语句,极大地提高了查询效率。
AI利用自然语言统计
从自然语言查询生成 SQL 并直接返回查询结果的 API 接口。通过该 API,开发者可以利用AI的自然语言处理能力,快速获取数据库中的信息。这对于需要简化查询过程和提高开发效率的场景尤为适用。
适应场景
-
1. 开发者希望用户能直接通过自然语言查询获取数据,而不需要自行处理 SQL 语句的生成和执行。
-
2. 开发者不想使用 AskTable 的 UI 界面,想自己实现一个 UI 界面,直接展示查询结果。
-
3. 开发者希望提供灵活的查询方式,适用于多种用户场景。
用户查询:有多少个国家?
生成的返回结果:
{ "status": "OK", "elapsed_time": 6, "text": "共有206个国家。", "files": null, "charts": null, ....}
通过这种方式,开发者可以将自然语言查询与数据分析功能集成到自己的应用中,简化了数据交互流程。
总结
AskTable 虽然没有完全开源,但是这个思路是一个非常好的应用场景,大家可以参考它的思路,结合自身的需求和技术栈,去设计和开发符合自己产品特色的 ChatBI 系统。通过分析 AskTable 的应用架构、交互方式及数据处理流程,可以为自己搭建类似的智能对话系统提供宝贵的经验和启示。