LangChain之Tool组件深度解析

📅 发布时间:2026/7/8 3:42:00 👁️ 浏览次数:
LangChain之Tool组件深度解析
在现代智能代理系统中工具Tool是增强 LLM 能力的重要组件。LangChain 提供了完善的Tool 体系使开发者能够在对话和工作流中安全、高效地调用外部功能、访问状态与上下文、以及执行复杂操作。本文将从定义、运行时访问、状态管理、错误处理、工作流集成等方面对 LangChain 的 Tool 组件进行系统分析。1. 工具的定义与基本使用1.1 基础工具定义LangChain 中最简单的工具定义方式是通过tool装饰器。工具的函数文档字符串docstring会自动成为工具的描述帮助模型理解使用场景。fromlangchain.toolsimporttooltooldefsearch_database(query:str,limit:int10)-str:在客户数据库中搜索与查询匹配的记录。returnfFound{limit}results for {query}关键点工具必须使用类型提示type hints以定义输入 schema。文档字符串应简明、信息充分以便模型理解工具用途。1.2 自定义工具属性工具名称默认取函数名可通过装饰器参数覆盖。工具描述可覆盖自动生成的描述为模型提供更清晰指引。tool(calculator,description执行算术运算。用于任何数学问题。)defcalc(expression:str)-str:returnstr(eval(expression))1.3 高级输入定义工具支持复杂输入结构可使用Pydantic 模型或JSON Schema定义参数。frompydanticimportBaseModel,FieldfromtypingimportLiteralclassWeatherInput(BaseModel):location:strField(description城市名称或坐标)units:Literal[celsius,fahrenheit]Field(defaultcelsius,description温度单位)include_forecast:boolField(defaultFalse,description是否包含未来5天的预报)tool(args_schemaWeatherInput)defget_weather(location:str,units:strcelsius,include_forecast:boolFalse)-str:temp22ifunitscelsiuselse72returnf当前天气在{location}:{temp}度优势自动验证输入类型和必填字段支持复杂参数结构提高工具可用性和可靠性2. 运行时访问与状态管理LangChain 工具在执行时可以访问丰富的运行时信息通过ToolRuntime注入。它包含组件描述使用场景State短期内存存在于当前对话消息历史、计数器、自定义字段Context不可变上下文用户 ID、会话信息、应用配置Store长期存储跨会话用户数据、知识库Stream Writer实时输出长任务进度反馈ConfigRunnable 配置回调、标签、元数据Tool Call ID当前调用唯一标识日志追踪、调用关联2.1 短期状态State短期状态存在于当前对话中可访问消息历史和自定义字段tooldefget_last_user_message(runtime:ToolRuntime)-str:messagesruntime.state[messages]formessageinreversed(messages):ifisinstance(message,HumanMessage):returnmessage.contentreturn未找到用户消息状态更新可通过Command对象fromlanggraph.typesimportCommandtooldefset_user_name(new_name:str)-Command:returnCommand(update{user_name:new_name})2.2 上下文ContextContext 提供不可变配置用于用户身份、会话信息等dataclassclassUserContext:user_id:strtooldefget_account_info(runtime:ToolRuntime[UserContext])-str:user_idruntime.context.user_idreturnf当前用户 ID:{user_id}特点不可修改在工具调用时自动注入可个性化响应2.3 长期存储Store长期存储用于跨会话保存数据支持namespace/key管理tooldefsave_user_info(user_id:str,user_info:dict,runtime:ToolRuntime)-str:runtime.store.put((users,),user_id,user_info)return用户信息已保存tooldefget_user_info(user_id:str,runtime:ToolRuntime)-str:inforuntime.store.get((users,),user_id)returnstr(info.value)ifinfoelse未知用户生产环境推荐使用持久化存储如PostgresStore而非内存存储。2.4 实时流写入Stream Writer通过runtime.stream_writer可在工具执行过程中发送实时信息tooldefget_weather(city:str,runtime:ToolRuntime)-str:writerruntime.stream_writer writer(f查询城市:{city}数据中...)writer(f已获取{city}的数据)returnf{city}的天气晴朗用途提升用户体验展示任务进度或中间结果。3. ToolNode工具在工作流中的集成ToolNode是 LangGraph 中的预构建节点用于执行工具支持并行执行多个工具错误处理与自定义错误消息状态、上下文、存储的自动注入fromlanggraph.prebuiltimportToolNode tool_nodeToolNode([search,calculator],handle_tool_errorsTrue)3.1 条件路由与状态注入tools_condition可根据 LLM 是否调用工具实现条件路由builder.add_conditional_edges(llm,tools_condition)工具可直接访问当前图状态tooldefget_message_count(runtime:ToolRuntime)-str:returnf消息总数:{len(runtime.state[messages])}4. 预构建工具与服务器端工具LangChain 提供大量预构建工具和工具包如 Web 搜索、数据库访问、代码解析无需自定义即可集成。部分聊天模型内置服务器端工具如 Web 搜索或代码解释器由模型提供方执行无需开发者托管。5. 总结与实践价值LangChain 的 Tool 组件通过工具定义、运行时访问、状态管理、错误处理和工作流集成提供了一个功能强大、灵活且安全的工具体系。短期状态适用于会话级数据上下文提供不可变配置信息实现个性化长期存储支持跨会话持久化流写入提升用户体验ToolNode方便将工具集成到复杂工作流这种设计使代理能够在保持可控性的同时执行复杂任务是构建高级智能代理和多步骤工作流的核心基础。