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.pswp.cn/bicheng/78371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78371.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 爬蟲如何偽裝 Referer?從隨機生成到動態匹配

一、Referer 的作用與重要性 Referer 是 HTTP 請求頭中的一個字段,用于標識請求的來源頁面。它在網站的正常運行中扮演著重要角色,例如用于統計流量來源、防止惡意鏈接等。然而,對于爬蟲來說,Referer 也可能成為被識別為爬蟲的關…

Post-Processing PropertySource instance詳解 和 BeanFactoryPostProcessor詳解

PropertySourcesBeanFactoryPostProcessor詳解 1. 核心概念 BeanFactoryPostProcessor 是 Spring 框架中用于在 BeanFactory 初始化階段 對 Environment 中的 PropertySource 進行后處理的接口。它允許開發者在 Bean 創建之前 對屬性源進行動態修改,例如添加、刪除…

[C]基礎13.深入理解指針(5)

博客主頁:向不悔本篇專欄:[C]您的支持,是我的創作動力。 文章目錄 0、總結1、sizeof和strlen的對比1.1 sizeof1.2 strlen1.3 sizeof和strlen的對比 2、數組和指針筆試題解析2.1 一維數組2.2 字符數組2.2.1 代碼12.2.2 代碼22.2.3 代碼32.2.4 …

賽靈思 XCKU115-2FLVB2104I Xilinx Kintex UltraScale FPGA

XCKU115-2FLVB2104I 是 AMD Xilinx Kintex UltraScale FPGA,基于 20 nm 先進工藝,提供高達 1 451 100 個邏輯單元(Logic Cells),77 721 600 bit 的片上 RAM 資源,以及 5 520 個 DSP 切片(DSP48E…

CAPL編程_03

1_文件操作的相關函數: 讀文本文件內容 讀取文本文件操作的三部曲 1)打開文件 —— openFileRead ( ) 2)逐行讀取 —— fileGetString ( ) 、fileGetStringSZ ( ) 3)關閉文件 —— fileClose ( ) char content[100];…

2025年江西建筑安全員A證適合報考人群

江西建筑安全員A證適合報考人群 江西省建筑安全員A證(建筑施工企業主要負責人安全生產考核合格證書)主要面向建筑行業管理人員,適合以下人員報考: 1. 企業主要負責人 法人代表、總經理、分管安全副總:依法需持A證&a…

Docker安裝(Ubuntu22版)

前言 你是否還在為Linux上配置Docker而感到煩惱? 你是否還在為docker search,docker pull連接不上,而感到沮喪? 本文將解決以上你的所有煩惱!快速安裝好docker! Docker安裝 首先,我們得先卸載…

Ubuntu18.04配置C++環境和Qt環境

Ubuntu18.04配置C環境和Qt環境 1、前言3.2 安裝其他庫3.3 查看有沒有安裝成功3.4測試C環境 4、配置Qt環境4.1 安裝相關的庫4.2 測試 5、總結 1、前言 記錄一下Ubuntu18.04配置C環境和Qt環境的過程,方便自己日后回顧,也可以給有需要的人提供幫助。 # 2…

ACWing——算法基礎課

置頂思考: 算法的本質是什么樣的思想? 這種思想可以解決哪類問題? 有沒有其他的解決思路? 關注數值范圍,思考可不可以針對性解決問題? 目錄 https://leetcode.cn/circle/discuss/RvFUtj/ 滑動窗口與雙指針…

私鑰連接服務器(已經有服務器私鑰

前言:假設我們已經有了服務器的私鑰,我們怎么配置呢? 下面我會從vsc的配置角度來寫 ? 步驟一:準備工作 安裝 VS Code(如果還沒裝) 👉 https://code.visualstudio.com/ 安裝插件:Re…

Redis LFU 策略參數配置指南

一、基礎配置步驟? 設置內存上限? 在 redis.conf 配置文件中添加以下指令,限制 Redis 最大內存使用量(例如設置為 4GB): maxmemory 4gb選擇 LFU 淘汰策略? 根據鍵的作用域選擇策略: # 所有鍵參與淘汰 maxmemory-…

嵌入式 C 語言面試核心知識點全面解析:基礎語法、運算符與實戰技巧

在嵌入式面試中,C 語言基礎是重中之重。本文針對經典面試題進行詳細解析,幫助新手系統掌握知識點,提升面試應對能力。 一、數據結構邏輯分類 題目 在數據結構中,從邏輯上可以把數據結構分為( )。 A、動態…

11.AOP開發

十一、AOP開發 1、Spring Boot實現 AOP 11.1.1、SpringBootAop簡介 Spring Boot的AOP編程和Spring框架中AOP編程的唯一區別是&#xff1a;引入依賴的方式不同,其他內容完全一樣 Spring Boot中AOP編程需要引入aop啟動器&#xff1a; <!--aop啟動器--> <dependency…

【網絡入侵檢測】基于源碼分析Suricata的PCAP模式

【作者主頁】只道當時是尋常 【專欄介紹】Suricata入侵檢測。專注網絡、主機安全,歡迎關注與評論。 1. 概要 ?? 本文聚焦于 Suricata 7.0.10 版本源碼,深入剖析其 PCAP 模式的實現原理。通過系統性拆解初始化階段的配置流程、PCAP 數據包接收線程的創建與運行機制,以及數據…

.NET 10 中的新增功能

.NET 運行時 .NET 10 運行時引入了新功能和性能改進。 關鍵更新包括&#xff1a; 數組接口方法反虛擬化&#xff1a;JIT 現在可以取消虛擬化和內聯數組接口方法&#xff0c;從而提高數組枚舉的性能。數組枚舉去抽象化&#xff1a;改進功能以通過枚舉器減少數組迭代的抽象開銷…

盲注命令執行(Blind Command Execution)

一、核心原理 1. 無回顯命令執行的本質 盲命令執行&#xff08;Blind Command Execution&#xff09;是一種攻擊形式&#xff0c;攻擊者通過注入系統命令到Web應用或后端系統中&#xff0c;但無法直接獲取命令執行結果。盲命令執行的本質在于攻擊者無法直接看到執行結果&#x…

Linux多線程技術

什么是線程 在一個程序里的多執行路線就是線程。線程是進程中的最小執行單元&#xff0c;可理解為 “進程內的一條執行流水線”。 進程和線程的區別 進程是資源分配的基本單位&#xff0c;線程是CPU調度的基本單位。 fork創建出一個新的進程&#xff0c;會創建出一個新的拷貝&…

計算機組成原理實驗(1) 算術邏輯運算單元實驗

實驗一 算術邏輯運算單元實驗 一、實驗目的 1、掌握簡單運算器的數據傳輸方式 2、掌握74LS181的功能和應用 二、實驗內容 1、不帶進位位邏輯或運算實驗 2、不帶進位位加法運算實驗 3、實驗指導書2.15實驗思考 三、實驗步驟和結果 實驗內容一&#xff1a;不帶進位…

Android將啟動畫面實現遷移到 Android 12 及更高版本

如果在 Android 11 或更低版本中實現自定義啟動畫面&#xff0c;請遷移應用遷移到 SplashScreen API 以獲取幫助 確保其在 Android 12 及更高版本中正確顯示。 從 Android 12 開始&#xff0c;在所有應用的冷啟動和溫啟動期間&#xff0c;系統都會應用 Android 系統的默認啟動…

692. 前K個高頻單詞(map的練習)

目錄 1、題目分析 2.解題思路 3.代碼實現 4.總結 1、題目分析 2.解題思路 首先它給出我們一個string&#xff0c;讓我們提取出它們中出現次數最多的。利用map將word一個一個存入其中&#xff0c;沒有就插入&#xff0c;有了就1&#xff0c;這樣我們就得到了key_value&#…