Pemadatan - Amazon Bedrock

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

Pemadatan

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.

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

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.

  2. Menghasilkan ringkasan percakapan saat ini.

  3. Membuat compaction blok yang berisi ringkasan.

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

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

Parameter Tipe Default Deskripsi
type string Diperlukan Harus "compact_20260112"
trigger object 150.000 token Kapan harus memicu pemadatan. Harus setidaknya 50.000 token.
pause_after_compaction boolean false Apakah akan berhenti sejenak setelah menghasilkan ringkasan pemadatan
instructions string null Permintaan ringkasan kustom. Sepenuhnya menggantikan prompt default saat disediakan.

Konfigurasi pemicu

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

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

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

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

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

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

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 } ] } }

iterationsArray menunjukkan penggunaan untuk setiap iterasi sampling. Ketika pemadatan terjadi, Anda akan melihat compaction iterasi diikuti oleh iterasi utamamessage. Jumlah token iterasi akhir mencerminkan ukuran konteks efektif setelah pemadatan.