
NL2SQL任务的目标是将用户对某个数据库的自然语言问题转化为相应的SQL查询。随着LLM的发展,使用LLM进行NL2SQL已成为一种新的范式。在这一过程中,如何利用提示工程来发掘LLM的NL2SQL能力显得尤为重要。
现状:大语言模型虽然在不断的迭代过程中越来越强大,但类似商业智能这样的企业级应用要远比分析一个 Excel 文件、总结一个 PDF 文件的问题要复杂的多:
这些特点决定了,当前大语言模型在企业数据分析中的应用无法完全的取代目前所有的或者部分的分析工具。其合适的定位或许是:作为现有数据分析手段的一种有效补充,在部分需求场景下,给经营决策人员提供一种更易于使用与交互的分析工具。
具体的应用场景包括:
### 1.1 三种基础技术方案介绍

类似现有的一些 BI 工具会基于自己的语义层开放出独立的 API 用于扩展应用,因此如果把自然语言转成对这些数据分析 API 的调用,是一种很自然的实现方式。当然完全也可以自己实现这个 API 层。
这个方案的特点是受到 API 层的制约,在后面我们会分析。
这也是目前最受关注的一种大模型能力(本质上也是一种特殊的 text2code)。由于 SQL 是一种相对标准化的数据库查询语言,且完全由数据库自身来解释执行,因此把自然语言转成 SQL 是最简单合理、实现路径最短的一种解决方案。
即代码解释器方案。简单的说,就是让 AI 自己编写代码(通常是 Python)然后自动在本地或者沙箱中运行后获得分析结果。当然目前的 Code Interpreter 大多是针对本地数据的分析处理(如 csv 文件),因此在面对企业应用中的数据库内数据时,需要在使用场景上做特别考虑。
用下图来表示 text2API 这种方案的大致架构:

基本流程
如何实现大语言模型的 text2API 能力?由于这是私有企业应用的定制 API,无法借助于一些已经对互联网公开 API 训练过的一些 text2Tool 模型。
代码语言:python
复制
"""
请遵循如下要求与约束:
1.参考以下的工具列表,找到需要使用的工具,并输出以下JSON格式内容用来使用工具。注意要确保下面内容在输出结果中只出现一次:
{"api_calls":[{"name":name of tool,"args":{"arg1":value1,"arg2":value2...}}]}
2.请根据工具的定义与参数描述来生成调用文本, 参考案例如下:
工具列表:
[
{
"name": "get_current_weather",
"description": "获取给定位置的当前天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "需要查询天气的城市"
}
},
"required": ["location"]
}
}
],
用户输入:查询北京的天气
返回调用JSON文本:
{"api_calls":[{"name":"get_current_weather","args":{"location":"Beijing"}}]}
3.如果无法理解用户意图,请回复“我无法理解您的意图”。
4.请根据用户问题与上下文来推理与提取本次工具调用需要的参数内容。
5.直接输出上述的JSON结果,不要有多余解释。
上下文:
{context}
工具列表:
{tools}
用户问题:
{question}
"""
在借助 LLM 把自然语言转化为 API 的调用及参数后,通过对输出的解析,我们就可以调用对应的 API 取得结果。当然,实际使用时需要对 Prompt 进行细致的调优与反复测试来验证准确率与稳定性。
在大型的企业 BI 应用系统中,数据分析的需求可能非常复杂,即使只考虑部分的需求实现,其潜在的 API 数量也可能非常庞大。由于在大语言模型的无状态特征,每次我们在输入用户问题时,理论上需要携带全部的 API 规格说明。这就可能导致上下文超出模型的最大允许 tokens。

大致过程为:
text2API 总结
text2API 方案本质上是在传统的数据分析系统之上增加一层自然语言的 UI,核心的数据分析功能需要自行设计 API 来实现。所以这种方案的好处是:
核心的分析逻辑不依赖于大模型(在 API 中),因此更可控。对于一些包含了复杂分析逻辑的任务(涉及不同的数据源、较多的逻辑判断和数据实体等),或者分析逻辑经常变化的任务,可以把内部的复杂性对大模型屏蔽,从而减少对输出稳定性的影响。
而这种方案的不足是:
因此,可以认为这种方案更适合用在输入输出结构上较简单(决定了 API 更简洁),但是内部数据处理与分析逻辑较复杂的任务。
text2SQL 的实现原理非常简单,其核心就在于**如何把自然语言组装成 Prompt,并交给 LLM 转化成 SQL。**我们不妨看一下 OpenAI 公司在官网给出的一个标准的 chatGPT 做自然语言转 SQL 的例子:
代码语言:python
复制
System
/*系统指令*/
Given the following SQL tables, your job is to write queries given a user’s request.
/*数据库内表结构*/
CREATE TABLE Orders (
OrderID int,
CustomerID int,
OrderDate datetime,
OrderTime varchar(8),
PRIMARY KEY (OrderID)
);
...此处省略其他表...
/*问题*/
Write a SQL query which computes the average total order value for all orders on 2023-04-01.
确实,这个看似复杂的任务仅需一个简洁的“咒语”即可完成。实际应用时,或许需针对所用的大模型微调,但不论形式如何变化,text2SQL的Prompt主要由几个核心部分构成。
实现text2SQL的原型固然简单,但在实际运用中,其表现往往难以达到预期。核心问题在于,当前AI模型生成SQL的准确性远逊于人类工程师。深度学习模型的预测本身就存在置信度问题,无法确保绝对可靠,这一挑战在大语言模型中同样显著。此外,输出的不确定性已成为阻碍大模型在关键企业系统广泛应用的最大障碍。
除了模型自身的知识能力以外,还有一些客观原因:
Text2SQL 的方案在企业应用中还会面临两个严重的挑战:
即正常的完成了任务,但实际结果是错误的。由于 text2SQL 是直接输出用于数据库访问的语句,理论上来说,只要不存在基本的语法错误,就可以执行成功,即使转换的 SQL 在语义上是错误的!这与 text2API 的区别在于:API 由于有很严格的结构化输入输出规范与校验,因此如果模型转换错误,很大概率会导致 API 调用的异常,使用者能够获得错误反馈(当然也存在 “假象” 的可能)。
比如这样一个问题,LLM 的两个输出都可以正常执行,但是第二个显然是错误的。而且这样的错误对于使用者来说,很可能是难以察觉的:

这个问题其实来自于 text2SQL 输出正确性的评估困难。这种 text2SQL 输出语义准确性衡量的复杂性本质上来自于这样一个事实:判断 AI 输出的一段代码是否正确,要比判断一个选择题答案是否正确,或者一段字符串的相似度要复杂的多。
下面这个来自于 text2SQL 模型的输出评估工具 TestSuiteEval 中的例子:

其中 Gold 代表正确答案,predicted1 和 2 代表模型的两个输出,这里正确的是 predicted2,错误的是 predicted1,我们来看两种评估方法:
这就是评估 text2SQL 模型输出正确性的复杂所在:你既不能用输出 SQL 的执行结果来判断,也不能简单的把输出 SQL 与标准答案对比来判断。
企业应用分析场景的一些特点:
那么大语言模型在应对这些问题时是否有很好的解决方案呢?遗憾的是,从当前的一些模型测试结果看,让大语言模型能够在这些场景下完全胜任,达到人类工程师的精度是不现实的。但是我们可以在几个方面考虑其优化,以实现在部分场景下的优先可用。
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。
L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。
以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。