节省98.7%的成本,MCP重大革新!用代码直接调用工具
Anthropic官方发布了一篇文章,介绍了MCP的重大革新,相当于重构了。让AI智能体通过编写代码调用工具,而非直接调用,能实现惊人的效率扩展,成本节省98.7%。模型上下文协议,即MCP,是一项旨在连接AI智能体与外部世界的开放标准。在它出现之前,每一种智能体与工具的连接,都需要一次定制化的开发。这种重复且分散的工作,极大地阻碍了构建真正互联互通的智能系统。MCP提供了一种通用语言,开发者只需
Anthropic官方发布了一篇文章,介绍了MCP的重大革新,相当于重构了。
让AI智能体通过编写代码调用工具,而非直接调用,能实现惊人的效率扩展,成本节省98.7%。

模型上下文协议,即MCP,是一项旨在连接AI智能体与外部世界的开放标准。
在它出现之前,每一种智能体与工具的连接,都需要一次定制化的开发。
这种重复且分散的工作,极大地阻碍了构建真正互联互通的智能系统。
MCP提供了一种通用语言,开发者只需在自己的智能体中实现一次MCP,便能解锁一个由无数集成组成的庞大生态系统。
自2024年11月推出以来,MCP的普及速度超乎想象。
社区构建了数以千计的MCP服务器,主流编程语言均已支持相应的软件开发工具包。
MCP已然成为业界连接智能体与外部工具和数据的标准。
今天,开发者们构建的智能体已经可以轻松访问分布在数十个MCP服务器上的成百上千种工具。
但一个新问题随之而来,随着连接工具数量的爆炸式增长,一种低效的模式开始浮现。
在任务开始前,将所有工具的定义全部加载到模型的上下文窗口中,并在每次工具调用后,将中间结果也塞入其中,这严重拖慢了智能体的响应速度,并急剧增加了运行成本。
这篇文章深入探讨了一种新的交互范式:代码执行。
它将揭示智能体如何通过这种方式,更高效地与MCP服务器互动,用更少的token处理更多的工具,解决规模化带来的效率难题。
臃肿的上下文正在拖累智能体
当智能体接入的工具规模越来越大时,两种模式会显著增加成本和延迟。
一种是工具定义本身就挤占了上下文窗口。
另一种是工具返回的中间结果,进一步消耗了宝贵的上下文空间。
我们先来看第一种情况,工具定义是如何塞满上下文窗口的。

多数MCP客户端的实现方式,是在一开始就将所有可用工具的定义,通过一种直接的工具调用语法,全部加载到模型的上下文中。
这些定义信息通常是这样的:

每一个工具的描述,都像一本小小的说明书。
当智能体只连接几个工具时,这不成问题。
但想象一下,当一个智能体需要面对成百上千个工具时,这些说明书会汇集成一部厚重的字典。
模型在处理用户真正的请求之前,就必须先通读这整部字典,耗费成千上万甚至数十万的token,这无疑增加了响应时间和经济成本。
现在来看第二种情况,中间结果是如何消耗上下文的。
多数MCP客户端允许模型直接调用MCP工具。假设我们向智能体发出一个指令:从谷歌硬盘下载我的会议纪要,并将其附加到销售力量的潜在客户记录中。
模型的处理流程可能是这样的:

在这个过程中,每一次工具调用的中间结果,都必须先经过模型。
完整的会议纪要文本,先是从谷歌硬盘流入模型,再由模型原封不动地传递给销售力量。
一份长达两小时的销售会议纪要,可能意味着额外处理多达5万个token。
如果处理的是更庞大的文档,甚至可能直接超出上下文窗口的长度限制,导致整个工作流彻底中断。
更重要的是,当模型需要在大块的文档或复杂的数据结构之间复制粘贴数据时,出错的概率也会随之增加。
MCP客户端将工具定义加载进模型的上下文窗口,并主导一个消息循环,每一次的工具调用和结果返回,都必须在模型这里过一手。
代码执行让上下文效率获得解放
随着代码执行环境在智能体中的普及,一个优雅的解决方案应运而生。
我们可以将MCP服务器提供的工具,不再视为需要直接调用的函数,而是包装成代码层面的API。
这样,智能体便能通过编写和执行代码来与MCP服务器互动。
这种方法巧妙地解决了前面提到的两个挑战。
智能体可以只加载当前任务所需的工具信息,并且能在代码执行环境中对数据进行预处理,之后再将最关键的结果返回给模型。
实现这一目标的方式有很多。
一种直观的思路是,将所有连接的MCP服务器及其工具,生成一个清晰的文件目录树结构。
下面是一个使用TypeScript语言的实现示例:

目录结构清晰地反映了可用的服务和工具。每一个工具都对应一个文件,其内容大致如下:

在这个新模式下,智能体发现工具的方式,变成了探索文件系统。
它可以通过列出./servers/目录,来发现所有可用的服务,比如谷歌硬盘和销售力量。
然后,它会根据任务需求,只读取特定工具的文件,比如getDocument.ts和updateRecord.ts,来理解这两个工具的接口和用法。
这种按需加载的方式,带来的效率提升是惊人的。
原本可能需要消耗15万token的预加载过程,现在可能只需要2000token。
这直接带来了98.7%的时间和成本节省。
Cloudflare公司也发表过类似的发现,他们将这种用代码执行与MCP交互的模式称为代码模式。
其核心洞察是相同的:大语言模型天生就擅长编写代码,开发者应该充分利用这一优势,构建与MCP服务器交互更高效的智能体。
代码执行带来一系列深刻的优势
代码执行与MCP的结合,不仅仅是节省token这么简单。
它通过按需加载工具、在数据抵达模型前进行过滤,以及单步执行复杂逻辑,极大地提升了智能体的上下文使用效率。
除此之外,它还在安全性和状态管理方面,带来了意想不到的好处。
首先是渐进式信息披露。
模型非常擅长在文件系统中导航。
将工具呈现为文件系统中的代码,允许模型按需读取工具的定义,而不是在一开始就囫囵吞下所有信息。
这就好像一位厨师,不再需要把厨房里所有的菜谱都摊在面前,而是在决定做什么菜之后,才去书架上找到那一本。
另一种实现方式是,在服务器上提供一个search_tools(搜索工具)的工具。
当智能体需要与销售力量交互时,它可以先搜索salesforce,服务器会返回相关的工具列表。
这个搜索工具还可以包含一个细节级别参数,让智能体可以选择需要的信息详细程度,比如只返回工具名称,或者返回名称加描述,亦或是包含完整参数和模式的全部定义。
这同样能帮助智能体节约上下文,高效地找到所需工具。
其次是上下文效率极高的工具结果处理。
当处理大规模数据集时,智能体可以在代码中先对结果进行过滤和转换,再决定将什么信息返回给模型。
想象一下获取一个包含1万行数据的电子表格。在没有代码执行的模式下,所有数据都将涌入上下文:

最终,模型只需要看到5行相关的样本数据,而不是全部的1万行。
类似地,数据聚合、跨多个数据源的连接,或是从复杂对象中提取特定字段等操作,都可以在不污染上下文窗口的情况下高效完成。
再次是更强大且上下文友好的控制流程。
循环、条件判断和错误处理,这些在软件工程中司空见惯的逻辑,现在可以用人们熟悉的代码模式来实现,而不再需要通过一系列独立的工具调用来笨拙地模拟。
例如,如果需要等待一个在Slack频道中出现的部署完成通知,智能体可以直接编写如下代码:

这种方式,远比在MCP工具调用和休眠指令之间反复切换的智能体循环要高效得多。
此外,能够一次性写出一个完整的条件分支树并交由代码环境执行,也大大减少了首个token生成时间的延迟。
智能体无需等待模型慢悠悠地评估一个if语句,而是让代码执行环境瞬间完成判断。
代码执行还带来了保护隐私的操作。
当智能体使用代码执行与MCP交互时,所有的中间结果默认都保留在代码执行环境中。
只有被显式打印或返回的内容,才会被模型看到。
这意味着,那些我们不希望与模型共享的敏感数据,可以在整个工作流中顺畅流转,而完全不进入模型的上下文。
对于更敏感的工作负载,智能体的运行环境甚至可以自动对敏感数据进行脱敏处理。
想象一个场景,你需要将一份包含客户联系方式的电子表格导入到销售力量中。智能体编写的代码是这样的:

MCP客户端会在数据发送给模型之前,拦截并脱敏其中的个人身份信息(PII)。
如果智能体此刻打印sheet.rows,它看到的会是这样:

当这些脱敏后的数据在下一次MCP工具调用中被使用时,MCP客户端会通过内部的映射表将其还原。
真实的电子邮件、电话号码和姓名,从谷歌表格安全地流向了销售力量,但从未经过模型本身。
这从机制上防止了智能体意外记录或处理敏感数据。
开发者还可以利用这一特性,来定义确定性的安全规则,精确控制数据的流向。
最后是状态的持久化与技能的沉淀。
拥有文件系统访问能力的代码执行环境,允许智能体在多次操作之间保持状态。
智能体可以将中间结果写入文件,从而实现任务的中断和恢复。

更令人兴奋的是,智能体可以将自己编写的有效代码,保存为可复用的函数,也就是技能。
当智能体成功完成一项任务后,它可以将实现该任务的代码固化下来,以备将来使用。

这与技能的概念紧密相连。
技能本质上是包含了可复用指令、脚本和资源的文件夹,模型可以利用它们来提升在特定任务上的表现。
通过在这些保存的函数旁边,再添加一个SKILL.md的说明文件,就创造了一个结构化的技能,模型可以方便地引用和调用。
随着时间的推移,智能体能够为自己构建一个强大的、由各种高级能力组成的工具箱,不断进化,以更高效地完成工作。
当然,代码执行也引入了其自身的复杂性。
运行由智能体生成的代码,需要一个绝对安全的执行环境。
这个环境必须具备完善的沙盒机制、资源限制和监控能力。
这些基础设施的要求,增加了额外的运维开销和安全考量,而这些是直接工具调用模式所没有的。
因此,开发者需要权衡代码执行带来的巨大收益,包括token成本的降低、延迟的缩短和工具组合能力的提升,以及其实现背后所需的成本。
MCP为智能体连接海量的工具和系统,提供了一个坚实的基础协议。
但是,一旦连接的服务器过多,工具的定义和结果就会过度消耗token,降低智能体的效率。
尽管上下文管理、工具组合、状态持久化这些问题,在智能体领域感觉很新颖,但它们在传统的软件工程领域,早已有了成熟的解决方案。
代码执行,正是将这些经过时间检验的工程模式,应用于智能体之上,让它们能够使用熟悉的编程结构,更高效地与MCP服务器进行交互。
将智能体从一个单纯的工具使用者,转变为一个聪明的代码编写者,这或许是通往更强大、更通用智能体的一条必由之路。
参考资料:
https://www.anthropic.com/engineering/code-execution-with-mcp
END
更多推荐

所有评论(0)