第65期:《AI提示工程实战》

随着GPT模型的快速发展和卓越表现,越来越多的应用开始集成GPT模型以提升其功能和性能。在本文章中,将总结构建SQL提示的方法,并探讨如何将一个开源SQL工程进行产品化。

文末有送书福利!!!

精彩书摘

总结SQL提示内容

    有两个方面决定了能否构建高质量SQL提示内容,分别是个人SQL能力和大语言模型性能。

1. 个人SQL能力

      构建高质量的SQL提示内容对个人提出较高的要求。这要求个人具备熟练的SQL语言和数据库知识,深入理解SQL执行过程,并能够将自然语言理解应用于实际情境,将这些理解和知识转化为有效的SQL提示内容和功能。个人需具备以下两种能力,以构建高质量的提示。

(1) 持续学习能力。构建SQL提示内容并不适合SQL初学者,它更需要工程师级别的知识和技能作为基础。然而,通过使用ChatGPT,可以降低学习的难度。在第 章介绍的费曼学习法提示” 方法的指导下,初学者完全可以自学并掌握这一领域的知识。

(2) 熟悉SQL语言知识。熟悉SQL语言的各种语句类型,如DDLDMLDQL语句,以及它们的具体语法是生成SQL提示的基础。

 

2. 大语言模型性能

      构建高质量的SQL提示内容需要大语言模型在自然语言理解、数据库元数据理解、SQL语句生成与优化等方面具备较强的能力。为评估大语言模型的性能,可以从以下三个方面考虑。

(1) 自然语言理解。评估大语言模型是否能够准确理解自然语言描述的SQL操作要求和查询要求。

(2) 数据库元数据理解。评估大语言模型是否能够理解数据库版本、数据类型、表间关系等元数据信息。

(3) SQL语句生成。评估大语言模型的性能,包括其是否能够根据需求生成正确的DDL语句、DML查询、SQL优化建议和SQL风险预警。

 

sql-translator产品介绍

      sql-translator是使用Node.JS调用ChatGPT API的开源工具,可将SQL语句与自然语言互相转换,对于没有ChatGPT账号的读者可使用该工具学习SQL、构建测试提示。

1.操作界面介绍

       图 1所示为sql-translator工具将自然语言转为SQL的操作界面。在左侧的输入框中输入提示内容,然后点击Generate SQL在右侧的文本框中生成对应的SQL语句。

点击图1的 标识处,可切换为SQL转换自然语言的操作界面,如图 2 所示。在左侧输入框中输入SQL语句,然后点击Generate Natural Language在右侧文本框中生成对应的自然语言。

 

d2b5ca33bd20240313213448

2. 实践操作

(1) SQL翻译为自然语言。如图3所示,将 8.7 节生成的SQL转换为自然语言。由于sqltranslator工具功能还不完善,为了将SQL语句翻译为中文,第一行SQL语句为:SELECT “翻译为中文

(2) 将自然语言翻译为SQL。如图 4所示,将8.11 节的提示内容翻译为SQL

d2b5ca33bd20240313213506

sql-translator运行方式

      sql-translator是开源工具,可通过查看其源代码了解运行方式,即调用了哪些ChatGPT API、构了哪些提示内容。为了能更好地理解本节内容,可复习下第章和第 章中ChatGPT API的内容。

1. 自然语言转SQL

      sql-translator开源工程中有一个名为translateToSQL.js的脚本,作用是将输入的自然语言查询翻译成SQL语句,以下简要解析代码。

(1) 定义translateToSQL函数。translateToSQL函数接收三个参数:query参数是自然语言查询文本;apiKey参数是 API 密钥;参数tableSchema是可选参数,是表结构信息。

// 从"isomorphic-unfetch"模块导入fetch函数,这个函数在不同环境(如 Node.js 和浏览器)中都能使用
​
import fetch from "isomorphic-unfetch";
​
// 定义一个异步函数translateToSQL
​
const translateToSQL = async (query, apiKey, tableSchema = "") => {……
​

(2) 构建提示内容。在translateToSQL函数中首先定义一个名为prompt的变量,将参数query和 tableSchema作为提示内容拼接到prompt变量中。

// 构造一个字符串变量prompt,该变量被发送到OpenAI的GPT-3 API,用于生成SQL语句
​
const prompt = Translate this natural language query into SQL 
​
without changing the case of the entries given by me:\n\n"${query}"\n\ n${tableSchema ? 'Use this table schema:\n\n${tableSchema}\n\n' : ''}SQL 
Query:;
​

为了能更好地理解translateToSQL函数中的提示内容,以下将prompt变量内容翻译为中文。

>提示翻译为中文:
​
将这个自然语言查询翻译为SQL,不要改变我给出的信息的大小写:
"query参数内容"
​
表结构信息:tableSchema参数内容
​
SQL查询语句为:
​

(3) 调用ChatGPT API。构建完提示内容后,在translateToSQL函数中发起API请求,代码如下所示。调用的API端点为/v1/completions,提示内容为prompt变量的值,使用的模型为textdavinci-003

// 发送一个POST请求到OpenAI的API地址
​
const response = await fetch("https://api.openai.com/v1/completions", {
​
    method: "POST",
​
    headers: {
​
      "Content-Type": "application/json",
​
      Authorization: 'Bearer ${apiKey}',  // 在请求头中设置API密钥
​
    },
​
    body: JSON.stringify({   // 请求体中包含将发送给API的数据
​
      prompt,               // 提示内容
​
      temperature: 0.5,      // 控制输出的随机性
​
      max_tokens: 2048,     // 最大生成的文本长度
​
      n: 1,            // 生成的文本数量
​
      stop: "\\n",       // 生成停止的标志
​
      model: "text-davinci-003",    // 使用的模型
​
      frequency_penalty: 0.5,       // 频率惩罚
​
      presence_penalty: 0.5,        // 存在惩罚
​
      logprobs: 10,      // 生成对数概率
​
    }),
​
  });
​

4解析返回结果。调用ChatGPT API后,对返回的JSON格式结果进行解析,代码如下所示。

// 解析响应数据为JSON
​
const data = await response.json();
​
  // 如果响应状态不好,输出响应并抛出错误
​
  if (!response.ok) {
​
    console.log(response);
​
    throw new Error(data.error || "Error translating to SQL.");
​
  }
​
  // 返回生成的SQL语句
​
  return data.choices[0].text.trim();
​
};
​

2. SQL转自然语言

     sql-translator开源工程中有一个名为translateToHuman.js的脚本,作用是将输入的SQL语句转换为自然语言,以下简要解析代码。

   (1) 定义 translateToHuman函数。translateToHuman函数接收 个参数:query参数是SQL语句文本;apiKey参数是 API 密钥。

// 从isomorphic-unfetch模块导入fetch函数,这个函数在不同环境(如 Node.js 和浏览器)中都能使用
​
import fetch from "isomorphic-unfetch";
​
// 定义一个异步函数 'translateToHuman'
​
const translateToHuman = async (query, apiKey) => {……
​

(2) 调用ChatGPT API。在translateToHuman函数中发起API请求,代码如下所示。调用的API 端点为/v1/completions,提示内容为prompt参数,使用的模型为text-davinci-003

// 发送一个POST请求到OpenAI的API地址
​
const response = await fetch("https://api.openai.com/v1/completions", {
​
    method: "POST",
​
    headers: {
​
      "Content-Type": "application/json",
​
      Authorization: 'Bearer ${apiKey}',   // 在请求头中设置API密钥
​
    },
​
    body: JSON.stringify({ // 请求体中包含将发送给API的数据
​
      // prompt 指向GPT-3模型,告诉它我们需要翻译的SQL查询
      prompt: 'Translate this SQL query into natural language:\n\ n"${query}"\n\nNatural language query:',
​
      temperature: 0.5, // 控制输出的随机性
​
      max_tokens: 2048, // 最大生成的文本长度
​
      n: 1,   // 生成的文本数量
​
      stop: "\\n",   // 生成停止的标志
​
      model: "text-davinci-003",    // 使用的模型
​
      frequency_penalty: 0.5,       // 频率惩罚
​
      presence_penalty: 0.5,        // 存在惩罚
​
      logprobs: 10,                 // 生成对数概率
​
    }),
​
  });
​

为了能更好地理解translateToHuman函数中的提示内容,以下将prompt参数内容翻译为中文。

>prompt参数的英文提示:
​
prompt: Translate this SQL query into natural language:\n\n"${query}"\n\ nNatural language query:
​
>提示翻译为中文:
​
将此SQL查询翻译为自然语言:
"query参数内容"
自然语言内容为:
​

(3)解析返回结果。调用ChatGPT API后,对返回的JSON格式结果进行解析,代码如下所示。

// 解析响应数据为JSON
​
const data = await response.json();
​
  // 如果响应状态不好,输出响应并抛出错误
​
  if (!response.ok) {
​
    console.log(response);
​
    throw new Error(data.error || "Error translating to SQL.");
​
  }
​
  // 返回生成的自然语言查询
​
  return data.choices[0].text.trim();
​
};
​

SQL集成GPT产品化探讨

      sql-translator为了将SQLGPT模型集成并进行产品化提供了一个良好的思路。基于以下三点,说明以sql-translator代码为基础逐步完善,并将其发展为特定的产品。

(1) SQL教学平台。开发一款用于教学的平台,用户可以输入自然语言的数据查询请求,平台即返回对应的SQL代码。这样一来,用户可以在实际操作中学习并理解SQL查询是如何工作的,逐渐掌握SQL语言。

(2) 智能数据报告生成工具。这个工具可以从数据库中获取数据,并自动生成相应的报告。例如,输入显示上个月的销售额,工具将自动翻译为相应的SQL查询语句获取数据,并生成易于理解的分析报告。

(3) 智能数据分析聊天机器人。构建一个聊天机器人,用户可以向它提问,例如,去年同期的销售数据是多少?显示今年第二季度的用户增长。机器人会把这些自然语言问题转化为SQL查询,获取数据,并给出人类语言的答案。

本文章出自北京大学出版社《AI提示工程实战:从零开始利用提示工程学习应用大语言模型》一书中,经授权此公号。

社区赠书

本次福利将送出 5AI提示工程实战》,点击链接也可优惠购买

截止时间还需要支付积分,就还有赠书额度,先到先得

领取方式

  1. 支付积分即可兑换,复制“ 积分支付订单号 ”
  2. 在本站中私信我这些内容:积分支付订单号、活动书名、快递信息(姓名、电话、地址)

没有积分怎么办?

社区鼓励高质量的技术交流,所以只要发布有价值内容均可获得积分!

哪些内容算高质量?

1. 高质量的技术分享,原创、翻译、转载均可

2. 高质量的提问与回答,注意阅读《提问的艺术》

3. 分享优质Java与Spring的相关开源项目

另外,内容不错,获得精华贴、或者热门帖还有额外加分哦

THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容