LangChain-自定義Tool和Agent結合DeepSeek應用實例

除了調用LangChain內置工具外,也可以自定義工具

實例1:?自定義多個工具

from langchain.agents import initialize_agent, AgentType
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain_core.tools import tool, StructuredTool
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field# 初始化 LLM
llm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='sk-****',base_url='https://dashscope.aliyuncs.com/compatible-mode/v1'
)# 定義工具輸入模型
class MySearchInput(BaseModel):query: str = Field(description='你搜索的關鍵詞')# 定義搜索工具
@tool('my_search_tool', args_schema=MySearchInput, return_direct=True)
def my_search(query: str) -> str:"""用來搜索本地電腦上的數據:param query::return:"""return '我是一個搜索工具'# 定義排序工具輸入模型
class MySortToolInput(BaseModel):sort_num: list[int] = Field(description='待排序的數字列表')# 定義排序工具
def sort_num(sort_num: list[int]) -> list[int]:"""把所有的數字重新排序:param sort_num::return:"""return sorted(sort_num)# 將排序工具轉換為 StructuredTool
sort_tool = StructuredTool.from_function(func=sort_num,name='sort_num',description='排序列表中的數字',args_schema=MySortToolInput,return_direct=True
)# 加載工具
tools = load_tools(['arxiv'], llm)# 將自定義工具添加到工具列表中
tools.append(my_search)
tools.append(sort_tool)# 初始化代理
agent = initialize_agent(tools,llm,agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,handle_parsing_errors=True,  # 如果解析報錯,繼續verbose=True,
)# 調用代理
resp = agent.invoke({'input': '介紹一下2006.13145這篇論文的創新點,并且給[12,56,2,90,11,66]排序'})
resp2 = agent.invoke({'input':'請搜索當前文件夾中名稱為 Tavity搜索.py 的文件'})
print(resp)
print(resp2)

以上,定義了一個my_search的搜索工具(具體沒有實現,只是打印一句話)?和一個排序工具sort_num,同時使用了LangChain的內置工具?arxiv(該工具用于范文學術論文和文獻)

運行結果:

實例2:?自定義一個工具

from langchain import hub
from langchain.agents import  create_structured_chat_agent, AgentExecutor
from langchain_core.tools import StructuredTool
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field# 初始化 LLM
llm = ChatOpenAI(temperature=1,model='deepseek-r1',api_key='sk-*****',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)# 定義工具輸入模型
class AddlenToolInput(BaseModel):a: str = Field(description='第一個字符串')b: str = Field(description='第二個字符串')# 定義工具函數
def add_str_len(a: str, b: str) -> int:"""計算字符串的長度并求和:param a: 第一個字符串:param b: 第二個字符串:return: 兩個字符串的長度之和"""return len(a) + len(b)# 將工具轉換為 StructuredTool
add_len_tool = StructuredTool.from_function(func=add_str_len,name='my_add',description='計算2個字符串的長度之和',args_schema=AddlenToolInput,return_direct=False
)# 加載工具
tools = [add_len_tool]# 加載預定義的提示
prompt = hub.pull('hwchase17/structured-chat-agent')# 創建代理
agent = create_structured_chat_agent(llm, tools, prompt)# 初始化代理執行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)# 調用代理
resp = agent_executor.invoke({'input': '`你好中國人`的字符串長度加上`abcde`字符串的長度是多少? langsmith是什么?'})
print(resp)

以上定義了一個計算字符串長度并求和的工具add_str_len

運行結果:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85067.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85067.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85067.shtml

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

相關文章

代碼隨想錄算法訓練營第60期第五十天打卡

大家好,首先感慨一下,時間過的真是快,不知不覺我們的訓練營就已經到第五十天了,首先祝賀自己一直在堅持,今天是我們動態規劃章節的收官之戰,明天我們就會走進一個全新的算法章節單調棧,我們要為…

如何發布npm包?

如何發布npm包? 1. 注冊賬號[npm官網](https://www.npmjs.com/)2. 檢查 npm 源是否在官方 npm 倉庫,如果不在,進行切換3. 檢查4. 打包配置5. 發布6. 使用錯誤:版本更新命令 1. 注冊賬號npm官網 2. 檢查 npm 源是否在官方 npm 倉庫…

AI工具使用的最佳實踐,如何通過AI工具提高創作與工作效率

隨著科技的迅猛發展,人工智能(AI)已從遙不可及的未來構想,轉變為廣泛應用于各行業的實用工具。AI不僅在內容創作、設計、寫作等領域展現出巨大潛力,還通過自動化和智能化顯著提升了工作效率。本文將深入探討如何通過選…

漏洞Reconfigure the affected application to avoid use of weak cipher suites. 修復方案

修復方案:禁用弱加密套件(Weak Cipher Suites) 1. 確認當前使用的加密套件 在修復前,先檢查應用程序或服務器當前支持的加密套件: OpenSSL (適用于HTTPS/TLS服務)openssl ciphers -v ALL:COMPLEMENTOFALL | sortNgi…

AI對軟件工程的影響及未來發展路徑分析報告

目錄 第一部分:引言 研究背景與意義 報告框架與方法論 第二部分:AI對不同行業軟件工程的影響分析 數字化行業 制造業 零售業 工業領域 第三部分:大廠AI軟件工程實踐案例分析 微軟 谷歌 阿里巴巴 華為 第四部分:未來…

WSL里執行python深度學習的一些方法記錄

安裝anaconda3: 可以直接從 Download Now | Anaconda 中下載,然后拷貝到WSL環境的某個目錄,執行 bash xxxxxxx.sh 即可安裝。 啟動jupyter notebook: 先conda activate 當前環境,然后pip install jupyter 此時&am…

使用 SpyGlass Power Verify 解決方案中的規則

本節提供了關于使用 SpyGlass Power Verify 解決方案 的相關信息。內容組織如下: SpyGlass Power Verify 簡介運行 SpyGlass Power Verify 解決方案在 SpyGlass Power Verify 解決方案中評估結果SpyGlass Power Verify 解決方案中的參數SpyGlass Power Verify 報告1 SpyGlass …

spring4第3課-ioc控制反轉-詳解依賴注入的4種方式

1,屬性注入; 2,構造函數注入;(通過類型;通過索引;聯合使用) 3,工廠方法注入;(非靜態工廠,靜態工廠) 4,泛型依賴注入;(Spring4 整合 Hibernate4…

使用Rust和并發實現一個高性能的彩色分形圖案渲染

分形與 Mandelbrot Mandelbrot 集 (Mandelbrot Set) 是復數平面上一個點的集合,以數學家 Benot Mandelbrot 的名字命名。它是最著名的分形之一。一個復數 c 是否屬于 Mandelbrot 集,取決于一個簡單的迭代過程: z n + 1 = z n 2 + c z_{n+1}=z_{n}^2+c zn+1?=zn2?+c 如果…

微信小程序的軟件測試用例編寫指南及示例--性能測試用例

以下是針對微信小程序的性能測試用例補充,結合代碼邏輯和實際使用場景,從加載性能、渲染性能、資源占用、交互流暢度等維度設計測試點,并標注對應的優化方向: 一、加載性能測試用例 測試項測試工具/方法測試步驟預期結果優化方向冷啟動加載耗時微信開發者工具「性能」面板…

行為型:觀察者模式

目錄 1、核心思想 2、實現方式 2.1 模式結構 2.2 實現案例 3、優缺點分析 4、適用場景 5、注意事項 1、核心思想 目的:針對被觀察對象與觀察者對象之間一對多的依賴關系建立起一種行為自動觸發機制,當被觀察對象狀態發生變化時主動對外發起廣播&…

t009-線上代駕管理系統

項目演示地址 摘 要 使用舊方法對線上代駕管理系統的信息進行系統化管理已經不再讓人們信賴了,把現在的網絡信息技術運用在線上代駕管理系統的管理上面可以解決許多信息管理上面的難題,比如處理數據時間很長,數據存在錯誤不能及時糾正等問題…

LVS-NAT 負載均衡群集

目錄 簡介 一、LVS 與群集技術基礎 1.1 群集技術概述 1.2 負載均衡群集的分層結構 1.3 負載均衡工作模式 二、LVS 虛擬服務器核心組件與配置 2.1 LVS 內核模塊與管理工具 2.2 負載調度算法解析 2.3 ipvsadm 管理工具實戰 三、NFS 共享存儲服務配置 3.1 NFS 服務基礎…

LLaMaFactory - 支持的模型和模板 常用命令

一、 環境準備 激活LLaMaFactory環境,進入LLaMaFactory目錄 cd LLaMA-Factoryconda activate llamafactory 下載模型 #模型下載 from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen2.5-0.5B-Instruct) 二、啟動一個 Qwen3-0.6B…

EDW2025|數據治理的神話破除——從誤區到現實

在當今數據驅動的世界中,數據治理已成為企業成功的關鍵因素。然而,許多組織在實施數據治理時,常常被一些常見的誤區所困擾。本文將逐一破除這些誤區,揭示數據治理的真實面貌。 誤區一:你需要一個大的預算!…

AIGC與影視制作:技術革命、產業重構與未來圖景

文章目錄 一、AIGC技術全景:從算法突破到產業賦能1. **技術底座:多模態大模型的進化路徑**2. **核心算法:從生成對抗網絡到擴散模型的迭代** 二、AIGC在影視制作全流程中的深度應用1. **劇本創作:從“靈感枯竭”到“創意井噴”**2…

ReactJS 中的 JSX工作原理

文章目錄 前言? 1. JSX 是什么?🔧 2. 編譯后的樣子(核心機制)🧱 3. React.createElement 做了什么?🧠 4. JSX 與組件的關系🔄 5. JSX 到真實 DOM 的過程📘 6. JSX 與 Fr…

Spring Advisor增強規則實現原理介紹

Spring Advisor增強規則實現原理介紹 一、什么是 Advisor?1. Advisor 的定義與本質接口定義: 2. Advisor 的核心作用統一封裝切點與通知構建攔截器鏈的基礎實現增強邏輯的靈活組合 二. Sprin當中的實現邏輯1 Advisor 接口定義2 PointcutAdvisor 接口定義…

小程序32-簡易雙向數據綁定

在WXML中&#xff0c;普通屬性的綁定是單向的&#xff0c;例如:<input value"{{value}}" /> 如果希望用戶輸入數據的同時改變data中的數據&#xff0c;可以借助簡易雙向綁定機制。在對應屬性之前添加model:前綴即可: 例如<input model:value"{{value}…

Nginx網站服務:從入門到LNMP架構實戰

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; Nginx-從零開始的服務器之旅專欄&#xff1a;點擊&#xff01; &#x1f427;Linux高級管理防護和群集專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2025年5月30日14點22分 前言 說起Web服務器&#xff0c…