圧縮 - Amazon Bedrock

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

圧縮

ヒント

サーバー側の圧縮は、最小限の統合作業でコンテキスト管理を自動的に処理するため、長時間実行される会話やエージェントワークフローでコンテキストを管理する場合に推奨されます。

注記

圧縮は現在ベータ版です。この機能を使用するには、API リクエストcompact-2026-01-12にベータヘッダーを含めます。圧縮は現在 Converse API ではサポートされていませんが、InvokeModel ではサポートされています。

圧縮は、コンテキストウィンドウの制限に近づいたときに古いコンテキストを自動的に要約することで、長時間実行される会話やタスクの有効なコンテキストの長さを拡張します。これは、以下に最適です。

  • ユーザーが 1 つのチャットを長期間使用できるようにするチャットベースのマルチターン会話

  • 200Kコンテキストウィンドウを超える可能性のある多くのフォローアップ作業 (多くの場合、ツールの使用) を必要とするタスク指向のプロンプト

圧縮は、次のモデルでサポートされています。

モデル モデル ID

Claude Sonnet 4.6

anthropic.claude-sonnet-4-6

Claude Opus 4.6

anthropic.claude-opus-4-6-v1

注記

usage フィールドの最上位の input_tokensおよび output_tokens には、圧縮反復の使用が含まれておらず、すべての非圧縮反復の合計が反映されます。リクエストに対して消費および請求されるトークンの合計を計算するには、usage.iterations配列内のすべてのエントリの合計。

以前にコスト追跡または監査usage.output_tokensのために usage.input_tokensと に依存していた場合は、圧縮が有効になっているusage.iterationsときに 全体で集計するように追跡ロジックを更新する必要があります。iterations 配列は、リクエスト中に新しい圧縮がトリガーされた場合にのみ存在します。前のcompactionブロックを再適用しても追加の圧縮コストは発生せず、その場合でも最上位の使用フィールドは正確です。

圧縮の仕組み

圧縮を有効にすると、 は設定されたトークンしきい値に近づいたときに会話Claudeを自動的に要約します。API:

  1. 入力トークンが指定されたトリガーしきい値を超えた場合に検出します。

  2. 現在の会話の概要を生成します。

  3. 概要を含むcompactionブロックを作成します。

  4. 圧縮されたコンテキストでレスポンスを続行します。

後続のリクエストでは、メッセージにレスポンスを追加します。API は、ブロックの前にすべてのメッセージcompactionブロックを自動的に削除し、概要から会話を続行します。

基本的な使用法

Messages API リクエストcontext_management.editscompact_20260112戦略を に追加して圧縮を有効にします。

CLI
aws bedrock-runtime invoke-model \ --model-id "us.anthropic.claude-opus-4-6-v1" \ --body '{ "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" } ] } }' \ --cli-binary-format raw-in-base64-out \ /tmp/response.json echo "Response:" cat /tmp/response.json | jq '.content[] | {type, text: .text[0:500]}'
Python
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" } ] } }) ) response_body = json.loads(response["body"].read()) # Append the response (including any compaction block) to continue the conversation messages.append({"role": "assistant", "content": response_body["content"]}) for block in response_body["content"]: if block.get("type") == "compaction": print(f"[COMPACTION]: {block['content'][:200]}...") elif block.get("type") == "text": print(f"[RESPONSE]: {block['text']}")
TypeScript
import { BedrockRuntimeClient, InvokeModelCommand } from "@aws-sdk/client-bedrock-runtime"; async function main() { const client = new BedrockRuntimeClient({}); const messages: Array<{role: string, content: string | object[]}> = [ { role: "user", content: "Help me build a website" } ]; const command = new InvokeModelCommand({ modelId: "us.anthropic.claude-opus-4-6-v1", body: JSON.stringify({ anthropic_version: "bedrock-2023-05-31", anthropic_beta: ["compact-2026-01-12"], max_tokens: 4096, messages, context_management: { edits: [ { type: "compact_20260112" } ] } }) }); const response = await client.send(command); const responseBody = JSON.parse(new TextDecoder().decode(response.body)); // Append response to continue conversation messages.push({ role: "assistant", content: responseBody.content }); for (const block of responseBody.content) { if (block.type === "compaction") { console.log(`[COMPACTION]: ${block.content.substring(0, 200)}...`); } else if (block.type === "text") { console.log(`[RESPONSE]: ${block.text}`); } } } main().catch(console.error);

パラメータ

パラメータ タイプ デフォルト 説明
type string 必須 "compact_20260112" を指定してください
trigger オブジェクト 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"])

圧縮後の一時停止

圧縮の概要を生成した後に API を一時停止pause_after_compactionするには、 を使用します。これにより、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イテレーションが表示されます。最終イテレーションのトークン数は、圧縮後の有効なコンテキストサイズを反映します。