久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 設計應用 > 教你如何建立更高效的AI Agent

教你如何建立更高效的AI Agent

作者: 時間:2025-11-13 來源: 收藏

Agent目前最大瓶頸是上下文窗口,當Agent需要連接成百上千個外部工具時,海量的工具定義和中間數據結果會迅速撐爆上下文,導致成本飆升、效率驟降。Anthropic給出了一套全新的解決方案 —— 一種名為“代碼執行”的新范式,它建立在模型上下文協議(MCP)之上,旨在從根本上解決的效率問題。

核心思想很簡單:別再讓模型直接調用工具了,讓它寫代碼來調用工具。Anthropic的數據顯示,這一轉變能將處理任務的Token消耗從15萬降低到2000,成本和時間節省高達98.7%。

IMG_7B2EF4BD4C8F-1.jpeg

開發者們普遍面臨兩大“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

中間結果消耗:更致命的是,工作流中的每一個中間結果都必須經過模型的上下文。

IMG_A25F88C2C1F9-1.jpeg

傳統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.tsupdateRecord.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.emailrow.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的能力邊界。

盡管上下文管理、工具組合、狀態持久化這些問題在領域顯得很新穎,但它們在傳統軟件工程中都有成熟的解決方案。Anthropic認為代碼執行范式,正是將這些經過時間檢驗的工程模式應用于,讓Agent以其最擅長的方式「編寫代碼」來更高效地與世界互動。

當然,這也帶來了新的挑戰:運行Agent生成的代碼需要一個安全的沙箱環境、資源限制和監控機制。但這是一種權衡,其換來的是Token成本的大幅降低、延遲的縮短以及工具組合能力的極大提升。

來源:https://www.anthropic.com/engineering/code-execution-with-mcp


關鍵詞: AI Agent

評論


相關推薦

技術專區

關閉