免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


成本降到 2% 的 Agent 方案:把工具调用搬进执行环境

发布日期:2025-11-10 08:13:27 浏览次数: 1559
作者:AI设计湿

微信搜一搜,关注“AI设计湿”

推荐语

将Agent工具调用搬进执行环境,成本直降98%!揭秘Anthropic提出的MCP方案如何解决上下文管理难题。

核心内容:
1. 现有LLM+Tool模式的弊端与上下文管理痛点
2. MCP执行代码方案的工作原理与架构对比
3. Salesforce案例展示新方案的实际效能提升

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家


现阶段企业级 Agent 的实现及弊端

目前我正在开发一款 AI Sales Agent,它是基于 langgraph 、langchain 构建,在现有的架构设计上,我们采取了一种较为简洁的实现方式:LLM + Tool 的模式。它最大的好处就是 langgraph 的链路非常简单,不会出现多个分支的情况,LLM 会根据上下文自行判断是否需要调用 tool,不需要的话则直接返回。

在项目代码中定义了好几个 tool,比如数据格式校验、提取信息、设置表单等等,每一个 tool 的功能非常单一,但是也存在一个明显的问题,有的 tool 是存在依赖关系,虽然在 prompt 里明确约束了,但 LLM 并不会一直如你所愿的执行,所以在产品端会偶现不是期望的功能。另外一个问题是随着 tool 越来越多上下文管理变得十分困难,会出现聊天工具记忆丢失的情况。

总体来说,上下文窗口占用过多会加剧第一个问题出现的频率,所以如何管理上下文才是当下 Agent 开发的核心难点。

解决方案 — 使用 MCP 执行代码

它是由 Claude code 的母公司 Anthropic 提出,一旦你理解了 Anthropic 的解决方案,它就会很简单。

随着代码执行环境对于 Agent 来说变得越来越普遍,解决方案是将 MCP 服务器呈现为代码 API,而不是直接工具调用。

Agent 编写代码与 MCP 服务器交互。

这种方法解决了这两个挑战:Agent 只能加载他们需要的工具,并在将结果传递回模型之前在执行环境中处理数据。

主要区别如下:
目前的做法:Agent 使用工具调用API→模型加载所有工具定义→模型直接调用工具→结果通过上下文返回。

代码执行方式:Agent编写代码→代码仅导入需要的工具→代码执行并处理数据→仅最终结果返回模型。

你的 MCP 服务器成为代码 API。无需将工具注册为模型直接调用的函数调用,而是将它们呈现为 Agent 可以以编程方式导入和使用的模块。

它在实践中是如何运作的

需求:假设你的 Agent 需要搜索 Salesforce 记录、筛选结果并创建摘要。

目前做法

按照我们现有的设计大概是这样一个链路设计:

  1. 1. 将所有 Salesforce 工具定义加载到上下文中
  2. 2. Agent 调用搜索工具
  3. 3. 完整结果通过上下文返回(可能有几十上百个结果)
  4. 4. Agent 调用过滤工具
  5. 5. Agent 获得上下文过滤结果
  6. 6. Agent 调用汇总工具
  7. 7. 返回总结结果给到 LLM
  8. 8. LLM 输出最后的结果

代码如下:

# Traditional approach - each step is a separate tool call

# Step 1: Search (tool call 1)

search_results = agent.call_tool("search_salesforce", {
    "query"
: "active accounts",
    "fields"
: ["name", "revenue", "status"]
})
# Returns 1000 records, all flow through context

# Step 2: Filter (tool call 2)  

filtered_results = agent.call_tool("filter_records", {
    "data"
: search_results,  # Passing large dataset through context
    "condition"
: "revenue > 1000000"
})
# Filtered data flows back through context

# Step 3: Summarize (tool call 3)

summary = agent.call_tool("create_summary", {
    "data"
: filtered_results  # More data through context
})
# Total: 3 separate tool calls, all intermediate data through context

改进方案

代码执行方式:

  1. 1. Agent 编写导入 Salesforce 模块的代码
  2. 2. 代码在一次执行中搜索、过滤和汇总
  3. 3. 仅最终摘要返回给代理(可能是 500 个token)

以下是代理通过代码执行编写的内容:

// Code execution approach - single execution, all processing in environment

import
 { salesforce } from 'mcp-servers';

// Everything happens in the execution environment
async
 function getSalesforceSummary() {
    // Search
    const results = await salesforce.search({
        query: "active accounts",
        fields: ["name", "revenue", "status"]
    });
    // 1000 records - but they never touch the model's context
    
    // Filter (happens right here in code)
    const filtered = results.filter(record => record.revenue > 1000000);
    // Filtered to 50 records - still in execution environment
    
    // Summarize (still in code)
    const summary = {
        total_accounts: filtered.length,
        total_revenue: filtered.reduce((sum, r) => sum + r.revenue, 0),
        top_account: filtered.sort((a, b) => b.revenue - a.revenue)[0]
    };
    
    return summary;  // Only this small object goes back to the model
}
// Agent gets back just the summary - maybe 100 tokens

中间数据永远不会触及模型的上下文。这一切都发生在代码执行环境中。

当 Anthropic 测试这种方法时,之前消耗 150,000 个 token 的工作流程减少到 2,000 个 token。

token 节省并不是唯一的好处;由于执行代码而不是工具调用,因此一切运行得更快。

Agent 可以通过本机代码构造使用循环、条件和错误处理,而不是进行顺序 API 调用。

实现代码执行的成本与收益

这种方法增加了复杂性,因为现在需要一个具有适当沙箱、资源限制和监控的安全代码执行环境,而直接工具调用不需要这些。

但对于需要可扩展的 Agent 来说,其好处远远超过了开发成本。

它可以获得更便宜的操作、更快的响应,并且能够将 Agent 连接到数百种工具而无需达到上下文限制。

方案的 7 个主要优点:

1.大量节省 token
将工作流程从 150,000 个 token 减少到 2,000 个 token 意味着 API 成本下降了 98% 以上。

2.渐进式工具发现
Agent 可以浏览可用工具、搜索特定功能或仅在需要时阅读文档。它不需要在开始工作之前记住整个工具目录。

3. 中间数据处理
Agent 可以在代码执行环境中过滤、转换和聚合数据,然后再到达 LLM。

4. 更好的流程控制
编写代码使 Agent 能够访问正确的编程结构。这减少了延迟和 token 消耗。Agent 无需编写 50 个单独的工具调用和 50 个模型往返调用,而是编写在单次执行中处理所有 50 个操作的代码。

5. 隐私保护
敏感数据可以在您的工作流程中流动,而无需进入模型的上下文。只有显式记录或返回的值才对模型可见。其他一切都保留在执行环境中。您可以处理机密信息,据此做出决策,并仅返回最终结果。

6. 状态持久化
Agent 可以将中间结果保存到文件中并稍后恢复工作。

这使得跨多个会话的长时间运行任务成为可能。Agent 不需要将所有内容都放在上下文中或每次都从头开始。它可以检查进度、保存状态并从中断处继续。

7. 可重复使用的技能
随着时间的推移,你将构建一个更高级别的功能库。需要多个步骤的复杂操作变成单个函数调用。随着这些技能的发展,你的 Agent 会变得更加有能力。

"Anthropic 甚至建议使用 SKILL.MD 文件记录这些内容,以便 Agent 可以参考其自己以前的工作。"

最后的想法

这种方法改变了构建 Agent 的成本,使得 Agent 更加高效和聪明。

当构建需要以下功能的代理时,使用 MCP 执行代码很有意义:

1. 访问许多工具
如果 Agent 连接到数十个服务,那么这种方法就变得至关重要。传统方法在规模化时就失效了。

2.复杂的工作流程
具有数据转换、过滤和聚合的多步骤流程从环境内处理中获益匪浅。

3.长时间运行的任务
任何需要状态持久性或跨越多个会话的内容都可以更好地与代码执行配合。

 


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询