使用LangChain连接MySQL并实现Chain多伦问答,基于智谱API

学习目标:

掌握LangChain基础用法

环境:

  • JupyterLab
  • Python 3.12.2

导入基础包

!pip install langchain -i https://mirrors.aliyun.com/pypi/simple/
!pip install zhipuai -i https://mirrors.aliyun.com/pypi/simple/
!pip install langchain_openai -i https://mirrors.ustc.edu.cn/pypi/web/simple
!pip install pymysql -i https://mirrors.aliyun.com/pypi/simple/
!pip install markdown -i https://mirrors.aliyun.com/pypi/simple/

确认版本

import sys
print("Python version:", sys.version_info.major, ".", sys.version_info.minor, ".", sys.version_info.micro)

主要编码内容

from langchain.chains import LLMChain
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.chat_models import ChatZhipuAI
# from langchain_community.chat_models import ChatOpenAI
from langchain_openai import ChatOpenAI
import jwt
import time
from langchain_core.messages import AIMessage, HumanMessage, SystemMessagezhipuai_api_key="33b1667298dfc3e27b5487a4f2428c8c.WaSYvdnaLdE1e92a"def generate_token(apikey: str, exp_seconds: int):id, secret = apikey.split(".")payload = {"api_key": id,"exp": int(round(time.time() * 1000)) + exp_seconds * 1000,"timestamp": int(round(time.time() * 1000)),}return jwt.encode(payload,secret,algorithm="HS256",headers={"alg": "HS256", "sign_type": "SIGN"},)

连接数据库

from langchain_community.utilities import SQLDatabasedb_user = "buss_822213mHs"
db_password = "buss_A8Ezrf"
db_host = "10.127.130.172"
db_name = "buss_ass2kn"db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")print(db.dialect)
print(db.get_usable_table_names())
db.run("SELECT * FROM users;")

用户表数据查询(试用)

import os
import markdown
from langchain.chains import create_sql_query_chain
from langchain_openai import ChatOpenAI
from IPython.display import HTMLllm = ChatOpenAI(model_name="glm-4",openai_api_base="https://open.bigmodel.cn/api/paas/v4",openai_api_key=generate_token(zhipuai_api_key,10),streaming=False,verbose=True
)chain = create_sql_query_chain(llm, db)
response = chain.invoke({"question": "查询用户表中,用户状态为1的SQL语句,返回所有字段"})print(markdown.markdown(response))
# HTML(response)

Chain连接

from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool
llm = ChatOpenAI(model_name="glm-4",openai_api_base="https://open.bigmodel.cn/api/paas/v4",openai_api_key=generate_token(zhipuai_api_key,10),streaming=False,verbose=True
)
execute_query = QuerySQLDataBaseTool(db=db)
write_query = create_sql_query_chain(llm, db)
chain = write_query | execute_query

定义

from operator import itemgetterfrom langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthroughanswer_prompt = PromptTemplate.from_template(
"""Given the following user question, corresponding SQL query, and SQL result, answer the user question. 用中文回答最终答案;并且自主修复提问或答案中存在的问题
Question: {question}
SQL Query: {query}
SQL Result: {result}
Answer: """
)answer = answer_prompt | llm | StrOutputParser()

执行

final_chain = (RunnablePassthrough.assign(query=write_query).assign(result=itemgetter("query") | execute_query)| answer
)final_chain.invoke({"question": "shop_users表里有多少个李正,并且状态是正常的?"})

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

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

相关文章

探索 ZKFair 的Dargon Slayer蓝图,解锁新阶段的潜力

在当前区块链技术的发展中,Layer 2(L2)解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术,但它仍面临一些关键问题和挑战,例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

西圣、飞利浦、万魔开放式耳机好用吗?热门产品硬核测评对比

在无线耳机市场中,开放式耳机因其独特的佩戴方式和出色的听音体验逐渐受到消费者的青睐,西圣、飞利浦、万魔作为业内知名品牌,都推出了各自的开放式耳机产品,备受关注,那么这些热门品牌的开放式耳机究竟好用吗&#xf…

【JVM】如何定位、解决内存泄漏和溢出

目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下: Java堆溢出: 错误信息: java.lang.OutOfMemoryError: Java heap space 原因:Java对象实例在运行时持…

Open3D(C++) 基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情…

【算法】字典序超详细解析(让你有一种相见恨晚的感觉!)

目录 一、前言 二、什么是字典序 ? ✨字典序概念 ✨深度理解字典序 ✨字典序排序的重要性和应用场景 三、常考面试题 ✨ 下一个排列 ✨ 字典数排序 ✨ 字典序最小回文串 四、共勉 一、前言 经常刷算法题的朋友,肯定会经常看到题目中提到 字典序 这样…

6.java openCV4.x 入门-Mat之局部区域读写及Range和Rect介绍

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 🧭文…

小白水平理解面试经典题目1431. Kids With the Greatest Number of Candies【Array类】

1431. 拥有最多糖果的孩子 小白渣翻译 一群孩子手里拿 着不同数目的糖果。你打算额外给每个孩子一些糖果,然后再确定哪些孩子拥有最多的糖果。 给你一个数组 candies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。另给你一个整数 extraCandies &…

vue源码解析——vue如何将template转换为render函数

Vue 将模板(template)转换为渲染函数(render function)是 Vue 编译器的核心功能,它是 Vue 实现响应式和虚拟 DOM 的关键步骤。在 Vue 中,模板(template)是开发者编写的类似 HTML 的代…

python vtk获取模型角度

在Python中,使用VTK库获取3D模型的角度通常涉及到计算模型的几何参数,如物体的最小外接矩形或边界盒子。以下是一个简单的例子,展示如何使用VTK计算3D模型的边界盒子,从而获取模型的角度: import vtk# 创建一个VTK的PolyData对象,并添加模型数据 polyData = vtk.vtkPoly…

qT 地图显示飞机轨迹

为了在Qt中显示飞机轨迹,你可以使用Qt的地图模块,例如Qt Location。以下是一个简单的示例,展示如何使用Qt地图模块显示飞机的轨迹。 首先,确保你的Qt项目文件(.pro)中包含了以下行来启用Qt Location模块: !include($…

【大数据运维】Hbase shell 常见操作

文章目录 一. DDL1. 表的DDL1.1. 创建表1.2. 删除表 2. 列族的DDL2.1. 增加一个列簇2.2. 删除列族2.3. 修改列族版本(ing) 二. DML1. 插入与更新数据2. 删除数据3. 清空表 三. DQL1. scan:查一批数据1.1. 查询全部1.2. 过滤rowkey1.3. 过滤列…

HackTheBox-Machines--Wifinetic

文章目录 1 端口扫描2 测试思路3 21端口测试&权限获取4 权限提升方法一方法二: Wifinetic 测试过程 1 端口扫描 nmap -sC -sV 10.129.229.902 测试思路 目标开启了21、22、53端口,并且21端口FTP服务允许匿名登录,所以从21端口开始进行测试…

OpenCV与AI深度学习 | OpenCV中八种不同的目标追踪算法

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:OpenCV中八种不同的目标追踪算法 目标跟踪作为机器学习的一个重要分支,加之其在日常生活、军事行动中的广泛应用,受到…

STM32F4系列单片机的定时器讲解和计数器,PWM信号输出,PWM信号捕获的实现对电机进行控制和监测功能

1.定时器功能介绍: 在控制领域里面,我们可以用信号输出定时器,进行PWM的控制,从而达到控制电机的目的,通过输入捕获功能可以用来接收外部的数字信号,用于测量脉冲宽度、频率或周期等。在这里给大家介绍下&…

【Python基础知识点】Python的浅拷贝和深拷贝

概述 本文主要通过两个简单的代码小例子理解深拷贝和浅拷贝 主体内容 copy 模块提供了浅拷贝和深拷贝的功能。它的主要函数有: copy(x): 返回对象 x 的浅拷贝。 deepcopy(x): 返回对象 x 的深拷贝。 浅拷贝使用 copy(x) 函数,它只复制了最外层的对象,但内层的对象仍然是引用…

缺省参数

缺省参数 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int main() {Func(); // 没有传…

Rust所有权和Move关键字使用和含义讲解,以及Arc和Mutex使用

Rust 所有权规则 一个值只能被一个变量所拥有&#xff0c;这个变量被称为所有者。 一个值同一时刻只能有一个所有者&#xff0c;也就是说不能有两个变量拥有相同的值。所以对应变量赋值、参数传递、函数返回等行为&#xff0c;旧的所有者会把值的所有权转移给新的所有者&#…

共襄盛举!400+组织携手发布「2024集成光子学路线图」

3月25日&#xff0c;麻省理工学院微光子中心与PhotonDelta基金会联合领导&#xff0c;携手全球400余家科技、学术及工业界组织&#xff0c;共同发布了2024年版集成光子学路线图。 该路线图被称为IPSR-I&#xff08;Integrated Photonics System Roadmap – International&#…

面试算法-129-寻找右区间

题目 给你一个区间数组 intervals &#xff0c;其中 intervals[i] [starti, endi] &#xff0c;且每个 starti 都 不同 。 区间 i 的 右侧区间 可以记作区间 j &#xff0c;并满足 startj > endi &#xff0c;且 startj 最小化 。注意 i 可能等于 j 。 返回一个由每个区…

P2089 烤鸡——Python解答

题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡&#xff08;本是同畜牲&#xff0c;相煎何太急&#xff01;&#xff09;Hanke 吃鸡很特别&#xff0c;为什么特别呢&#xff1f;因为他有 1010 种配料&#xff08;芥末、孜然等&#xff09;&#xf…