news 2026/2/23 7:27:42

【万字长文】一文详解MCP协议:如何通过代码执行让大模型智能体效率提升98.7%!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【万字长文】一文详解MCP协议:如何通过代码执行让大模型智能体效率提升98.7%!

简介

本文探讨了MCP协议在AI智能体与工具连接中的应用问题,指出传统直接调用工具方式会导致Token消耗过多。作者提出通过代码执行解决方案,让智能体按需加载工具、高效处理结果并实现复杂控制流,可显著降低Token消耗98.7%。同时详细介绍了代码执行在渐进式工具暴露、数据过滤、隐私保护和状态持久化等方面的优势,为构建高效AI原生应用提供了实用指导。


直接调用工具时,每次工具定义和执行结果都会占用上下文资源。而让智能体通过编写代码来调用工具,能实现更好的扩展性,以下是借助 MCP 实现这一方案的具体原理。

模型上下文协议(Model Context Protocol,简称 MCP)是一套用于连接 AI 智能体与外部系统的开放标准。传统方式中,智能体与工具、数据的对接需要为每一组配对开发定制化集成方案,这会造成系统碎片化和重复开发,难以构建真正可扩展的连接系统。MCP 提供了统一的协议:开发者只需在智能体中实现一次 MCP 集成,就能解锁整个生态的各类工具对接能力。

自 2024 年 11 月 MCP 发布以来,其普及速度迅猛:社区已搭建数千台 MCP 服务器,所有主流编程语言均已推出对应的 SDK,MCP 也已成为行业内智能体对接工具与数据的事实标准。

如今,开发者构建的智能体通常能访问数十台 MCP 服务器上的数百甚至数千个工具。但随着对接工具数量的增加,预先加载所有工具定义以及通过上下文窗口传递中间结果的方式,会导致智能体运行变慢、成本上升。

本文将探讨如何通过代码执行让智能体更高效地与 MCP 服务器交互,在支持更多工具的同时减少 Token 消耗。

一、工具引发的 Token 消耗过量问题降低了智能体效率

随着 MCP 使用规模扩大,两种常见模式会增加智能体的成本和延迟:

第一、工具定义占用过多上下文窗口;

第二、中间工具结果消耗额外 Token。

1.1 工具定义占用过多上下文窗口

大多数 MCP 客户端会预先将所有工具定义直接加载到上下文,并通过直接工具调用语法暴露给模型。这些工具定义可能如下所示:

gdrive.getDocument 描述:从 Google 云端硬盘获取文档 参数: documentId(必填,字符串类型):待获取文档的 ID fields(可选,字符串类型):需返回的特定字段 返回值:包含标题、正文内容、元数据、权限等信息的文档对象
salesforce.updateRecord 描述:更新 Salesforce 中的记录 参数: objectType(必填,字符串类型):Salesforce 对象类型(潜在客户、联系人、客户等) recordId(必填,字符串类型):待更新记录的 ID data(必填,对象类型):需更新的字段及对应新值 返回值:包含确认信息的更新后记录对象

工具描述会占用大量上下文窗口空间,导致响应时间延长、成本增加。当智能体对接数千个工具时,模型在处理用户请求前,需要先处理数十万个 Token。

1.2 中间工具结果消耗额外 Token

大多数 MCP 客户端允许模型直接调用 MCP 工具。例如,你可能会向智能体发起请求:“从 Google 云端硬盘下载我的会议记录,并将其附加到 Salesforce 潜在客户信息中”。

模型会执行如下调用:

工具调用:gdrive.getDocument(documentId: "abc123") → 返回结果:"讨论了第四季度目标...\n[完整会议记录文本]" (该结果会加载到模型上下文) 工具调用:salesforce.updateRecord( objectType: "SalesMeeting", recordId: "00Q5f000001abcXYZ", data: { "备注": "讨论了第四季度目标...\n[完整会议记录文本]" } ) (模型需再次将完整会议记录写入上下文)每一个中间结果都必须经过模型传递。在上述示例中,完整的会议记录会两次流经上下文。对于一场 2 小时的销售会议,这可能意味着额外处理 5 万个 Token。而对于更大的文档,甚至可能超出上下文窗口限制,导致工作流程中断。

当处理大型文档或复杂数据结构时,模型在工具调用之间复制数据时更容易出错。

模型Claude 3.5 Sonnet(新版)Claude 3.5 HaikuClaude 3.5 SonnetGPT-4o*GPT-4o mini*Gemini 1.5 ProGemini 1.5 Flash
研究生水平推理(GPQA 钻石级)65.0%(零样本思维链)41.6%(零样本思维链)59.4%(零样本思维链)53.6%(零样本思维链)40.2%(零样本思维链)59.1%(零样本思维链)51.0%(零样本思维链)
本科水平知识(MMLU Pro)78.0%(零样本思维链)65.0%(零样本思维链)75.1%(零样本思维链)--75.8%(零样本思维链)67.3%(零样本思维链)
代码能力(HumanEval)93.7%(零样本)88.1%(零样本)92.0%(零样本)90.2%(零样本)87.2%(零样本)--
数学解题(MATH)78.3%(零样本思维链)69.2%(零样本思维链)71.1%(零样本思维链)76.6%(零样本思维链)70.2%(零样本思维链)86.5%(四样本思维链)77.9%(四样本思维链)
高中数学竞赛(AIME2024)16.0%(零样本思维链)5.3%(零样本思维链)9.6%(零样本思维链)9.3%(零样本思维链)---
视觉问答(MMMU)70.4%(零样本思维链)-68.3%(零样本思维链)69.1%(零样本思维链)59.4%(零样本思维链)65.9%(零样本思维链)62.3%(零样本思维链)
智能体编码(SWE-bench 验证集)49.0%40.6%33.4%----
智能体工具使用(TAU-bench)零售行业 69.2% / 航空行业 46.0%零售行业 51.0% / 航空行业 22.8%零售行业 62.6% / 航空行业 36.0%----
  • 注:我们的评估表格未纳入 OpenAI 的 o1 模型系列,因其依赖大量响应前计算时间,与常规模型存在本质差异,难以进行公平的性能对比。

MCP 客户端会将工具定义加载到模型的上下文窗口,并编排一个消息循环,使得每次工具调用和结果都需在操作之间经过模型传递。

二、借助 MCP 实现代码执行,提升上下文效率

随着代码执行环境在智能体中的普及,一种解决方案是将 MCP 服务器呈现为代码 API,而非直接的工具调用。智能体可通过编写代码与 MCP 服务器交互,这种方式能同时解决上述两个问题:智能体仅加载所需工具,并在执行环境中处理数据后,再将结果返回给模型。

实现方式有多种。其中一种是为所有已连接的 MCP 服务器生成工具文件目录,以下是 TypeScript 实现示例:

servers├── google-drive │ ├── getDocument.ts │ ├── ...(其他工具) │ └── index.ts ├── salesforce │ ├── updateRecord.ts │ ├── ...(其他工具) │ └── index.ts └── ...(其他服务器)

每个工具对应一个文件,示例如下:

// ./servers/google-drive/getDocument.ts import { callMCPTool } from "../../../client.js"; interface GetDocumentInput { documentId: string; } interface GetDocumentResponse { content: string; } /* 从 Google 云端硬盘读取文档 */ export async function getDocument(input: GetDocumentInput): Promise<GetDocumentResponse> { return callMCPTool<GetDocumentResponse>('google_drive__get_document', input); }

前文提到的 “从 Google 云端硬盘到 Salesforce” 的示例,可转化为如下代码:

// 从 Google 文档读取会议记录,并添加到 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 } });

智能体通过浏览文件系统发现工具:列出./servers/目录找到可用服务器(如google-drivesalesforce),再读取所需的特定工具文件(如getDocument.tsupdateRecord.ts),以理解每个工具的接口。这种方式让智能体仅加载当前任务所需的工具定义,将 Token 消耗量从 15 万个降至 2000 个,时间和成本节省达 98.7%。

Cloudflare 也发布了类似研究结果,并将这种 MCP 代码执行方式称为 “代码模式(Code Mode)”。核心思路一致:大语言模型擅长编写代码,开发者应利用这一优势,构建更高效与 MCP 服务器交互的智能体。

三、借助 MCP 实现代码执行的优势

通过 MCP 代码执行,智能体可按需加载工具、在数据到达模型前进行过滤、一步执行复杂逻辑,从而更高效地利用上下文。此外,这种方式还具备安全和状态管理方面的优势。

3.1 渐进式暴露工具

模型擅长导航文件系统。将工具以代码形式呈现于文件系统,允许模型按需读取工具定义,而非一次性加载全部。

此外,还可在服务器中添加search_tools工具以查找相关定义。例如,在使用前文假设的 Salesforce 服务器时,智能体搜索 “salesforce” 并仅加载当前任务所需的工具。在search_tools工具中加入细节级别参数,允许智能体选择所需的信息详细程度(例如:仅名称、名称和描述、或包含模式的完整定义),也有助于智能体节省上下文并高效查找工具。

3.2 上下文高效的工具结果

处理大型数据集时,智能体可在代码中对结果进行过滤和转换后再返回。例如,获取包含 1 万行数据的电子表格:

// 无代码执行场景 - 所有行均流经上下文 工具调用:gdrive.getSheet(sheetId: 'abc123') → 1 万行数据加载到上下文,需手动过滤 // 代码执行场景 - 在执行环境中过滤 const allRows = await gdrive.getSheet({ sheetId: 'abc123' }); const pendingOrders = allRows.filter(row => row["状态"] === '待处理' ); console.log(`找到 ${pendingOrders.length} 个待处理订单`); console.log(pendingOrders.slice(0, 5)); // 仅输出前 5 条供查看

智能体仅需查看 5 行数据,而非 1 万行。类似模式适用于数据聚合、多数据源关联查询或特定字段提取 —— 所有操作均不会占用过多上下文窗口。

3.3 更强大且上下文高效的控制流

循环、条件判断和错误处理可通过熟悉的代码模式实现,而非串联多个独立工具调用。例如,若需在 Slack 中接收部署通知,智能体可编写如下代码:

let found = false; while (!found) { const messages = await slack.getChannelHistory({ channel: 'C123456' }); found = messages.some(m => m.text.includes('部署完成')); if (!found) await new Promise(r => setTimeout(r, 5000)); } console.log('已收到部署通知');

这种方式比在智能体循环中交替执行 MCP 工具调用和睡眠命令更高效。

此外,编写可执行的条件分支树还能减少 “首 Token 响应时间” 延迟:无需等待模型评估条件语句,可直接让代码执行环境处理。

3.4 隐私保护操作

当智能体通过代码执行使用 MCP 时,中间结果默认保留在执行环境中。这样一来,智能体仅能看到明确日志或返回的数据,意味着不希望与模型共享的数据可在工作流程中传递,而无需进入模型上下文。

对于更敏感的工作负载,智能体框架可自动对敏感数据进行令牌化处理。例如,需将电子表格中的客户联系信息导入 Salesforce 时,智能体编写如下代码:

const sheet = await gdrive.getSheet({ sheetId: 'abc123' }); for (const row of sheet.rows) { await salesforce.updateRecord({ objectType: 'Lead', recordId: row.salesforceId, data: { Email: row.email, Phone: row.phone, Name: row.name } }); } console.log(`已更新 ${sheet.rows.length} 条潜在客户记录`);

MCP 客户端会拦截数据,并在其到达模型前对个人身份信息(PII)进行令牌化处理:

// 若智能体日志输出 sheet.rows,将看到以下内容: [ { salesforceId: '00Q...', email: '[邮箱_1]', phone: '[电话_1]', name: '[姓名_1]' }, { salesforceId: '00Q...', email: '[邮箱_2]', phone: '[电话_2]', name: '[姓名_2]' }, ... ]

之后,当该数据在另一个 MCP 工具调用中共享时,MCP 客户端会通过查找表还原令牌化数据。真实的邮箱地址、电话号码和姓名会从 Google 表格流转至 Salesforce,但全程不会经过模型。这能防止智能体意外记录或处理敏感数据,也可通过这种方式定义确定性安全规则,指定数据的流转范围。

3.5 状态持久化与技能沉淀

支持文件系统访问的代码执行,允许智能体在多个操作间维持状态。智能体可将中间结果写入文件,以便恢复工作和跟踪进度:

const leads = await salesforce.query({ query: 'SELECT Id, Email FROM Lead LIMIT 1000' }); const csvData = leads.map(l => `${l.Id},${l.Email}`).join('\n'); await fs.writeFile('./workspace/leads.csv', csvData); // 后续执行可从断点继续 const saved = await fs.readFile('./workspace/leads.csv', 'utf-8');

智能体还可将自身代码保存为可复用函数。当智能体开发出某一任务的可用代码后,可将其保存供未来使用:

// ./skills/save-sheet-as-csv.ts import * as gdrive from './servers/google-drive'; export async function saveSheetAsCsv(sheetId: string) { const data = await gdrive.getSheet({ sheetId }); const csv = data.map(row => row.join(',')).join('\n'); await fs.writeFile(`./workspace/sheet-${sheetId}.csv`, csv); return `./workspace/sheet-${sheetId}.csv`; } // 后续任何智能体执行过程中均可调用: import { saveSheetAsCsv } from './skills/save-sheet-as-csv'; const csvPath = await saveSheetAsCsv('abc123');

这与 “技能(Skills)” 概念密切相关 ——“技能” 是包含可复用指令、脚本和资源的文件夹,帮助模型提升特定任务的执行性能。在这些保存的函数中添加 SKILL.md 文件,可创建结构化技能供模型参考和使用。久而久之,智能体将构建起一套高阶能力工具箱,不断优化自身工作所需的支撑架构。

需注意的是,代码执行也会带来额外复杂性。运行智能体生成的代码需要安全的执行环境,包括适当的沙箱隔离、资源限制和监控机制。这些基础设施要求会增加运营开销和安全考量,而直接工具调用则可避免这些问题。因此,在采用代码执行方式时,需权衡其带来的优势(降低 Token 成本、减少延迟、提升工具组合能力)与实现成本。

四、总结

MCP 为智能体连接各类工具和系统提供了基础协议。但当连接的服务器过多时,工具定义和结果会消耗过量 Token,降低智能体效率。

尽管文中提到的许多问题(上下文管理、工具组合、状态持久化)看似新颖,但在软件工程领域已有成熟解决方案。代码执行将这些既定模式应用于智能体,让智能体能够通过熟悉的编程结构更高效地与 MCP 服务器交互。若你采用了这种方案,欢迎与 MCP 社区分享你的实践成果。

五、在大模型时代,我们如何有效的去学习大模型?

现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF书籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

四、AI大模型各大场景实战案例

结语

【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 3:47:46

文理分科选对学习机:主流机型的适配指南

一、文理分科下&#xff0c;学习机选择的核心逻辑高中文科重知识体系构建、材料分析与表达输出&#xff0c;理科强逻辑拆解、错题闭环与实验理解&#xff0c;二者对学习机的需求存在本质差异&#xff1a;文科刚需&#xff1a;教材同步讲解的细致度、海量题库的分类检索&#xf…

作者头像 李华
网站建设 2026/2/20 7:57:28

深入探索 Spring Boot3 中 Profiles 多环境配置

前言在当今复杂的软件开发领域&#xff0c;一个应用往往需要在开发、测试、生产等多个环境中运行&#xff0c;每个环境的配置需求大相径庭。想象一下&#xff0c;在开发环境中&#xff0c;你可能需要频繁调试&#xff0c;所以希望日志更加详细&#xff0c;数据库连接到本地易于…

作者头像 李华
网站建设 2026/2/13 13:18:38

Wan2.2-T2V-A14B能否理解隐喻性语言?‘心如刀割’如何呈现?

Wan2.2-T2V-A14B能否理解“心如刀割”&#xff1f;当AI开始读懂你心里的痛 &#x1f494; 你有没有试过把一句诗、一段情绪&#xff0c;丢进AI视频生成器里&#xff0c;然后期待它“懂你”&#xff1f; 比如输入“心如刀割”——不是字面意思的心脏被刀切开&#xff0c;而是一种…

作者头像 李华
网站建设 2026/2/14 6:43:33

spRAG开源项目:5分钟快速安装与使用终极指南

spRAG开源项目&#xff1a;5分钟快速安装与使用终极指南 【免费下载链接】spRAG RAG framework for challenging queries over dense unstructured data 项目地址: https://gitcode.com/gh_mirrors/sp/spRAG spRAG开源项目是一个专为处理复杂非结构化数据设计的检索增强…

作者头像 李华
网站建设 2026/2/16 14:19:06

【运维】StarRocks 跨集群数据迁移工具 - 基于快照进行的快速迁移

文章目录一、整体迁移逻辑1.1 架构概览1.2 核心工作流程阶段 1&#xff1a;初始化阶段 2&#xff1a;启动工作线程阶段 3&#xff1a;周期性执行1.3 任务生成逻辑1.3.1 元数据同步1.3.2 DDL 任务生成1.3.3 数据复制任务生成1.4 任务执行流程1.4.1 DDL 任务执行1.4.2 数据复制任…

作者头像 李华