前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何将 SQL 与 GPT 集成

如何将 SQL 与 GPT 集成

作者头像
程序猿DD
发布2024-03-14 12:01:13
1290
发布2024-03-14 12:01:13
举报
文章被收录于专栏:程序猿DD程序猿DD

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

精彩书摘

总结SQL提示内容

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

1. 个人SQL能力

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

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

(2) 熟悉SQL语言知识。熟悉SQL语言的各种语句类型,如DDL、DML、DQL语句,以及它们的具体语法是生成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的 1 标识处,可切换为SQL转换自然语言的操作界面,如图 2 所示。在左侧输入框中输入SQL语句,然后点击“Generate Natural Language”在右侧文本框中生成对应的自然语言。

图 1 自然语言转为SQL的操作界面

图 2 SQL转换自然语言的操作界面

2. 实践操作

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

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

图3 将 SQL语句转换为自然语言

图 4 将自然语言转换为SQL

sql-translator运行方式

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

1. 自然语言转SQL

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

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

代码语言:javascript
复制
// 从"isomorphic-unfetch"模块导入fetch函数,这个函数在不同环境(如 Node.js 和浏览器)中都能使用

import fetch from "isomorphic-unfetch";

// 定义一个异步函数translateToSQL

const translateToSQL = async (query, apiKey, tableSchema = "") => {……

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

代码语言:javascript
复制
// 构造一个字符串变量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变量内容翻译为中文。

代码语言:javascript
复制
>提示翻译为中文:

将这个自然语言查询翻译为SQL,不要改变我给出的信息的大小写:
"query参数内容"

表结构信息:tableSchema参数内容

SQL查询语句为:

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

代码语言:javascript
复制
// 发送一个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格式结果进行解析,代码如下所示。

代码语言:javascript
复制
// 解析响应数据为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函数接收 2 个参数:query参数是SQL语句文本;apiKey参数是 API 密钥。

代码语言:javascript
复制
// 从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”。

代码语言:javascript
复制
// 发送一个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参数内容翻译为中文。

代码语言:javascript
复制
>prompt参数的英文提示:

prompt: Translate this SQL query into natural language:\n\n"${query}"\n\ nNatural language query:

>提示翻译为中文:

将此SQL查询翻译为自然语言:
"query参数内容"
自然语言内容为:

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

代码语言:javascript
复制
// 解析响应数据为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为了将SQL与GPT模型集成并进行产品化提供了一个良好的思路。基于以下三点,说明以sql-translator代码为基础逐步完善,并将其发展为特定的产品。

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿DD 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
智能数据分析
腾讯云智能数据分析 Intellectual Data Analysis 是新一代云原生大数据敏捷分析解决方案。产品具备存算分离、动态扩缩容等特点,并内置事件、转化、留存、行为路径等成熟分析模型,提供高可用、低成本的全场景敏捷分析服务,可同时满足数据分析师、数据开发工程师和业务决策人的关键分析需求,帮助企业大幅降低数据分析成本,支撑业务更高效决策。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档