Anthropic又一篇Agent開發(fā)神文,新范式讓Token消耗暴降98.7%
Agent目前最大瓶頸是上下文窗口,當Agent需要連接成百上千個外部工具時,海量的工具定義和中間數(shù)據(jù)結(jié)果會迅速撐爆上下文,導(dǎo)致成本飆升、效率驟降。
剛剛Anthropic發(fā)了一篇技術(shù)博客,給出了一套全新的解決方案,這是Anthropic又一篇Agent好文,強烈建議逐字閱讀學(xué)習(xí)。

簡單來說Anthropic詳細闡述了一種名為 “代碼執(zhí)行”的新范式,它建立在模型上下文協(xié)議(MCP)之上,旨在從根本上解決AI Agent的效率問題。
核心思想很簡單:別再讓模型直接調(diào)用工具了,讓它寫代碼來調(diào)用工具。
Anthropic的數(shù)據(jù)顯示,這一轉(zhuǎn)變能將處理任務(wù)的Token消耗從15萬降低到2000,成本和時間節(jié)省高達98.7%。
那么,這個新范式是如何運作的?它又帶來了哪些變化?
AI Agent的兩大“隱形稅”
Anthropic指出,隨著基于MCP構(gòu)建的Agent越來越普及,開發(fā)者們普遍面臨兩大“Token稅”,它們嚴重拖累了Agent的效率。
第一,工具定義過載
傳統(tǒng)的做法是,將所有可用的工具定義一次性加載到模型的上下文中。比如,一個連接了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當Agent需要連接數(shù)千個工具時,僅僅是這些定義就可能消耗數(shù)十萬Token,模型還沒開始工作,成本就已經(jīng)產(chǎn)生。
第二,中間結(jié)果消耗
更致命的是,工作流中的每一個中間結(jié)果都必須經(jīng)過模型的上下文。
設(shè)想一個任務(wù):“從Google Drive下載我的會議紀要,并將其附加到Salesforce的潛在客戶記錄中。”
模型的處理流程是這樣的:
1.第一次工具調(diào)用:gdrive.getDocument(documentId: "abc123")
2.結(jié)果返回:返回完整的會議紀要文本,例如 “討論了Q4目標...\n[完整紀要文本]”,并將其全部加載進模型上下文
3.第二次工具調(diào)用:salesforce.updateRecord(...),在其data字段中,模型需要再次寫入完整的會議紀要文本
傳統(tǒng)MCP客戶端工作流:

這意味著,一份長達2小時會議、可能包含5萬Token的紀要,在整個流程中被模型處理了兩次。如果文檔更大,甚至可能直接超出上下文窗口的限制,導(dǎo)致任務(wù)失敗。
解決方案:用代碼執(zhí)行取代直接調(diào)用
面對上述挑戰(zhàn),Anthropic提出的新范式是:將MCP服務(wù)器呈現(xiàn)為代碼API,而不是直接的工具調(diào)用接口。
Agent的任務(wù)不再是選擇工具并填充參數(shù),而是編寫一小段代碼來完成整個工作流。
具體實現(xiàn)上,系統(tǒng)可以將所有可用的工具生成一個文件樹結(jié)構(gòu),例如用TypeScript實現(xiàn):
servers/
├── google-drive/
│ ├── getDocument.ts
│ └── ... (other tools)
├── salesforce/
│ ├── updateRecord.ts
│ └── ... (other tools)
...每個工具文件(如getDocument.ts)內(nèi)部封裝了對MCP工具的實際調(diào)用。
現(xiàn)在,對于前面提到的“會議紀要”任務(wù),Agent生成的不再是工具調(diào)用指令,而是這樣一段代碼:
// 從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可以通過瀏覽文件系統(tǒng)(例如ls ./servers/)來發(fā)現(xiàn)可用的服務(wù),然后只讀取它完成當前任務(wù)所需的文件(getDocument.ts和updateRecord.ts)來理解接口。這避免了開局就加載所有工具定義。
數(shù)據(jù)本地流轉(zhuǎn):getDocument返回的transcript內(nèi)容被存儲在一個代碼變量中,直接傳遞給updateRecord函數(shù)。整個紀要文本從未進入模型的上下文窗口。
結(jié)果就是文章開頭提到的驚人數(shù)據(jù):Token消耗從15萬驟降至2000,效率提升98.7%。Anthropic還提到,Cloudflare也獨立發(fā)現(xiàn)了類似的模式,并稱之為“代碼模式”(Code Mode)。這證明了其核心洞察的普適性:LLM天生擅長編寫代碼,我們應(yīng)當利用這一優(yōu)勢。
代碼執(zhí)行帶來的五大核心優(yōu)勢
這種新范式不僅節(jié)省了Token,還帶來了一系列深刻的優(yōu)勢,重塑了Agent的能力邊界。
1. 漸進式披露
模型無需預(yù)知一切。它們可以像人類程序員一樣,通過探索文件系統(tǒng)或使用一個search_tools工具來按需發(fā)現(xiàn)和學(xué)習(xí)工具的用法。
2. 上下文高效的工具結(jié)果
在處理海量數(shù)據(jù)時,Agent可以在代碼執(zhí)行環(huán)境中進行過濾、轉(zhuǎn)換和聚合,只將最終的、小規(guī)模的結(jié)果返回給模型。例如,處理一個包含10000行數(shù)據(jù)的電子表格:
// 傳統(tǒng)方式:返回10000行數(shù)據(jù)到上下文
TOOL CALL: gdrive.getSheet(sheetId: 'abc123')
// 代碼執(zhí)行方式:在環(huán)境中過濾,只返回摘要
const allRows = await gdrive.getSheet({ sheetId: 'abc123' });
const pendingOrders = allRows.filter(row => row["Status"] === 'pending');
console.log(`發(fā)現(xiàn) ${pendingOrders.length} 個待處理訂單`);
console.log(pendingOrders.slice(0, 5)); // 只記錄前5個供模型審查Agent最終看到的可能只是5行樣本數(shù)據(jù),而不是全部10000行。
3. 更強大的控制流
循環(huán)、條件判斷、錯誤處理等復(fù)雜的邏輯,現(xiàn)在可以用標準代碼模式實現(xiàn),而不是笨拙地串聯(lián)多個工具調(diào)用。例如,需要輪詢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('部署完成通知已收到');這遠比“調(diào)用工具-休眠-調(diào)用工具”的循環(huán)更高效,也減少了模型的“首個Token”延遲。
4. 保護隱私的操作
默認情況下,所有中間數(shù)據(jù)都保留在代碼執(zhí)行環(huán)境中。更進一步,執(zhí)行環(huán)境可以自動識別并“令牌化”敏感數(shù)據(jù)。
例如,Agent寫的代碼是處理row.email和row.phone,但如果它嘗試打印這些數(shù)據(jù),模型實際看到的會是[EMAIL_1]和[PHONE_1]。而真實數(shù)據(jù)則在執(zhí)行環(huán)境中安全地從Google Sheets流向Salesforce,全程不經(jīng)過模型,有效防止了敏感信息泄露。
5. 狀態(tài)持久化與技能
通過文件系統(tǒng)訪問,Agent可以將中間結(jié)果寫入文件,從而實現(xiàn)任務(wù)的中斷和恢復(fù)。
const leads = await salesforce.query(...);
const csvData = leads.map(l => ...).join('\n');
await fs.writeFile('./workspace/leads.csv', csvData);更重要的是,Agent可以將一段成功的代碼保存為可復(fù)用的函數(shù),也就是一項“技能”(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可以構(gòu)建起一個強大的、可復(fù)用的高級能力工具箱。
寫在最后
Anthropic認為,盡管上下文管理、工具組合、狀態(tài)持久化這些問題在AI Agent領(lǐng)域顯得很新穎,但它們在傳統(tǒng)軟件工程中都有成熟的解決方案。
代碼執(zhí)行范式,正是將這些經(jīng)過時間檢驗的工程模式應(yīng)用于AI Agent,讓Agent以其最擅長的方式——編寫代碼——來更高效地與世界互動。
當然,這也帶來了新的挑戰(zhàn):運行Agent生成的代碼需要一個安全的沙箱環(huán)境、資源限制和監(jiān)控機制。但這是一種權(quán)衡,其換來的是Token成本的大幅降低、延遲的縮短以及工具組合能力的極大提升。


































