玄同 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数据库操作数据库SQLDatabaseTool2.2 内置工具使用示例fromlangchain.toolsimportPythonREPLToolfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAI# 1. 初始化工具python_replPythonREPLTool()# 2. 初始化模型modelChatOpenAI(modelgpt-4o-mini)# 3. 创建包含工具信息的promptpromptChatPromptTemplate.from_template(你是一个助手可以使用Python执行计算。\n用户问题: {question}\n如果需要计算请使用Python工具。)# 4. 创建链chainprompt|model# 5. 执行resultchain.invoke({question:计算123...100的和})print(result.content)三、自定义工具开发3.1 使用 tool 装饰器tool装饰器是创建自定义工具的最简单方式fromlangchain_core.toolsimporttooltooldefmultiply(a:int,b:int)-int:Multiplies a and b.returna*btooldefdivide(a:int,b:int)-float:Divides a by b.ifb0:raiseValueError(除数不能为零)returna/b# 调用工具resultmultiply.invoke({a:2,b:3})print(result)# 输出: 6# 批处理resultsmultiply.batch([{a:2,b:3},{a:4,b:5}])print(results)# 输出: [6, 20]3.2 继承 BaseTool 类对于更复杂的工具可以继承BaseTool类fromlangchain_core.toolsimportBaseToolfromtypingimportOptional,Type,TypeVar,Any TTypeVar(T)classCustomTool(BaseTool):name:strcustom_tooldescription:str执行自定义操作def_run(self,input_text:str,**kwargs:Any)-str:执行工具的核心逻辑# 实现工具逻辑returnf处理结果:{input_text.upper()}# 使用自定义工具toolCustomTool()resulttool.invoke({input_text:hello world})print(result)# 输出: 处理结果: HELLO WORLD3.3 使用 ToolNode对于需要集成到 LangGraph 中的工具可以使用ToolNodefromlanggraph.prebuiltimportToolNode# 1. 创建工具列表tools[multiply,divide]# 2. 创建工具节点tool_nodeToolNode(tools)# 3. 在 LangGraph 中使用# (将在后续博客中详细介绍)四、工具包集成4.1 工具包概述工具包Toolkit是一组相关工具的集合方便开发者快速集成特定领域的功能GitHubToolkitGitHub 操作SlackToolkitSlack 消息发送GmailToolkit邮件发送和接收GoogleCalendarToolkit日历管理4.2 工具包使用示例以GitHubToolkit为例fromlangchain_community.agent_toolkits.github.toolkitimportGitHubToolkitfromlangchain_community.agent_toolkits.github.utilitiesimportGitHubAPIWrapper# 1. 初始化 GitHub API 包装器githubGitHubAPIWrapper(github_repositorylangchain-ai/langchain,github_tokenyour-github-token)# 2. 创建工具包toolkitGitHubToolkit.from_github_api_wrapper(github)# 3. 获取工具列表toolstoolkit.get_tools()print([tool.namefortoolintools])# 4. 使用工具issues_toolnext(toolfortoolintoolsiftool.namegithub-search-issues)resultissues_tool.invoke({query:bug})print(result)五、工具调用最佳实践5.1 工具设计原则明确的描述工具描述应该清晰说明工具的功能和参数错误处理工具应该妥善处理异常情况参数验证对输入参数进行验证返回格式返回结构化的结果便于模型理解5.2 工具安全性权限控制限制工具的访问权限输入验证验证用户输入防止恶意代码输出限制限制工具输出的大小和内容审计日志记录工具的使用情况5.3 工具性能优化缓存对频繁调用的结果进行缓存异步使用异步执行提高性能批处理对多个相似请求进行批处理超时设置为工具设置合理的超时时间六、实战案例6.1 构建一个天气查询工具fromlangchain_core.toolsimporttoolimportrequeststooldefget_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}的天气信息# 测试工具resultget_weather.invoke({city:北京})print(result)# 输出: 北京的天气: 晴15-25°C6.2 构建一个智能体使用工具fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAI# 1. 初始化模型modelChatOpenAI(modelgpt-4o-mini)# 2. 准备工具tools[get_weather,multiply]# 3. 创建智能体agentcreate_agent(model,tools)# 4. 执行任务resultagent.invoke({messages:[{role:user,content:北京的天气怎么样}]})print(result[messages][-1][content])# 5. 执行需要计算的任务resultagent.invoke({messages:[{role:user,content:345乘以678等于多少}]})print(result[messages][-1][content])七、应用场景分析7.1 适合使用工具的场景信息获取需要实时信息或外部数据计算密集需要复杂计算或数据分析系统交互需要操作文件、数据库或API代码执行需要运行代码或脚本多步骤任务需要多个工具协作完成7.2 工具系统的局限性API依赖依赖外部服务的可用性速率限制可能受到API调用频率限制安全性需要谨慎处理用户输入复杂性工具过多会增加模型的决策难度八、总结LangChain 1.0 的工具系统通过统一的抽象和丰富的内置工具为开发者提供了构建复杂智能体应用的强大能力。通过本文的介绍开发者可以掌握工具的创建和使用方法实现与外部系统的无缝集成构建具备实际业务能力的AI应用。在后续的博客中我们将介绍如何利用这些工具构建完整的智能体应用以及如何通过 LangGraph 实现更复杂的工作流。