十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LangChain 工具调用实战:规范定义、调用流程与完整代码示例

LangChain 工具调用实战:规范定义、调用流程与完整代码示例 一、核心概念Tool invoke 工具调用机制先理清两个核心关键词这是 LangChain 工具调用的底层基础Tool工具LangChain 中工具是对外部能力的封装通过tool装饰器或BaseTool子类定义包含功能描述和参数约束供 Agent 调用。invokeLangChain Runnable 接口的统一执行方法。AgentExecutor.invoke()是整个 Agent 执行的入口内部会驱动模型决策、工具调用、结果返回全流程。简单总结工具负责封装能力invoke 负责驱动执行。1.1 工具必须的两个标准化描述核心重点大模型无法自动识别工具功能和入参必须通过两个属性完成工具注册缺一不可docstring工具功能描述告诉模型「这个工具能做什么、什么时候调用」。args_schema参数结构约束自动从函数注解生成规范入参类型、必填项避免模型输出非法参数。1.2 工具调用触发逻辑Agent 基于消息流message驱动工具调用解析用户提问 历史对话消息。结合工具的 docstring 和 args_schema自主判断是否调用工具、调用哪个工具、传入什么参数。工具执行后结果返回给模型模型整理成自然语言回复用户。二、完整实战代码自定义标准化工具调用以下为可直接运行的 Python 代码基于 LangChain 最新稳定版实现「自定义工具 标准化注册 模型自动调用 invoke 执行」全流程。前置依赖安装pip install langchain langchain-openai python-dotenv完整业务代码from dotenv import load_dotenv import os from langchain_openai import ChatOpenAI from langchain.tools import tool from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain_core.prompts import ChatPromptTemplate 加载环境变量 load_dotenv() 检查关键环境变量 required_vars [OPENAI_API_KEY, OPENAI_BASE_URL] for var in required_vars: if not os.getenv(var): raise ValueError(f请设置环境变量 {var}) 1. 初始化大模型支持工具调用 llm ChatOpenAI( api_keyos.getenv(OPENAI_API_KEY), base_urlos.getenv(OPENAI_BASE_URL), modelgpt-3.5-turbo) 2. 自定义标准化工具 通过 tool 装饰器docstring 参数类型注解自动生成 args_schema tool def calculate_distance(km: float) - str: 公里转英里工具用于距离单位换算。 当用户需要将公里转换为英里时使用。 Args: km: 公里数值浮点类型必填 Returns: 换算后的英里结果字符串 mile km * 0.621371 return f{km} 公里 {round(mile, 2)} 英里 注册工具列表 tools [calculate_distance] 3. 构建 Agent 提示词模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个专业的工具调用助手优先使用工具处理用户的数值计算、单位换算问题。), (user, {input}), (placeholder, {agent_scratchpad}) ]) 4. 创建工具调用 Agent agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor( agentagent, toolstools, verboseFalse, # 生产环境建议关闭 handle_parsing_errorsTrue) 5. 执行调用invoke 驱动整个流程 if name main: try: res agent_executor.invoke({input: 帮我换算100公里等于多少英里}) print(最终输出结果, res[output]) except Exception as e: print(f调用失败{e})三、代码核心逻辑解析3.1 工具标准化原理通过tool装饰器修饰函数后LangChain 会自动完成函数注释docstring自动转为工具描述供模型理解功能。函数参数类型注解自动生成 args_schema基于 Pydantic约束入参格式。工具自动适配 LangChain 工具调用协议可被create_tool_calling_agent识别调度。3.2 invoke 执行机制代码中agent_executor.invoke()是统一执行入口底层流程用户输入 → 模型判断需调用工具 → 按工具 schema 生成结构化参数 → 工具执行tool.invoke → 返回结果给模型二次整理 → 输出最终回复3.3 扩展MCP 协议的补充说明MCPModel Context Protocol是由 Anthropic 推出的开放标准协议用于大模型与外部工具、数据源之间的标准化通信。LangChain 社区已提供 langchain-mcp-adapters 库可将 MCP 服务端工具无缝转换为 LangChain 工具。若需使用 MCP 协议需额外安装 langchain-mcp-adapters通过 MCPToolkit 连接 MCP Server其余调用逻辑与本文一致。
返回列表