本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
壓縮
提示
建議將伺服器端壓縮用於管理長時間執行的對話和代理工作流程中的內容,因為它會自動處理內容管理,並將整合工作降至最低。
注意
壓縮目前為 Beta 版。在 API 請求compact-2026-01-12中包含 Beta 標頭以使用此功能。Converse API 目前不支援壓縮,但 InvokeModel 支援壓縮。
壓縮透過在接近內容視窗限制時自動摘要較舊的內容,來擴展長時間執行的對話和任務的有效內容長度。這非常適合:
-
以聊天為基礎的多轉對話,您希望使用者長時間使用一個聊天
-
任務導向的提示,需要許多可能超過 200K個內容視窗的後續工作 (通常使用工具)
下列模型支援壓縮:
| 模型 | 模型 ID |
|---|---|
Claude Sonnet 4.6 |
|
Claude Opus 4.6 |
|
注意
usage 最上層 input_tokens和 output_tokens 欄位中不包含壓縮反覆運算用量,並反映所有非壓縮反覆運算的總和。若要計算所使用和收取的請求權杖總數,請加總usage.iterations陣列中的所有項目。
如果您之前依賴 usage.input_tokens和 usage.output_tokens進行成本追蹤或稽核,則需要更新追蹤邏輯,以在啟用壓縮usage.iterations時彙總 。只有在請求期間觸發新的壓縮時,iterations陣列才會存在。重新套用先前的compaction區塊不會產生額外的壓縮成本,在這種情況下,最上層的使用欄位會保持準確。
壓縮的運作方式
啟用壓縮時, 會在接近設定的字符閾值時Claude自動總結您的對話。API:
-
偵測輸入字符何時超過您指定的觸發閾值。
-
產生目前對話的摘要。
-
建立包含摘要的
compaction區塊。 -
使用壓縮的內容繼續回應。
在後續請求中,將回應附加至您的訊息。API 會在compaction封鎖之前自動捨棄所有訊息區塊,繼續摘要中的對話。
基本使用
在訊息 API 請求context_management.edits中將compact_20260112策略新增至 ,以啟用壓縮。
Parameters
| 參數 | Type | 預設 | Description |
|---|---|---|---|
type |
string | 必要 | 必須為 "compact_20260112" |
trigger |
object | 150,000 個字符 | 何時觸發壓縮。必須至少為 50,000 個字符。 |
pause_after_compaction |
boolean | false |
是否在產生壓縮摘要後暫停 |
instructions |
string | null |
自訂摘要提示。提供時完全取代預設提示。 |
觸發組態
設定 何時使用 trigger 參數觸發壓縮:
import boto3 import json bedrock_runtime = boto3.client(service_name='bedrock-runtime') response = bedrock_runtime.invoke_model( modelId="us.anthropic.claude-opus-4-6-v1", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "anthropic_beta": ["compact-2026-01-12"], "max_tokens": 4096, "messages": [{"role": "user", "content": "Help me build a website"}], "context_management": { "edits": [ { "type": "compact_20260112", "trigger": { "type": "input_tokens", "value": 100000 } } ] } }) ) response_body = json.loads(response["body"].read()) print(response_body["content"][-1]["text"])
自訂摘要說明
根據預設,壓縮會使用下列摘要提示:
You have written a partial transcript for the initial task above. Please write a summary of the transcript. The purpose of this summary is to provide continuity so you can continue to make progress towards solving the task in a future context, where the raw history above may not be accessible and will be replaced with this summary. Write down anything that would be helpful, including the state, next steps, learnings etc. You must wrap your summary in a <summary></summary> block.
您可以透過 instructions 參數提供自訂指示,以完全取代此提示。自訂指示不會補充預設值;它們會完全取代預設值:
import boto3 import json bedrock_runtime = boto3.client(service_name='bedrock-runtime') response = bedrock_runtime.invoke_model( modelId="us.anthropic.claude-opus-4-6-v1", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "anthropic_beta": ["compact-2026-01-12"], "max_tokens": 4096, "messages": [{"role": "user", "content": "Help me build a website"}], "context_management": { "edits": [ { "type": "compact_20260112", "instructions": "Focus on preserving code snippets, variable names, and technical decisions." } ] } }) ) response_body = json.loads(response["body"].read()) print(response_body["content"][-1]["text"])
壓縮後暫停
pause_after_compaction 使用 在產生壓縮摘要後暫停 API。這可讓您在 API 繼續回應之前新增其他內容區塊 (例如保留最近的訊息或特定的指令導向訊息)。
啟用時,API 會在產生壓縮區塊後傳回具有compaction停止原因的訊息:
import boto3 import json bedrock_runtime = boto3.client(service_name='bedrock-runtime') messages = [{"role": "user", "content": "Help me build a website"}] response = bedrock_runtime.invoke_model( modelId="us.anthropic.claude-opus-4-6-v1", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "anthropic_beta": ["compact-2026-01-12"], "max_tokens": 4096, "messages": messages, "context_management": { "edits": [ { "type": "compact_20260112", "pause_after_compaction": True } ] } }) ) response_body = json.loads(response["body"].read()) # Check if compaction triggered a pause if response_body.get("stop_reason") == "compaction": # Response contains only the compaction block messages.append({"role": "assistant", "content": response_body["content"]}) # Continue the request response = bedrock_runtime.invoke_model( modelId="us.anthropic.claude-opus-4-6-v1", body=json.dumps({ "anthropic_version": "bedrock-2023-05-31", "anthropic_beta": ["compact-2026-01-12"], "max_tokens": 4096, "messages": messages, "context_management": { "edits": [{"type": "compact_20260112"}] } }) ) response_body = json.loads(response["body"].read()) print(response_body["content"][-1]["text"])
使用壓縮區塊
觸發壓縮時,API 會在助理回應開始時傳回compaction區塊。
長時間執行的對話可能會導致多次壓縮。最後一個壓縮區塊會反映提示的最終狀態,在提示之前將內容取代為產生的摘要。
{ "content": [ { "type": "compaction", "content": "Summary of the conversation: The user requested help building a web scraper..." }, { "type": "text", "text": "Based on our conversation so far..." } ] }
串流
在啟用壓縮的情況下串流回應時,您將在壓縮開始時收到content_block_start事件。壓縮區塊串流與文字區塊不同。您將會收到content_block_start事件,後面接著一個事件content_block_delta,其中包含完整的摘要內容 (無中繼串流),然後是content_block_stop事件。
提示快取
您可以在壓縮區塊上新增cache_control中斷點,這會快取完整的系統提示以及摘要的內容。會忽略原始壓縮內容。請注意,觸發壓縮時,可能會導致後續請求的快取遺失。
{ "role": "assistant", "content": [ { "type": "compaction", "content": "[summary text]", "cache_control": {"type": "ephemeral"} }, { "type": "text", "text": "Based on our conversation..." } ] }
了解用量
壓縮需要額外的取樣步驟,這有助於速率限制和計費。API 會在回應中傳回詳細的用量資訊:
{ "usage": { "input_tokens": 45000, "output_tokens": 1234, "iterations": [ { "type": "compaction", "input_tokens": 180000, "output_tokens": 3500 }, { "type": "message", "input_tokens": 23000, "output_tokens": 1000 } ] } }
iterations 陣列會顯示每次抽樣反覆運算的用量。壓縮發生時,您會看到compaction反覆運算,後面接著主要message反覆運算。最終反覆運算的權杖計數反映壓縮後的有效內容大小。