

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

**Tip**  
Pemadatan sisi server direkomendasikan untuk mengelola konteks dalam percakapan yang berjalan lama dan alur kerja agen karena menangani manajemen konteks secara otomatis dengan pekerjaan integrasi minimal.

**catatan**  
Pemadatan saat ini dalam versi beta. Sertakan header beta `compact-2026-01-12` dalam permintaan API Anda untuk menggunakan fitur ini. Pemadatan saat ini tidak didukung oleh Converse API, namun didukung dengan [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html).

Pemadatan memperluas panjang konteks efektif untuk percakapan dan tugas yang berjalan lama dengan secara otomatis meringkas konteks yang lebih lama saat mendekati batas jendela konteks. Ini sangat ideal untuk:
+ Percakapan multi-putaran berbasis obrolan di mana Anda ingin pengguna menggunakan satu obrolan untuk jangka waktu yang lama
+ Permintaan berorientasi tugas yang membutuhkan banyak pekerjaan tindak lanjut (seringkali penggunaan alat) yang mungkin melebihi jendela konteks 200K

Pemadatan didukung pada model berikut:


| Model | ID Model | 
| --- | --- | 
| Claude Sonnet 4.6 | `anthropic.claude-sonnet-4-6` | 
| Claude Opus 4.6 | `anthropic.claude-opus-4-6-v1` | 

**catatan**  
Tingkat atas `input_tokens` dan `output_tokens` di `usage` lapangan tidak menyertakan penggunaan iterasi pemadatan, dan mencerminkan jumlah semua iterasi non-pemadatan. Untuk menghitung total token yang dikonsumsi dan ditagih untuk permintaan, jumlahkan semua entri dalam array. `usage.iterations`  
Jika sebelumnya Anda mengandalkan `usage.input_tokens` dan `usage.output_tokens` untuk pelacakan biaya atau audit, Anda perlu memperbarui logika pelacakan untuk digabungkan `usage.iterations` saat pemadatan diaktifkan. `iterations`Array hanya hadir ketika pemadatan baru dipicu selama permintaan. Menerapkan kembali `compaction` blok sebelumnya tidak menimbulkan biaya pemadatan tambahan, dan bidang penggunaan tingkat atas tetap akurat dalam kasus itu.

## Cara kerja pemadatan
<a name="claude-messages-compaction-how-it-works"></a>

Saat pemadatan diaktifkan, Claude secara otomatis merangkum percakapan Anda saat mendekati ambang token yang dikonfigurasi. API:

1. Mendeteksi ketika token masukan melebihi ambang batas pemicu yang Anda tentukan.

1. Menghasilkan ringkasan percakapan saat ini.

1. Membuat `compaction` blok yang berisi ringkasan.

1. Melanjutkan respons dengan konteks yang dipadatkan.

Pada permintaan berikutnya, tambahkan respons ke pesan Anda. API secara otomatis menghapus semua blok pesan sebelum `compaction` pemblokiran, melanjutkan percakapan dari ringkasan.

## Penggunaan dasar
<a name="claude-messages-compaction-basic-usage"></a>

Aktifkan pemadatan dengan menambahkan `compact_20260112` strategi ke `context_management.edits` dalam permintaan Messages API Anda.

------
#### [ 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);
```

------

## Parameter
<a name="claude-messages-compaction-parameters"></a>


| Parameter | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
| type | string | Diperlukan | Harus "compact\$120260112" | 
| trigger | object | 150.000 token | Kapan harus memicu pemadatan. Harus setidaknya 50.000 token. | 
| pause\$1after\$1compaction | boolean | false | Apakah akan berhenti sejenak setelah menghasilkan ringkasan pemadatan | 
| instructions | string | null | Permintaan ringkasan kustom. Sepenuhnya menggantikan prompt default saat disediakan. | 

## Konfigurasi pemicu
<a name="claude-messages-compaction-trigger"></a>

Konfigurasikan saat pemadatan memicu menggunakan parameter: `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"])
```

## Instruksi ringkasan kustom
<a name="claude-messages-compaction-custom-instructions"></a>

Secara default, pemadatan menggunakan prompt ringkasan berikut:

```
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.
```

Anda dapat memberikan instruksi khusus melalui `instructions` parameter untuk mengganti prompt ini sepenuhnya. Instruksi khusus tidak melengkapi default; mereka sepenuhnya menggantikannya:

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

## Berhenti setelah pemadatan
<a name="claude-messages-compaction-pause"></a>

Gunakan `pause_after_compaction` untuk menjeda API setelah membuat ringkasan pemadatan. Ini memungkinkan Anda menambahkan blok konten tambahan (seperti menyimpan pesan terbaru atau pesan berorientasi instruksi tertentu) sebelum API melanjutkan respons.

Saat diaktifkan, API mengembalikan pesan dengan alasan `compaction` berhenti setelah membuat blok pemadatan:

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

## Bekerja dengan blok pemadatan
<a name="claude-messages-compaction-blocks"></a>

Saat pemadatan dipicu, API mengembalikan `compaction` blok di awal respons asisten.

Percakapan yang berjalan lama dapat menghasilkan beberapa pemadatan. Blok pemadatan terakhir mencerminkan status akhir prompt, menggantikan konten sebelumnya dengan ringkasan yang dihasilkan.

```
{
  "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..."
    }
  ]
}
```

## Streaming
<a name="claude-messages-compaction-streaming"></a>

Saat streaming respons dengan pemadatan diaktifkan, Anda akan menerima `content_block_start` acara saat pemadatan dimulai. Blok pemadatan mengalir secara berbeda dari blok teks. Anda akan menerima `content_block_start` acara, diikuti oleh satu `content_block_delta` dengan konten ringkasan lengkap (tidak ada streaming menengah), dan kemudian `content_block_stop` acara.

## Caching cepat
<a name="claude-messages-compaction-prompt-caching"></a>

Anda dapat menambahkan `cache_control` breakpoint pada blok pemadatan, yang menyimpan prompt sistem lengkap bersama dengan konten yang diringkas. Konten asli yang dipadatkan diabaikan. Perhatikan bahwa ketika pemadatan dipicu, itu dapat mengakibatkan cache hilang pada permintaan berikutnya.

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

## Memahami penggunaan
<a name="claude-messages-compaction-usage"></a>

Pemadatan membutuhkan langkah pengambilan sampel tambahan, yang berkontribusi pada batas nilai dan penagihan. API mengembalikan informasi penggunaan terperinci dalam respons:

```
{
  "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`Array menunjukkan penggunaan untuk setiap iterasi sampling. Ketika pemadatan terjadi, Anda akan melihat `compaction` iterasi diikuti oleh iterasi utama`message`. Jumlah token iterasi akhir mencerminkan ukuran konteks efektif setelah pemadatan.