利用提示工程,提升LLM将自然语言转化为SQL的准确性

        大型语言模型 (LLM) 已展现出理解自然语言提示并生成连贯响应的卓越能力。 这为将自然语言翻译成 SQL 等结构化查询语言开辟了新的可能性。 过去,编写 SQL 查询需要技术专业知识,而LLM允许任何人用简单的英语描述他们想要的内容,并自动生成相应的 SQL 代码。
        当利用LLM将自然语言转换为 SQL 查询时,提示词至关重要。 使用 Anthropic 的两个模型(Claude instant 1.1、Claude 2),并使用不同的提示工程技术评估了spider数据集上的 SQL 查询准确性(执行准确性)。 从较高的层面来看,在进行自然语言到 SQL 的转换时,提示工程有几个重要的考虑因素:

 - 使用清晰的说明--简单明了的自然语言提示更容易让LLM理解和翻译。
 - 提供足够的上下文 --LLM 需要了解用户的请求查询语义以及有关数据库模式的详细信息,例如表和列名称。
 - 包括示例 --提供一些自然语言和对应SQ的示例,可以帮助指导 LLM 以正确的语法生成查询。
 - 利用 RAG(检索增强生成)--检索与用户查询相关的自然语言和 SQL 示例,可以提高准确性。
    
    在这篇博客中,我将使用我的基准测试结果来帮助您了解上述每种提示策略如何影响自然语言到 SQL 转换的准确性。
    
    操作说明
    当使用 LLM 从自然语言生成 SQL 时,在提示中提供清晰的说明对于控制模型的输出至关重要。 在我对 Claude 模型的实验中,一种有效的策略是在提示中使用 XML 标签来注释不同的组件。 XML 标签就像指令一样,准确地告诉模型如何格式化 SQL。 例如,指示模型在 <SQL> </SQL> 之间编写查询可以减少详细输出。 如果没有这条指令,Claude模型可能会非常健谈。 它倾向于解释 SQL 结构,这会增加后处理的复杂性并不必要地消耗更多的输出标记。 在 <table_schema> </table_schema> 之间添加表标记告诉模型上下文开始和结束的位置。
"""Given an input question, use sqlite syntax to generate a sql query by choosing
one or multiple of the following tables. Write query in between <SQL></SQL>.

For this Problem you can use the following table Schema:
<table_schema>
{table_info}
</table_schema>

Please provide the SQL query for this question:
Question:{input}
Query: """

    

```sql
"""
Given an input question, use sqlite syntax to generate a sql query by choosing 
one or multiple of the following tables. Write query in between <SQL></SQL>.

For this Problem you can use the following table Schema:
<table_schema>
{table_info}
</table_schema>
            
Please provide the SQL query for this question: 
Question:{input}
Query: 
"""
```
Database Schema
        您需要包含数据库模式作为 LLM 生成 SQL 查询的上下文。 通常,数据库模式包括表名、列名、列类型、指示表关系的主键和外键。 在实验中,我尝试了仅列名、列名+外键和列名+外键+列类型。 结果表明列名+外键有最好的性能。 当查询需要连接表时,外键特别有用。 添加列类型没有帮助,甚至会产生更糟糕的结果。 这有点令人惊讶,但我相信这种行为可能不适用于所有模型。
        ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bb9dfb4292bf47a99c40faeeff3e166e.png)
Few-Shot Examples

小样本学习涉及在提示中包含少量示例以演示所需的映射。 例如,提示可以包含 2-3 对自然语言查询和相应的 SQL 语句。 添加少量示例时,您还应该利用 XML 标签来获得清晰的说明。

```sql
"""Given an input question, use sqlite syntax to generate a sql query by choosing 
one or multiple of the following tables. Write query in between <SQL></SQL>.

For this Problem you can use the following table Schema:
<table_schema>
{table_info}
</table_schema>

Below are three example Questions and the corresponding Queries. 
<example>
Question:{question_1}
Query:<SQL>{query_1}</SQL>
</example>
<example>
Question:{question_2}
Query:<SQL>{query_2}</SQL>
</example>
<example>
Question:{question_3}
Query:<SQL>{query_2}</SQL>
</example>
            
Please provide the SQL query for this question: 
Question:{input}
Query: """

```

我的基准测试结果表明,通过在同一数据库模式上下文中包含 3 个示例,我们取得了显着的改进。 我鼓励您尝试更多示例以进一步改进结果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c00f77f88b234ceb8f354371157287d8.png)
RAG for Dynamic Few-Shot Examples

虽然少数示例可以提高模型性能,但选择最相关的示例包含在提示中可以进一步提高模型性能。 使用 RAG,您可以动态选择少数示例并注入到提示中。 例如,对于给定的自然语言问题“显示出现次数最少的交易类型代码”,检索算法可以包括最相关的示例,例如“如果份额计数小于 10,则显示交易类型描述和日期”或“显示...的描述” 交易类型代码为“PUR”。 我的结果表明动态少样本方法可以显着提高模型性能。 值得注意的是,few-shot 学习可以缩小 Claude instant 1.1 与其更强大的同类 Claude 2 之间的差距。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/04a87703d2a94341976376cfaef9f57b.png)
结论
最后,提示工程对于优LLM以将自然语言转换为准确的 SQL 查询至关重要。 我在spider数据集上使用 Claude 进行的基准测试结果表明,通过包含schema详细信息、清晰的说明和添加少量示例等技术获得了切实的改进。 此外,检索增强提示动态地选择理想的少样本示例以最大化相关性。 通过深思熟虑的提示设计,我们可以引导LLM更好地理解我们的自然语言意图,并为每个人释放 SQL 的力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽象类和接口的区别

抽象类和接口的区别&#xff1a; 抽象类&#xff08;Abstract Class&#xff09;&#xff1a; 抽象类是一种不能被实例化的类&#xff0c;它只能被用作其他类的父类&#xff08;基类&#xff09;。抽象类可以包含抽象方法和非抽象方法。抽象方法是没有具体实现的方法&#xf…

2020年认证杯SPSSPRO杯数学建模B题(第二阶段)分布式无线广播全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 B题 分布式无线广播 原题再现&#xff1a; 以广播的方式来进行无线网通信&#xff0c;必须解决发送互相冲突的问题。无线网的许多基础通信协议都使用了令牌的方法来解决这个问题&#xff0c;在同一个时间段内&#xff0c;只有唯一一个拿到令牌…

医院信息系统集成平台—数据交换层

医院集成平台核心是数据交换总线,这解决当前大部分医院最关注的电子病历与移动医疗等业务系统接口交互共享及消息数据状态同步(消息一体化机制)等问题。集成平台主要包括业务数据集并提供相应的标准处理接口API(含数据采集与数据发布查询更新),同时提供相应的适配器服务来…

20240102使用python3将视频切片改名之后合并

20240102使用python3将视频切片改名之后合并 2024/1/2 22:12 缘起&#xff1a;将迅雷下载的视频切片排序之后再通过ffmpeg合并&#xff01;https://pri-cdn-tx.xiaoeknow.com/app1cE7gLFM1187/confusion_index/1703599111EAPoRE.m3u8?signf17e1a2cc0ddd77801f3c5110116369e&am…

C++ //习题14.2 将例14.3程序改为下面的程序,请分析执行过程,写出运行结果。并指出由于异常处理而调用了哪些析构函数。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题14.2 习题14.2 将例14.3程序改为下面的程序&#xff0c;请分析执行过程&#xff0c;写出运行结果。并指出由于异常处理而调用了哪些析构函数。 IDE工具&#xff1a;VS2010 Note: 使用不同的IDE工具可能有部分差异。 代…

【深度学习】神经正切核(NTK)理论

神经正切核理论 ​ 本文来自于《Theory of Deep Learning》&#xff0c;主要是对神经正切核(NTK)理论进行介绍。这里主要是补充了一些基本概念以及部分推导过程。作为软件工程出身&#xff0c;数学不是特别好&#xff0c;有些基础知识和推导步骤没办法一次补足。若有机会&#…

Qt:自定义一个好看的等待提示Ui控件

一、2024 永不卡顿 爱的魔力它转圈圈~ 等待样式控件是我们在做UI时出场率还挺高的控件之一&#xff0c;通常情况下有如下的几种实现方式&#xff1a; 1> 获取一张gif的资源图&#xff0c;然后使用QMovie 在一个QLabel 控件上加载显示gif的waiting等待动态。 2> 自定义绘图…

Linux 进程(五) 调度与切换

概念准备 当一个进程放在cpu上运行时&#xff0c;是必须要把进程的代码跑完才会进行下一个进程吗&#xff1f;答案肯定是 不对。现在的操作系统都是基于时间片轮转执行的。 时间片&#xff08;timeslice&#xff09;又称为“量子&#xff08;quantum&#xff09;”或“处理器片…

计算机网络【Cookie和session机制】

会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份&#xff0c;Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Sess…

【Pytorch】学习记录分享11——PyTorch GAN对抗生成网络

PyTorch GAN对抗生成网络 0. 工程实现1. GAN对抗生成网络结构2. GAN 构造损失函数&#xff08;LOSS&#xff09;3. GAN对抗生成网络LOSS损失函数说明 0. 工程实现 1. GAN对抗生成网络结构 2. GAN 构造损失函数&#xff08;LOSS&#xff09; LOSS公式与含义&#xff1a; LOSS…

javascript 常见工具函数(四)

31.RGB值和十六进制值之间的转换&#xff1a; &#xff08;1&#xff09;十六进制的颜色转为 RGB格式&#xff1a; /*16进制颜色转为RGB格式*/String.prototype.colorRgb function () {var sColor this.toLowerCase();if (sColor && reg.test(sColor)) {if (sColor.l…

C++初阶——类与对象

目录 C宏函数 在使用宏函数时&#xff0c;有几个常见的错误需要注意&#xff1a; 宏函数在某些情况下有以下优势&#xff1a; 1.C宏函数 在 C 中&#xff0c;宏函数&#xff08;Macro Function&#xff09;是使用预处理器定义的宏&#xff08;Macro&#xff09;&#xff0…

初识Linux下进程

&#x1f30e;初识进程 初识进程 简单认识一下进程 如何管理进程 进程属性信息 内核运行队列 查看进程 通过系统调用获取进程标识符       父子进程       查看运行中的进程 总结 前言&#xff1a; 我们在电脑上点开的一个个应用&#xff0c;其实就是一个个进程&am…

初识Java并发,一问读懂Java并发知识文集(4)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

智能标志桩:防盗防外物入侵_图像监测_态势感知_深圳鼎信

智能标志桩是一种新型的智能化标志设备&#xff0c;主要用于标识地下管道的位置、类型等&#xff0c;起警示作用。这与传统的标志桩大不相同&#xff0c;物联网的高速发展赋予了智能标志桩科技的力量&#xff0c;使它可以连接互联网&#xff0c;还具备图像监控的功能&#xff0…

2024年P气瓶充装证考试题库及P气瓶充装试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年P气瓶充装证考试题库及P气瓶充装试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机出的P气…

SQL优化:索引创建

前面我们已经学习了很多基础知识,包括表的操作、视图的创建、窗口函数的使用等。 这一节我们进入到索引部分的学习。 索引的定义 索引是一种数据结构,可以类比书籍的目录,索引是数据的目录。通过索引,能快速地查找到想要地数据。 辅助表创建 这里我们来创建一张大数据…

C++Qt6 多种排序算法的比较 数据结构课程设计 | JorbanS

一、 问题描述 在计算机科学与数学中&#xff0c;一个排序算法&#xff08;英语&#xff1a;Sorting algorithm&#xff09;是一种能将一串资料依照特定排序方式排列的算法。最常用到的排序方式是数值顺序以及字典顺序。有效的排序算法在一些算法&#xff08;例如搜索算法与合…

Linux系统操作常用指令

打开终端&#xff1a; ctrlshiftt:切换标签 ctrlshiftn:新增窗口 Linux命令大全(超详细版)_第二范式的博客-CSDN博客 VMware运行时以管理员身份运行&#xff0c;可以避免许多问题。 输入法切换 ctrl 空格 放大终端&#xff1a;ctrlshift"" 缩小终端&#xff1a;ctrl“…

深入 PyTorch:新手可探索 torch.nn 模块的强大功能

目录 引言 torch.nn使用和详解 Parameter 函数作用 使用技巧 使用方法和示例 UninitializedParameter 特点和用途 可进行的操作 使用示例 UninitializedBuffer 特点和用途 可进行的操作 使用示例 Module**&#xff08;重点&#xff09; 关键特性和功能 举例说…