当前位置: 首页 > news >正文

Langchain_Agent+数据库

本处使用Agent+数据库,可以直接执行SQL语句。可以多次循环查询问题

前文通过chain去联系数据库并进行操作; 通过链的不断内嵌组合,生成SQL在执行SQL再返回。

 初始化

import os
from operator import itemgetterimport bs4
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains.history_aware_retriever import create_history_aware_retriever
from langchain.chains.retrieval import create_retrieval_chain
from langchain.chains.sql_database.query import create_sql_query_chain
from langchain_chroma import Chroma
from langchain_community.agent_toolkits import SQLDatabaseToolkit
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.tools import QuerySQLDataBaseTool
from langchain_community.utilities import SQLDatabase
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder, PromptTemplate
from langchain_core.runnables import RunnableWithMessageHistory, RunnablePassthrough
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langgraph.prebuilt import chat_agent_executoros.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "LangchainDemo"
os.environ["LANGCHAIN_API_KEY"] = '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'
# os.environ["TAVILY_API_KEY"] = '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'# 聊天机器人案例
# 创建模型
model = ChatOpenAI(model='gpt-4-turbo')# sqlalchemy 初始化MySQL数据库的连接
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'test_db8'
USERNAME = 'root'
PASSWORD = '123123'
# mysqlclient驱动URL
MYSQL_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)db = SQLDatabase.from_uri(MYSQL_URI)

创建工具和Agent

Agent的核心——langchain_community下的Tool;

在Agent中,不需要同chain一样在PromptTemplate中定义过多参数,Agent会自动生成并执行SQL语句。

# 创建工具
toolkit = SQLDatabaseToolkit(db=db, llm=model)
tools = toolkit.get_tools()# 使用agent完整整个数据库的整合
system_prompt = """
您是一个被设计用来与SQL数据库交互的代理。
给定一个输入问题,创建一个语法正确的SQL语句并执行,然后查看查询结果并返回答案。
除非用户指定了他们想要获得的示例的具体数量,否则始终将SQL查询限制为最多10个结果。
你可以按相关列对结果进行排序,以返回MySQL数据库中最匹配的数据。
您可以使用与数据库交互的工具。在执行查询之前,你必须仔细检查。如果在执行查询时出现错误,请重写查询SQL并重试。
不要对数据库做任何DML语句(插入,更新,删除,删除等)。首先,你应该查看数据库中的表,看看可以查询什么。
不要跳过这一步。
然后查询最相关的表的模式。
"""
system_message = SystemMessage(content=system_prompt)# 创建代理
agent_executor = chat_agent_executor.create_tool_calling_executor(model, tools, system_message)# resp = agent_executor.invoke({'messages': [HumanMessage(content='请问:员工表中有多少条数据?')]})
# resp = agent_executor.invoke({'messages': [HumanMessage(content='那种性别的员工人数最多?')]})
resp = agent_executor.invoke({'messages': [HumanMessage(content='哪个部门下面的员工人数最多?')]})result = resp['messages']
print(result)
print(len(result))
# 最后一个才是真正的答案
print(result[len(result)-1])

HumanMessage、AIMessage、ToolMessage、additional_kwargs、

http://www.xdnf.cn/news/119071.html

相关文章:

  • 从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战
  • ssh启动不了报错
  • 3台CentOS虚拟机部署 StarRocks 1 FE+ 3 BE集群
  • React19源码阅读之commitRoot
  • OpenBMC:BmcWeb login创建session
  • Spring Boot + MyBatis-Plus 的现代开发模式
  • 基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案‌
  • QT构建即时通讯应用--WebSocket全面解析与实战指南
  • 3. pandas笔记之:创建
  • 助力网站优化利用AI批量生成文章工具提升质量
  • 【QT网络】构建简单Udp回显服务器
  • ArrayList与顺序表详解
  • C# 结构(Struct)
  • 【AI News | 20250424】每日AI进展
  • 文件操作、流对象示例
  • Spring AI简介
  • vscode vue文件单行注释失效解决办法
  • 基于Keras3.x使用CNN实现简单的猫狗分类
  • WAMP设置外网访问
  • servlet-优化
  • ASP.NET Core 主机模型详解:Host、WebHost与WebApplication的对比与实践【代码之美】
  • 实现优雅的分页导航:从原理到最佳实践
  • Java查询数据库表信息导出Word
  • C++ STL priority_queue 详解:从基础到自定义类型
  • Spring Boot YML配置值“011“在代码中变为9的问题解析
  • 济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理
  • 二分小专题
  • 1Panel+Halo快速部署:简化服务器管理与网站搭建流程探索
  • MySQL 报错解析:SQLSyntaxErrorException caused by extra comma before FROM
  • 美团获全国首张低空物流全境覆盖运营合格证,其第四代无人机具备全域环境适应能力