Agent 工程 · Tool Use 深潜

工具调用(Tool Use):从协议到 Agent 自主行为

一篇为「理解」而非「抄代码」写的教程。讲清一次工具调用在协议层到底发生了什么、agent 循环如何把单次调用变成多步自主行为、怎样设计工具,以及 MCP 与「代码调工具」这些前沿在优化哪一段。

工具调用是 LLM 从「会聊天」跨到「能干活」的那道门。但它最反直觉的一点,恰恰藏在名字里:模型其实什么都没「调用」。

定位 · 概念深潜,面向理解与面试 基于 · Anthropic Messages API / OpenAI(截至 2026-06) 读完 · 约半天 代码 · 协议片段已对照官方文档核对,未在本机运行

·这篇适合谁

适合你,如果你

  • 调用过至少一次 LLM 的 chat / messages API(OpenAI、Claude 或同类),见过 request / response 长什么样
  • 能读懂一段 JSON,分得清 object / array / string
  • 写过基本的 Python 或 JavaScript,能跟着改一个函数

先别读这篇,如果你

  • 从没调过任何 LLM API——先用官方 quickstart 跑通一次普通对话再回来
  • 只想复制一段能交差的代码——直接看 Anthropic / OpenAI 的 quickstart 更快
  • 想深入多个 agent 之间的协作编排——去看兄弟篇 multi-agent-patterns

·读完之后你能做到什么

工具调用的本质不是「模型调用你的函数」,而是「模型生成一个请求、然后停下、把控制权交还给你的程序」。抓住这个控制流的反转,你能预判一个 agent 会在哪一步失控、为什么陷入无限循环、token 为什么爆炸,也能看懂 MCP、code execution 这些前沿到底在优化哪一段——这是读完官方文档也未必能讲清的那层。

具体地,读完你应当能够:

  • 手画出一次完整 tool-use 往返的 5 个阶段,并准确指出模型在哪一步停机
  • 对照读懂 Anthropic 与 OpenAI 的 tool-use 请求 / 响应字段,说出两者术语与数据形状的差异
  • 解释 agent loop 的终止条件由谁决定,写出至少 2 种防止无限循环的 guard
  • 评审一个工具定义,指出 description / 参数 / 返回值 / 错误处理 四处可改进点
  • 说清 MCP 解决的是什么问题(M×N → M+N),以及「模型写代码调工具」相比「吐 JSON 调工具」省在哪里

一句话本质

  • 在工具调用里,模型自己什么都不执行。它只生成一段结构化文本——「我要调用 X,参数是 Y」——然后停下。
  • 真正执行工具、把结果塞回对话、驱动下一轮的,是模型外面的程序(harness)。模型既看不到你的实现,也不会自己循环。
现状速览 · 截至 2026-06

稳定基石:JSON-Schema 函数调用 + tool_use / tool_result 循环,三大厂商通用,先把它学扎实。
正在变:MCP(2024-11 由 Anthropic 提出 → 2025 年被 OpenAI、Google、微软采纳 → 2025-12 捐给 Linux Foundation)已成跨厂商标准;前沿正从「模型吐 JSON 调工具」转向「模型写代码调工具」(Anthropic 2025-11 的 Code execution / Programmatic Tool Calling / Tool Search Tool,号称省约 85% token)。
已被取代:OpenAI 的 functions / function_call 旧参数 → tools / tool_calls;Assistants API → Responses API。本教程不教旧写法。

读之前 · 关于「读懂了」的错觉

这篇有意在几个地方放慢、让你先猜再看答案。如果你发现自己冒出这三句话,多半是熟悉感冒充了理解,停下来做一遍自测:

「我读得很顺」——顺,往往只说明文字好读,不说明 schema 进了脑子。
「我做题很快」——快,多半是在套已经见过的题型。
「我没卡壳」——没卡壳,多半是还没碰到真正难的那一步。

·概念地图

工具定义 name·desc·schema 模型决策(LLM) tool_use 请求 模型在此停机 ⏸ Harness 执行 模型外的程序 tool_result 回填 Agent Loop 循环到模型不再请求 上下文 ① 生成请求 ② 交还控制 ③ 执行工具 ④ 结果回填
图 0工具调用的核心是一个循环,不是一次函数调用。 注意:朱红色的「② 交还控制」是整张图的命门——模型走到 tool_use 请求 就停机,那条竖线右边(执行、回填)全部是你的程序在做,模型看不见也管不着。

·三条学习路径

  • 只想建立心智模型01 概念 → 02 协议 →(跳读 04 的前沿部分)→ 05 自测。约 2 小时,拿到能讲清楚的核心模型。
  • 准备面试 / 求职01 → 02 → 03 → 04 全读。重点记:术语对照表(02)、终止条件与防循环 guard(03)、设计权衡表与前沿时间线(04)。最后做 05 的辨析题检验。
  • 做选型 / 读懂别人的 agent 代码01 → 03 → 04。关注 loop 怎么驱动、为什么这样设计、生态现在用什么。

·章节目录

·学完之后往哪走

  • 多智能体编排——单 agent 的工具循环讲透后,multi-agent-patterns 教多个 agent 如何分工与传递。在你的 schema 上加「编排层」。
  • LangGraph——把这一篇里隐式的 loop 显式建模成状态图(langgraph)。加「把循环画成图」的工具。
  • Agent 记忆与上下文管理——工具结果会撑爆 context(03 会讲),如何裁剪 / 外置是下一道坎。加「上下文预算」这一维。
  • Agent 评测——怎么量化一个 agent 的工具调用准确率与成本。加「可度量」这一维。