Ch14 Agent原理修订于 二〇二六年七月六日

概念-ToolUse

一句话理解

Tool Use是Anthropic对Function Calling的叫法——模型选择并调用外部工具以获取实时信息或执行操作。两者本质相同(JSON Schema + 结构化调用),但Tool Use在工具定义结构、错误处理、流式调用等方面有独特设计。

Tool Use = Function Calling的本质

Tool Use和Function Calling是同一概念的不同实现,核心机制完全一致:

  1. 定义工具:用JSON Schema描述工具的名称、功能、参数
  2. 模型选择:模型判断是否需要调用工具,需要哪个工具
  3. 结构化输出:模型返回工具名+参数JSON,而非自然语言
  4. 代码执行:开发者代码执行实际工具调用
  5. 结果返回:工具执行结果返回给模型,模型生成最终回答

Tool Use的独特设计

工具定义更结构化

Anthropic的Tool Use工具定义采用更严格的结构化格式:

{
  "name": "get_weather",
  "description": "Get the current weather for a specific city",
  "input_schema": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "City name, e.g. 'San Francisco, CA'"
      },
      "unit": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "description": "Temperature unit"
      }
    },
    "required": ["city"]
  }
}

关键特征:

  • input_schema替代了OpenAI的parameters字段
  • 对description的要求更高——模型完全靠描述理解工具
  • enum约束更加明确

支持并行工具调用

Claude可以同时发起多个独立的工具调用,无需等待彼此的结果:

用户: "比较旧金山和纽约的天气"
→ Claude同时调用:
  - get_weather(city="San Francisco", unit="celsius")
  - get_weather(city="New York", unit="celsius")
→ 两个结果都返回后,Claude生成对比回答

流式工具调用

Claude支持在流式输出中增量返回工具调用。开发者在收到content_block_start(tool_use类型)后,可以逐步接收工具调用的参数,而不用等完整响应。

流式工具调用的三种事件类型:

事件类型说明时机
content_block_start开始一个新的tool_use块工具调用开始
content_block_delta增量工具调用参数参数逐步传输
content_block_stop工具调用块结束参数传输完成

工具设计最佳实践

描述要清晰

模型完全依赖工具描述来决定何时调用、如何调用。描述应包含:

  1. 工具用途:一句话说明这个工具做什么
  2. 使用场景:什么时候应该用这个工具
  3. 参数说明:每个参数的含义、格式、示例
  4. 约束条件:参数的限制和默认值

参数要约束

使用enum、pattern、minLength等JSON Schema约束来限制参数值范围,减少模型传错参数的概率。

错误处理

工具调用可能失败,需要在工具定义中告诉模型如何处理错误:

{
  "name": "search_database",
  "description": "Search the database. If no results found, returns empty array. Do NOT retry with the same query."
}

工具数量控制

工具数量适用场景注意事项
1-5个专用Agent模型选择准确率高
5-20个通用Agent需要清晰的描述区分
20+个复杂平台建议用工具分组或动态加载

Tool Use vs Function Calling 详细对比

维度Tool Use (Anthropic)Function Calling (OpenAI)
提出时间2024年3月2023年6月
工具定义tools数组 + input_schemafunctions数组 + parameters
并行调用原生支持,自动判断独立性支持(parallel_tool_calls)
流式调用增量content_block事件delta function_call事件
强制使用工具tool_choice参数tool_choice参数
停止原因stop_reason: "tool_use"finish_reason: "tool_calls"
工具结果回传tool_result content blocktool role message
文档质量详细,有最佳实践指南详细,生态更成熟
典型模型Claude Opus 4.8/Claude Sonnet 4.6 全系列GPT-5.5/GPT-5.6 全系列

2026年:趋同与标准化

两种叫法趋同

在2026年,“Function Calling”和”Tool Use”这两个术语已经高度趋同。开发者社区通常混用,技术文档中两者并提。核心原理完全一致,区别仅在于API细节。

MCP统一了工具连接标准

MCP (Model Context Protocol) 解决了”工具如何被发现和连接”的问题。在MCP生态中:

  • MCP Server:工具提供方,实现MCP协议
  • MCP Client:模型/Agent,通过MCP协议发现和调用工具
  • 传输层:STDIO(本地进程通信)或SSE(远程HTTP通信)

无论底层是OpenAI的Function Calling还是Anthropic的Tool Use,MCP提供统一的工具连接层。

工具调用能力的普及

模型工具调用支持备注
Claude Opus 4.8 / Sonnet 4.6Tool Use原生支持,设计优秀
GPT-5.5 / GPT-5.6Function Calling最早推出,生态最成熟
Gemini 3.5 ProFunction CallingGoogle Cloud生态
Llama 4.1支持开源实现
DeepSeek-V4支持国产模型支持

相关笔记

来源

关联13

知识图谱

局部图谱 · 点节点跳转