如何使用LangChain自定义agent的制作(1) - 自定义一个可以执行 SQL 查询的 Agent

文章目录

  • 前言
  • 一、准备工作梳理
  • 一、 安装依赖包
  • 二、 设置数据库连接
  • 三、 自定义 Agent
  • 四、 运行示例
  • 五、 完整代码
  • 六、使用agent的好处
    • 1. **模块化和可重用性**
    • 2. **扩展性**
    • 3. **简化复杂性**
    • 4. **增强可维护性**
    • 5. **集成大语言模型的能力**
    • 6. **易于扩展到其他任务**
  • 继续思考


前言

之前我们一块学习了
如何使用LangChain库使用大模型与SQL数据库进行交互
文章末尾说了要写一个自定义的 agent 把我们的代码包进去,今天我们一块来尝试写一个自定义agent

一、准备工作梳理

要使用 LangChain 自定义一个可以执行 SQL 查询的 Agent,需要完成以下几个步骤:

1) 安装依赖包:确保你已经安装了 langchainSQLAlchemy 和其他必要的包。

2) 设置数据库连接:使用 SQLAlchemy 连接到你的数据库。

3) 自定义 Agent:创建一个 Agent,它可以解析用户输入的 SQL 查询并执行。

4) 运行示例:通过运行一个示例,验证你的 Agent 是否工作正常。

下面是一个完整的示例代码,演示如何实现这一点。

一、 安装依赖包

首先安装必要的 Python 包:

pip install langchain sqlalchemy

二、 设置数据库连接

创建一个 Python 文件(如 sql_agent.py),并设置数据库连接。这里以 SQLite 为例:

from sqlalchemy import create_engine# 设置数据库连接
engine = create_engine('sqlite:///example.db')# 创建一个示例表并插入一些数据
with engine.connect() as connection:connection.execute("""CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT,age INTEGER)""")connection.execute("""INSERT INTO users (name, age) VALUES('Alice', 30),('Bob', 25),('Charlie', 35)""")

三、 自定义 Agent

定义一个 LangChain 的 Agent,它可以执行 SQL 查询并返回结果:

from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from sqlalchemy.orm import sessionmaker# 创建数据库会话
Session = sessionmaker(bind=engine)
session = Session()# 定义执行SQL查询的工具函数
def execute_sql_query(query):try:result = session.execute(query)return result.fetchall()except Exception as e:return str(e)# 定义LangChain的工具
sql_tool = Tool(name="SQL Executor",func=execute_sql_query,description="Executes SQL queries and returns the result"
)# 初始化LangChain的LLM
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")# 创建自定义Agent
agent = initialize_agent(tools=[sql_tool],llm=llm,agent_type="zero_shot",prompt_template=PromptTemplate(template="You are an SQL agent. Execute the following SQL query: {query}",input_variables=["query"])
)

四、 运行示例

使用自定义的 Agent 执行 SQL 查询:

def main():query = "SELECT * FROM users WHERE age > 30"result = agent({"query": query})print(result)if __name__ == "__main__":main()

五、 完整代码

将以上所有代码合并到一个文件中:

# sql_agent.pyfrom sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI# 设置数据库连接
engine = create_engine('sqlite:///example.db')# 创建数据库会话
Session = sessionmaker(bind=engine)
session = Session()# 创建一个示例表并插入一些数据
with engine.connect() as connection:connection.execute("""CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY,name TEXT,age INTEGER)""")connection.execute("""INSERT INTO users (name, age) VALUES('Alice', 30),('Bob', 25),('Charlie', 35)""")# 定义执行SQL查询的工具函数
def execute_sql_query(query):try:result = session.execute(query)return result.fetchall()except Exception as e:return str(e)# 定义LangChain的工具
sql_tool = Tool(name="SQL Executor",func=execute_sql_query,description="Executes SQL queries and returns the result"
)# 初始化LangChain的LLM
llm = OpenAI(api_key="YOUR_OPENAI_API_KEY")# 创建自定义Agent
agent = initialize_agent(tools=[sql_tool],llm=llm,agent_type="zero_shot",prompt_template=PromptTemplate(template="You are an SQL agent. Execute the following SQL query: {query}",input_variables=["query"])
)def main():query = "SELECT * FROM users WHERE age > 30"result = agent({"query": query})print(result)if __name__ == "__main__":main()

运行 sql_agent.py 文件,Agent 将执行指定的 SQL 查询并返回结果。确保你替换 "YOUR_OPENAI_API_KEY" 为你的实际 OpenAI API 密钥。

六、使用agent的好处

将功能封装成一个 Agent 有许多好处,特别是在使用 LangChain 框架和执行 SQL 查询的情况下:

1. 模块化和可重用性

  • 封装和抽象:将功能封装成 Agent 可以将复杂的逻辑抽象出来,使得代码更加模块化。这样可以更容易地理解、维护和扩展。
  • 代码复用:封装好的 Agent 可以在不同的项目或不同的部分中重复使用,而无需重新实现相同的逻辑。

2. 扩展性

  • 添加新功能:当需要添加新的功能时,只需在现有的 Agent 上进行扩展,而不需要大规模修改原有代码。
  • 插拔式设计:你可以轻松地添加或替换工具,或修改 Agent 的行为,而不影响整体系统。

3. 简化复杂性

  • 简化主逻辑:主逻辑只需要调用 Agent,而不需要处理具体的实现细节,使得主逻辑更加简洁和清晰。
  • 责任分离:将不同的功能分离到不同的 Agent 或工具中,可以让每个部分专注于自己的功能,从而减少代码的复杂性和耦合度。

4. 增强可维护性

  • 易于调试和测试:由于 Agent 封装了特定的功能,测试和调试可以集中在 Agent 的输入和输出上,简化了调试过程。
  • 清晰的接口:Agent 提供了清晰的接口,其他部分只需与接口交互,而无需了解具体的实现细节。

5. 集成大语言模型的能力

  • 自然语言处理:通过封装,Agent 可以轻松集成大语言模型(如 OpenAI),实现自然语言理解和生成能力,使得系统能够处理更加复杂和自然的用户请求。
  • 动态生成查询:利用大语言模型,Agent 可以根据用户的自然语言请求动态生成 SQL 查询,从而使系统更加智能和灵活。

6. 易于扩展到其他任务

  • 多任务处理:一个 Agent 可以包含多个工具,处理不同的任务(如 SQL 查询、数据处理、API 调用等),从而实现多任务处理能力。
  • 跨领域应用:Agent 的设计可以适用于不同的领域和应用场景,通过配置和扩展,可以快速适应新的需求。

继续思考

上面的sql是我们直接给出来的,可不可以使用我们之前一起学习的方法,将sql自动生成呢?后续继续讨论

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

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

相关文章

Web前端期末项目报告:探索、实践与反思

Web前端期末项目报告:探索、实践与反思 随着Web技术的不断发展,前端开发在软件开发中扮演着越来越重要的角色。本次期末项目,我们致力于构建一个功能完善、用户体验优良的Web应用,以实践所学知识,提升技能水平。接下来…

算法体系-23 第二十三节:暴力递归到动态规划(五)

一 求K次打击之后,英雄把怪兽砍死的概率 1.1 描述 给定3个参数,N,M,K 怪兽有N滴血,等着英雄来砍自己 英雄每一次打击,都会让怪兽流失[0~M]的血量 到底流失多少?每一次在[0~M]上等概率的获得一个…

搭建预约咨询小程序,高效便捷新选择

一、预约咨询小程序是什么? 预约咨询小程序是一款适用于各种生活场景包括医疗、保洁、宠物护理、法律等方面的预约咨询类小程序。 二、这款小程序有什么亮点优势? 预约咨询小程序适用场景广泛,无论是心理咨询、法律咨询,还是宠物…

让图片开口说话的模型Hallo: 基于音频驱动的肖像图像动画,精准唇形同步,支持多种语言和风格

前言 让静态的图片“开口说话”,一直是人们对人工智能的期待。近年来,随着深度学习技术的发展,音频驱动的肖像图像动画技术取得了长足的进步。各种模型涌现,但如何实现精准的唇形同步、保持视频的真实感和流畅性,以及…

变长的时间戳设计

以前的时间戳有32位,以秒为单位,231秒≈68年,从1970年开始,到2038年会出问题。 后来出现的时间戳有64位,以纳秒为单位,263纳秒≈292年。 本次设计的变长时间戳,以32比特为单位,总共…

mysql8.0找不到my.ini

报错问题解释: MySQL 8.0 在Windows系统中通常不需要 my.ini 文件,因为安装程序会在 %PROGRAMDATA%\MySQL\MySQL Server 8.0\ (通常是 C:\ProgramData\MySQL\MySQL Server 8.0\)创建默认的配置文件。如果你的系统中找不到 my.ini…

Qt中利用QTextBrowser控件设计日志窗口

我们一般使用Qt开发应用程序时,都有将控制台窗口去掉。但是,有时候又需要查看一些调试信息,一般的处理方式是把log写到一个文件中。本文介绍一下日志窗口,可以更方便的查看日志信息。 UI设计 推拽UI控件,修改默认背景…

FFmpeg+SDL2实现音视频播放器项目

一、FFmpeg视频解码器 1.视频解码知识 1).纯净的视频解码流程 压缩编码数据->像素数据。 例如解码H.264,就是“H.264码流->YUV”。 2).一般的视频解码流程 视频码流一般存储在一定的封装格式(例如MP4、AVI等)中。封装格式中通常还…

反转链表(java精简版)

反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长,电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中,如何高效、准确地获取并分析数据,以洞察市场趋势、优化运营策略、提升用户体验,成为电商企业面临的重要挑…

期货止损口诀需牢记

实战操作难免错,心中不必一团火; 出错认输是常事,亏损不止闯大祸。 止损纪律要定死,价格不能差豪丝; 触及止损要出局,管它价格怎放肆。 强势多空价放宽,价格波动要空间; 大势不改…

【数学】什么是傅里叶级数与傅里叶变换?

傅里叶级数与傅里叶变换 背景 傅里叶级数和傅里叶变换是数学和工程领域中的重要工具,特别是在信号处理、图像处理和物理学中。傅里叶级数用于将周期函数表示为正弦和余弦函数的和,而傅里叶变换用于将任意函数表示为频率的函数。 公式 傅里叶级数&…

深度学习(十四)——优化器

前言 反向传播可以求出神经网路中每个需要调节参数的梯度(grad),优化器可以根据梯度进行调整,达到降低整体误差的作用。下面我们对优化器进行介绍。 1. 如何使用优化器 官方文档:torch.optim — PyTorch 2.0 documentation (1)构…

Nexus安卓木马分析报告

概述 2023年3月21日晚上,链安与中睿天下联合研发的监控系统检测到一种新型安卓木马。在经过睿士沙箱系统捕获样本之后,发现该安卓木马极有可能是原安卓网银盗号木马SOVA的变种。与此同时,意大利安全公司Cleafy发布了一篇题为《Nexus&#xf…

JupyterLab使用指南(三):JupyterLab的Cell详细介绍

JupyterLab Cell 使用教程 JupyterLab 的 cell 是一种强大的工具,提供了编写、执行、展示和记录的全方位支持,使得复杂的计算任务变得简单直观。通过熟练掌握 cell 的各种操作和快捷键,用户可以显著提高工作效率,专注于解决实际问…

HNU操作系统2020年期中考试试卷及参考答案

1.(15分) 什么是多道程序技术,它带来了什么好处? 答: 多道程序设计,就是在内存中存放多个进程来执行人们赋予计算机的任务,这些在内存中的多个进程共享计算机的硬件资源,如CPU&…

C++函数作为参数

C++函数作为参数 在C++中,函数作为另一个函数的参数是非常常见的做法,特别是在处理回调函数和泛型编程时。我们展示了如何在C++中将函数作为参数传递给另一个函数,包括普通函数、std::function 和 std::bind、lambda表达式以及类成员函数。每种方法都有其独特的优势,可以根…

shell脚本中set -e用途

在shell脚本中,set -e 是一个命令,用于设置shell的退出行为。具体来说,当在脚本中执行一个命令,并且该命令返回非零退出状态时(通常表示错误),set -e 会导致整个脚本立即退出,而不是…

2024/6/20 驱动day7GPIO子系统

GPIO子系统点六盏灯 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/gpio.h> #include <linux/of_gpio.h> struct device_node* node; struct device_node* child_node1; struct device_node* child…

Java实现俄罗斯方块——文本域组件

技术实现&#xff1a; 1.初始化游戏窗口&#xff1b; 2.初始化游戏界面&#xff1b; 3.初始化游戏的说明面板&#xff1b; 4.随机生成下落方块&#xff1b; 5.绘制方块&#xff1b; 6.清除方块&#xff1b; 7.清楚某一行方块&#xff0c;上方方块掉落&#xff1b; 8.刷新…