Anthropic于2025年11月4日发布文章,介绍通过MCP(Model Context Protocol,模型上下文协议)实现代码执行以构建更高效AI代理的方案:MCP作为2024年11月推出的开放标准,已成为行业连接AI代理与外部工具/数据的默认协议,但传统直接工具调用存在工具定义占用过多上下文窗口中间结果重复消耗令牌两大问题(如连接数千工具需处理数十万令牌、2小时会议转录文本重复传递增加5万令牌);而通过代码执行(将MCP服务器作为代码API,代理编写代码交互),可实现工具按需加载(令牌消耗从15万降至2千,节省98.7%)、数据预处理、复杂控制流优化等,还带来隐私保护(中间结果默认不进入模型上下文、PII自动令牌化)、状态持久化等优势,不过需平衡安全执行环境的运维成本。


在这里插入图片描述


3. 详细总结

一、文档基础信息与MCP协议概述

  1. 文档背景:发布于2025年11月4日,由Anthropic工程师Adam Jones和Conor Kelly撰写,核心聚焦“通过MCP代码执行优化AI代理效率”。
  2. MCP定义与价值
    • 全称:Model Context Protocol(模型上下文协议),是连接AI代理与外部系统的开放标准
    • 解决痛点:传统代理与工具/数据连接需为每对组合定制集成,导致碎片化和重复工作,难以规模化;MCP只需代理中实现一次,即可解锁整个集成生态。
  3. MCP adoption现状:自2024年11月推出后快速普及,社区已构建数千个MCP服务器,所有主流编程语言均有SDK,成为行业连接代理与工具/数据的默认标准
  4. 当前挑战:开发者常构建可访问数十个MCP服务器中数百至数千个工具的代理,但随工具数量增长,** upfront加载所有工具定义中间结果通过上下文传递**两大问题,导致代理速度变慢、成本上升。

二、传统MCP工具调用的效率问题

传统MCP客户端通过“直接工具调用”模式交互,存在两大核心问题,导致令牌消耗过高:

问题1:工具定义过载上下文窗口
  • 表现:多数客户端将所有工具定义直接加载到模型上下文,采用专用工具调用语法,示例工具定义如下:
    工具名称 描述 关键参数 返回结果
    gdrive.getDocument 从Google Drive获取文档 documentId(必填,字符串)、fields(可选,字符串) 含标题、正文、元数据、权限的文档对象
    salesforce.updateRecord 更新Salesforce中的记录 objectType(必填,如Lead/Contact)、recordId(必填)、data(必填,待更新字段) 含确认信息的更新后记录对象
  • 影响:工具描述占用大量上下文空间,连接数千个工具时,代理需先处理数十万令牌才能读取用户请求,显著增加响应时间与成本。
问题2:中间工具结果消耗额外令牌
  • 表现:模型直接调用MCP工具,中间结果需完整传递至模型上下文,存在重复消耗。以“从Google Drive下载会议转录并附加到Salesforce线索”为例:
    1. 调用gdrive.getDocument(documentId: "abc123"),返回完整转录文本(如“Discussed Q4 goals…”),加载到上下文;
    2. 调用salesforce.updateRecord,需将上述完整转录文本再次写入data.Notes字段,重复进入上下文。
  • 影响
    • 令牌重复消耗:2小时销售会议转录可能额外产生5万令牌
    • 上下文超限风险:超大型文档可能突破模型上下文窗口限制,中断工作流;
    • 错误率上升:模型在工具间复制大型/复杂数据时更易出错。

三、MCP代码执行的解决方案与优势

1. 核心思路

将MCP服务器以代码API形式呈现,代理通过编写代码与MCP服务器交互,而非直接调用工具。此模式可解决传统问题:工具按需加载,数据在执行环境预处理后再传递给模型。

2. 实现方式(以TypeScript为例)
  • 文件树结构:生成包含所有MCP服务器工具的文件目录,每个工具对应独立代码文件,示例结构:
    servers
    ├── google-drive
    │   ├── getDocument.ts(工具实现文件)
    │   └── index.ts
    ├── salesforce
    │   ├── updateRecord.ts(工具实现文件)
    │   └── index.ts
    └── 其他服务器
    
  • 工具代码示例google-drive/getDocument.ts):
    import { callMCPTool } from "../../../client.js";
    interface GetDocumentInput { documentId: string; }
    interface GetDocumentResponse { content: string; }
    /* 从Google Drive读取文档 */
    export async function getDocument(input: GetDocumentInput): Promise<GetDocumentResponse> {
      return callMCPTool<GetDocumentResponse>('google_drive__get_document', input);
    }
    
  • 任务代码示例(Google Drive转Salesforce):
    import * as gdrive from './servers/google-drive';
    import * as salesforce from './servers/salesforce';
    const transcript = (await gdrive.getDocument({ documentId: 'abc123' })).content;
    await salesforce.updateRecord({
      objectType: 'SalesMeeting',
      recordId: '00Q5f000001abcXYZ',
      data: { Notes: transcript }
    });
    
3. 六大核心优势
优势类别 具体说明 案例/数据
渐进式披露 代理通过文件系统(列出./servers目录)或search_tools工具按需加载工具定义,可选择细节级别(名称仅/名称+描述/完整定义) 处理Salesforce任务时,仅搜索并加载“salesforce”相关工具,避免加载无关定义
上下文高效工具结果 代码中过滤、聚合、转换数据,仅传递必要结果至模型 1万行表格数据,代码中筛选“Status=pending”的订单,仅返回前5行给模型,避免1万行进入上下文
强大高效控制流 用代码实现循环、条件、错误处理,替代工具调用链,减少“首令牌时间”延迟 Slack部署通知监听:用while循环查询频道历史,5秒轮询一次,无需交替调用工具与睡眠命令
隐私保护 中间结果默认留在执行环境,仅显式日志/返回结果进入模型;敏感数据(PII)自动令牌化 导入客户信息到Salesforce时,模型看到email: [EMAIL_1]而非真实邮箱,真实数据直接从Google Sheets传至Salesforce,不经过模型
状态持久化与技能复用 - 状态持久化:代码将中间结果写入文件(如CSV),支持后续读取恢复工作
- 技能复用:保存通用代码为可复用函数(如saveSheetAsCsv),搭配SKILL.md形成结构化技能
1. 导出1000条Salesforce Lead为leads.csv,后续读取文件继续处理
2. 保存saveSheetAsCsv函数,后续任务直接导入调用
令牌成本大幅降低 工具按需加载+数据预处理,减少上下文令牌消耗 传统模式需15万令牌的任务,代码执行模式仅需2000令牌,节省98.7%(Cloudflare“Code Mode”验证类似结论)

四、模型性能参考(部分指标)

文档提供主流模型在关键任务上的性能数据(注:排除OpenAI o1系列,因其依赖大量预响应计算,难以对比),表格如下:

任务类型 Claude 3.5 Sonnet (new) Claude 3.5 Haiku Claude 3.5 Sonnet GPT-4o* GPT-4o mini* Gemini 1.5 Pro Gemini 1.5 Flash
研究生级推理 GPQA(Diamond) 65.0%(0-shot CoT) 41.6%(0-shot CoT) 59.4%(0-shot CoT) 53.6%(0-shot CoT) 40.2%(0-shot CoT) 59.1%(0-shot CoT) 51.0%(0-shot CoT)
本科级知识 MMLU Pro 78.0%(0-shot CoT) 65.0%(0-shot CoT) 75.1%(0-shot CoT) - - 75.8%(0-shot CoT) 67.3%(0-shot CoT)
代码能力 HumanEval 93.7%(0-shot) 88.1%(0-shot) 92.0%(0-shot) 90.2%(0-shot) 87.2%(0-shot) - -
数学解题 MATH 78.3%(0-shot CoT) 69.2%(0-shot CoT) 71.1%(0-shot CoT) 76.6%(0-shot CoT) 70.2%(0-shot CoT) 86.5%(4-shot CoT) 77.9%(4-shot CoT)
高中数学竞赛 AIME2024 16.0%(0-shot CoT) 5.3%(0-shot CoT) 9.6%(0-shot CoT) 9.3%(0-shot CoT) - - -
视觉问答 MMMU 70.4%(0-shot CoT) - 68.3%(0-shot CoT) 69.1%(0-shot CoT) 59.4%(0-shot CoT) 65.9%(0-shot CoT) 62.3%(0-shot CoT)
代理编码 SWE-bench Verified 49.0% 40.6% 33.4% - - - -
代理工具使用 TAU-bench 零售69.2% / 航空46.0% 零售51.0% / 航空22.8% 零售62.6% / 航空36.0% - - - -

五、注意事项与总结

  1. 代码执行的挑战:需构建安全执行环境,包含沙箱隔离、资源限制、监控机制,增加运维成本与安全考量,需与直接工具调用的便捷性平衡。
  2. 核心结论
    • MCP是代理连接多工具/系统的基础协议,但规模化后存在令牌消耗问题;
    • 代码执行将软件工程的成熟模式(如文件系统、代码控制流)应用于AI代理,解决传统工具调用的效率痛点;
    • 建议开发者实践此方案,并向MCP社区分享 findings。
  3. 致谢:感谢Jeremy Fox、Jerome Swannack等多位贡献者对文档草稿的反馈。

4. 关键问题

问题1:MCP协议相比传统代理-工具集成方式,核心优势是什么?为何能成为行业默认标准?

答案

  • 核心优势:传统集成需为“代理-工具”每对组合定制开发,导致碎片化和重复工作,难以规模化;而MCP作为开放标准,开发者只需在代理中实现一次MCP,即可接入整个MCP生态的工具与数据,大幅降低集成成本。
  • 成为默认标准的原因:自2024年11月推出后,社区快速响应,构建了数千个MCP服务器,且所有主流编程语言均提供SDK,覆盖了代理连接外部系统的核心需求,解决了行业规模化集成的痛点,因此被广泛采纳。

问题2:MCP代码执行模式如何解决传统直接工具调用的“令牌消耗过高”问题?请结合具体数据说明效果。

答案
MCP代码执行通过“工具按需加载”和“数据预处理”两大机制解决令牌问题,具体如下:

  1. 工具按需加载:传统模式 upfront加载所有工具定义(如数千工具需处理数十万令牌),而代码执行模式将工具以代码文件形式存储(如TypeScript的google-drive/getDocument.ts),代理通过文件系统或search_tools工具,仅加载当前任务所需的工具定义(如处理Salesforce任务时仅加载Salesforce相关工具);
  2. 数据预处理:传统模式中中间结果(如会议转录文本)需完整传递至模型上下文(如2小时转录文本重复传递增加5万令牌),而代码执行模式在执行环境中过滤、转换数据(如1万行表格仅返回前5行给模型),避免冗余数据进入上下文。
  • 效果数据:文档案例显示,传统模式需150,000令牌的任务,代码执行模式仅需2,000令牌,令牌消耗减少98.7%,同时降低响应时间与成本。

问题3:MCP代码执行在隐私保护方面有哪些设计?如何确保敏感数据(如客户PII)不被模型获取?

答案
MCP代码执行通过“中间结果隔离”和“敏感数据令牌化”两大设计保障隐私,具体如下:

  1. 中间结果隔离:代码执行时,中间结果(如从Google Drive获取的文档内容、Salesforce查询结果)默认存储在执行环境中,仅当开发者显式通过console.log或返回值传递时,数据才进入模型上下文,避免无关数据暴露;
  2. 敏感数据令牌化:针对PII(如客户邮箱、手机号、姓名),MCP客户端会自动拦截并替换为令牌(如真实邮箱user@example.com替换为[EMAIL_1],手机号替换为[PHONE_1]),模型仅能看到令牌而非真实数据;当数据需传递至其他MCP工具(如从Google Sheets导入Salesforce)时,MCP客户端通过内部查找表将令牌还原为真实数据,确保真实敏感数据仅在工具间直接流转,不经过模型上下文。
  • 应用场景:导入客户联系信息到Salesforce时,模型看到的是{email: '[EMAIL_1]', phone: '[PHONE_1]'},真实信息从未进入模型,避免模型误处理或泄露敏感数据。

https://www.anthropic.com/engineering/code-execution-with-mcp

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐