Tool Calling(工具调用)技术详解
总结摘要
Tool Calling 是让大语言模型(LLM)能够调用外部工具、函数或 API 的技术机制。模型本身不执行代码,而是输出一段结构化的'调用指令',由宿主程序解析并执行,再把结果返回给模型继续推理。
什么是 Tool Calling?
Tool Calling 是让大语言模型(LLM)能够调用外部工具、函数或 API 的技术机制。模型本身不执行代码,而是输出一段结构化的"调用指令",由宿主程序解析并执行,再把结果返回给模型继续推理。
核心流程
这个过程可以多轮循环,模型可以连续调用多个工具。
技术实现原理
1. 工具定义(Tool Schema)
工具以 JSON Schema 格式描述,注入进系统提示或专用字段:
| |
2. 模型输出格式
模型识别到需要工具时,输出特殊格式而非普通文本:
3. 结果回传
三种调用模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 单次调用 | 一次请求用一个工具 | 简单查询、单步任务 |
| 并行调用 | 同时发起多个工具请求 | 互相独立的子任务 |
| 链式调用 | 上一个工具结果决定下一步 | 复杂推理、多步骤流程 |
关键设计考量
✅ 工具描述要清晰
模型通过 description 判断何时调用哪个工具,描述模糊会导致:
- 该调用时不调用
- 不该调用时乱调用
✅ 参数校验与错误处理
✅ 安全边界
- 只读工具 vs 写入/副作用工具(删文件、发邮件)→ 后者需要人工确认
- 防止提示注入(工具返回值中藏有恶意指令)
- 工具调用的权限隔离
主流框架实现对比
| 框架/平台 | 实现方式 | 特点 |
|---|---|---|
| OpenAI Function Calling | tools 参数 + tool_choice | 工业标准,兼容性最广 |
| Anthropic Tool Use | tools 字段 | 支持并行调用,XML格式解析 |
| LangChain Tools | @tool 装饰器 | 生态丰富,Agent框架完善 |
| LlamaIndex | FunctionTool / QueryEngineTool | RAG 场景优化 |
| MCP(Model Context Protocol) | 标准化协议 | 跨平台工具互操作 |
MCP:工具调用的标准化协议
Model Context Protocol(MCP) 是 Anthropic 2024年推出的开放标准,目标是把工具调用从"各家私有实现"变成"通用插头":
优势:一次实现,多个 AI 模型都能调用。
实际应用场景
局限与挑战
| 挑战 | 说明 |
|---|---|
| 幻觉调用 | 模型可能调用不存在的工具或传入错误参数 |
| 工具选择歧义 | 多个相似工具时模型可能选错 |
| 延迟叠加 | 多轮工具调用会显著增加响应时间 |
| 上下文膨胀 | 工具返回大量数据会占满上下文窗口 |
| 副作用管控 | 不可逆操作需要人工介入确认 |
一句话总结
Tool Calling 是 LLM 从"语言生成器"进化为"智能代理(Agent)“的核心基础设施 ——它让模型能感知外部世界、操作外部系统,真正解决"知道但做不到"的问题。