Tool Calling
中文建议: 工具调用
常见别名: Tool Use / Function Calling(部分生态中)
成熟度: 🟢
词条状态: ✅ Atlas-quality
重要程度: ★★★★★
学习阶段: 入门必懂
最后更新: 2026-08-17
30 秒理解
Tool Calling 是让模型不只“说”,还能请求外部系统替它“做”的机制。
模型本身通常只能接收输入并生成输出。通过 Tool Calling,它可以表达类似:
“请调用
search_web,参数是query=agent harness。”
真正的搜索并不是模型自己完成的,而是 Harness / Runtime 收到这个结构化请求以后去执行工具,再把结果返回给模型。
所以最重要的一句话是:
模型负责选择和提出调用,系统负责真正执行。
先建立一个直觉
把模型想成坐在办公室里的分析师。
如果没有工具,它只能依靠脑中的知识回答问题。
如果给它:
- 搜索引擎;
- 数据库;
- 计算器;
- 邮件;
- 文件系统;
- Shell;
- 浏览器;
它就可以说:
工具是“手”,模型不是自己长出了一双手,而是学会了什么时候该让外部能力介入。
为什么需要 Tool Calling?
LLM 有三个天然限制:
- 知识可能过时 —— 模型权重不是实时数据库;
- 不能天然访问私有数据 —— 例如你的 CRM、邮件、代码仓库;
- 不能天然改变外部世界 —— 例如发邮件、写文件、更新数据库。
Tool Calling 把模型和这些能力连接起来。
因此 Agent 的 Action 很多时候就是某种 Tool Call。
Model
↓ 选择动作
Tool Call
↓
Harness / Runtime
↓ 真正执行
External System
↓
Tool Result / Observation
↓
Model
技术定义
在工程上,Tool Calling 通常指:
模型根据开发者提供的工具定义,生成一个结构化的工具调用请求;宿主系统解析该请求、执行对应函数或外部能力,再把结果作为新的上下文返回模型。
一个工具定义通常至少包含:
name
├── 工具叫什么
description
├── 什么时候应该使用
input schema
├── 参数有哪些
├── 参数类型是什么
output / result
└── 执行后返回什么
OpenAI 的 Function Calling 会让模型生成符合定义 schema 的函数参数;Anthropic 更常使用 tool use 这一术语;MCP 中也有自己的 tools primitive。名称不同,但都在处理“模型如何请求外部能力”这个问题。
你可能是在这句话里遇到它
“The agent called a tool to search the repository, then used the result in the next turn.”
这句话可以拆成:
Agent Loop
↓
Model 发现自己缺信息
↓
生成 Tool Call
↓
Harness 执行工具
↓
返回 Tool Result
↓
Tool Result 进入 Context
↓
下一轮 Model Call
所以这里的 called a tool 不是“模型内部多想了一步”,而是模型和外部环境真的发生了一次交互。
一个最小例子
假设有一个天气工具:
用户问:
“北京现在天气怎么样?”
模型可能输出一个结构化请求:
然后系统执行:
得到:
再把结果送回模型:
模型最后才生成自然语言答案。
Tool Calling ≠ Tool Execution
这是最容易被忽略的一条边界。
如果模型输出:
文件并不会因为模型“说了”就自动消失。
是否真的执行、是否需要审批、是否在 Sandbox 中运行,都由外部系统决定。
这也是为什么 Tool Calling 和权限控制必须一起理解。
Tool Calling 和 Function Calling 有什么区别?
| 概念 | 最简单理解 |
|---|---|
| Tool Calling / Tool Use | 更宽泛:模型请求使用某种外部能力 |
| Function Calling | 常指通过结构化函数 schema 表达工具调用的一种接口形式 |
| Hosted Tool | 平台直接提供并执行的工具,例如 web search / file search |
| MCP Tool | 由 MCP Server 按 MCP 协议暴露的工具 |
在很多日常讨论里,Tool Calling 和 Function Calling 会被近似使用;但理解系统架构时,建议把 Tool Calling 当成更上位的概念。
Tool Calling 和 MCP 有什么关系?
MCP 不是 Tool Calling 的替代品。
更准确地说:
所以一个 MCP Server 可以暴露 search_database 工具,而 Agent 仍然通过自己的 Tool Calling 机制决定是否调用它。
→ 继续看 MCP
为什么工具设计会直接影响 Agent 能力?
工具越多不一定越好。
一个工具如果:
- 名字含糊;
- description 写得不清楚;
- 参数 schema 太复杂;
- 一次返回大量无关内容;
- 错误信息不可理解;
模型就可能选错工具、传错参数,或者把宝贵 Context 浪费在噪声上。
因此 Tool Design 本身已经成为 Agent Engineering 的重要部分。
可以把它理解成:
你不是在给传统程序员设计 API,而是在给模型设计“可理解的行动空间”。
Concept Graph Relations
Agent ──uses────────→ Tools
Agent Loop ─contains→ Tool Calling
Tool Calling ─produces→ Tool Request
Harness ─executes───→ Tool Request
Tool Result ─feeds──→ Context
MCP ─exposes────────→ Tools
关系说明
Agent → Tools:Agent 借助工具获得外部能力;Agent Loop → Tool Calling:工具调用通常发生在循环中的某一轮;Harness → Tool Request:真正解析和执行请求的是外围运行系统;Tool Result → Context:工具结果通常会成为下一轮模型输入;MCP → Tools:MCP Server 可以按统一协议暴露工具。
不同生态怎么叫?
| 生态 | 常见说法 |
|---|---|
| OpenAI | Tools / Function Calling / Function Tools |
| Anthropic | Tool Use / Tools |
| MCP | Tools primitive |
| Agent Frameworks | Tools / Functions / Actions |
名称不同,但遇到这些词时可以先问:
“是不是模型在请求一个模型外部的能力?”
如果是,大概率就在 Tool Calling 这一概念附近。
常见误解
❌ 有 Tool Calling 就一定是 Agent
不一定。固定 workflow 也可以调用工具。
真正的 Agent 通常还包含“根据工具反馈动态决定下一步”的循环。
❌ 模型自己执行了函数
通常不是。模型生成调用意图,宿主系统执行。
❌ 工具越多 Agent 越强
不一定。工具过多、描述模糊会增加选择难度和 Context 成本。
❌ Tool Result 一定可信
不是。外部工具也可能返回错误、恶意或被污染的数据。
Terminology Observatory
成熟度:🟢 稳定术语。
“模型调用外部函数 / 工具”已经成为现代 LLM API 和 Agent 系统中的基础能力。
需要注意的是,不同厂商的 API 命名仍不完全一致,因此:
在文档中经常交叉出现。
下一步应该学什么?
- Function Calling —— 结构化函数调用接口;
- MCP —— 工具如何通过统一协议被暴露;
- Agent Loop —— 工具结果怎样进入下一轮;
- Harness —— 谁真正执行调用并管理权限;
- Sandbox —— 高风险代码和命令在哪里安全执行。
一手资料
- OpenAI, Function Calling in the OpenAI API
- OpenAI, A practical guide to building agents
- OpenAI Agents SDK, Tools / Function tools
- Anthropic, Writing effective tools for AI agents
- Model Context Protocol, Tools specification