宝玉xp 25-11-05 12:43
微博认证:前微软Asp.Net最有价值专家 2025微博年度新知博主 科技博主

对于向深入学习上下文工程(Context Engineering)的同学,Anthropic刚发的这篇《Code execution with MCP: Building more efficient agents》又是一篇必看的文章。

这篇文章讲的是如何解决 MCP 工具太多的问题,但凡你做过 Agent 开发,用了大量 MCP 工具,就会知道 MCP 工具多了后最大的问题就是上下文占用太多,不仅导致成本高,还会影响推理和生成质量。

另外一个问题就是 MCP 工具返回的中间结果也会挤占大量的上下文空间。

看这文章的时候忍不住夸了一下 Manus,他们确实在上下文工程方面探索的很深入了,里面的工程技巧和他们以前分享过的很类似。
> Manus 把工具分成了 3 层,预定义了很多 Shell 工具,也是让 Agent 通过文件系统直接检索,另外也会实时编写 Python 代码来创造工具 http://t.cn/AXAQWD1y
> Manus 《AI 智能体的上下文工程:构建 Manus 的经验教训》解读 http://t.cn/AXAQWD12

Anthropic 的方案也很简单直接,就是把“代码”也当作工具的一种,然后从代码中去调用 MCP。

这样做有很多好处:

1. 解决了系统提示词中工具定义太多的问题

不需要在系统提示词中加载所有 MCP 工具,只需要定义一个“代码”工具。

那需要工具了怎么办呢?

这些代码都保存在统一的目录下,去目录检索下就能找到合适的工具了,比如这是文中的一个目录示例:

servers
├── google-drive
│ ├── getDocument.ts
│ ├── ... (other tools)
│ └── index.ts
├── salesforce
│ ├── updateRecord.ts
│ ├── ... (other tools)
│ └── index.ts
└── ... (other servers)

找不到现成的工具怎么办?

直接现写一个!写完了还可以保存起来下次继续用。

2. 解决了 MCP 工具返回结果太长的问题

比如说我们要用 MPC 工具获取 1 万行数据后筛选转换出合格的数据,就可以先从代码中调用 MCP 工具获取这 1 万行数据,然后从代码中去筛选过滤,最后只返回 5 条数据,这样上下文中就只需要保留那 5 条过滤的数据,而不是像以前一样有 1 万条数据在里面。

3. 解决了数据隐私问题

如果你直接使用 MCP 工具,工具返回的数据都要加载到上下文每次上传给 LLM,用代码就可以对敏感数据先二次处理再加到上下文

4. 中间结果持久化和技能沉淀

代码可以把一些中间结果写入文件保存到硬盘,一方面可以不占用上下文空间,另一方面也可以随时从硬盘避免反复调用 MCP。

还有就是虽然很多代码是临时生成的,但是这些临时生成的代码可以保存下来,沉淀为“技能”(Skill),加上 SKILL .MD 文件就和 Claude Code 的技能一样可以被反复使用了。

可能有人还记得 2023 年 Jim Fan 他们团队做的一个玩 Minecraft 的 Agent Voyager,就能把玩游戏的技能写成代码,保存起来后续使用,最终让 Agent 在 Minecraft 中做很多事。现在想想还是蛮超前的。http://t.cn/A6pwZYaM

原文:http://t.cn/AXAQwZmZ
翻译:http://t.cn/AXAQWD1L

发布于 美国