使用 MCP 执行代码:提升智能体效率的 Anthropic 方案
摘要
Anthropic 证明,智能体可以通过代码执行与 MCP 服务器交互,而非直接调用工具,从而将令牌消耗减少高达 98.7%,同时降低延迟并保护隐私和状态。
为什么 MCP 需要新的交互模式
MCP(模型上下文协议)是一种开放标准,允许 AI 智能体通过通用 API 调用外部工具。自 2024 年 11 月推出以来,已创建了数千个 MCP 服务器和主流语言的 SDK,使 MCP 成为连接智能体与工具和数据的事实标准。
然而,当智能体连接到数百个服务器时,会出现两种消耗令牌的模式:
- 工具定义充斥上下文窗口。 预先加载每个工具描述可能需要数十万个令牌,而模型甚至还未看到用户请求。
- 中间结果经过模型传输。 每次工具调用的原始输出都会发送回 LLM,每一步都会重复,对于大型文档可能增加数万个令牌。
这两种模式都会增加推理成本和延迟,并且可能超出模型的上下文限制。
代码执行作为令牌高效的桥梁
智能体可以将 MCP 服务器视为代码 API,而不是直接将工具定义提供给 LLM。智能体编写代码,导入所需的工具模块,调用它们,并在沙盒执行环境中处理结果。这种方法解决了上述两个问题:
- 按需加载:智能体只读取代表所需工具的文件,将上下文从约 150k 令牌缩减到约 2k 令牌(减少 98.7%)。
- 本地结果处理:数据在代码中被过滤、聚合或转换,然后任何令牌才被发送回模型,防止大型负载进入上下文窗口。
一个 TypeScript 示例展示了智能体生成可用工具的虚拟文件树,然后仅在需要时导入 getDocument.ts 和 updateRecord.ts。同样的模式适用于 MCP SDK 支持的任何语言。
使用 MCP 执行代码的核心优势
渐进式披露
智能体可以探索文件系统(或 search_tools 端点)以仅发现相关的工具定义。添加详细级别参数(仅名称、名称 + 描述、完整模式)进一步减少上下文使用。
上下文高效的工具结果
大型数据集可以在到达模型之前被修剪。例如,获取一个 10,000 行的电子表格并仅返回五行,可大幅减少令牌负载。同样的技术适用于连接、聚合和字段提取。
强大的控制流
循环、条件语句和错误处理以原生代码表达,而不是一系列单独的工具调用。这消除了来回的“调用 → 等待 → 调用”模式,减少了首令牌时间延迟。
保护隐私的操作
中间数据保留在执行沙盒内。敏感字段可以在任何模型暴露之前进行令牌化,确保 PII 永远不会出现在 LLM 的上下文中。MCP 客户端可以在将数据传递给下游工具时自动取消令牌化。
状态持久化和可复用技能
智能体可以将中间结果写入文件,从而实现可恢复的工作流。生成的代码可以保存为可复用函数,并与 SKILL.md 清单打包,形成技能——模型可以调用以执行专门任务的脚本和指令文件夹。
权衡和操作考虑
运行智能体生成的代码需要安全的沙盒,具备资源限制、监控和适当的隔离(参见 Anthropic 的代码沙盒文档)。这些基础设施成本必须与令牌节省、延迟收益和更丰富的组合能力进行权衡。
实用要点
- 当智能体需要与许多 MCP 工具交互或处理大型数据负载时,采用代码执行。
- 使用渐进式披露(文件系统导航或
search_tools)来保持上下文大小最小。 - 利用沙盒执行来强制隐私并在步骤之间维护状态。
- 将常用代码打包为技能,以加速未来的智能体开发。
社区邀请
Anthropic 鼓励开发者尝试这种模式,并与 MCP 社区分享结果(链接)。