Agent 工具体系:从 MCP 协议到层次化工具发现

Agent 工具体系:从 MCP 协议到层次化工具发现

工具是连接 Agent 语言"大脑"与真实数字世界的"手脚和感官"。本章从五类工具的分类出发,系统讨论了工具设计的通用原则、能力分发渠道(MCP 协议与 Skill Hub),以及当工具数量爆炸时的层次化组织与主动发现机制,最后逐类深入分析了感知、执行、协作三类工具的设计要点。

五类工具的分类框架

书中从两个维度来审视工具:调用方向 (交互由谁发起)和作用对象(交互作用于什么),将 Agent 工具分为五类:

工具类型 调用方向 作用对象
感知工具 Agent 主动调用 获取信息
执行工具 Agent 主动调用 改变世界
协作工具 Agent 主动调用 驱动其他 Agent 或人类
用户沟通工具 Agent 主动调用 向用户传递信息
事件触发工具 Agent 注册、外部触发 驱动 Agent 开始执行

前三类由 Agent 主动调用,是本章讨论的核心。事件触发工具和用户沟通工具涉及异步运行时,属于另一层面的设计。

工具设计的通用原则:ACI 与三个维度

能力的表达形式:专用工具 vs Skill

同一项能力可以做成不同形态,构成从专用通用的谱系:

  • 专用工具:结构化函数调用,确定性高、可测试、参数受 schema 约束,代价是每个工具定义占用数百 token。
  • Skill:用自然语言编写的操作文档,Agent 通过终端或代码解释器执行,只需少量通用工具即可覆盖大量场景。

书中提出的默认取向是:通用工具优于专用工具,除非存在安全、权限或性能理由。提供通用执行器(如 code_interpreter)相当于给 Agent 一个"元能力",一个 Python 解释器可以替代数十个特定功能工具。

退回专用工具有四种情况:安全与权限审计需要、屏蔽平台差异、使用频率极高、参数结构复杂。

工具描述的艺术

工具描述的核心是让 LLM 知道"什么时候用",而不只是"能做什么"。书中强调:清晰列出工具的边界条件------做不到什么、不接受什么输入------往往比描述能力本身更重要。参数描述应使用具体例子代替抽象规范,并为每个工具附带 1-5 个真实调用示例,加入示例后工具调用准确率可从约 72% 提升到 90%。

参数传递的保真性

一个容易被忽视的反模式是静默输入转换 ------工具在执行前悄悄"修正"模型的输入参数。书中以 Cursor 的弯引号转直引号问题为例:读取工具原样返回弯引号,替换工具却将其静默转换为直引号,导致匹配失败而模型无法自行诊断。核心原则是:模型感知到的世界与工具操作的世界之间,不能存在系统性偏差

MCP 协议与 Skill Hub:能力分发的两条渠道

MCP:统一工具接入的开放标准

Model Context Protocol(MCP)是 Anthropic 于 2024 年底发布的开放标准,旨在统一 AI 模型与外部工具、数据源之间的通信协议。其核心设计包括:

  • 标准化工具描述格式:通过 JSON Schema 定义参数类型和约束
  • 传输层灵活性:本地采用 stdio,远程采用 Streamable HTTP
  • 三类原语:工具(可执行操作)、资源(只读数据)、提示模板(可复用提示词)

MCP 的生态价值在于"一次开发,处处可用"。一个 MCP 服务器可以同时被 Cursor、Claude Desktop、OpenClaw 等兼容客户端使用。

Skill Hub:更轻量的分发机制

Skill 不需要协议,一个 skill 就是一个装着 SKILL.md 的文件夹,分发机制是注册表。Vercel 的 skills.sh 和 OpenClaw 的 ClawHub 是两个代表性平台。Skill 的常驻上下文成本比 MCP 工具定义便宜一到两个数量级------安装一个 skill 只是往磁盘拷一个文件夹,常驻上下文的只有目录中的 name 和 description。

第三方能力的安全风险

无论走 MCP 还是 Skill Hub,引入第三方能力都意味着把不受控制的文本注入 Agent 上下文。主要风险包括工具描述投毒(提示注入的变种)、恶意或被劫持的服务器、以及同名工具遮蔽。Skill 比 MCP 风险更大,因为它不仅包括工具描述,还包括可能运行在用户电脑上的代码。

工具规模问题:从层次化组织到主动发现

当可用工具从十几个增长到成百上千时,"选哪个工具"本身就成为一个需要设计的问题。书中给出了三层递进的解决方案。

层次化组织与按需加载

最朴素的方案是只暴露索引,需要时再查询具体定义。Cursor 的实践显示,这种方式使 MCP 工具相关任务的总 token 消耗减少了 46.9%。Pi Coding Agent 走得更远:核心模块刻意不内置 MCP,默认只看到一个约 200 token 的代理工具,通过"搜索→查看定义→调用"按需发现后端工具。

模型原生的主动工具发现

更进一步的思路是让 Agent 从被动接受者变为主动发现者:在执行过程中意识到能力缺口时,主动用自然语言声明需求,系统再动态匹配并注入。MCP-Zero 是代表性工作,论文报告在约 2800 个工具上比全量注入节省约 98% 的 token。

动态加载工具会破坏 KV Cache,但 OpenAI 的 tool_searchdefer_loading、Anthropic 的 tool_reference 等原生支持已经解决了这个问题------把新工具的完整 schema 追加到上下文末尾,静态前缀保持稳定。

Skills:把工具发现变成"按需查阅"

Skills 机制采用渐进式披露策略,不再需要嵌入索引和语义匹配基础设施。Agent 启动时只看到一份薄薄的目录,当前上下文真正需要某种能力时,模型才去读取对应的 sub-skill。这更接近人类使用参考资料的方式------顺着索引和目录,根据当下需要逐个查阅。

三类工具的设计要点

感知工具:控制信息量

感知工具的核心挑战是返回信息量可能远超 Agent 处理能力。设计要点包括:

  • 搜索类工具返回结构化候选列表而非全文,提供分页或游标
  • 读取类工具支持 offset/limit 参数,截断时明确标示
  • 只读性带来工程红利:结果可缓存、调用可并行
  • 多模态感知有三种路径:原生多模态处理、提取为文本、工具化分析

执行工具:安全是核心

执行工具的错误代价可能极高,安全机制应构建多层防护体系:

  • 输入验证:路径遍历检查、命令注入检测、快速失败
  • 权限控制:文件操作限制工作目录、命令黑名单、API 配额
  • 提议者-审核者机制:事前审批用不同模型家族的独立审查者,事后验证采用模态切换
  • Sidecar 机制:与主模型流式输出并行的轻量级安全校验,只读结构化工具调用数据,不被提示注入操纵

协作工具:子 Agent 与人工介入

协作工具的核心是子 Agent 的生命周期原语:启动与取消(spawn_subagent、cancel_subagent)、消息传递(send_message_to_subagent)、发现(list_agents)。人工介入(HITL)需要设置超时阈值和默认行为,并形成学习循环------人类的批准、拒绝及其理由构成带证据的反馈数据。

小结

工具设计决定 Agent 的能力上限。本章的核心脉络可以概括为三个层次:第一,能力用什么形式表达------默认往通用端靠,只在安全、参数复杂度等四种情况下退回专用工具;第二,能力靠两条渠道分发------MCP 统一专用工具接入,Skill Hub 用包管理器分发 Skill 文档;第三,当工具增长到成百上千时,层次化组织、按需加载、主动发现与 Skills 依次接管,把"选哪个工具"变成"查哪条资料"。感知工具的关键在粒度与输出控制,执行工具的关键在层次化安全防护,协作工具的关键在子 Agent 生命周期与人工介入闭环。

本文内容整理自开源技术书《深入理解 AI Agent》(bojieli/ai-agent-book),采用 Apache 2.0 许可证

相关推荐
星核0penstarry15 分钟前
三款Flash模型横向对比:GLM-5.3、DeepSeek-V4、Qwen3.8怎么选?
人工智能·qwen·flash·glm-5.3·deepseek-·横向测评
deepdata_cn17 分钟前
为什么元学习是通用智能AGI的关键?
agi·元学习
DeepAgent18 分钟前
AI Agent 工程实践(39):第一次实现——先做一个最小 Agent
大数据·人工智能·agent
殷紫川23 分钟前
用AI能写出高考满分作文吗?
aigc
茉莉玫瑰花茶25 分钟前
RAG 数据检索
人工智能·算法·机器学习
土拨鼠61826 分钟前
Harness vs 原生 ReAct Agent 对比
人工智能
虎虎(_ _)。゜zzZ28 分钟前
FastAPI-lifespan生命周期管理实战
mysql·aigc·fastapi·大模型部署·lifespan·python异步
Zentceh30 分钟前
全彩夜视 vs 黑白夜视:信息密度、AI识别准确率对比
人工智能·科技·计算机视觉·车载系统·无人机·量子计算·视频
Days205035 分钟前
第二章 社会老年学的概念和理论框架
大数据·人工智能