当前位置: 首页 > 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.gsyq.cn/news/53566.html

相关文章:

  • linux c qt
  • 获取当前软件的内存
  • foobar2000 v2.25.3 汉化版
  • 默认SVN忽略bin和obj文件夹,即使是Add也不默认勾选
  • DDOS 科普与防御
  • msys中安装git for window
  • Traefik:Go 实现的云原生反向代理,微服务路由自动化利器
  • 第一章 语法基础——语法基础
  • Cypher语法
  • 2025江浙沪方向专线物流、(冷库)往返运输、智能仓储优选服务商推荐:深耕江苏苏州、高邮、镇江,覆盖全国及国际线路,供应链定制方案/当日往返物流/智能共享仓储/分拨中心
  • 【Wireshark数据分析实战】 - 指南
  • 树上求值 tree
  • DL 2 自动微分模块
  • 《计算机网络》学习心得
  • 2025防晒品牌TOP8精准推荐:按肤质与场景科学选择
  • 黑马程序员SpringCloud微服务开发与实战- Docker基础-02
  • 老友记第一季人物表
  • make指定安装目录
  • 【转载】银河麒麟(Kylin)操作系统上移植Qt 5.6.3与QtCreator 4.2.0的完整指南
  • wsl 与 docker相关内容
  • 2025.11.18模拟赛
  • 游戏联运模式与统一包模式
  • 日总结 28
  • 实用指南:AI: 生成Android自我学习路线规划与实战
  • 《算法设计与分析》第三章学习记录
  • #题解#洛谷 P3029 Cow Lineup S #双指针#离散化#
  • 如何创建你的百Google度!!(实现双搜索引擎页面)
  • P7152 [USACO20DEC] Bovine Genetics G
  • CF1592E Bored Bakry
  • 如何在ISA-95体系中采用Apache Camel + MQTT Broker衔接L3与L4 Legacy应用