教你如何建立更高效的AI Agent
Agent目前最大瓶頸是上下文窗口,當Agent需要連接成百上千個外部工具時,海量的工具定義和中間數據結果會迅速撐爆上下文,導致成本飆升、效率驟降。Anthropic給出了一套全新的解決方案 —— 一種名為“代碼執行”的新范式,它建立在模型上下文協議(MCP)之上,旨在從根本上解決AI Agent的效率問題。
核心思想很簡單:別再讓模型直接調用工具了,讓它寫代碼來調用工具。Anthropic的數據顯示,這一轉變能將處理任務的Token消耗從15萬降低到2000,成本和時間節省高達98.7%。

開發者們普遍面臨兩大“Token稅”
Anthropic指出,隨著基于MCP構建的Agent越來越普及,開發者們普遍面臨兩大“Token稅”,它們嚴重拖累了Agent的效率。
工具定義過載:傳統的做法是將所有可用的工具定義一次性加載到模型的上下文中,而當Agent需要連接數千個工具時,僅僅是這些定義就可能消耗數十萬Token,模型還沒開始工作,成本就已經產生。
比如,一個連接了Google Drive和Salesforce的Agent,其上下文會包含類似這樣的工具定義:
gdrive.getDocument Description: Retrieves a document from Google Drive Parameters: documentId (required, string): The ID of the document to retrieve fields (optional, string): Specific fields to return Returns: Document object with title, body content, metadata, salesforce.updateRecord Description: Updates a record in Salesforce Parameters: objectType (required, string): Type of Salesforce object (Lead, Contact, Account, etc.) recordId (required, string): The ID of the record to update data (required, object): Fields to update with their new
中間結果消耗:更致命的是,工作流中的每一個中間結果都必須經過模型的上下文。

傳統MCP客戶端工作流
設想一個任務:“從Google Drive下載我的會議紀要,并將其附加到Salesforce的潛在客戶記錄中。”
模型的處理流程是這樣的:
1.第一次工具調用:gdrive.getDocument(documentId: "abc123")
2.結果返回:返回完整的會議紀要文本,例如 “討論了Q4目標...n[完整紀要文本]”,并將其全部加載進模型上下文
3.第二次工具調用:salesforce.updateRecord(...),在其data字段中,模型需要再次寫入完整的會議紀要文本
這意味著,一份長達2小時會議、可能包含5萬Token的紀要,在整個流程中被模型處理了兩次。如果文檔更大,甚至可能直接超出上下文窗口的限制,導致任務失敗。
解決方案:用代碼執行取代直接調用
面對上述挑戰,Anthropic提出的新范式是:將MCP服務器呈現為代碼API,而不是直接的工具調用接口 —— Agent的任務不再是選擇工具并填充參數,而是編寫一小段代碼來完成整個工作流。
具體實現上,系統可以將所有可用的工具生成一個文件樹結構,例如用TypeScript實現:
servers/ ├── google-drive/ │ ├── getDocument.ts │ └── ... (other tools) ├── salesforce/ │ ├── updateRecord.ts │ └── ... (other tools) ...
每個工具文件(如getDocument.ts)內部封裝了對MCP工具的實際調用。
現在,對于前面提到的“會議紀要”任務,Agent生成的不再是工具調用指令,而是這樣一段代碼:
// 從Google Docs讀取紀要并添加到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 }
});Agent可以通過瀏覽文件系統(例如ls ./servers/)來發現可用的服務,然后只讀取它完成當前任務所需的文件(getDocument.ts和updateRecord.ts)來理解接口,這避免了開局就加載所有工具定義;而getDocument返回的transcript內容被存儲在一個代碼變量中,直接傳遞給updateRecord函數,整個紀要文本從未進入模型的上下文窗口。
這種新范式不僅節省了Token,還帶來了一系列深刻的優勢,重塑了Agent的能力邊界。
1. 漸進式披露
模型無需預知一切。它們可以像人類程序員一樣,通過探索文件系統或使用一個search_tools工具來按需發現和學習工具的用法。
2. 上下文高效的工具結果
在處理海量數據時,Agent可以在代碼執行環境中進行過濾、轉換和聚合,只將最終的、小規模的結果返回給模型。例如,處理一個包含10000行數據的電子表格:
// 傳統方式:返回10000行數據到上下文
TOOL CALL: gdrive.getSheet(sheetId: 'abc123')
// 代碼執行方式:在環境中過濾,只返回摘要
const allRows = await gdrive.getSheet({ sheetId: 'abc123' });
const pendingOrders = allRows.filter(row => row["Status"] === 'pending');
console.log(`發現 ${pendingOrders.length} 個待處理訂單`);console.log(pendingOrders.slice(0, 5)); // 只記錄前5個供模型審查Agent最終看到的可能只是5行樣本數據,而不是全部10000行。
3. 更強大的控制流
循環、條件判斷、錯誤處理等復雜的邏輯,現在可以用標準代碼模式實現,而不是笨拙地串聯多個工具調用。例如,需要輪詢Slack等待一條部署完成的消息:
let found = false;
while (!found) {
const messages = await slack.getChannelHistory({ channel: 'C123456' });
found = messages.some(m => m.text.includes('deployment complete'));
if (!found) await new Promise(r => setTimeout(r, 5000));
}
console.log('部署完成通知已收到');這遠比“調用工具-休眠-調用工具”的循環更高效,也減少了模型的“首個Token”延遲。
4. 保護隱私的操作
默認情況下,所有中間數據都保留在代碼執行環境中;更進一步,執行環境可以自動識別并“令牌化”敏感數據。
例如,Agent寫的代碼是處理row.email和row.phone,但如果它嘗試打印這些數據,模型實際看到的會是[EMAIL_1]和[PHONE_1]。而真實數據則在執行環境中安全地從Google Sheets流向Salesforce,全程不經過模型,有效防止了敏感信息泄露。
5. 狀態持久化與技能
通過文件系統訪問,Agent可以將中間結果寫入文件,從而實現任務的中斷和恢復。
const leads = await salesforce.query(...);
const csvData = leads.map(l => ...).join('n');
await fs.writeFile('./workspace/leads.csv', csvData);更重要的是,Agent可以將一段成功的代碼保存為可復用的函數,也就是一項“技能”(Skill)。
// In ./skills/save-sheet-as-csv.ts
export async function saveSheetAsCsv(sheetId: string) { ... }
// Later, in any agent execution:
import { saveSheetAsCsv } from './skills/save-sheet-as-csv';
const csvPath = await saveSheetAsCsv('abc123');通過不斷積累這樣的技能,Agent可以構建起一個強大的、可復用的高級能力工具箱。
結果就是文章開頭提到的驚人數據:Token消耗從15萬驟降至2000,效率提升98.7%。Anthropic還提到,Cloudflare也獨立發現了類似的模式,并稱之為“代碼模式”(Code Mode)。這種新范式不僅節省了Token,還帶來了一系列深刻的優勢,重塑了Agent的能力邊界。
盡管上下文管理、工具組合、狀態持久化這些問題在AI Agent領域顯得很新穎,但它們在傳統軟件工程中都有成熟的解決方案。Anthropic認為代碼執行范式,正是將這些經過時間檢驗的工程模式應用于AI Agent,讓Agent以其最擅長的方式「編寫代碼」來更高效地與世界互動。
當然,這也帶來了新的挑戰:運行Agent生成的代碼需要一個安全的沙箱環境、資源限制和監控機制。但這是一種權衡,其換來的是Token成本的大幅降低、延遲的縮短以及工具組合能力的極大提升。
來源:https://www.anthropic.com/engineering/code-execution-with-mcp











評論