LangChain 25: SQL Agent通过自然语言查询数据库sqlite
LangChain系列文章
- LangChain 实现给动物取名字,
- LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
- LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
- LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
- LangChain 5易速鲜花内部问答系统
- LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
- LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
- LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
- LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
- LangChain 10思维链Chain of Thought一步一步的思考 think step by step
- LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
- LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
- LangChain 13输出解析Output Parsers 自动修复解析器
- LangChain 14 SequencialChain链接不同的组件
- LangChain 15根据问题自动路由Router Chain确定用户的意图
- LangChain 16 通过Memory记住历史对话的内容
- LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理
- LangChain 18 LangSmith监控评估Agent并创建对应的数据库
- LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷
- LangChain 20 Agents调用google搜索API搜索市场价格 Reason Action:在语言模型中协同推理和行动
- LangChain 21 Agents自问自答与搜索 Self-ask with search
- LangChain 22 LangServe用于一键部署LangChain应用程序
- LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能
- LangChain 24 对本地文档的搜索RAG检索增强生成Retrieval-augmented generation
1. LangChain提供与SQL数据库交互的工具:
- 根据自然语言用户问题构建SQL查询
- 使用链式查询创建和执行SQL数据库查询
- 使用代理与SQL数据库交互,实现强大灵活的查询
企业数据通常存储在SQL数据库中。
LLM使得可以使用自然语言与SQL数据库进行交互。
LangChain提供SQL链和代理,以基于自然语言提示构建和运行SQL查询。
这些与SQLAlchemy支持的任何SQL方言兼容(例如MySQL、PostgreSQL、Oracle SQL、Databricks、SQLite)。
它们可以实现以下用例:
- 生成基于自然语言问题运行的查询
- 创建能够根据数据库数据回答问题的聊天机器人
- 基于用户想要分析的见解构建自定义仪表板
2. 代码实现
以下示例将使用Chinook数据库的SQLite连接。
按照安装步骤在与此笔记本相同的目录中创建Chinook.db:
- 将此文件保存到与Chinook_Sqlite.sql相同的目录中
- 运行
sqlite3 Chinook.db
- 运行
.read Chinook_Sqlite.sql
- 测试
SELECT * FROM Artist LIMIT 10;
运行过程如下
zgpeace@zgpeaces-MBP ~/Workspace/LLM/langchain-llm-app ‹node-› ‹› (develop*)
╰─$ cd sql ╭─zgpeace@zgpeaces-MBP ~/Workspace/LLM/langchain-llm-app/sql ‹node-› ‹› (develop*)
╰─$ sqlite3 Chinook.db
SQLite version 3.22.0 2018-01-22 18:45:57
Enter ".help" for usage hints.
sqlite> .read Chinook_Sqlite.sql
Error: near line 1: near "": syntax error
sqlite> SELECT * FROM Artist LIMIT 10;
1|AC/DC
2|Accept
3|Aerosmith
4|Alanis Morissette
5|Alice In Chains
6|Antônio Carlos Jobim
7|Apocalyptica
8|Audioslave
9|BackBeat
10|Billy Cobham
现在,Chinhook.db
就在我们的目录中。
让我们创建一个SQLDatabaseChain
来创建和执行SQL查询。
chain_sql.py
在这段代码中,首先加载环境变量(可能用于数据库凭证或其他设置)。然后,从一个SQLite数据库创建一个SQLDatabase实例,这允许与该数据库进行交互。接着创建一个OpenAI模型实例,用于处理自然语言查询。最后,结合语言模型和数据库创建一个SQLDatabaseChain实例,用于执行自然语言形式的数据库查询。代码的最后一部分运行一个查询来获得数据库中员工的数量。
# 导入dotenv库,用于从.env文件加载环境变量
import dotenv# 加载.env文件中的环境变量
dotenv.load_dotenv()# 导入OpenAI模块,用于与OpenAI语言模型交互
from langchain.llms import OpenAI# 导入SQLDatabase工具,用于与SQL数据库进行交互
from langchain.utilities import SQLDatabase# 导入SQLDatabaseChain,用于创建一个结合了语言模型和数据库的处理链
from langchain_experimental.sql import SQLDatabaseChain# 从指定的数据库URI创建SQL数据库实例,此处使用的是SQLite数据库
db = SQLDatabase.from_uri("sqlite:///Chinook.db")# 创建OpenAI模型实例,设置temperature为0(完全确定性输出),并启用详细日志记录
llm = OpenAI(temperature=0, verbose=True)# 创建SQL数据库链,结合了语言模型和数据库,用于处理基于数据库的查询
db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True)# 使用数据库链运行查询,此处查询“有多少员工?”
db_chain.run("How many employees are there?")
运行结果如下:
╭─zgpeace@zgpeaces-MBP ~/Workspace/LLM/langchain-llm-app/sql ‹node-› ‹› (develop*)
╰─$ python chain_sql.py> Entering new SQLDatabaseChain chain...
How many employees are there?
SQLQuery:SELECT COUNT(*) FROM "Employee";
SQLResult: [(8,)]
Answer:There are 8 employees.
> Finished chain.
代码
https://github.com/zgpeace/pets-name-langchain/tree/develop
参考
https://python.langchain.com/docs/use_cases/qa_structured/sql
相关文章:

LangChain 25: SQL Agent通过自然语言查询数据库sqlite
LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…...

Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案
生产环境中热 key 处理 热 key 问题就是某一瞬间可能某条内容特别火爆,大量的请求去访问这个数据,那么这样的 key 就是热 key,往往这样的 key 也是存储在了一个 redis 节点中,对该节点压力很大 那么对于热 key 的处理就是通过热…...

可惜+悲伤+唉=emmo...
拟合曲线: 参考论文:黄河清.NURBS曲面逆向造型关键算法的研究与应用 [D].西北工业大学,2004 三次NURBS曲线控制点的计算 首先给出拟合曲线的具体步骤: 1、节点矢量的求解方法为: 采用积累弦长参数化法,即࿱…...

[gRPC实现go调用go]
1什么是RPC RPC:Remote Procedure Call,远程过程调用。简单来说就是两个进程之间的数据交互。正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用。和本地过程调用相对的就是:假如两个…...

uniapp使用v-html调用接口,富文本图片 视频自适应大小
前端获取到后台数据 不做处理 就会出现下面问题 图片 视频超出视图显示不全 处理 //info 是富文本 <view v-ifinfo v-htmlreplaceWhite(info)></view>调用下面方法 replaceWhite(html) { // 处理富文本默认图片,视频大小let newContent html.replace…...

安卓MediaRecorder(2)录制源码分析
文章目录 前言JAVA new MediaRecorder() 源码分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup() MediaRecorder 参数设置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRec…...
MySql数据库全量备份脚本
#!/bin/bash# 设置数据库连接信息 DB_HOST"localhost" DB_USER"root" DB_PASS"密码" DB_NAMES("db1" "db2" "db3" "db4")# 设置备份目录 BACKUP_DIR"/home/mysql/mysql-back/everyday" # 每天…...

windows10下jdk安装
文章目录 windows10下jdk安装说明what安装包下载执行安装包验证是否安装成功 windows10下jdk安装 说明 操作系统:windows10 版本:1.8 what JDK(Java Development Kit) 是 Java 语言的软件开发工具包 安装包下载 https://www.oracle.com/java/techn…...

Centos7防火墙及端口开启
1、防火墙 1.1、查看防火墙是否开启 systemctl status firewalld 1.2、开启防火墙 firewall-cmd --list-ports 1.3、重启防火墙 firewall-cmd --reload 2、端口 2.1、查看所有已开启的端口号 firewall-cmd --list-ports 2.2、手动开启端口 启动防火墙后,默认没有开…...
vue开发,axios网络请求框架基本用法和封装
axios安装 npm install axiosaxios基本用法 默认的get请求,参数用params追加,多个参数通过json对象的方式,例如params:‘{type:“home”,page:1}’ axios({url: https://api.videolog.net.cn/baidu/token,params: }).then(value > {co…...

对比SPI、UART、I2C通信的区别与应用
SPI、UART、I2C通信是常用的数字通信协议,它们在不同的场景下有不同的应用。下面,我将分别介绍它们的特点、区别与应用。 SPI通信 SPI通信是一种串行同步通信协议,它的全称为“Serial Peripheral Interface”。SPI通信是一种单主多从的通信方…...

CentOS7安装MySQL8.0
一、使用Yum安装 1. 使用wget下载MySQL的rpm包 wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm2. 安装下载好的rpm包 yum localinstall mysql80-community-release-el7-3.noarch.rpm 3. 安装mysql(该步可能出现问题) yum…...
【Go<—>Java】gRPC测试注意事项
在做go和Java之间gRPC调用之前需要完成以下两项工作: go语言版本的gRPC调用,实现server端和client端Java语言版本的gRPC调用,实现server端和client端 由于gRPC是跨语言的通信协议,所以我们可以相互调用,有以下2种调用…...
java面试题整合
1.Java数据类型 ✅ Java是一种静态类型语言,它具有丰富的数据类型用于声明变量和方法返回类型。Java中的数据类型分为两类:原始数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 原…...

2023年12月7日:QT实现登陆界面
#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口设置this->resize(600,500);//重新设置窗口大小this->setWindowTitle("QQ-盗版");//设置窗口名为QQ-盗版this->setWindowIcon(QIcon("D:\\Qt\\funny\\pi…...

常用的测试用例大全
登录、添加、删除、查询模块是我们经常遇到的,这些模块的测试点该如何考虑 1)登录 ① 用户名和密码都符合要求(格式上的要求) ② 用户名和密码都不符合要求(格式上的要求) ③ 用户名符合要求,密码不符合要求(格式上的要求) ④ 密码符合要求…...

《python每天一小段》--12 数据可视化《1》
欢迎阅读《Python每天一小段》系列!在本篇中,将使用Python Matplotlib实现数据可视化的简单图形。 文章目录 一、概念(1)安装matplotlib(2)数据可视化实现步骤 二、绘制简单的折线图(1ÿ…...

分类预测 | Matlab实现HPO-GRU【23年新算法】基于猎食者优化算法优化门控循环单元的数据分类预测
分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.HPO-GRU【23年新算法】基于猎食者优化算法优…...

【Pytorch】学习记录分享2——Tensor基础,数据类型,及其多种创建方式
pytorch 官方文档 Tensor基础,数据类型,及其多种创建方式 1. 创建 Creating Tensor: 标量、向量、矩阵、tensor2. 三种方法可以创建张量,一是通过列表(list),二是通过元组(tuple),三是通过Numpy的数组(arra…...

实验7:索引和视图定义
【实验目的】 1、了解索引和视图的含义 2、熟悉索引和视图的创建规则 3、掌握索引和视图的创建和管理 【实验设备及器材】 1、硬件:PC机; 2、软件:(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 索引的创建、删除、重建…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...