游乐游手机版
首页/AI热点日报/热点详情

袋鼠云大模型Text to SQL实践与优化

类型:热点整理2026-05-30
袋鼠云基于大模型实现TextToSQL,流程包括表元数据向量化存储、混合检索匹配、构建含角色与约束的Prompt并请求LLM生成SQL。通过动态少样本和模型微调提升准确率,该能力已集成至数栈“栈语妙编”智能助手,显著提升开发效率,降低数据库使用门槛。

所谓Text To SQL,就是将自然语言转化为可在关系型数据库中执行的SQL查询语句。近年来,随着大模型技术的快速发展,这一任务的准确率显著提升——大模型在推理、语义理解和指令遵循方面的能力,确实为这条技术路线注入了强劲动力。

从大数据平台的角度来看,集成Text To SQL功能的意义远不止于技术展示。首先,它能显著改善用户的交互体验;其次,对数据开发人员而言,用自然语言描述即可完成SQL任务的开发,省去了学习和编写复杂SQL语句的大量时间成本;最后,它还极大降低了数据库查询的门槛,让更多非技术人员也能参与数据探索,真正实现大数据服务更多人。

本文将分享袋鼠云在Text To SQL领域的探索与实践,介绍我们如何实现更高效、更准确的自然语言到SQL转换。

基于LLM实现Text To SQL

设计一套基于大模型的Text To SQL系统,实际上涉及多个关键环节,每个环节都需要精心设计。第一步,是将数据库中表的元信息进行组织——包括每个表的字段名称、类型、表间关系等,这些信息需要写入向量数据库。这一步看似基础,却直接决定了后续SQL生成的准确性。

第二步,是对用户输入的自然语言进行理解。这里我们会使用先进的embedding模型,将用户输入的语言向量化,每个词或词组都被转化为特定维度的向量。然后,利用该向量在向量数据库中检索,匹配相关的表元数据信息。这样一来,我们就能准确判断用户的查询意图与哪些表有关联。

第三步,将匹配到的表元数据信息与用户问题合并,生成最终的prompt。该prompt包含所有必要信息:角色定义、用户原始问题、匹配到的表元数据信息以及一些约束条件。最后,将这个prompt提交给大模型,让模型根据这些信息生成最终的SQL查询语句。整个过程考验的是大模型的计算能力和语义理解能力——只有准确理解,才能生成反映用户真实意图的SQL。

Text To SQL 流程图

在数栈中实现Text To SQL

表schema写入向量数据库

为了方便将数据库元数据导入向量数据库,我们在数栈中开发了一键导入数据库表元数据信息的功能,并支持自动刷新。其中最关键的是如何组织表的元数据信息——这一步直接关系到SQL生成的准确性。我们设计的信息组织格式大致如下:

table_name(column_name column_type column_comment,[...]), table_comment=""

根据用户问题匹配相关表元数据

这一步的核心挑战在于:如何精准匹配到与用户输入问题相关的所有表元数据信息?我们的方案是选用对中文支持良好的bge-large-zh-v1.5 embedding模型,对用户输入的问题进行向量化处理,尽可能完整地捕捉用户意图。

在检索元数据信息时,我们采用了混合检索模式——向量化检索加上全文搜索。具体流程是:先用用户问题的向量在向量数据库中匹配出TopK条信息,然后通过bm25算法对表元信息进行全文搜索,最后将两种方式的结果合并,做一次相关性排序,得到最终结果。该方法在实践中取得了良好效果。

生成Prompt

在构建请求大模型的Prompt时,分享一个小技巧:使用XML标签来分隔Prompt中的每一部分内容。大语言模型在训练时接触过大量包含XML格式的网页内容,因此能够很好地理解这种结构——这有助于模型完整识别Prompt中的每个部分。下面是我们定义的用于生成Text To SQL的Prompt模板:

表结构信息如下:{{表结构信息}}
你是一个高级SQL生成器,能够根据不同的SQL方言生成相应的SQL语句。你需要将用户输入的自然语言转化为SQL,请按照以下步骤操作:1. 请一步步思考并仔细分析用户的自然语言输入,确保充分理解用户的意图。2. 识别目标数据库类型为{{SQL方言}} SQL3. 考虑该数据库类型的特定语法和函数。4. 根据理解的用户意图,设计SQL查询的基本结构。5. 应用数据库特定的语法规则,对基本结构进行调整。6. 优化查询以提高性能(如适用)。7. 生成最终的SQL语句。在生成SQL时,请特别注意以下几点:- 使用{{SQL方言}} SQL特有的函数和语法结构 - 考虑该数据库类型的查询优化技巧 - 确保生成的SQL语句在语法和逻辑上的正确性如果用户的请求不明确或需要额外信息,请提出澄清性问题。

Prompt构建完成后请求LLM,生成SQL

Prompt构建完成后,将其发送给大模型执行,借助大模型的推理能力,最终生成SQL。

LLM 生成 SQL

Text To SQL的优化手段

上面介绍的是Text To SQL的一般流程,在实际操作中还可以加入一些优化手段,进一步提升生成SQL的准确率。下面分享两个我们在实践中验证过的技巧。

Prompt Engineering - 动态少样本

微软提出的Medprompt是一种有效的提示策略,动态少样本便是其中的一项关键技巧。它能进一步挖掘大模型的能力,提升响应的准确率。在Text To SQL中如何应用呢?我们可以结合自身业务场景,编写一些有针对性的SQL生成问答对,并将其写入向量数据库。构建Prompt时,根据用户输入问题进行向量检索,将检索结果也写入Prompt中。

该方法还能解决大模型对某些领域专有词汇理解不足的问题——对于识别不了的词汇或语句,提前生成对应的SQL问答对,在生成Prompt时动态匹配进去,作为上下文提供给LLM,它就能准确理解。

模型微调

大模型本身具备Text To SQL的能力,通常模型规模越大,能力越强。但无论大模型还是小模型,都可以通过微调来进一步提升效果。目前市面上与Text To SQL相关的开源数据集不少,例如WikiSQL、Spider等。我们目前使用的是阿里开源的通义千问Qwen1.5-14B-Chat,并利用Spider数据集进行了微调。微调前后的评测数据对比如下:

(这里可插入微调前后对比表格或数据)

Text To SQL在数栈中的应用

数栈作为大数据开发平台,一直致力于推动技术创新和提升用户体验。为了进一步提高开发人员的工作效率、简化数据处理流程,我们研发了「栈语妙编」智能助手。

「栈语妙编」能够将用户的自然语言描述转换为SQL语句。开发人员只需将待开发的SQL任务用自然语言描述出来,助手就能自动生成相应的SQL。这显著提升了开发效率,让开发人员能将更多精力集中在数据分析和业务逻辑上。

数栈 Text To SQL 功能

「栈语妙编」的能力不止于此。它不仅能根据自然语言生成SQL,还能对已有的SQL任务进行智能优化、SQL纠错、代码补全和添加注释。

SQL 智能优化

指标平台在数据驱动决策中扮演着关键角色。为了让指标平台进入智能化新阶段,我们正在积极结合大模型来提升其易用性和智能化程度,同时降低使用门槛——Text To SQL正是其中重要的一环。

来源:https://www.53ai.com/news/LargeLanguageModel/2024070958470.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。