← 返回首頁

MCP Tokens省九成:MCP動態執行技術

📅 發布日期:2025-11-09 ⏱️ 閱讀時間:15 分鐘 🏷️ 分類:AI 代理技術
作者:波特人小隊

💡 核心發現

Anthropic 最新發布的技術指南改變了 AI 代理工具使用的方式,將 Token 使用量從 150,000+ 降低到 2,000,減少了 98%。

本文以政府採購法保證金計算為實際案例,說明傳統 MCP 工具呼叫與新型程式碼執行方法的差異,並探討這項突破對政府 AI 平台的影響。

問題背景:AI 代理的 Token 耗用危機

政府採購案例場景

假設您正在為政府機關開發一個「採購保證金自動審核系統」,需要處理以下任務:

🏛️ 實際業務需求

  • 查詢政府採購法相關條文(第 30 條保證金規定)
  • 搜尋「押標金保證金暨其他擔保作業辦法」的具體比例
  • 從採購資料庫中篩選符合條件的標案(例如:工程採購金額 ≥ 5,000 萬元)
  • 計算每個標案的履約保證金(不得超過契約金額 10%)
  • 生成審核報告並標記異常案件

傳統 MCP 工具呼叫的困境

使用傳統的 MCP (Model Context Protocol) 工具呼叫方式時,AI 代理會遇到以下問題:

  1. Token 開銷爆炸:所有工具定義(法律查詢工具、資料庫工具、計算工具、報告生成工具)都必須預先載入到上下文視窗中,可能消耗數萬 Token。
  2. 中間結果傳遞:每次工具呼叫的結果都要通過上下文視窗傳回模型,例如查詢到 1,000 筆標案資料,全部流經模型處理。
  3. 反覆往返延遲:搜尋 → 篩選 → 計算 → 報告,每個步驟都是獨立的工具呼叫,需要多次 API 往返。

傳統方法 vs 程式碼執行:實際對比

❌ 傳統 MCP 工具呼叫方式

以下是傳統方法的實作流程:

// 傳統方式 - 每個步驟都是獨立工具呼叫

// 步驟 1:查詢法律條文(工具呼叫 1)
const lawArticle = agent.call_tool("query_law_database", {
    "law": "政府採購法",
    "article": "30"
});
// 返回:完整法條內容(約 500 Token)流經上下文視窗

// 步驟 2:查詢保證金比例規定(工具呼叫 2)
const bondRatio = agent.call_tool("query_regulation", {
    "regulation": "押標金保證金暨其他擔保作業辦法",
    "article": "15"
});
// 返回:完整條文(約 300 Token)流經上下文視窗

// 步驟 3:搜尋標案資料(工具呼叫 3)
const procurements = agent.call_tool("search_procurement_db", {
    "type": "工程採購",
    "min_amount": 50000000,  // 5,000 萬元
    "status": "已決標"
});
// 返回:1,000 筆標案資料(每筆包含標案名稱、金額、廠商等)
// 約 50,000 Token 全部流經上下文視窗

// 步驟 4:篩選需審核案件(工具呼叫 4)
const filtered = agent.call_tool("filter_procurement", {
    "data": procurements,  // 將 50,000 Token 資料再傳一次
    "condition": "保證金 > 契約金額 * 0.1"
});
// 篩選後資料(約 10,000 Token)再次流經上下文視窗

// 步驟 5:生成審核報告(工具呼叫 5)
const report = agent.call_tool("generate_report", {
    "data": filtered
});
// 報告內容(約 5,000 Token)流經上下文視窗

// 總計:5 次工具呼叫,約 65,800 Token 消耗
// 延遲:5 次 API 往返,每次約 2-3 秒,總計 10-15 秒

⚠️ 問題分析

  • Token 浪費:1,000 筆原始資料全部流經模型,但最終只需要 50 筆異常案件
  • 成本高昂:65,800 Token × 每千 Token 成本 = 大量 API 費用
  • 延遲嚴重:5 次往返共需 10-15 秒,使用者體驗差
  • 擴展困難:若要增加更多審核項目(例如檢查押標金、保固保證金),Token 消耗會線性增長

✅ 新型程式碼執行方式

Anthropic 的程式碼執行方法將 MCP 伺服器視為程式碼 API,代理撰寫程式碼在執行環境中處理資料:

// 程式碼執行方式 - 單次執行,所有處理在環境內完成

import { lawDatabase, procurementDB, reportGenerator } from 'mcp-servers';

async function auditProcurementBonds() {
    // 步驟 1:查詢法律規定(在執行環境內,不經過模型上下文)
    const bondRule = await lawDatabase.query({
        regulation: "押標金保證金暨其他擔保作業辦法",
        article: "15"
    });
    const maxRatio = 0.1;  // 從條文中解析:不得超過 10%

    // 步驟 2:搜尋標案(1,000 筆資料停留在執行環境,不流經模型)
    const allProcurements = await procurementDB.search({
        type: "工程採購",
        minAmount: 50000000,
        status: "已決標"
    });

    // 步驟 3:在執行環境內篩選(所有運算在這裡完成)
    const violations = allProcurements.filter(p => {
        const bondRatio = p.performanceBond / p.contractAmount;
        return bondRatio > maxRatio;
    });

    // 步驟 4:在執行環境內生成統計摘要
    const summary = {
        totalCases: allProcurements.length,
        violationCases: violations.length,
        violationRate: (violations.length / allProcurements.length * 100).toFixed(2) + '%',
        topViolations: violations
            .sort((a, b) => (b.performanceBond / b.contractAmount) - (a.performanceBond / a.contractAmount))
            .slice(0, 10)
            .map(p => ({
                name: p.projectName,
                amount: p.contractAmount,
                bond: p.performanceBond,
                ratio: (p.performanceBond / p.contractAmount * 100).toFixed(2) + '%',
                excess: p.performanceBond - (p.contractAmount * maxRatio)
            }))
    };

    // 只有這個小型摘要物件返回給模型(約 500 Token)
    return summary;
}

// 代理收到的結果範例:
// {
//   totalCases: 1000,
//   violationCases: 50,
//   violationRate: "5.00%",
//   topViolations: [
//     {
//       name: "某市政府道路拓寬工程",
//       amount: 80000000,
//       bond: 12000000,
//       ratio: "15.00%",
//       excess: 4000000
//     },
//     // ... 其他 9 筆
//   ]
// }

// 總計:1 次程式碼執行,約 500 Token 返回給模型
// 延遲:單次執行約 1-2 秒

✅ 優勢分析

  • Token 效率:從 65,800 降到 500 Token,減少 99.2%
  • 成本大降:API 費用降低超過 99%
  • 速度提升:從 10-15 秒降到 1-2 秒,提升 5-10 倍
  • 易於擴展:新增審核項目只需在程式碼中增加邏輯,不會增加 Token 消耗
  • 隱私保護:敏感採購資料(廠商名稱、詳細金額)從不流經模型上下文

對比總結:兩種方法的關鍵差異

比較項目 傳統 MCP 工具呼叫 程式碼執行方式
Token 消耗 65,800 Token 500 Token(減少 99.2%)
執行時間 10-15 秒(5 次往返) 1-2 秒(單次執行)
中間資料 全部流經模型上下文(50,000+ Token) 停留在執行環境,不流經模型
隱私保護 所有資料可見於模型上下文 僅摘要結果可見,原始資料受保護
擴展性 新增功能會增加 Token 消耗 程式碼邏輯可複雜化,Token 消耗穩定
錯誤處理 需多次工具呼叫重試 原生程式碼 try-catch,更靈活
成本(假設) 約 $0.20 / 次(以 Claude Sonnet 計價) 約 $0.002 / 次(減少 99%)

七大核心優勢詳解

1. 巨量 Token 效率提升

從 150,000 Token 降到 2,000 Token(原文案例)或從 65,800 降到 500(本案例),意味著:

2. 漸進式工具發現

代理可以「按需探索」可用工具,而非一開始就載入所有工具定義:

// 代理可以先搜尋需要的工具
const tools = await searchTools("政府採購相關");
// 只載入相關的 3-5 個工具,而非全部 50 個工具

3. 環境內資料處理

在採購案例中,1,000 筆標案資料從不離開執行環境,直到篩選為 10 筆重點案件才返回模型。這解決了「大資料集通過小管道」的瓶頸。

4. 更佳的控制流程

使用原生程式設計結構(迴圈、條件判斷、錯誤處理)比鏈接 50 次工具呼叫更直觀且高效:

// 傳統方式:需要 50 次工具呼叫
for (let i = 0; i < 50; i++) {
    result = await agent.call_tool("process_case", {caseId: i});
}

// 程式碼執行:單次執行內處理 50 個案件
const results = cases.map(c => processCase(c));

5. 隱私優勢

🔒 政府資料隱私至關重要

在採購審核場景中,敏感資料包括:

  • 投標廠商名稱與聯絡資訊
  • 詳細預算金額與保證金數字
  • 評選委員意見與評分

程式碼執行方式確保這些資料只在安全的執行環境中流動,僅將「發現 50 筆異常案件」的統計摘要返回模型。

6. 狀態持久化

代理可以將中間結果儲存到檔案,實現長時間執行的任務:

// 處理 10,000 筆標案,分批儲存進度
for (let batch = 0; batch < 10; batch++) {
    const results = processBatch(batch);
    await saveToFile(`audit_batch_${batch}.json`, results);
}
// 即使會話中斷,下次可以從檔案恢復

7. 可重用技能庫

隨著時間推移,「計算採購保證金」這類複雜操作可以封裝為高階函式:

// 未來可以直接呼叫
const audit = await auditProcurementBonds({
    type: "工程採購",
    threshold: 50000000
});

Anthropic 建議用 SKILL.MD 檔案記錄這些技能,讓代理參考自己的過往工作。

何時應該使用程式碼執行方式?

✅ 最適合的場景

  • 存取大量工具:當代理需要連接數十個服務(法規資料庫、採購系統、會計系統等),傳統方法會崩潰。
  • 複雜工作流程:多步驟流程涉及資料轉換、篩選、聚合(如本文採購審核案例)。
  • 生產級應用:大規模運行的代理系統,成本和延遲改善會帶來巨大價值。
  • 長時間執行任務:需要狀態持久化或跨會話任務(例如:每日自動審核所有政府標案)。
  • 隱私敏感場景:政府、金融、醫療等領域,不希望原始資料流經外部 API。

⚠️ 不需要的場景

對於簡單代理(3-5 個工具,簡單工作流程),傳統 MCP 工具呼叫仍然有效且更簡單。例如:

  • 單純查詢一筆資料並返回
  • 簡單的 CRUD 操作
  • 不涉及大量中間資料處理

實施建議與技術路徑

步驟 1:理解 MCP 協定

Model Context Protocol (MCP) 是 Anthropic 定義的標準,讓 AI 代理能統一存取各種資料來源與工具。您需要:

步驟 2:設計程式碼 API 介面

將您的 MCP 伺服器轉換為可程式設計介面:

// 不是這樣(工具呼叫):
{
  "name": "query_procurement",
  "description": "查詢採購標案",
  "parameters": {...}
}

// 而是這樣(程式碼 API):
import { procurementDB } from 'mcp-procurement-server';

const results = await procurementDB.query({
    type: "工程採購",
    minAmount: 50000000
});

步驟 3:建立安全執行環境

🔐 安全性至關重要

程式碼執行方式需要:

  • 沙箱隔離:防止代理撰寫的程式碼存取不該存取的資源
  • 資源限制:CPU、記憶體、執行時間上限
  • 監控與稽核:記錄所有程式碼執行與資料存取
  • 權限控制:基於角色的存取控制(RBAC)

對於政府級應用,建議使用:

  • Docker 容器隔離
  • Firecracker microVM(AWS Lambda 使用的技術)
  • 或專用的程式碼執行平台(如 E2B、Modal)

步驟 4:實施漸進式遷移

不必一次性重寫所有系統,可以混合使用:

  1. 簡單查詢仍用傳統 MCP 工具呼叫
  2. 複雜工作流程改用程式碼執行
  3. 逐步將高頻使用的複雜操作封裝為可重用技能

政府 AI 平台的啟示

對於政府級 AI 平台開發團隊(如教育部、僑委會、工程會等單位),這項技術突破帶來以下機會:

🏛️ 政府應用價值

  • 成本可控:大規模部署時,Token 成本降低 98% 意味著預算可以覆蓋更多業務場景
  • 符合法規:資料不離開執行環境,更易符合《個人資料保護法》與《政府資訊公開法》
  • 審計友善:所有程式碼執行可記錄與稽核,滿足政府內控要求
  • 長期維運:可重用技能庫降低維護成本,新進人員易於理解與擴展
  • 跨機關複用:「採購審核」技能可分享給其他政府單位使用

結論:從實驗到生產的關鍵一步

Anthropic 的程式碼執行方法不僅是技術優化,更是 AI 代理從「玩具原型」邁向「生產級系統」的關鍵轉折點。

當 Token 成本降低 98%、延遲減少 80%、隱私保護增強時,AI 代理才能真正進入政府、金融、醫療等高要求領域。

🎯 行動建議

如果您正在開發政府 AI 平台或企業級 AI 應用:

  1. 評估現有系統的 Token 消耗與成本
  2. 識別「大量中間資料處理」的工作流程(如本文採購審核案例)
  3. 優先將這些工作流程改為程式碼執行方式
  4. 建立安全的沙箱執行環境
  5. 逐步積累可重用技能庫
  6. 與法務、資安團隊合作確保合規性

這不是「未來的技術」,而是「現在就能實施」的方法。Anthropic 已經提供了完整的技術指南,剩下的是我們根據實際業務需求進行適配與優化。

在政府採購法的案例中,我們看到了這項技術的威力。下一步,是將這項技術應用到更多政府業務場景中。

← 返回文章庫首頁