

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

# 圧縮
<a name="claude-messages-compaction"></a>

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

**注記**  
圧縮は現在ベータ版です。この機能を使用するには、API リクエスト`compact-2026-01-12`にベータヘッダーを含めます。圧縮は現在 Converse API ではサポートされていませんが、[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) ではサポートされています。

圧縮は、コンテキストウィンドウの制限に近づいたときに古いコンテキストを自動的に要約することで、長時間実行される会話やタスクの有効なコンテキストの長さを拡張します。これは、以下に最適です。
+ ユーザーが 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`ブロックを再適用しても追加の圧縮コストは発生せず、その場合でも最上位の使用フィールドは正確です。

## 圧縮の仕組み
<a name="claude-messages-compaction-how-it-works"></a>

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

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

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

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

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

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

## 基本的な使用法
<a name="claude-messages-compaction-basic-usage"></a>

Messages API リクエスト`context_management.edits`で `compact_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);
```

------

## パラメータ
<a name="claude-messages-compaction-parameters"></a>


| パラメータ | タイプ | デフォルト  | 説明  | 
| --- | --- | --- | --- | 
| type | string | 必須 | "compact\_20260112" を指定してください | 
| trigger | オブジェクト | 150,000 トークン | 圧縮をトリガーするタイミング。少なくとも 50,000 トークンである必要があります。 | 
| pause\_after\_compaction | boolean | false | 圧縮概要の生成後に一時停止するかどうか | 
| instructions | string | null | カスタム要約プロンプト。指定されると、デフォルトのプロンプトが完全に置き換えられます。 | 

## トリガーの設定
<a name="claude-messages-compaction-trigger"></a>

`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"])
```

## カスタム要約手順
<a name="claude-messages-compaction-custom-instructions"></a>

デフォルトでは、圧縮は次の要約プロンプトを使用します。

```
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"])
```

## 圧縮後の一時停止
<a name="claude-messages-compaction-pause"></a>

圧縮の概要を生成した後に 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"])
```

## 圧縮ブロックの使用
<a name="claude-messages-compaction-blocks"></a>

圧縮がトリガーされると、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..."
    }
  ]
}
```

## ストリーミング
<a name="claude-messages-compaction-streaming"></a>

圧縮を有効にしてレスポンスをストリーミングすると、圧縮が開始されると`content_block_start`イベントを受け取ります。圧縮ブロックのストリームは、テキストブロックとは異なります。`content_block_start` イベントが表示され、その後に完全な概要コンテンツ (中間ストリーミングなし) `content_block_delta`を含む 1 つの が続き、その後に`content_block_stop`イベントが続きます。

## プロンプトキャッシュ
<a name="claude-messages-compaction-prompt-caching"></a>

圧縮ブロックに`cache_control`ブレークポイントを追加できます。これにより、システムプロンプト全体を要約されたコンテンツとともにキャッシュします。元の圧縮コンテンツは無視されます。圧縮がトリガーされると、後続のリクエストでキャッシュミスが発生する可能性があることに注意してください。

```
{
    "role": "assistant",
    "content": [
        {
            "type": "compaction",
            "content": "[summary text]",
            "cache_control": {"type": "ephemeral"}
        },
        {
            "type": "text",
            "text": "Based on our conversation..."
        }
    ]
}
```

## 使用状況について
<a name="claude-messages-compaction-usage"></a>

圧縮には追加のサンプリングステップが必要であり、レート制限と請求に役立ちます。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`イテレーションが表示されます。最終イテレーションのトークン数は、圧縮後の有効なコンテキストサイズを反映します。