Tool Calling(工具调用)技术详解

总结摘要
Tool Calling 是让大语言模型(LLM)能够调用外部工具、函数或 API 的技术机制。模型本身不执行代码,而是输出一段结构化的'调用指令',由宿主程序解析并执行,再把结果返回给模型继续推理。

什么是 Tool Calling?

Tool Calling 是让大语言模型(LLM)能够调用外部工具、函数或 API 的技术机制。模型本身不执行代码,而是输出一段结构化的"调用指令",由宿主程序解析并执行,再把结果返回给模型继续推理。


核心流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
用户输入
   
LLM 判断:是否需要工具?
                       
需要                 不需要
                       
输出结构化调用         直接回答
{ tool: "...",
  args: {...} }
   
宿主程序执行工具
   
返回执行结果给 LLM
   
LLM 整合结果,生成最终回答

这个过程可以多轮循环,模型可以连续调用多个工具。


技术实现原理

1. 工具定义(Tool Schema)

工具以 JSON Schema 格式描述,注入进系统提示或专用字段:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
  "name": "search_web",
  "description": "搜索互联网上的最新信息",
  "parameters": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "搜索关键词"
      },
      "max_results": {
        "type": "integer",
        "description": "返回结果数量",
        "default": 5
      }
    },
    "required": ["query"]
  }
}

2. 模型输出格式

模型识别到需要工具时,输出特殊格式而非普通文本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "role": "assistant",
  "content": null,
  "tool_calls": [
    {
      "id": "call_abc123",
      "type": "function",
      "function": {
        "name": "search_web",
        "arguments": "{\"query\": \"2026年AI最新进展\"}"
      }
    }
  ]
}

3. 结果回传

1
2
3
4
5
{
  "role": "tool",
  "tool_call_id": "call_abc123",
  "content": "搜索结果:[...具体内容...]"
}

三种调用模式

模式说明适用场景
单次调用一次请求用一个工具简单查询、单步任务
并行调用同时发起多个工具请求互相独立的子任务
链式调用上一个工具结果决定下一步复杂推理、多步骤流程

关键设计考量

✅ 工具描述要清晰

模型通过 description 判断何时调用哪个工具,描述模糊会导致:

  • 该调用时不调用
  • 不该调用时乱调用

✅ 参数校验与错误处理

1
2
3
4
5
try:
    result = execute_tool(tool_name, args)
except ToolError as e:
    # 将错误信息返回给模型,让它自行纠错
    return {"error": str(e)}

✅ 安全边界

  • 只读工具 vs 写入/副作用工具(删文件、发邮件)→ 后者需要人工确认
  • 防止提示注入(工具返回值中藏有恶意指令)
  • 工具调用的权限隔离

主流框架实现对比

框架/平台实现方式特点
OpenAI Function Callingtools 参数 + tool_choice工业标准,兼容性最广
Anthropic Tool Usetools 字段支持并行调用,XML格式解析
LangChain Tools@tool 装饰器生态丰富,Agent框架完善
LlamaIndexFunctionTool / QueryEngineToolRAG 场景优化
MCP(Model Context Protocol)标准化协议跨平台工具互操作

MCP:工具调用的标准化协议

Model Context Protocol(MCP) 是 Anthropic 2024年推出的开放标准,目标是把工具调用从"各家私有实现"变成"通用插头":

1
2
3
4
5
6
7
Claude / GPT / Gemini
        ↕  MCP 协议
   MCP Server(工具提供方)
  ├── 文件系统
  ├── 数据库
  ├── 第三方 API
  └── 自定义函数

优势:一次实现,多个 AI 模型都能调用。


实际应用场景

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
💬 用户:"帮我分析一下最近一个月的销售数据"

🤖 模型思考:需要读取数据库 + 做计算 + 生成图表

📞 调用链:
  1. query_database(sql="SELECT * FROM sales WHERE date > ...")
  2. calculate_stats(data=<上一步结果>)
  3. generate_chart(stats=<上一步结果>, type="line")

✅ 最终输出:整合所有结果,给用户一份完整分析报告

局限与挑战

挑战说明
幻觉调用模型可能调用不存在的工具或传入错误参数
工具选择歧义多个相似工具时模型可能选错
延迟叠加多轮工具调用会显著增加响应时间
上下文膨胀工具返回大量数据会占满上下文窗口
副作用管控不可逆操作需要人工介入确认

一句话总结

Tool Calling 是 LLM 从"语言生成器"进化为"智能代理(Agent)“的核心基础设施 ——它让模型能感知外部世界、操作外部系统,真正解决"知道但做不到"的问题。