View a markdown version of this page

Compactación - Amazon Bedrock

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Compactación

sugerencia

Server-side se recomienda la compactación para gestionar el contexto en conversaciones de larga duración y flujos de trabajo de agencia, ya que gestiona la gestión del contexto de forma automática con un trabajo de integración mínimo.

nota

La compactación se encuentra actualmente en fase beta. Incluye el encabezado beta compact-2026-01-12 en tus solicitudes de API para usar esta función. La Converse API no admite actualmente la compactación, pero sí la admite. InvokeModel

La compactación amplía la longitud efectiva del contexto para las conversaciones y tareas de larga duración al resumir automáticamente el contexto anterior cuando se acerca al límite de la ventana de contexto. Esto es ideal para:

  • Chat-based, conversaciones de varios turnos en las que quieres que los usuarios usen un chat durante un período de tiempo prolongado

  • Task-oriented mensajes que requieren mucho trabajo de seguimiento (a menudo el uso de herramientas) y que pueden superar la ventana de contexto de 200 000

La compactación es compatible con los siguientes modelos:

Modelo ID del modelo

Claude Sonnet 4.6

anthropic.claude-sonnet-4-6

Claude Opus 4.6

anthropic.claude-opus-4-6-v1

nota

Los modelos de nivel superior input_tokens y output_tokens de usage campo no incluyen el uso de iteraciones de compactación y reflejan la suma de todas las iteraciones que no son de compactación. Para calcular el total de tokens consumidos y facturados para una solicitud, suma todas las entradas de la matriz. usage.iterations

Si anteriormente utilizaba usage.input_tokens y usage.output_tokens para el seguimiento o la auditoría de los costes, tendrá que actualizar su lógica de seguimiento para que se acumule de forma transversal usage.iterations cuando la compactación esté habilitada. La iterations matriz solo está presente cuando se activa una nueva compactación durante la solicitud. Re-applying un compaction bloque anterior no implica ningún coste de compactación adicional y, en ese caso, los campos de uso de nivel superior siguen siendo precisos.

Cómo funciona la compactación

Cuando la compactación está habilitada, resume Claude automáticamente la conversación cuando se acerca al umbral de token configurado. La API:

  1. Detecta cuando los tokens de entrada superan el umbral de activación especificado.

  2. Genera un resumen de la conversación actual.

  3. Crea un compaction bloque que contiene el resumen.

  4. Continúa la respuesta con el contexto compactado.

En solicitudes posteriores, añada la respuesta a sus mensajes. La API elimina automáticamente todos los bloques de mensajes antes del compaction bloqueo, continuando la conversación desde el resumen.

Uso básico

Para habilitar la compactación, agrega la compact_20260112 estrategia a context_management.edits tu solicitud de API de Mensajes.

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);

Parameters

Parámetro Tipo Predeterminado Description (Descripción)
type cadena Obligatorio Debe ser "compact_20260112"
trigger objeto 150 000 fichas Cuándo activar la compactación. Debe contener al menos 50 000 fichas.
pause_after_compaction booleano false Si se debe hacer una pausa después de generar el resumen de compactación
instructions cadena null Mensaje de resumen personalizado. Sustituye por completo al mensaje predeterminado cuando se proporciona.

Configuración de desencadenadores

Configure cuándo se desencadena la compactación mediante el trigger parámetro:

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

Instrucciones de resumen personalizadas

De forma predeterminada, la compactación utiliza la siguiente solicitud de resumen:

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.

Puede proporcionar instrucciones personalizadas mediante el instructions parámetro para reemplazar esta solicitud por completo. Las instrucciones personalizadas no complementan las predeterminadas, sino que las sustituyen por completo:

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

Hacer una pausa después de la compactación

Se usa pause_after_compaction para pausar la API después de generar el resumen de compactación. Esto te permite añadir bloques de contenido adicionales (por ejemplo, conservar mensajes recientes o mensajes específicos orientados a instrucciones) antes de que la API continúe con la respuesta.

Cuando está habilitada, la API devuelve un mensaje con el motivo de la compaction interrupción tras generar el bloque de compactación:

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

Trabajando con bloques de compactación

Cuando se activa la compactación, la API devuelve un compaction bloque al principio de la respuesta del asistente.

Una conversación prolongada puede provocar varias compactaciones. El último bloque de compactación refleja el estado final de la solicitud y reemplaza el contenido anterior por el resumen generado.

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

Transmisión

Al transmitir respuestas con la compactación habilitada, recibirás un content_block_start evento cuando comience la compactación. El bloque de compactación se transmite de forma diferente a los bloques de texto. Recibirás un content_block_start evento, seguido de un sencillo content_block_delta con el contenido resumido completo (sin retransmisiones intermedias) y, a continuación, un content_block_stop evento.

Almacenamiento en caché de peticiones

Puedes añadir un cache_control punto de interrupción en los bloques de compactación para almacenar en caché todo el mensaje del sistema junto con el contenido resumido. Se ignora el contenido compactado original. Tenga en cuenta que cuando se activa la compactación, puede provocar que se pierda la memoria caché en la solicitud posterior.

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

Comprender el uso

La compactación requiere un paso de muestreo adicional, lo que contribuye a los límites de tarifas y a la facturación. La API muestra información de uso detallada en la respuesta:

{ "usage": { "input_tokens": 45000, "output_tokens": 1234, "iterations": [ { "type": "compaction", "input_tokens": 180000, "output_tokens": 3500 }, { "type": "message", "input_tokens": 23000, "output_tokens": 1000 } ] } }

La iterations matriz muestra el uso de cada iteración de muestreo. Cuando se produzca la compactación, verás una compaction iteración seguida de la iteración principal. message Los recuentos de tokens de la iteración final reflejan el tamaño efectivo del contexto después de la compactación.