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

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

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.jsqmd.com/news/44021/

相关文章:

  • linux c qt
  • linux c mysql库
  • L11 RuoYi_数据分页的总条数分析
  • 2025最新江苏苏州、高邮、镇江方向(专线)物流、当日往返运输、配送中心、分拨中心服务商推荐:时效性高,线路可定制,提供仓储、供应链等物流全链条服务
  • c#json帮助类
  • 11.17 事务的隔离级别
  • 获取当前软件的内存
  • foobar2000 v2.25.3 汉化版
  • 详细介绍:深度学习 计算机视觉 Kaggle(上):从理论殿堂起步 ——像素、特征与模型的进化之路
  • 默认SVN忽略bin和obj文件夹,即使是Add也不默认勾选
  • DDOS 科普与防御
  • 思维trick总结
  • Web of Things (WoT) 物描述 2.0 首个公开工作草案发布
  • IGMP 因特网组管理协议
  • msys中安装git for window
  • 图形渲染与 GPU 交互中的 C++ 性能优化技巧 - 教程
  • 详细介绍:代码随想录第七天|哈希表part02--454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和
  • 以太网交换机的吞吐量
  • Traefik:Go 实现的云原生反向代理,微服务路由自动化利器
  • 罗盘
  • 第一章 语法基础——语法基础
  • 计算机网络中最短帧长的概念
  • Cypher语法
  • 2025江浙沪方向专线物流、(冷库)往返运输、智能仓储优选服务商推荐:深耕江苏苏州、高邮、镇江,覆盖全国及国际线路,供应链定制方案/当日往返物流/智能共享仓储/分拨中心
  • 【Wireshark数据分析实战】 - 指南
  • 【贪心】P9525 [JOIST 2022] 团队竞技 / Team Contest 题解
  • noip9
  • 常见的steam游戏的营销错误
  • MX Round 26 解题报告
  • linux c 编译命令