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

LangChain 1.0 工具系统:从内置工具到自定义工具开发

玄同 765

大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计)

CSDN · 个人主页 | GitHub · Follow


关于作者

  • 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调
  • 技术栈:Python | RAG (LangChain / Dify + Milvus) | FastAPI + Docker
  • 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案

「让 AI 交互更智能,让技术落地更高效」
欢迎技术探讨与项目合作,解锁大模型与智能交互的无限可能!


一、工具系统概述

1.1 工具系统核心概念

工具系统提供统一 Tool 抽象,支持所有主流模型的 Tool Calling,深度集成 LangGraph,构建可执行 agent 环境的关键能力层。工具系统是智能体与外部世界交互的桥梁,使模型能够执行各种操作,扩展其能力边界。

核心组件:

  • 内置工具:搜索、计算、代码执行等100+工具
  • 自定义工具:@tool装饰器 / BaseTool / ToolNode
  • 工具包:Toolkit(如GitHub、Slack集成)

1.2 工具调用流程

用户输入

模型分析

需要工具?

选择工具

执行工具

获取结果

模型总结

返回答案

1.3 工具系统架构

层级组件功能实现方式
抽象层BaseTool工具基类继承实现
实现层具体工具工具逻辑@tool装饰器、自定义类
集成层Toolkit工具集合组合多个工具
执行层ToolNode工具执行LangGraph节点

1.4 工具调用的优势

优势具体体现应用场景
扩展能力调用外部API和服务集成第三方系统
实时数据联网搜索获取最新信息新闻、天气、股价
复杂计算执行代码和数学运算数据分析、科学计算
系统交互操作文件和数据库数据处理、持久化
任务自动化多步骤任务执行工作流自动化

二、内置工具使用

2.1 常用内置工具

LangChain 提供了丰富的内置工具,涵盖多种常见场景:

工具类型功能描述示例
搜索工具联网搜索信息GoogleSearchTool
计算工具执行数学计算CalculatorTool
代码执行执行Python代码PythonREPLTool
文件操作读写文件FileSystemTool
数据库操作数据库SQLDatabaseTool

2.2 内置工具使用示例

fromlangchain.toolsimportPythonREPLToolfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAI# 1. 初始化工具python_repl=PythonREPLTool()# 2. 初始化模型model=ChatOpenAI(model="gpt-4o-mini")# 3. 创建包含工具信息的promptprompt=ChatPromptTemplate.from_template("你是一个助手,可以使用Python执行计算。\n""用户问题: {question}\n""如果需要计算,请使用Python工具。")# 4. 创建链chain=prompt|model# 5. 执行result=chain.invoke({"question":"计算1+2+3+...+100的和"})print(result.content)

三、自定义工具开发

3.1 使用 @tool 装饰器

@tool装饰器是创建自定义工具的最简单方式:

fromlangchain_core.toolsimporttool@tooldefmultiply(a:int,b:int)->int:"""Multiplies a and b."""returna*b@tooldefdivide(a:int,b:int)->float:"""Divides a by b."""ifb==0:raiseValueError("除数不能为零")returna/b# 调用工具result=multiply.invoke({"a":2,"b":3})print(result)# 输出: 6# 批处理results=multiply.batch([{"a":2,"b":3},{"a":4,"b":5}])print(results)# 输出: [6, 20]

3.2 继承 BaseTool 类

对于更复杂的工具,可以继承BaseTool类:

fromlangchain_core.toolsimportBaseToolfromtypingimportOptional,Type,TypeVar,Any T=TypeVar('T')classCustomTool(BaseTool):name:str="custom_tool"description:str="执行自定义操作"def_run(self,input_text:str,**kwargs:Any)->str:"""执行工具的核心逻辑"""# 实现工具逻辑returnf"处理结果:{input_text.upper()}"# 使用自定义工具tool=CustomTool()result=tool.invoke({"input_text":"hello world"})print(result)# 输出: 处理结果: HELLO WORLD

3.3 使用 ToolNode

对于需要集成到 LangGraph 中的工具,可以使用ToolNode

fromlanggraph.prebuiltimportToolNode# 1. 创建工具列表tools=[multiply,divide]# 2. 创建工具节点tool_node=ToolNode(tools)# 3. 在 LangGraph 中使用# (将在后续博客中详细介绍)

四、工具包集成

4.1 工具包概述

工具包(Toolkit)是一组相关工具的集合,方便开发者快速集成特定领域的功能:

  • GitHubToolkit:GitHub 操作
  • SlackToolkit:Slack 消息发送
  • GmailToolkit:邮件发送和接收
  • GoogleCalendarToolkit:日历管理

4.2 工具包使用示例

GitHubToolkit为例:

fromlangchain_community.agent_toolkits.github.toolkitimportGitHubToolkitfromlangchain_community.agent_toolkits.github.utilitiesimportGitHubAPIWrapper# 1. 初始化 GitHub API 包装器github=GitHubAPIWrapper(github_repository="langchain-ai/langchain",github_token="your-github-token")# 2. 创建工具包toolkit=GitHubToolkit.from_github_api_wrapper(github)# 3. 获取工具列表tools=toolkit.get_tools()print([tool.namefortoolintools])# 4. 使用工具issues_tool=next(toolfortoolintoolsiftool.name=="github-search-issues")result=issues_tool.invoke({"query":"bug"})print(result)

五、工具调用最佳实践

5.1 工具设计原则

  • 明确的描述:工具描述应该清晰说明工具的功能和参数
  • 错误处理:工具应该妥善处理异常情况
  • 参数验证:对输入参数进行验证
  • 返回格式:返回结构化的结果,便于模型理解

5.2 工具安全性

  • 权限控制:限制工具的访问权限
  • 输入验证:验证用户输入,防止恶意代码
  • 输出限制:限制工具输出的大小和内容
  • 审计日志:记录工具的使用情况

5.3 工具性能优化

  • 缓存:对频繁调用的结果进行缓存
  • 异步:使用异步执行提高性能
  • 批处理:对多个相似请求进行批处理
  • 超时设置:为工具设置合理的超时时间

六、实战案例

6.1 构建一个天气查询工具

fromlangchain_core.toolsimporttoolimportrequests@tooldefget_weather(city:str)->str:"""获取指定城市的天气信息"""# 这里使用模拟数据,实际应用中可以调用真实的天气APIweather_data={"北京":"晴,15-25°C","上海":"多云,18-28°C","广州":"阴,22-30°C"}ifcityinweather_data:returnf"{city}的天气:{weather_data[city]}"else:returnf"抱歉,暂无法获取{city}的天气信息"# 测试工具result=get_weather.invoke({"city":"北京"})print(result)# 输出: 北京的天气: 晴,15-25°C

6.2 构建一个智能体使用工具

fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI# 1. 初始化模型model=ChatOpenAI(model="gpt-4o-mini")# 2. 准备工具tools=[get_weather,multiply]# 3. 创建智能体agent=create_agent(model,tools)# 4. 执行任务result=agent.invoke({"messages":[{"role":"user","content":"北京的天气怎么样?"}]})print(result["messages"][-1]["content"])# 5. 执行需要计算的任务result=agent.invoke({"messages":[{"role":"user","content":"345乘以678等于多少?"}]})print(result["messages"][-1]["content"])

七、应用场景分析

7.1 适合使用工具的场景

  • 信息获取:需要实时信息或外部数据
  • 计算密集:需要复杂计算或数据分析
  • 系统交互:需要操作文件、数据库或API
  • 代码执行:需要运行代码或脚本
  • 多步骤任务:需要多个工具协作完成

7.2 工具系统的局限性

  • API依赖:依赖外部服务的可用性
  • 速率限制:可能受到API调用频率限制
  • 安全性:需要谨慎处理用户输入
  • 复杂性:工具过多会增加模型的决策难度

八、总结

LangChain 1.0 的工具系统通过统一的抽象和丰富的内置工具,为开发者提供了构建复杂智能体应用的强大能力。通过本文的介绍,开发者可以掌握工具的创建和使用方法,实现与外部系统的无缝集成,构建具备实际业务能力的AI应用。

在后续的博客中,我们将介绍如何利用这些工具构建完整的智能体应用,以及如何通过 LangGraph 实现更复杂的工作流。

http://www.jsqmd.com/news/346351/

相关文章:

  • 2026美国旅游全流程攻略:行程案例与机票预订指南 - 资讯焦点
  • 2026年早强剂外加剂供应商推荐,帮助您快速找到合适的批发商 - 睿易优选
  • 2026匠心制造:探秘高品质酒石酸氢胆碱生产商济南亚西亚药业有限公司 - 资讯焦点
  • LangChain 1.0 记忆系统:会话管理与长期记忆存储
  • 基于Java和Html的在线考试管理系统开题报告
  • Antigravity 使用 LLDB 调试 Qt6 MinGW
  • Java做人工智能:JBoltAI框架多模态与OCR技术解度
  • 在线教育互动课堂开发实战|从技术选型到高互动体验打造
  • 广州雅思封闭营哪家环境好、管理严?2026寒假机构避坑指南 - 讯息观点
  • 十大正规股票配资平台靠谱吗:从实盘交易与口碑看 - 资讯焦点
  • 静态住宅ISP代理:企业如何选择住宅代理IP?2026深度解析指南
  • 18-iptables防火墙
  • 狂飙的 165k Star:OpenClaw 开启个人 AGI 时代,让 AI 真正“接管”你的电脑
  • 长沙本地生活代运营榜:三十六行长沙分公司 9.99 分领跑 - 野榜数据排行
  • 豆瓣电影数据分析可视化系统 基于Python Flask+MySQL实现多维度电影数据洞察
  • 同程国际航班变更通知体系深度解析:技术、渠道与服务的全流程保障 - 资讯焦点
  • 用Python来学微积分23-微分中值定理 - 详解
  • 2026上海财税公司推荐|靠谱合规,口碑优选高性价比 - 品牌智鉴榜
  • PyTorch DDP官方文档学习笔记(核心干货版)
  • 2026年蚌埠蚌山区优质装修公司综合评估与推荐 - 2026年企业推荐榜
  • 2026论文通关指南:5款降重降AI工具实测,谁是Turnitin的克星? - 品牌观察员小捷
  • 2026年口碑好的FCL快速限流器/DDX1短路电流限制器厂家实力及用户口碑排行榜 - 深度智识库
  • 2026国内最新出国留/1+3/2+2/3+1/2+3/HND项目TOP5推荐:广东等地优质机构权威榜单发布,多元模式适配英澳等国留学需求 - 品牌推荐2026
  • 价格波动不踩坑,履约有保障——同程凭体系化机制,筑牢出行安心防线 - 资讯焦点
  • 权威榜单|接地电阻测试仪行业十大品牌推荐(2026排行榜) - 品牌推荐大师1
  • 四大旅行平台价格波动相关服务机制对比分析 - 资讯焦点
  • 2026年口碑优秀的FCL快速限流器/DDX1短路电流限制器厂家实力及用户口碑综合评述 - 深度智识库
  • 三家股票配资平台哪家安全靠谱?实测推荐正规实盘交易公司 - 资讯焦点
  • gpg加密命令
  • [信息论与编码理论专题-26]:信息如何被量化的?它的意义以及用途?