LangChain v1.0 Agent的工具定义及调用

news/2025/11/18 22:43:26/文章来源:https://www.cnblogs.com/AttaSayyid/p/19239604

LangChain Agent工具的定义

大模型是Agent的大脑,工具就是Agent的手和脚

构建Agent时,要提供一个工具列表

首先需要创建Agent项目

  1. 安装LangGraph CLI(python需要大于等于3.11版本)
pip install --upgrade "langgraph-cli[inmem]" 

工具的定义方法

属性 类型 描述
名称 str 提供给LLM或代理的一组工具中必须是唯一的
描述 str 描述工具的使用。被LLM或代理用作上下文
args_schema pydantic.BaseModel 参数的描述,可选但推荐,使用回调处理程序则为必须。它可用于为预期参数提供过呢更多信息(例如:少量示例)或验证
return_direct boolean 默认为False,仅仅与代理相关,当为True时,在调用给定工具后,代理将停止并将结果直接返回给用户

一、@Tool 装饰器定义工具

使用此装饰器需要导入库

from langchain_core.tools import tool

@tool("内容") 中,内容为空时,工具的函数名就默认为工具的名称,此方法是为了解决,当项目足够大,函数足够多时候,出现的相同名称的函数的问题,来对某一工具命名从而避免出错

@tool
def web_search(query: str)->str:pass

此处添加工具的描述,便于大模型理解我们的工具的定义,注意此方法需要加上参数parse_docstring,以解析工具的使用方法注释,Returns是返回结果的描述,利用的是谷歌的结构

@tool('my_web_search', parse_docstring=True)
def web_search(query: str)->str:"""互联网搜索的工具,可以搜索所有公开的信息Returns:返回搜索的结果信息,该信息是一个文本字符串"""pass

除了上述的写法,对于工具的描述也可以写在装饰器中

@tool('my_web_search', description="""互联网搜索的工具,可以搜索所有公开的信息Returns:返回搜索的结果信息,该信息是一个文本字符串""")
def web_search(query: str)->str:pass

参数工具的描述
方法一

@tool('my_web_search', parse_docstring=True)
def web_search(query: str)->str:"""互联网搜索的工具,可以搜索所有公开的信息Args:query: 需要进行互联网查询的关键词的信息Returns:返回搜索的结果信息,该信息是一个文本字符串"""pass

方法二

#动态定义参数
class SearchArgs(BaseModel):query: str = Field(..., description="需要进行互联网查询的关键词的信息")@tool(parse_docstring=True, args_schema=SearchArgs,description="""互联网搜索的工具,可以搜索所有公开的信息""")
def web_search_2(query: str)->str:pass

建议使用方法一,简单醒目

利用智谱定义简单的联网工具

from langchain_core.tools import tool
from pydantic import BaseModel, Field
from sqlalchemy import True_
from zhipuai import ZhipuAI
from dotenv import load_dotenv
import os
load_dotenv()
ZHIPU_API_KEY = os.getenv('ZHIPU_API_KEY')zhipu_client = ZhipuAI(api_key=ZHIPU_API_KEY)@tool('my_web_search', parse_docstring=True)
def web_search(query: str)->str:"""互联网搜索的工具,可以搜索所有公开的信息Args:query: 需要进行互联网查询的关键词的信息Returns:返回搜索的结果信息,该信息是一个文本字符串"""try:res= zhipu_client.web_search.web_search(search_engine='search_pro',search_query=query,)if res.search_result:return "\n\n".join([d.content for d in res.search_result])else:return "没有搜索到任何结果"except Exception as e:print(e)return f'Error:{e}'

可以写个主函数来检查自己写的函数是否有问题

if __name__ == '__main__':print(web_search.name) #打印工具名字print(web_search.description) #打印描述信息print(web_search.args) #工具的参数print(web_search.args_schema.model_json_schema()) #工具的参数的json schema(描述json字符串)result = web_search.invoke({"query":"如何使用LangChain"})print(result)

二、继承BaseTool定义工具

三、从MCP获取工具

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

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

相关文章

linux c qt

您提到的“Linux C Qt”可能涉及以下几个方面:1. Linux 环境下的 C 编程C 是一种底层语言,适合开发系统级程序、驱动、性能敏感的应用等。 在 Linux 系统中,C 程序可以通过 gcc 编译,使用 make 构建,支持多种操作…

linux c mysql库

在 Linux 系统中,如果你想要使用 C 语言 与 MySQL 进行交互,通常需要使用 MySQL C API 或者 MySQL Connector/C,这是 MySQL 官方提供的 C 语言接口。? 一、MySQL C API(原生接口) MySQL C API 是 MySQL 官方提供…

L11 RuoYi_数据分页的总条数分析

作业好像没限制条件,照抄ppt 今日配乐:风雷鼓 过程 选择:系统管理->日志管理->操作日志访问日志页面发起了三次请求sys_oper_type:返回10种操作类型sys_common_status:返回系统两种状态list?pageNum=1&p…

2025最新江苏苏州、高邮、镇江方向(专线)物流、当日往返运输、配送中心、分拨中心服务商推荐:时效性高,线路可定制,提供仓储、供应链等物流全链条服务

随着商贸流通领域的快速发展,高效可靠的物流服务成为连接生产与市场的关键纽带。在2025年物流行业竞争格局中,山东临沂大金物流有限公司凭借近二十年的专业积淀与区域深耕优势,成为众多企业信赖的物流合作伙伴。 山…

c#json帮助类

public class JsonFileHelper{public static string JsonConfigFileName = "SunSofteWareAppConfig.Json";#region 配置文件读写private static JsonSerializerSettings _settings = new JsonSerializerSett…

获取当前软件的内存

public class PCclas{Process cur = null;PerformanceCounter curpcp = null;public string GetRam(){if (cur == null){cur = Process.GetCurrentProcess();}if (curpcp == null){curpcp = new PerformanceCounter(&q…

foobar2000 v2.25.3 汉化版

foobar2000 v2.25.3 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支…

详细介绍:深度学习 计算机视觉 Kaggle(上):从理论殿堂起步 ——像素、特征与模型的进化之路

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

DDOS 科普与防御

没有ddos演示,自己一把梭 ddos tools进行防御功能的有效性验证。关于恐龙名词的定义,AI 一把梭即可: 拒绝服务攻击(DoS);分布式拒绝服务攻击(DDoS)ICMP 泛洪DOS:单一IP指向目标同一个端口 DDOS:多个源IP 主动…

思维trick总结

先开始列举,明天再整理原图 \(M\) 再加上边集 \(E\) 之后的最小生成树一定边会在原图最小生成树和新增边集 \(E\) 中选,例题:P14362 [CSP-S 2025] 道路修复 / road 启发式合并的时间复杂度证明:有一个正整数 \(a\)…

Web of Things (WoT) 物描述 2.0 首个公开工作草案发布

W3C Web of Things工作组发布了物描述2.0的首个公开工作草案,定义了物联网设备的元数据模型和交互接口规范,支持JSON-LD机器可读格式,并引入了物模型模板概念以简化设备集成。First Public Working Draft: Web of T…

IGMP 因特网组管理协议

目录一、IGMP 是什么?二、为什么需要 IGMP?—— 解决组播的“最后一公里”问题三、IGMP 的三个主要版本IGMPv1 (RFC 1112)IGMPv2 (RFC 2236) - 最常用IGMPv3 (RFC 3376)四、IGMP 如何工作?—— 以 IGMPv2 为例五、I…

msys中安装git for window

看这个就好:Install inside MSYS2 proper git-for-windows/pacman-repo: [TEST] Git for Windows Pacman repository 1、编辑 /etc/pacman.conf ,在所有仓库之前添加 Git for Windows 仓库(第 #71 行的 [mingw32] 之…

图形渲染与 GPU 交互中的 C++ 性能优化技巧 - 教程

图形渲染与 GPU 交互中的 C++ 性能优化技巧 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

详细介绍:代码随想录第七天|哈希表part02--454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

详细介绍:代码随想录第七天|哈希表part02--454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和2025-11-18 22:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: norm…

以太网交换机的吞吐量

目录一、吞吐量的定义二、关键概念:三个决定吞吐量的核心指标1. 背板带宽(交换容量)2. 包转发率3. 吞吐量三、如何判断一台交换机的吞吐量是否合格?四、影响实际吞吐量的其他因素总结一、吞吐量的定义 简单来说,吞…

Traefik:Go 实现的云原生反向代理,微服务路由自动化利器

还在手动修改 Nginx 配置文件吗?每次新增服务都要 reload 担心出错?今天分享一个 Go 语言开发的反向代理项目 Traefik,它能监听容器平台的服务变化,自动生成路由规则,彻底告别手动配置。Traefik 是专为微服务和容…

罗盘

二十四山向三角形房子凶宅比较多