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