工具调用 (Tool Use)
工具调用 (Tool Use) 是让 LLM 在生成回复之外,主动决定调用外部 工具(搜索、数据库、API、shell、浏览器等)并把工具结果整合进答案 的能力。它把 LLM 从"能聊天的语言模型"升级为"能做事的工作流执行者", 是 AI Agent 的核心机制。
典型流程
- 工具注册:开发者定义可用工具(名称、描述、参数 schema)
- 模型决策:在 prompt 里看到任务后,模型决定是否调用工具、调用哪个
- 结构化返回:模型输出
{name, arguments}JSON(结构化输出) - 运行时执行:宿主代码执行工具调用(如 HTTP / SQL / shell)
- 结果回填:工具结果作为新 prompt 段喂回模型,模型继续推理或给最终答案
与 function calling 的区别
- Function calling:狭义,强调"调用一个有 schema 的函数"
- Tool use:广义,包括 function calling、retrieval、code execution、 browser automation、shell 等等
实际上业界经常混用——OpenAI 叫 "function calling",Anthropic 叫 "tool use", 本质上同一回事。
主流实现
- OpenAI function calling / tools API
- Anthropic tool use
- Google function calling (Gemini)
- Mistral tool calling
- Cohere tools API
- MCP (Model Context Protocol):开源标准化协议,让"工具"成为 跨厂商可移植的能力包
应用场景
Agent 工作流
- ReAct / ReWOO:reasoning + acting 循环
- Plan-and-execute:先列计划,再逐步调用工具
- Reflexion:调用后自我评估,必要时重新调用
信息获取
- Web search / RAG 检索:把工具结果作为 prompt 上下文
- 数据库查询:把 SQL 当工具
- 知识库 / 文档系统:查询公司内部 wiki / CRM
副作用类操作
- 发送邮件 / 下单 / 修改数据库 —— 这类工具需要 人类确认 步骤(human-in-the-loop)
- 代码执行 / shell:模型能跑 Python / bash
挑战
- 多步错误传播:一个工具调错,后面全部失败
- 幻觉式调用:模型可能编造工具名 / 参数
- 成本与延迟:每步工具调用都增加 token 消耗和等待时间
- 安全边界:工具能改数据库 / 发邮件,必须设计沙箱 + 确认流程
与 Structured Output 的关系
Tool use 本身就是结构化输出的一种应用:模型被强制输出
{name, arguments} JSON 形式,宿主代码解析后执行。
所以严格的 tool use 必须配 schema 严格模式(structured-output.md)。