LangChain 25: SQL Agent通过自然语言查询数据库sqlite

news2024/11/17 23:59:56

LangChain系列文章

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
  9. LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
  10. LangChain 10思维链Chain of Thought一步一步的思考 think step by step
  11. LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
  12. LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
  13. LangChain 13输出解析Output Parsers 自动修复解析器
  14. LangChain 14 SequencialChain链接不同的组件
  15. LangChain 15根据问题自动路由Router Chain确定用户的意图
  16. LangChain 16 通过Memory记住历史对话的内容
  17. LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理
  18. LangChain 18 LangSmith监控评估Agent并创建对应的数据库
  19. LangChain 19 Agents Reason+Action自定义agent处理OpenAI的计算缺陷
  20. LangChain 20 Agents调用google搜索API搜索市场价格 Reason Action:在语言模型中协同推理和行动
  21. LangChain 21 Agents自问自答与搜索 Self-ask with search
  22. LangChain 22 LangServe用于一键部署LangChain应用程序
  23. LangChain 23 Agents中的Tools用于增强和扩展智能代理agent的功能
  24. 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

随机分词与tokenizer(BPE->BBPE->Wordpiece->Unigram->sentencepiece->bytepiece)

0 tokenizer综述 根据不同的切分粒度可以把tokenizer分为: 基于词的切分,基于字的切分和基于subword的切分。 基于subword的切分是目前的主流切分方式。subword的切分包括: BPE(/BBPE), WordPiece 和 Unigram三种分词模型。其中WordPiece可以认为是一种特殊的BPE。完…

臻程密封科技(江苏)有限公司携橡胶密封产品亮相2024生物发酵展

臻程密封科技(江苏)有限公司盛装亮相2024第12届国际生物发酵产品与技术装备展(济南) 展位号:2号馆H56 臻程密封科技(江苏)有限公司专注于橡胶密封材料的研发,橡胶密封产品的生产、…

阿里云SLB的使用总结

一、什么是SLB 实现k8s的服务service的一种推荐方式,也是服务上云后,替代LVS的一个必选产品。 那么它有什么作用呢? 1、负载均衡,是它与生俱来的。可以配置多个服务器组:包括虚拟服务器组、默认服务器组、主备服务器…

来自OpenAI的官方解释:ChatGPT中的GPTs与Assistants API的区别是什么?有什么差异?

本文原文来自DataLearnerAI的官方网站: 来自OpenAI的官方解释:ChatGPT中的GPTs与Assistants API的区别是什么?有什么差异? | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051701996595465 OpenAI发布的产…

大数据技术5:OLAP引擎对比分析

前言:数据仓库建设,初级的理解就是建表,将业务数据、日志数据、消息队列数据等,通过各种调度任务写入到表里供OLAP引擎使用。但要想建好数仓也是一个复杂、庞大的工程,比如要考虑:数据清洗、数据建模&#…

使用Vue3+Typescript手写一个日历签到组件

设计理念 昨天写了个简单美观的日历签到组件,使用的是Vue3TypeScript,大概逻辑是先找到本月份第一天是周几,然后开始填充月份日期:weeksArray:[[]]:之后渲染到表格中,对于签到事件触发则先判断是否是今天且还未没有签…

计算机视觉 基于Open3D了解用于网格和点云邻域分析的KD树和八叉树

一、简述 距离计算和邻域分析是理解网格和点云的形状、结构和特征的重要工具。我们这里要基于一些3D库来提取基于距离的信息并将其可视化。 与深度图或体素相比,点云和网格表示 3D 空间中的非结构化数据。点由它们的 (X, Y, Z) 坐标表示,在 3D 空间中可能彼此靠近的两…

6.3 U-boot 启动流程详解

通过对 uboot 启动流程的梳理,我们就可以掌握一些外设是在哪里被初始化的,这样当我们需要修改这些外设驱动的时候就会心里有数。 一、链接脚本 u-boot.lds 分析 uboot 的启动流程,首先要找到“入口”,找到第一行程序在哪里。程序…

【Delphi】FMX开发 ios 和 android 异同点(踩坑记)

目录 一、前言 二、补充下基础知识 1. APP程序事件:TApplicationEvent 2. APP内置Web服务器或者UDP服务端或者TCP服务端 三、iOS 和 android 平台的不同点 1. TApplicationEvent的不同点:以下不同点,请仔细阅读! 2. APP内置…

嵌入式培训-Linux系统及C编程高级-DAY6-linux shell脚本编程

Shell脚本概述 Shell脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能 Shell脚本编写流程 Shell脚本的文件扩展名…

luceda ipkiss教程 45:在版图上加LOGO

**在设计版图时往往需要加上公司或者学校的LOGO,只需要LOGO的图片,通过代码就可以将LOGO加到版图上,比如: ** 通过代码可以得到版图上的LOGO: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8daea33f74f342ed9f506ae5d8cea711.…

求导公式,求导的四则运算,复合函数求导

求导公式 求导的四则运算 复合函数求导

原码、反码、补码、大端、小端

原码、反码、补码 计算机中的整数有三种2进制表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”, 而数值位: 正数的原、反、补码都相同。负整数的三种表…

接触huggingface

接触huggingface finetuning llama 按照https://github.com/samlhuillier/code-llama-fine-tune-notebook/tree/main中的教程一步一步了解。 pip install !pip install githttps://github.com/huggingface/transformers.gitmain bitsandbytes # we need latest transforme…

QGIS003:【06工程工具栏】-新建打开保存工程、新建打印布局、布局管理器、样式管理器

摘要:QGIS工程工具栏包括新建工程、打开工程、保存工程、新建打印布局、布局管理器、样式管理器等选项,本文介绍各选项的基本操作。 实验数据: 链接:https://pan.baidu.com/s/1f8tteqbum-Ekc7ZPdQRuEg?pwd=0s1i 提取码:0s1i 一、新建工程 【工具功能】:该功能用于创…

JAVA+SSM+springboot+MYSQL企业物资库存进销存管理系统

。该系统从两个对象:由管理员和员工来对系统进行设计构建。主要功能包括首页、个人中心、员工管理、项目信息管理、仓库信息管理、供应商管理、项目计划管理、物资库存管理、到货登记管理、物资出库管理、物资入库管理等功能进行管理。本企业物资管理系统方便员工快…

12.8 作业 C++

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

SQL语句---创建索引

介绍 使用sql语句实现创建索引。使用索引的优点是提升查询效率,使查询速度更快。 命令 alter table 表名 add 索引类型 索引名 (字段名);用alter table添加索引与create index区别,可以参考文章:https://www.cnblogs.com/jelly12345/p/173…

Arduino驱动MPX5700AP气压传感器(压力传感器)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 4.1、采集数据 4.2、校准传感器 MPX5700AP测量范围15~700kPa,支持I2C数字输出,可以根据已知气压值进行标定,可以快速、准确的测量管路或其他环境中的气压值。…

mysql的BIT数值类型

MySQL :: MySQL 8.2 Reference Manual :: 11.1.5 Bit-Value Type - BIT MySQL :: MySQL 8.2 Reference Manual :: 9.1.5 Bit-Value Literals BIT类型用来存放bit值,每一位是0或者1,允许1-64位。 例如,下面表定义了new这列的类型为8位的BIT…