Tool Use 工具调用:Agent 与外部世界交互的核心机制

4483 字
22 分钟
Tool Use 工具调用:Agent 与外部世界交互的核心机制

每日学习笔记 · 2026-08-03#

Tool Use 工具调用:Agent 与外部世界交互的核心机制#


📌 今日速览#

模型只是”大脑”,工具才是”手脚”——这是过去 30 天学完架构、记忆、Skill、Context、Multi-Agent、评估后,第一次系统地把”Agent 如何行动”这件事讲清楚。今天从 4 篇文章里梳理出工具调用的协议层(Function Call / MCP)、形态层(Tool / Skill / Plugin)、模式层(ReAct / Plan-Execute / LATS)、防护层(Guardrails / 风险分级)四个维度。最核心的反共识观点是:工具调用不是”写个 function_call 就完事”,而是要按”用户意图”重新组织 Schema;工具描述三要素(何时调、参数怎么填、结果怎么用)决定了一个工具能不能被模型用对。


一、为什么今天聊这个?#

过去 30 天我们学完的脉络是:

  • 7-23 架构演进:从 Prompt 到 Graph
  • 7-24 记忆系统:Memory 分层与复用
  • 7-27 Skill 技能系统:流程、约束、验收标准
  • 7-28 Context Engineering:上下文决定单次决策
  • 7-29 Multi-Agent:多智能体协作模式
  • 7-30 / 7-31 评估与可观测性:怎么判断 Agent “能信”

但始终有一个底层问题没正面回答:模型怎么”动手”?

所有的架构、记忆、Context、Multi-Agent,最终都要靠模型”调一个外部动作”来落地——查数据库、读写文件、发邮件、调用 API。这个”动手”的能力,就是 Tool Use。它是 Agent 与外部世界交互的核心机制,是”想”到”做”的桥梁。

今天 4 篇文章从 4 个不同视角把这件事讲透了:

  1. WorkBuddy 产品视角:Function Call / MCP / Skill / Plugin 共同构成能力层
  2. OpenAI 官方指南:标准化工具定义、编排模式、风险分级
  3. 架构对比视角:ReAct / Plan-and-Execute / LLM Compiler 工具调用机制差异
  4. 设计模式视角:ReAct / Reflection / Reflexion / LATS 反思与验证机制

二、核心内容#

2.1 全景图:工具调用的四层抽象#

把今天学到的内容压成一个四层模型:

┌─────────────────────────────────────────────────┐
│ 防护层:Guardrails / 风险分级 / max_iterations │
├─────────────────────────────────────────────────┤
│ 模式层:ReAct / Plan-Execute / LATS / Reflection│
├─────────────────────────────────────────────────┤
│ 形态层:Tool / MCP / Skill / Plugin │
├─────────────────────────────────────────────────┤
│ 协议层:Function Call / MCP Protocol │
└─────────────────────────────────────────────────┘
  • 协议层解决”模型怎么请求动作、外部系统怎么标准化接入”
  • 形态层解决”按什么形式组织能力”
  • 模式层解决”在循环中怎么决策何时调、调几次”
  • 防护层解决”工具调用的安全和成本边界”

下面逐层拆解。


2.2 协议层:Function Call 与 MCP#

这是今天学到的第一个反共识点——很多文章把 Function Call 和 MCP 混为一谈,实际上它们解决的是不同层面的问题。

Function Call:模型怎么请求动作?#

  • 模型与外部系统之间的结构化协议
  • 解决的核心问题:“一个模型怎么请求执行动作”
  • 主要消费者:模型 + Agent
  • 典型内容:名称、描述、Schema、调用结果

完整执行流程:

  1. 产品把可用工具的名称、用途和参数 Schema 提供给模型
  2. 模型根据用户目标,输出一个结构化的调用请求
  3. Agent 校验参数、检查权限,执行 API、脚本或本地函数
  4. Agent 把执行结果作为 tool result 放回上下文
  5. 模型读取结果,决定直接回答还是继续调用其他工具

MCP(Model Context Protocol):外部系统怎么标准化接入?#

  • Anthropic 在 2024 年底发布的开放协议
  • 解决的核心问题:“外部系统怎么标准化接入 Agent”
  • 主要消费者:Agent / Server
  • 典型内容:Tools、Resources、Prompts 三种原语
原语驱动方职责典型用法
Resources应用/Agent 驱动有 URI 标识的只读内容拼进 messages,不经过 tool
Tools模型驱动模型能调用的动作/函数模型在推理时自己决定调用
Prompts用户驱动Server 预组织的可复用消息斜杠命令触发

关键区分#

维度Function CallMCP
本质基础协议(动作请求)标准化协议(系统接入)
解决问题模型怎么请求动作外部系统怎么标准化接入
范围单个工具调用Tools + Resources + Prompts
适配成本每个系统需单独适配统一协议,一次接入

MCP 统一的是连接协议,不自动解决认证、数据授权、网络隔离和高危审批——这是 WorkBuddy 那篇文章反复强调的边界。


2.3 形态层:Tool / MCP / Skill / Plugin 怎么选?#

很多团队做 Agent 时一上来就堆工具,结果遇到工具爆炸问题。WorkBuddy 那篇文章给了一个非常实用的判断框架。

形态选择对照表#

需求优先形态原因
稳定的底层操作(读文件、执行命令)内置 Tool延迟低、权限和 UX 可深度集成
腾讯文档、IMA 等外部系统MCP / Connector / SDK服务端集中维护,能力标准化复用
团队高频、稳定的工作流程Skill沉淀步骤、判断标准与失败处理
需要同时装连接、流程、规则和 HookPlugin作为组合与分发单位

六个判断维度#

“没有一种形态对所有能力都最优。判断标准是:”

  1. 能力边界:这个能力是不是单一动作?
  2. 更新频率:多久变一次?
  3. 权限风险:高危还是低危?
  4. 上下文成本:每次调用占多少 token?
  5. 执行延迟:对实时性要求?
  6. 跨产品复用价值:能不能在多个产品里用?

四个概念的精确定位#

概念核心问题主要消费者典型内容
Function Call一个模型怎么请求执行动作?模型 + Agent名称、描述、Schema、调用结果
MCP外部系统怎么标准化接入 Agent?Agent / ServerTools、Resources、Prompts
Skill一类任务应该按什么方法做?Agent流程、约束、脚本、验收标准
Plugin怎么把一组能力安装和分发?用户 / 团队 / 产品MCP、Skills、Rules、模板

关键洞察:Tool 负责”一个动作”,Skill 负责”一类任务的做法”,两者可以组合——一个”发周报” Skill 可能同时调用腾讯文档 MCP、知识库 MCP 和本地脚本。


2.4 模式层:ReAct / Plan-Execute / LATS / Reflection 怎么选?#

这是今天学到的第二个反共识点——很多人以为”ReAct 就是 Agent 标配”,但实际上有 7 种主流模式,每种在工具调用上的取舍完全不同。

7 种模式工具调用机制对比#

模式工具调用方式LLM 调用次数灵活性鲁棒性Token 成本
ReActThought→Action→Observation 循环高(每步一次)★★★★★中高
Plan & ExecutePlanner 一次性生成计划→Executor 执行较低★★差中
ReWOO变量占位符计划,无观察推理低★差低
LLM CompilerDAG 并行执行(3.6x 提速)低★★差低
Basic Reflection完成后 LLM 自我批判中高★★★中中高
ReflexionEvaluator+Reflector+动态记忆很高★★★★强高
LATS多路径搜索+回溯极高★★★★★最强最高

作者的核心观点#

ReWOO / Plan & Execute / LLM Compiler 本质上都是通过构建类工作流形式来加速,但 ReWOO 舍弃了 ReAct “根据现实反馈调整策略”这一核心特性,属于”开历史倒车”,产品化之路会很艰难。

核心洞察:ReAct 的 Observation 机制是其精髓——将推理过程的每一步都与现实世界反馈核对,本质上是一种”强化学习”思路,从”开放式生成”升级为”闭环控制”。其他反思类模式是在无法或不便实时获取工具反馈时的替代方案。

选型决策树#

1. 通用场景 → ReAct(基础但灵活)
│
├── 想加速但保持灵活性?
│ └── Plan & Execute / LLM Compiler(工具并行)
│ └── 工具间需传数据?→ ReWOO
│
├── 无法获取真实环境反馈?(如写文章)
│ └── Basic Reflection(单次内迭代)
│ └── 需跨试验学习?→ Reflexion
│
└── 需探索性决策?
└── LATS(多路径搜索+反思+回溯)

2.5 工具爆炸:表现与应对#

当工具数量增长到数十甚至上百个时,单 Agent 会出现:

  • Prompt 溢出:工具描述占用大量 context window
  • 选择困难:LLM 在众多相似工具间选择错误率上升
  • 调试困难:无法判断 Agent 为何选了错误的工具
  • 成本飙升:每步推理都要处理全部工具定义

五种应对策略#

策略说明
工具分组将工具按领域分簇,每次只暴露相关簇
工具检索(Tool Retrieval)用 RAG 思想动态检索 Top-K 相关工具
路由 Agent设置”路由器”先判断任务类型,再分发到对应专业 Agent
工具合并将多个细粒度工具合并为粗粒度复合工具
升级到多 Agent真正多领域时再考虑(慎重)

OpenAI 给的数据参考:一些实现可成功管理 15+ 个定义清晰、互不重叠的工具,但有些实现即使工具 <10 个且存在重叠也会出现问题。拆分前先尝试改善工具的命名清晰度、参数明确性、描述详细度。

渐进式加载(Progressive Disclosure)#

工具越多、语义越重叠,模型选择越困难。分阶段能力发现机制:

  1. 能力类别 / Server 简介
  2. ToolSearch 搜索候选
  3. 只加载选中工具 Schema

2.6 工具设计的关键原则#

这是今天最有落地价值的部分。

原则 1:Schema 按用户意图组织,不照搬底层 API#

“例如’创建 Issue’可能涉及创建、加描述、加 tag、加附件四个底层接口,但对 Agent 应该只暴露一个 create_issue 工具,把描述、tag、附件作为参数。Issue 相关操作也可以收进一个工具,用不同 action(create / delete / update / close)区分。“

原则 2:工具描述三要素#

一个可用的工具至少要说明三件事:

  • 什么时候调用(Description 与相似工具区分)
  • 参数怎么填(枚举、默认行为)
  • 结果怎么继续处理(成功返回关键字;失败返回原因和修正方法)

原则 3:错误处理策略#

工具结果过长时:

  • 分页、截断或写入文件
  • 截断时必须明确告诉模型”结果未完整”,附上总量、截断位置和继续读取方法
  • 否则模型会把前 100 条误当成全部

错误返回:

  • 不只返回 error 或一段堆栈
  • 要返回失败原因、可修正参数、是否可重试和建议下一步
  • 把 Agent 受阻视为”环境中缺少工具、规则或文档”的信号

原则 4:三大工具类型(OpenAI 视角)#

类型作用示例
Data(数据类)检索执行工作流所需的上下文查询交易数据库、读取 PDF、网络搜索
Action(动作类)与系统交互以执行操作发送邮件、更新 CRM、工单转人工
Orchestration(编排类)Agent 本身可作为其他 Agent 的工具Refund Agent、Research Agent、Writing Agent

2.7 防护层:风险分级与 Guardrails#

工具调用一旦涉及真实系统,安全问题就不容忽视。

工具风险分级(OpenAI 视角)#

按以下因素对每个工具进行风险评估:

评估因素风险维度
访问类型只读 vs. 写操作
可逆性动作是否可回滚
权限要求所需账号权限等级
财务影响是否涉及资金变动

风险等级:Low / Medium / High

风险驱动的自动化动作#

  • 低风险工具:可直接执行
  • 中高风险工具:执行前暂停,触发 Guardrail 检查
  • 高风险工具:升级到人工介入(尤其是不可逆、敏感、高影响操作)

典型高风险动作(必须人工介入):

  • ❌ 取消用户订单
  • ❌ 授权大额退款
  • ❌ 支付操作
  • ❌ 涉及敏感数据的写操作

Guardrails 层次化防御#

“Think of guardrails as a layered defense mechanism. While a single one is unlikely to provide sufficient protection, using multiple, specialized guardrails together creates more resilient agents.”

Guardrail 类型防护目标
Rules-based已知威胁(黑名单、长度限制、regex)
Tool safeguards按风险等级控制工具执行
PII filter模型输出中的 PII 信息
Moderation有害/不当输入
Output validation品牌一致性

防护措施清单(来自实战踩坑)#

措施作用示例
max_iterations防止无限循环必设,有开发者遇到过跑一整夜的情况
timeout防止长任务卡死5 分钟超时
permissionMode权限分级acceptEdits / interactive / planOnly
行为边界提示词约束”不要删除任何测试文件”
verbose 调试可观测性打印推理过程
群聊收敛防止无限辩论max_rounds + Moderator
循环移交检测防止死锁A→B→A 模式识别

三、4 篇文章的共同观点#

读完 4 篇,有 6 个观点是高度共识的:

  1. 模型只是大脑,工具是手脚——四篇文章都强调”模型不能自己动手,必须通过工具与外部世界交互”。
  2. 工具设计比工具数量更重要——WorkBuddy 强调”按用户意图组织 Schema”,OpenAI 强调”15+ 个定义清晰工具 OK,重叠的 10 个就不行”。
  3. 从单 Agent 起步,按需升级——OpenAI 明确”maximize a single agent’s capabilities first”,架构对比文也警告”如果单 Agent 能解决,不要强上多 Agent”。
  4. ReAct 的 Observation 是核心——即使在推崇 Plan-Execute、LLM Compiler 的作者眼里,ReAct 的”每步与现实反馈核对”仍是不可替代的。
  5. 必须设置 max_iterations 和 timeout——所有文章都强调这个是”踩过的坑”。
  6. 风险分级和 Guardrails 是工业级落地的必要条件——OpenAI、WorkBuddy、ANOLISA 都反复强调。

四、4 篇文章的不同视角#

维度WorkBuddy(产品视角)OpenAI(官方指南)架构对比文设计模式文
核心关注Tool/Skill/Plugin 形态选择标准化工具定义 + 编排ReAct vs Plan-and-Execute7 种模式工具调用机制
侧重点协议层(MCP vs Function Call)风险分级 + Guardrails何时升级架构反思与验证机制
独特观点MCP 不解决认证和授权工具是 Data/Action/Orchestration 三类单 Agent 起步,按需升级ReWOO “开历史倒车”
对 ReAct 态度工具调用基础编排循环默认模式推荐基础但提示可加速视为核心范式,其他模式是替代
对 MCP 态度详细解释三大原语未直接提及未直接提及未直接提及

最有趣的分歧:

  • WorkBuddy 把 Skill 当成与 Tool 并列的形态,而 OpenAI 指南里 Skill 这个概念几乎不存在(更强调”Agent as Tool”)
  • 架构对比文和设计模式文都认为 ReWOO 牺牲反馈换效率得不偿失,而 LLM Compiler 论文(DAG 并行)则被认为 3.6x 提速有效
  • WorkBuddy 强调 MCP 解决”接入”但解决不了”安全”,OpenAI 则更强调用 Tool safeguards 解决安全

五、对你(产品/工程师)的行动建议#

如果你正在做 Agent 产品#

  1. 先盘点工具清单,按”用户意图”重新组织——把”创建 Issue 的 4 个底层接口”合并成 1 个 create_issue,按 action 区分。
  2. 每个工具写好”工具描述三要素”——何时调、参数怎么填、结果怎么用。没有这三件事的工具不要上线。
  3. 给所有工具打风险等级——访问类型、可逆性、权限、财务影响。高风险工具强制走人工审批。
  4. 设置 max_iterations 和 timeout——这两个不设迟早出事。
  5. ReAct 是默认起点——除非有明确证据说明效率不够,否则不要上 Plan-Execute 或 LATS。

如果你正在选架构#

┌─ 简单任务 ─────────→ ReAct(默认)
起步 ────┤
└─ 简单但要加速 ─→ Plan & Execute / LLM Compiler
┌─ 工具爆炸 ────→ 工具分组 + Tool Retrieval
进阶 ────┤
└─ 跨领域 ──────→ 多 Agent(慎重评估)
┌─ 写文章等无外部反馈 ─→ Basic Reflection
反思 ────┤
└─ 需跨试验学习 ─→ Reflexion

如果你正在做平台#

  • 外部系统接入优先上 MCP——一次接入,标准化复用。
  • 但不要指望 MCP 解决安全——MCP 之上还要叠自己的鉴权和审批。
  • Skill / Plugin 是分发单位——Tool 是原子能力,Skill 是流程,Plugin 是打包。

六、一句话总结#

工具调用不是”写个 function_call 就行”——它是一个四层体系:协议层(Function Call / MCP)解决”怎么动”,形态层(Tool / Skill / Plugin)解决”按什么形式组织”,模式层(ReAct / Plan-Execute)解决”在循环中怎么决策”,防护层(Guardrails / 风险分级)解决”动到什么程度要停下来”。

ReAct 的 Observation 是不可替代的核心范式,其他模式是它的变体或替代。 工具爆炸是真实挑战,但答案不是堆多 Agent,而是渐进式加载 + 路由分发。模型决定 Agent 的上限,工具决定 Agent 的边界。


📚 参考资料#

  1. 《从模型到 Harness:WorkBuddy 如何把 Agent 做成可用产品》—— 工具调用四层抽象、MCP 三原语、Skill/Plugin 形态选择
  2. OpenAI《A Practical Guide to Building Agents》—— 标准化工具定义、风险分级、Guardrails 层次化防御
  3. 《AI Agent 架构设计模式:ReAct vs Plan-and-Execute vs Multi-Agent 深度对比》—— 工具爆炸、架构升级路径、五种编排模式
  4. 《AI Agent 主流的设计模式(ReAct, Reflection, LATS)其实没有很复杂》—— 7 种模式工具调用机制对比、反思与验证

生成时间:2026-08-03 13<44主题>:Tool Use 工具调用覆盖文章:4 篇

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Tool Use 工具调用:Agent 与外部世界交互的核心机制
https://www.zgf.me/posts/每日学习笔记--2026-08-03/
作者
赵某人
发布于
2026-08-03
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
赵某人
俯视泥土,仰望星辰
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
28
分类
1
标签
58
总字数
129,420
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.14.5
文章许可
CC BY-NC-SA 4.0