工具定義和累積的 tool_result 區塊會消耗您的上下文視窗。具有許多工具或許多輪次的長時間執行代理可能會在任務完成之前耗盡可用上下文。四種方法在管道的不同點解決此問題。
每種方法都針對不同的上下文壓力來源。選擇與您的令牌流向相符的方法。
| 方法 | 減少的內容 | 適用時機 | 了解更多 |
|---|---|---|---|
| 工具搜尋 | 預先載入的工具定義 | 大型工具集(20+ 個工具),其中大多數工具不是每次都需要 | 工具搜尋工具 |
| 程式化工具呼叫 | tool_result 往返 | 可以作為單一指令碼執行的工具呼叫鏈 | 程式化工具呼叫 |
| 提示快取 | 重複工具定義的令牌成本 | 跨許多請求的穩定工具集 | 使用提示快取的工具使用 |
| 上下文編輯 | 歷史記錄中的舊 tool_result 區塊 | 長對話,其中早期結果不再相關 | 上下文編輯 |
工具搜尋將工具定義保留在上下文視窗之外,直到 Claude 要求它們。您不是預先發送 50 個工具架構,而是發送單一 tool_search 工具,讓 Claude 按需發現其餘部分。這用少量延遲(一個額外的輪次來查詢工具)換取基線上下文使用量的大幅減少。
程式化工具呼叫將一系列工具呼叫摺疊成 Claude 編寫且 Anthropic 的程式碼執行沙箱執行的單一程式碼區塊。Claude 不是發出五次 tool_use 和 tool_result 的往返,而是發出一個指令碼,該指令碼從沙箱內呼叫所有五個函數。中間結果永遠不會進入對話歷史記錄。
提示快取不會減少上下文中的令牌數量,但會減少您在後續請求中為其支付的費用。如果您的工具定義是穩定的,請快取一次,並在數千個請求中重複使用快取的前綴。當工具集很大但固定時,這是正確的選擇。
上下文編輯會在舊 tool_result 區塊完成其目的後將其從對話歷史記錄中移除。長代理迴圈可能會產生數百個中間結果,這些結果在當時很有用,但現在已成為累贅。上下文編輯讓您可以在不重新啟動對話的情況下修剪它們。
這些方法可以組合。長時間執行的代理可能會使用工具搜尋來保持工具集精簡,使用提示快取來攤銷剩餘定義的成本,並使用上下文編輯在對話增長時修剪陳舊的結果。每種方法都解決問題的不同部分,因此一起使用它們沒有衝突。
高容量代理的合理起點:
按需載入工具定義,而不是預先載入。
將工具呼叫鏈摺疊成單一可執行指令碼。
跨請求快取工具定義以降低令牌成本。
從長時間執行的對話中修剪陳舊的工具結果。
Was this page helpful?