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

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.mzph.cn/news/219336.shtml

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

相关文章

Java中的多态到底是什么?

Java中的多态到底是什么? 在Java中,多态是面向对象编程中的一个重要概念,它有助于提高代码的灵活性和可维护性。多态分为编译时多态和运行时多态。 编译时多态(静态多态): 编译时多态是指在编译阶段确定方…

2023全国大学生数据分析大赛A题完整论文教学

大家好呀,从发布赛题一直到现在,总算完成了全国大学生数据分析大赛A题某电商平台用户行为分析与挖掘完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 实…

透析回溯的模板

关卡名 认识回溯思想 我会了✔️ 内容 1.复习递归和N叉树,理解相关代码是如何实现的 ✔️ 2.理解回溯到底怎么回事 ✔️ 3.掌握如何使用回溯来解决二叉树的路径问题 ✔️ 回溯可以视为递归的拓展,很多思想和解法都与递归密切相关,在很多…

Windows 网络监控的内容和方式

Microsoft Windows是使用最广泛的操作系统之一,受到全球用户的青睐,Windows 设备与许多进程、服务和事件相关联,这些进程、服务和事件通常需要从单个控制台进行跟踪,这就是 Windows 网络监控工具派上用场的地方。Windows 网络监控…

项目总结-自主HTTP实现

终于是写完了,花费了2周时间,一点一点看,还没有扩展,但是基本功能是已经实现了。利用的是Tcp为网络链接,在其上面又写了http的壳。没有使用epoll,多路转接难度比较高,以后有机会再写&#xff0c…

一张图片组合一组动作就可以生成毫无违和感的视频!

你敢信,1张人物图片 1张动作动画,就可以生成一段视频。网友直呼:“主播/视频UP主可能快要下岗了!” (模型视频来源于网络) 本周,字节跳动联合新加坡国立大学发布了一款开源项目 MagicAnimate&…

(第63天)19C NONCDB 转 PDB

目前很多 19C 数据库依然是创建为 NONCDB 架构,但是未来 CDB 架构的使用是无法避免的,在 21C 版本开始 Oracle 官方将不再支持 NONCDB 架构。 环境信息 本文主要介绍以下如何在 19C 同版本下将 NONCDB 转为 CDB/PDB 架构(DBMS_PDB.DESCRIBE 方式),以下为测试环境信息: …

什么是XSS攻击?如何防止它?

跨站脚本攻击(XSS),英文全称为 Cross-Site Scripting,是一种常见的 Web 安全漏洞。XSS 攻击的目标是在用户浏览器中执行恶意脚本,从而获取用户敏感信息、劫持用户会话或者进行其他恶意操作。 XSS 攻击通常发生在由用户…

探索C++中的常见排序算法

探索C中的常见排序算法 目录 冒泡排序 (Bubble Sort)选择排序 (Selection Sort)插入排序 (Insertion Sort) 冒泡排序 (Bubble Sort) 实现思路: 冒泡排序是一种简单直观的排序算法,它通过不断交换相邻元素的位置来达到排序的目的。算法的基本思想是重…

k8s中EmptyDir、HostPath、NFS三种基本存储方式介绍

目录 一.数据存储介绍 二.EmptyDir 1.简介 2.案例演示 三.HostPath 1.简介 2.案例演示 (1)介绍一下type类型 (2)简单演示 (3)数据同步功能 四.NFS 1.简介 2.案例演示 (1&#xff…

Linux Ubuntu 手动搭建webDav

1、安装 因为需要跟 zotero 进行交互,因此需要在服务器搭建一个webDav 以下是搭建步骤: sudo apt-get update sudo apt-get install apache2 Ubuntu 安装apache2来实现 不同于Centos 安装好了之后,运行 a2enmod dav_fs a2enmod dav 激…

【视频笔记】古人智慧与修行

古人的智慧 相由心生、老子悟道、佛祖成佛 多一些思考,多一些精神修炼。 除非我们今天能够产生与人类科技发展相并行的精神变革,否则永远可能也无法跳脱出历史的轮回。 视频来源 曾仕强教授周易的智慧 太极两仪四象八卦 一生二,二生三&…

大数据机器学习深度解读决策树算法:技术全解与案例实战

大数据机器学习深度解读决策树算法:技术全解与案例实战 本文深入探讨了机器学习中的决策树算法,从基础概念到高级研究进展,再到实战案例应用,全面解析了决策树的理论及其在现实世界问题中的实际效能。通过技术细节和案例实践&…

【C++】POCO学习总结(十四):引用计数、共享指针、缓冲区管理

【C】郭老二博文之:C目录 1、Poco::AutoPtr 智能指针 1.1 说明 Poco::AutoPtr是一个含有引用计数的“智能”指针模版。 Poco::AutoPtr用于支持引用计数的类实例化。支持引用计数的类需要有以下要求: 维护一个引用计数(在创建时初始化为1)实现void du…

(企业 / 公司项目)SpringBoot3整合校验框架validation

在Spring Boot项目中使用校验框架validation可以让我们更方便地实现数据校验和错误提示。下面是Spring Boot集成校验框架validation的步骤。 添加依赖 在项目的pom.xml文件中添加validation依赖&#xff1a; <dependency><groupId>org.springframework.boot</…

现代雷达车载应用——第2章 汽车雷达系统原理 2.5节 检测基础

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.5 检测基础 对于要测试目标是否存在的雷达测量&#xff0c;可以假定下列两个假设之一为真&#xff1a; •H0:—测量结果仅为噪声。 •H1:—测量是噪…

eNSP小实验(vlan和单臂路由)

一.vlan的划分 实验目的&#xff1a; ①pc1 只可以和pc2通信&#xff0c;不可以和pc3 pc4通信 ②pc1和pc2只能到Server1&#xff0c;pc3和pc4到Server2 1.拓扑图 2.配置 PC1-4 同理配置 SW1 <Huawei> <Huawei>u t m //关闭注释 Info: …

java项目将依赖打进jar、并生成可执行的jar

生成可执行的jar包 最近在做JAVA 的SDK 工具&#xff0c;由于SDK 依赖了其他的一些开源工具包&#xff0c;打包时少了依赖工具包&#xff0c;这样其他项目想要用SDK 就需要自己额外增加响应依赖&#xff0c;所以想要把依赖打进SDK。示例中依赖了fastjson处理json数据。 ​ 其…

网络编程案例

InetAddress 类 相关方法: getLocalHost&#xff1a;获取本机InetAddress对象。 getByName&#xff1a;根据指定主机名/域名获取ip地址对象。 getHostName&#xff1a;获取InetAddress对象的主机名。 getHostAddress&#xff1a;获取InetAddress对象的地址。 简单使用&am…

Nginx的location匹配和rewrite重写

一、location匹配 常用的正则表达式 ^ &#xff1a;匹配输入字符串的起始位置 $ &#xff1a;匹配输入字符串的结束位置 * &#xff1a;匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”&#xff1a;匹配前面的字符一次或多次。如“ol”能匹配“ol”及“oll…