利用提示工程,提升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。 例如,指示模型在 之间编写查询可以减少详细输出。 如果没有这条指令,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.hqwc.cn/news/316538.html

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

相关文章

draw流程图工具导入云原生(CNCF)相关控件

目录 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 2、引用自己的资源链接&#xff1a; 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 导入资源图库&#xff0c;资源放在下方&#xff0c;大家可以下载&#xff1a; 2、引用自己的资源链接&#xff1a;…

JAVAEE初阶相关内容第二十弹--HTTP协议

写在前&#xff1a;2024年啦&#xff01;新的一年要努力学习啦 本篇博客围绕HTTP协议&#xff0c;对HTTP协议进行了解&#xff0c;需要理解其工作过程&#xff0c;对HTTP协议格式要清楚&#xff0c;通过抓包工具进行协议分析&#xff0c;认识“方法”、“请求报头”&#xff0c…

打造绿色饲养链:河南恩珅德农业引领可持续农业发

在河南恩珅德农业的引领下&#xff0c;可持续农业的概念得到了更进一步的实践和推动。其致力于打造绿色饲养链的努力&#xff0c;旨在通过创新的理念和科技手段&#xff0c;实现饲养业的可持续发展。本文将深入探讨河南恩珅德农业是如何引领可持续农业发展&#xff0c;打造绿色…

Spring技术内幕笔记之IOC的实现

IOC容器的实现 依赖反转&#xff1a; 依赖对象的获得被反转了&#xff0c;于是依赖反转更名为&#xff1a;依赖注入。许多应用都是由两个或者多个类通过彼此的合作来实现业务逻辑的&#xff0c;这使得每个对象都需要与其合作的对象的引用&#xff0c;如果这个获取过程需要自身…

mysql的读写分离

MySQL 读写分离原理 读写分离就是只在主服务器上写&#xff0c;只在从服务器上读。 主数据库处理事务性操作&#xff0c;而从数据库处理 select 查询。 数据库复制被用来把主数据库上事务性操作导致的变更同步到集群中的从数据库。 常见的mysql读写分离分为以下两种 1&…

贝叶斯推断:细谈贝叶斯变分和贝叶斯网络

1. 贝叶斯推断 统计推断这件事大家并不陌生&#xff0c;如果有一些采样数据&#xff0c;我们就可以去建立模型&#xff0c;建立模型之后&#xff0c;我们通过对这个模型的分析会得到一些结论&#xff0c;不管我们得到的结论是什么样的结论&#xff0c;我们都可以称之为是某种推…

day5--java基础编程:异常,内部类

6 异常 6.1 异常概述 出现背景&#xff1a; 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽善尽美&#xff0c;在系统的运行过程中仍然会遇到一些问题&#xff0c;因为很多问题不是靠代码能够避免的&#xff0c;比如:客户输入数据的格式&#xff0c…

React使用动态标签名称

最近在一项目里&#xff08;React antd&#xff09;遇到一个需求&#xff0c;某项基础信息里有个图标配置&#xff08;图标用的是antd的Icon组件&#xff09;&#xff0c;该项基础信息的图标信息修改后&#xff0c;存于后台数据库&#xff0c;后台数据库里存的是antd Icon组件…

QT上位机开发(会员管理软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了ini文件的解析办法&#xff0c;通过QSettings类就可以很轻松地访问ini文件里面的数据。除了ini文件之外&#xff0c;另外一种经常出…

将 Python 和 Rust 融合在一起,为 pyQuil® 4.0 带来和谐

文章目录 前言设定方向从 Rust 库构建 Python 软件包改装 pyQuil异步困境回报&#xff1a;功能和性能结论 前言 pyQuil 一直是在 Rigetti 量子处理单元&#xff08;QPUs&#xff09;上构建和运行量子程序的基石&#xff0c;通过我们的 Quantum Cloud Services&#xff08;QCS™…

Ansible、Slatstack、Puppet自动化运维工具介绍

一、自动化运维工具的选择 1、为什么要用自动化运维工具&#xff1f; 运维的痛点: 海量的设备越来越多&#xff0c;每台设备单独管理需要投入更多人力&#xff1b; 传统运维效率低&#xff0c;大多工作人为完成&#xff1b; 传统运维工作繁琐&#xff0c;人工操作容易出错…

搭建宠物寄养小程序流程

近日&#xff0c;一地宠物寄养需求旺盛&#xff0c;元旦满房&#xff0c;春节几近饱和&#xff0c;一窝难求。随着市场需求的增长&#xff0c;对于很多宠物行业的商家&#xff0c;可以考虑开展宠物寄养服务&#xff0c;尤其是节假日的宠物寄养需求会更高。因此&#xff0c;商家…