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

news2024/11/19 21:23:28

大型语言模型 (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。 例如,指示模型在 之间编写查询可以减少详细输出。 如果没有这条指令,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: 
"""

Database Schema

您需要包含数据库模式作为 LLM 生成 SQL 查询的上下文。 通常,数据库模式包括表名、列名、列类型、指示表关系的主键和外键。 在实验中,我尝试了仅列名、列名+外键和列名+外键+列类型。 结果表明列名+外键有最好的性能。 当查询需要连接表时,外键特别有用。 添加列类型没有帮助,甚至会产生更糟糕的结果。 这有点令人惊讶,但我相信这种行为可能不适用于所有模型。
在这里插入图片描述

Few-Shot Example

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

"""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 个示例,我们取得了显着的改进。 我鼓励您尝试更多示例以进一步改进结果。
在这里插入图片描述

RAG for Dynamic Few-Shot Examples

虽然少数示例可以提高模型性能,但选择最相关的示例包含在提示中可以进一步提高模型性能。 使用 RAG,您可以动态选择少数示例并注入到提示中。 例如,对于给定的自然语言问题“显示出现次数最少的交易类型代码”,检索算法可以包括最相关的示例,例如“如果份额计数小于 10,则显示交易类型描述和日期”或“显示…的描述” 交易类型代码为“PUR”。 我的结果表明动态少样本方法可以显着提高模型性能。 值得注意的是,few-shot 学习可以缩小 Claude instant 1.1 与其更强大的同类 Claude 2 之间的差距。
在这里插入图片描述

结论

最后,提示工程对于优LLM以将自然语言转换为准确的 SQL 查询至关重要。 我在spider数据集上使用 Claude 进行的基准测试结果表明,通过包含schema详细信息、清晰的说明和添加少量示例等技术获得了切实的改进。 此外,检索增强提示动态地选择理想的少样本示例以最大化相关性。 通过深思熟虑的提示设计,我们可以引导LLM更好地理解我们的自然语言意图,并为每个人释放 SQL 的力量。

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

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

相关文章

Github 2024-01-03 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-03统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3TypeScript项目3Jupyter Notebook项目1Dart项目1C项目1Rust项目1 系统设计指南 创建周期&#x…

STC进阶开发(三)蜂鸣器、RTC时钟、I2C总线、外部中断、RTC闹钟设置、RTC计时器设置

前言 这一期我们首先学习如何让蜂鸣器响起来&#xff0c;并且如何让蜂鸣器发出简单的歌曲&#xff0c;然后我们介绍RTC时钟&#xff0c;要想明白RTC时钟&#xff0c;我们还需要先介绍I2C总线和外部中断。接下来就开始这一期的学习吧&#xff01; 蜂鸣器 简单介绍 蜂鸣器是一种…

geemap学习笔记039:分析地理空间数据--合成无云影像

前言 本节介绍的内容是对于众多的原始Landsat数据&#xff0c;利用ee.Algorithms.Landsat.simpleComposite()将其处理为TOA数据&#xff0c;并且合成无云影像。 1 导入库并显示地图 import ee import geemap ee.Initialize()2 无云影像合成 Map geemap.Map()collection e…

王道考研计算机组成原理——数据的表示和运算

数制转换 任意进制》十进制&#xff1a;位权*位数即可 整数部分补0是补在头部&#xff0c;小数部分补0是补在尾部 一般都是先把十进制》二进制&#xff1b;然后二进制再转换成8/16进制这样子 一种更快的方法->拼凑法&#xff1a;小数部分整数部分都可以这样求 一般都是先…

TypeError: unsupported operand type(s) for +: ‘NoneType‘ and ‘str‘

报错 找到出错代码&#xff0c;发现默认值是None 解决 改为‘’即可

vba抓取网页数据

哈喽&#xff0c;哈喽&#xff0c;大家好&#xff01;大家2024发大财啦&#xff01; 不知道&#xff0c;平时大家爱不爱看电影呢&#xff1f;从今年的贺岁档的拍片来看&#xff0c;今年的电影还挺多&#xff0c;而且国产优秀电影居多&#xff0c;元旦假期期间我也去看了部喜剧…

【BCC动态跟踪PostgreSQL】

BPF Compiler Collection (BCC)是基于eBPF的Linux内核分析、跟踪、网络监控工具。其源码存放于GitCode - 开发者的代码家园 想要监控PostgreSQL数据库的相关SQL需要在编译PostgreSQL的时候开启dtrace。下文主要介绍几个和PostgreSQL相关的工具,其他工具可根据需求自行了解。 …

ChatGPT 进行 SEO的使用技巧

搜索引擎优化 (SEO) 是使网站对搜索引擎友好的一种不断发展的实践。 自搜索引擎和新兴技术的发展以来&#xff0c;它从未保持不变。 最近发布的 ChatGPT 是一种人工智能对话工具&#xff0c;似乎在搜索引擎优化方面有很好的应用。 从创建吸引人的标题到只需一个简短的提示就可…

Latex宏包gbt7714的格式问题:去掉OL

问题 采用bibtex来格式化文献&#xff0c;文献的格式采用gbt7714宏包来格式化。感谢宏包的作者和一种贡献者&#xff0c;效果非常好&#xff0c;用起来也很方便。 唯一一个我自己的问题&#xff0c;看不得文献索引后面[J/OL]中的OL。 网上搜索一圈&#xff0c;有一些办法&am…

echarts点击柱子、线节点、横坐标标签

echarts点击柱子、线节点、横坐标标签 x轴标签要为标签文字添加点击事件&#xff0c;必须先在xAxis里设置响应事件 xAxis: {triggerEvent: true, },然后直接监听 thisChart.on("click" ,function (params) {console.log(params) });通过params.componentSubType来…

三、C语言中的分支与循环—break和continue语句(8)循环结构 完

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

720VR全景通微信小程序商业运营版+多用户+云储存+大图切图效率高+完整的代码包以及搭建教程 功能强大

随着科技的飞速发展&#xff0c;虚拟现实技术已经逐渐融入我们的日常生活。其中&#xff0c;720VR全景技术以其独特的视角和沉浸式体验&#xff0c;受到了广泛的关注和应用。为了满足市场需求&#xff0c;春哥团队推出了720VR全景通微信小程序商业运营版&#xff0c;集多用户、…

基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 矢量控制策略 4.3 PI控制器设计 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于PI控制的PMSM永磁同步电机控制系统simulink建模与仿真。其中&#xff0c;基于PI&#xff08;…

使用UDP和JSON在C#中高效发送结构体数据

使用UDP和JSON在C#中高效发送结构体数据 引言 在许多网络编程场景中&#xff0c;我们经常需要在不同的应用程序或服务之间发送和接收数据。UDP&#xff08;用户数据报协议&#xff09;因其低延迟和少开销的特点&#xff0c;在需要快速数据传输的场景中非常有用。本文介绍了如何…

【FPGA/verilog -入门学习15】vivado FPGA 数码管显示

1&#xff0c;需求&#xff1a;使用xc720 开发板的8个数码管显示12345678 2&#xff0c;需求分析&#xff1a; 75hc595 1&#xff0c;74hc595驱动&#xff0c;将串行数据转换成并行输出。对应研究手册 2&#xff0c;发送之前将要发的数据&#xff0c;合并成高8位:SEG,低8位&…

【算法】利用分治思想解算法题:快排、归并、快速选择实战(C++)

1. 分治思想 介绍 分治法将问题划分成多个相互独立且相同或类似的子问题&#xff0c;然后递归地解决每个子问题&#xff0c;并将结果合并以得到原始问题的解。 分治思想通常包含以下三个步骤&#xff1a; 分解&#xff1a;将原始问题划分成多个规模较小、相互独立且类似的子…

如何恢复 iPhone 上永久删除的照片?

2007年&#xff0c;苹果公司推出了一款惊天动地的智能手机&#xff0c;也就是后来的iPhone。你会惊讶地发现&#xff0c;迄今为止&#xff0c;苹果公司已经售出了 7 亿部 iPhone 设备。根据最新一项调查数据&#xff0c;智能手机利润的 95% 都进了苹果公司的腰包。 如此受欢迎…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成 --【本人】

一、插件安装 1.1 搜索插件 mybatis 安装 1.2 接受安装 1.3 再次进入&#xff0c;说明安装好了 1.4 与鱼皮不同点 1&#xff09;mybatis 版本不一致 鱼皮&#xff1a; 本人&#xff1a; 2&#xff09;鱼皮需重启安装 本人不需要 1.5 【需完成 三、步骤&#xff0c;再来看】 …

webpack 5 loader

webpack 本身不能识别js&#xff0c;json外的资源&#xff0c;所以我们需要借助其他loader来处理对应的文件 CSS Loader&#xff0c;处理css 安装 npm i css-loader style-loader -D css-loader 负责讲css编译成webpack能识别的模块内容style-loader 动态创建<style&g…

SQL之CASE WHEN用法详解

目录 一、简单CASE WHEN函数&#xff1a;二、CASE WHEN条件表达式函数三、常用场景 场景1&#xff1a;不同状态展示为不同的值场景2&#xff1a;统计不同状态下的值场景3&#xff1a;配合聚合函数做统计场景4&#xff1a;CASE WHEN中使用子查询场景5&#xff1a;经典行转列&am…