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