如何用chatGTP function calling 写sql query,附代码!

OpenAI开发系列(十二):Function calling功能的流程优化与多轮对话实现 本文首先概述了Function calling流程的优化思路,接着分别详细介绍了两种主要的优化方法:自动编写函数和编写自动应答函数。这两种优化方法可以显著提高Function calling的效率和实用性。最后,演示了如何实现一个多轮对话函数。 阅读详情

当与数据库工作时,查询特定数据是至关重要的。如果您可以简单地提出一个自然语言问题来获取所需的数据,而不是手动编写SQL查询,那会怎样呢?有了ChatGPT的函数调用功能,我们可以做到这一点!

让我们看看如何建立一个使用ChatGPT为我们生成SQL查询的系统,以Chinook样本数据库为例。

1. 连接到数据库

首先,我们需要建立与SQLite数据库的连接。

import sqlite3

conn = sqlite3.connect("data/Chinook.db")
print("成功打开数据库")

2. 提取数据库架构

为了做出明智的查询,ChatGPT需要理解我们数据库的结构。我们可以通过创建实用函数来提取表名、列名和整体数据库信息来实现这一点。

def get_table_names(conn):
    table_names = []
    tables = conn.execute("SELECT name FROM sqlite_master WHERE type='table';")
    for table in tables.fetchall():
        table_names.append(table[0])
    return table_names

def get_column_names(conn, table_name):
    column_names = []
    columns = conn.execute(f"PRAGMA table_info('{table_name}');").fetchall()
    for col in columns:
        column_names.append(col[1])
    return column_names

def get_database_info(conn):
    table_dicts = []
    for table_name in get_table_names(conn):
        columns_names = get_column_names(conn, table_name)
        table_dicts.append({"table_name": table_name, "column_names": columns_names})
    return table_dicts

使用这些函数,您现在可以为数据库生成一个架构表示。

3. 为ChatGPT定义函数规范

有了数据库架构,我们可以为ChatGPT定义一个函数规范。这将为模型提供有关我们数据库结构的上下文,并告诉它如何生成SQL查询。

database_schema_dict = get_database_info(conn)
database_schema_string = "\n".join(
    [
        f"Table: {table['table_name']}\nColumns: {', '.join(table['column_names'])}"
        for table in database_schema_dict
    ]
)

functions = [
    {
        "name": "ask_database",
        "description": "使用此功能回答用户关于音乐的问题。输入应该是一个完整的SQL查询。",
        "parameters": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": f"使用此数据库架构提取信息的SQL查询:{database_schema_string}。查询应以纯文本返回,而不是JSON。"
                }
            },
            "required": ["query"],
        },
    }
]

4. 执行SQL查询

接下来,我们需要一个函数来执行针对我们数据库的生成的SQL查询。

def ask_database(conn, query):
    try:
        results = str(conn.execute(query).fetchall())
    except Exception as e:
        results = f"查询失败,错误为:{e}"
    return results

5. ChatGPT交互和SQL查询执行

现在,使用ChatGPT API,我们可以与模型互动。当我们从模型得到一个函数调用的响应时,我们可以执行SQL查询并返回结果。

messages = []
messages.append({"role": "system", "content": "通过生成针对Chinook音乐数据库的SQL查询来回答用户问题。"})
messages.append({"role": "user", "content": "你好,哪5位艺术家的歌曲数量最多?"})

chat_response = chat_completion_request(messages, functions)
assistant_message = chat_response.json()["choices"][0]["message"]
messages.append(assistant_message)

if assistant_message.get("function_call"):
    results = execute_function_call(assistant_message)
    messages.append({"role": "function", "name": assistant_message["function_call"]["name"], "content": results})

结论

通过将ChatGPT与数据库交互相结合,我们展示了如何使用自然语言问题生成SQL查询。这种方法允许更直观地检索数据,尤其是对于可能不熟悉SQL语法的用户。但是,请始终确保验证并清洁生成的查询,特别是在生产环境中使用时,以保持数据完整性和安全性。

代码

原文文末见github code ink

AI好书推荐

AI日新月异,但是万丈高楼拔地起,离不开良好的基础。您是否有兴趣了解人工智能的原理和实践? 不要再观望! 我们关于 AI 原则和实践的书是任何想要深入了解 AI 世界的人的完美资源。 由该领域的领先专家撰写,这本综合指南涵盖了从机器学习的基础知识到构建智能系统的高级技术的所有内容。 无论您是初学者还是经验丰富的 AI 从业者,本书都能满足您的需求。 那为什么还要等呢?

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

五、OpenAi之函数调用(Function Calling)(二) 怎样生成函数参数指定一组函数并使用模型API生成函数参数。怎样使用模型生成的参数调用函数通过实际执行带有模型生成参数的函数来关闭循环。 阅读详情

相关推荐

【AI大模型应用开发】2.2 Function Calling连接外部世界 - 【实战】查询数据库

我算是对数据库的SQL语句很不熟悉,只会简单的单表操作,还不熟练,每次都得查半天。现在有了大模型应用,有了Function Calling,再也不用查半天资料才写一个SQL了,还能熟练地用多表查询了!

同学小张的博客 2607

实战演练 | 在 Navicat 16 中生成测试数据

随着 Navicat 16 的发布,它的这些功能和改进备受用户关注:数据生成、图表、On-Prem Server、协同合作、UI/UX 改进。所以,我们将更详细地探索这些功能和改进。在今天的文章中,我们将从全新的数据生成工具开始,我们将使用 Windows 版Navicat Premium 16为多个相关表创建测试数据来演练。 设置测试数据库 我们将使用的数据库是 SQLite 的 chinook 示例数据库。你可以使用链接下载:SQLite 示例数据库 Chinook 是一个虚构的电子媒体商..

Navicat 官方账号 7331

ChinookDatabase:Chinook是可用于SQL Server,Oracle,MySQL等的示例数据库。可以通过运行单个SQL脚本来创建它。

奇努克数据库 项目介绍 Chinook是可用于SQL Server,Oracle,MySQL等的示例数据库。可以通过运行单个SQL脚本来创建它。 有什么新功能? 支持的数据库服务器 DB2 EffiProz MySQL Oracle PostgreSQL SQL服务器 SQL Server精简版 SQLite数据模型 Chinook数据模型代表一个数字媒体商店,包括艺术家,唱片,媒体曲目,发票和客户的表格。 您可以在此处查看Chinook数据模型。 样本数据 与媒体相关的数据是使用iTunes库中的真实数据创建的。 您可以使用自己的iTunes库来生成SQL脚本,请参见此处的说明。 客户和员工信息是使用虚拟名称,可以在Google地图上找到的地址以及其他格式良好的数据(电话,传真,电子邮件等)手动创建的。 销售信息是使用四年的随机数据自动生成的。 为什么叫奇努克族? 该示例数据库的

LLM系列 | 12: 实测OpenAI函数调用功能:以数据库问答为例

小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:划龙舟的小男孩。注意,在定义functions规范时要将数据库的schema插入到函数规范中,这对模型来说是很重要的。通过上述示例可以确切感受openai函数调用功能的强大,这也为开发者构建更多稳健服务提供更强的保障。中,生成的SQL可能存在较高风险。因为模型在生成正确的 SQL 这方面暂不完全可靠,小伙伴们评估。本文将介绍如何将模型生成的结果输入到自定义的函数中,并利用该功能实现。以下直接介绍示例数据库相关细节。黑云翻墨未遮山,白雨跳珠乱入船。

ljp1919的专栏 802

Chinook:围绕Chinook SQLite DB的自动查询API

契努克族 围绕SQLite的示例Chinook数据库自动生成类型化的AutoQuery和CRUD API。 创建新的空Web应用程序 $ x new web Chinook 使用AutoQuery ,OrmLite 和数据库: $ x mix autocrudgen sqlite chinook.sqlite 这会将我们的应用程序配置为使用AutoQuery和SQLite依赖项和配置,然后需要对其进行更新以引用本地chinook.sqlite数据库: public void Configure ( IServiceCollection services ) { services . AddSingleton < IDbConnectionFactory>( new OrmLiteConnectionFactory ( Configuration . Get

chinook-database:SQL Server、Oracle、MySQL、PostgreSQL、SQLite、DB2 的示例数据库

奇努克数据库 Chinook 是一个可用于 SQL Server、Oracle、MySQL 等的示例数据库。它可以通过运行单个 SQL 脚本来创建。 Chinook 数据库是 Northwind 数据库的替代品,是演示和测试针对单个和多个数据库服务器的 ORM 工具的理想选择。 支持的数据库服务器 MySQL 数据库服务器 SQL Server 精简版 SQLite PostgreSQL Oracle 数据库2 数据模型 Chinook 数据模型代表一个数字媒体商店,包括艺术家、专辑、媒体曲目、发票和客户的表格。 样本数据 媒体相关数据是使用 iTunes 库中的真实数据创建的。 您可以使用自己的 iTunes 库来生成 SQL 脚本,请参阅下面的说明。 客户和员工信息是使用虚构的姓名、可在谷歌地图上找到的地址和其他格式良好的数据(电话、传真、电子邮件等)手动创建的。 销售信息是使用

【亲测免费】 推荐项目:Chinook 数据库——多平台样例数据库

**1、项目介绍** Chinook 数据库是一个适用于多种数据库服务器的示例数据库,如 MySQL、SQL Server 和 Oracle 等。只需执行一个 SQL 脚本,即可轻松创建。它是 Northwind 数据库的一个理想替代品,特别适合用于演示和测试针对单个或多个数据库服务器的对象关系映射(ORM)工具。 **2、项目技术分析** Chinook 支持以下数据库服务器: - My...

gitblog_00010的博客 877

Kettle 连接 Oracle 数据库全流程指南

例如:C:\Oracle\product\19.0.0\dbhome_1\jdbc\lib\ojdbc8.jar 2. 替换 Kettle 驱动文件 将驱动文件复制到 Kettle 的 目录: 删除旧版本驱动:如 ojdbc14.jar 只能保留一个oracle驱动 重启 Kettle 以加载新驱动 二、配置数据库连接 1. 启动 Kettle 并新建转换 运行 (Windows)或 (Linux)。 新建转换(Transformation),添加 “表输入” 步骤,双击进入配置。 2.

qq_44724453的博客 3479

Chinook Database 项目推荐

Chinook Database 是一个用于 SQL Server、Oracle、MySQL、PostgreSQL、SQLite 和 DB2 的示例数据库。该项目的主要目的是为开发者提供一个用于演示和测试 ORM 工具的数据库模型。Chinook Database 的数据模型代表了一个数字媒体商店,包括艺术家、专辑、媒体曲目、发票和客户等表。 该项目的主要编程语言包括 T-SQL(用于 SQL ...

gitblog_00775的博客 603

期货分仓系统CTP协议/国内期货软件源码

期货分仓系统与CTP协议以及国内期货软件源码是期货交易技术领域的几个重要方面。

q2247238820的博客 958

手把手教你用ZEMAX复现贝塞尔光束:从Thorlabs锥透镜到Edmund透镜的完整光路搭建

本文详细介绍了如何在ZEMAX光学设计软件中复现贝塞尔光束,从Thorlabs锥透镜到Edmund透镜的完整光路搭建过程。通过逐步指导,帮助研究人员和工程师掌握光学设计技巧,实现无衍射特性的贝塞尔光束生成,适用于激光加工和生物成像等领域。

weixin_33737774的博客 175

【亲测免费】 Chinook数据库:您的多数据库测试与演示利器

Chinook数据库是一个开源的示例数据库,适用于SQL Server、Oracle、MySQL等多种数据库服务器。它可以通过运行一个简单的SQL脚本快速创建,是Northwind数据库的理想替代品。Chinook数据库特别适合用于演示和测试面向单个或多个数据库服务器的ORM工具。 ## 项目技术分析 ### 支持的数据库服务器 Chinook数据库支持以下数据库服务器: - DB2 - ...

gitblog_00879的博客 1192

【JESD79-5之】11 IDD, IDDQ, IPP规格参数和测试条件(IDD, IDDQ, IPP Specification Parameters and Test conditions)

【代码】【JESD79-5之】11 IDD, IDDQ, IPP规格参数和测试条件(IDD, IDDQ, IPP Specification Parameters and Test conditions)

m0_61126667的博客 4855

Wand-Enhancer 免费本地补丁完整指南:三分钟解除两小时限制

凌晨一点,我第二次挑战《艾尔登法环》的 BOSS,血条只剩一格,修改项还开着。屏幕忽然弹出灰框:免费时长已用完,明天再来。客户端强制退出,我刚调好的参数全部白费。就在那时我开始找解法,翻到了 Wand-Enhancer——一款给 Wand(原 WeMod)做**免费本地补丁**的工具,而免费版每天默认只给你两小时。开源、零网络请求、只动本地文件,这三点让我决定试试它。 ## 它到底是什么:做什么

gitblog_00422的博客 905

汇川Easy系列PLC系统PID指令编程应用(增量型)

增量式PIDS7-1200/1500增量式PID(输出归一化、支持PWM输出)_西门子1200pid算法公式-优快云博客文章浏览阅读1k次。本文介绍了S7-1200/1500 PLC中增量式PID算法的应用,包括输出归一化和PWM输出。通过详细解析,阐述了PID输出如何限制在0.0-1.0之间,并且如何将PID输出与PWM占空比关联,适用于温度等控制场景。

RXXW_Dor的博客 1420

docker-compose Install OrangeHRM

OrangeHRM是一个全面的人力资源管理HRM) 系统,它包含任何企业所需的所有基本功能。OrangeHRM旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。

极致,细节 1003

给大模型装上手,通过 Function Calling 查询数据库:实现高效数据处理的新方式

Function Calling,顾名思义,就是通过调用函数的方式来完成特定任务。在数据库查询中,Function Calling指的是将查询操作封装成函数,通过调用这些函数来完成数据库查询。与传统的SQL查询语句不同,Function Calling具有更高的可读性和复用性。

xx_nm98的博客 1955

QT6实现USB摄像头接入显示与抓拍功能实现

QT实现USB摄像头接入显示 一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应用开发与平台之间的散乱问题。 UVC标准是由USB-IF主导制定的,目前最新的版本是UVC 1.5,UVC的缺省设置类容易实现,不需要额外的驱动程序。

热土程序园,利他愉己~ 3415

九、基于OpenAI大模型开发——Function calling应用text2SQL

本文所演示的案例只是帮助大家更加深刻的了解Function calling能力,切记不可在生产环境进行操作验证!!切记不可在生产环境进行操作验证!!切记不可在生产环境进行操作验证!!模型在生成正确的 SQL 方面并不完全可靠,除了大模型本身的能力以外,如果投产使用还需要很多完善的点,比如提供数据字典、SQL校验、多数据库连接等。但是text2sql是一个比较好的基于大模型落地的应用场景,实现上相对简单,大家有需求可以自行研究研究,后续我也会带来一个比较完善的text2sql的案例。

liangpangpangyo的博客 906

复现《水化硅铝酸钙微结构和性能的分子动力学模拟研究》的分子动力学模拟

本文详细复现了杨军博士论文中关于水化硅铝酸钙(C-A-S-H)凝胶的分子动力学模拟方法。研究内容包括:1)基于11Å Tobermorite构建C-A-S-H分子模型,通过缺陷引入和Al掺杂调节Ca/Si比;2)使用ReaxFF力场模拟交联C-A-S-H的结构与力学性能;3)采用ClayFF力场研究纳米孔道中水和离子传输行为。研究提供了完整的LAMMPS输入脚本、Python分析代码和力场参数设置,为水泥基材料纳米尺度模拟提供可复现的技术方案。

huanghm88的专栏 104

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

通过fu过 Function Calling 查询数据库

import os_ = load_dotenv(find_dotenv()) # 读取本地 .env 文件,里面定义了 OPENAI_API_KEtools=[{ # 摘自 OpenAI 官方示例 https://github.com/openai/openai-cookbook/blob/main/examples/How_to_call_functions_with_chat_models.ipynb“query”: {“”",

myword1314的博客 1186

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Yii Framework 开发教程(23) 数据库-概述

Yii提供了强大的数据库编程支持。 Yii数据访问对象(DAO)建立在PHP的数据对象(PDO)extension上,使得在一个单一的统一的接口可以访问不同的数据库管理系统(DBMS)。使用Yii的DAO开发的应用程序可以很容易地切换使用不同的数据库管理系统,而不需要修改数据访问代码。 Yii 的Active Record( AR ),实现了被广泛采用的对象关系映射(ORM)办法,进一步简化数据...

mapdigit 165

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MET AD599 Final Course Project

MET AD599 Final Course Project Initial steps (you have already done these for Assignment #4) Download SQLiteStudio from (sqlitestudio.pl) Download the Chinook database from the SQLite tutorial a. https://www.sqlitetutorial.net/sqlite-sample-database/ In

u012750779的博客 442

【GPT入门】第12课 FunctionCall 生成数据库sql代码

如下代码的任务:自然语言问ai,自动生成sql并回答用户实现思路:步骤1. ai会把用户的问题,转为sql步骤2. 程序执行sql步骤3.把执行的sql结果,重新给回ai,步骤4. ai给的回复再次放到prompt中 ,并给ai。

spark_dev的博客 548

【亲测免费】 Chinoook数据库教程

Chinook数据库项目在GitHub上的结构组织简洁明了,下面是主要的目录和文件说明: ```markdown . ├── ChinookDatabase # 数据库相关的解决方案文件夹 │ ├── ChinookDatabase.sln # 解决方案文件,用于Visual Studio中管理项目 │ ├── ... ...

gitblog_00226的博客 659

5分钟快速部署:跨平台数据库样例Chinook终极指南

Chinook数据库是一个专为教学和演示设计的开源关系型数据库样例,支持DB2、MySQL、Oracle、PostgreSQL、SQL Server、SQLite等主流数据库系统。这个跨平台数据库样例提供了完整的音乐商店数据模型,是学习数据库概念、测试ORM工具的理想选择。🎵 ## 为什么选择Chinook数据库? Chinook数据库作为Northwind数据库的现代替代品,具有以下核心优

gitblog_00930的博客 496
上一篇: AI一点通: chatGPT等大模型是如何“深呼吸”和“一步一步思考”的?
下一篇: python一点通:coroutine (协程)是什么和重要知识点?
robot_learner
博客等级 码龄7年 632粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值