使用 MCP 进行代码执行:构建更高效的 AI Agent

Anthropic 提出了一种改变 AI Agent 与 Model Context Protocol (MCP) 交互方式的方法,即从直接的工具调用转向代码执行。通过将 MCP 服务器呈现为代码 API,Agent 可以仅加载必要的工具定义并在执行环境中处理数据,从而显著降低 Token 开销和延迟。

减少 MCP Agent 中的 Token 消耗

随着 AI Agent 扩展到在多个 MCP 服务器上使用数百或数千个工具,在 Token 使用方面出现了两个主要的低效问题:

1. 工具定义过载

标准的 MCP 客户端通常会预先将所有工具定义加载到模型的上下文窗口中。当 Agent 连接到数千个工具时,模型在开始处理用户请求之前必须先处理数十万个 Token,这增加了成本和响应时间。

2. 中间结果膨胀

在传统的工具调用循环中,每个中间结果都必须经过模型的上下文。例如,如果 Agent 从 Google Drive 下载一个大型会议记录并将其上传到 Salesforce,该记录的全文会在第一次调用时加载到上下文窗口中,然后在第二次调用时再次写回上下文。对于大型文档,这可能会消耗数万个 Token,并可能超出上下文窗口限制,导致工作流失败或数据复制错误。

使用 MCP 实现代码执行

Agent 可以通过编写代码与 MCP 服务器进行交互,而不是进行直接的工具调用。一种实现方式是生成一个文件系统树,其中每个 MCP 服务器及其关联的工具都表示为文件(例如, ./servers/google-drive/getDocument.ts)。

在这种架构中,Agent 通过探索文件系统来发现工具——通过列出目录来查找服务器,并通过读取特定文件来了解工具接口。这种“渐进式披露”方法允许 Agent 仅加载特定任务所需的定义。Anthropic 指出,这可以将 Token 使用量从 150,000 个 Token 减少到 2,000 个 Token,代表在时间和成本上实现了 98.7% 的节省。

代码执行方法的关键优势

上下文高效的数据处理

代码执行允许 Agent 在将结果返回给模型之前,在执行环境中对数据进行过滤、筛选、转换和聚合。例如,与其手动将一个包含 10,000 行的电子表格加载到上下文窗口中进行过滤,Agent 可以编写一个脚本来筛选“pending”订单,并仅记录前五行以供审查,从而大幅减少了处理的 Token 数量。

高级控制流

通过使用循环、条件语句和错误处理等标准编程结构,Agent 可以通过单个步骤执行复杂的逻辑。这比通过 Agent 循环链式调用单个工具更有效率。此外,在环境中执行条件树可以降低“首个 Token 生成时间”的延迟,因为模型不需要按顺序评估每一个 if 语句。

隐私与安全

默认情况下,中间结果保留在执行环境中,这意味着不需要被模型查看的敏感数据永远不会进入上下文窗口。此外,MCP 客户端可以配置为在数据到达模型之前自动对 PII (Personally Identifiable Information) 进行 Tokenize 处理,仅在数据传递给另一个 MCP 工具调用时才进行 Untokenize 处理。这确保了敏感数据从源头流向目的地,而模型从未处理过原始的PII。

状态持久化与可重用技能

通过将中间结果写入文件,文件系统访问使得 Agent 可以跨操作维护状态。Agent 还可以将自己成功的实现作为可重用的函数保存在“skills”文件夹中。当与 SKILL.md 文件配合使用时,这些函数就变成了模型可以为专门任务引用的结构化技能,允许 Agent 随着时间的推移不断进化其自身的高级能力工具箱。

运维考虑因素

虽然代码执行带来了显著的效率提升,但它也引入了基础设施的复杂性。运行 Agent 生成的代码需要一个具备沙箱机制、资源限制和监控功能的安全执行环境,以减轻安全风险。必须在降低 Token 成本和降低延迟的收益与这些运维开销之间进行权衡。

Sources

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • Dispatch