

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
<a name="claude-messages-compaction"></a>

**sugerencia**  
Se recomienda la compactación del lado del servidor para gestionar el contexto en las conversaciones prolongadas y los flujos de trabajo de los agentes, 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 versión beta. Incluye el encabezado de la versión 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](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)

La compactación amplía la longitud efectiva del contexto para conversaciones y tareas prolongadas al resumir automáticamente el contexto anterior cuando se acerca al límite de la ventana de contexto. Esto es ideal para:
+ Conversaciones de varios turnos basadas en el chat en las que quieres que los usuarios usen un chat durante un período prolongado
+ Mensajes orientados a tareas que requieren mucho trabajo de seguimiento (a menudo, el uso de herramientas) y que pueden superar la ventana contextual 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**  
El nivel superior `input_tokens` y `output_tokens` el de `usage` campo no incluyen el uso de iteraciones de compactación y reflejan la suma de todas las iteraciones sin compactación. Para calcular el total de fichas consumidas y facturadas para una solicitud, suma todas las entradas de la matriz. `usage.iterations`  
Si anteriormente se basaba en el `usage.input_tokens` seguimiento o la auditoría de los costes, tendrá que actualizar la lógica de seguimiento para agregarla `usage.iterations` cuando la compactación esté habilitada. `usage.output_tokens` La `iterations` matriz solo está presente cuando se activa una nueva compactación durante la solicitud. Volver a aplicar un `compaction` bloque anterior no supone 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
<a name="claude-messages-compaction-how-it-works"></a>

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.

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

1. Crea un `compaction` bloque que contiene el resumen.

1. 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 anteriores al `compaction` bloqueo y continúa la conversación desde el resumen.

## Uso básico
<a name="claude-messages-compaction-basic-usage"></a>

Activa la compactación añadiendo la `compact_20260112` estrategia a tu solicitud `context_management.edits` de la 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
<a name="claude-messages-compaction-parameters"></a>


| Parámetro | Tipo | Predeterminado | Description (Descripción) | 
| --- | --- | --- | --- | 
| type | cadena | Obligatorio | Debe ser "compact\$120260112" | 
| trigger | objeto | 150 000 fichas | Cuándo activar la compactación. Debe haber al menos 50 000 fichas. | 
| pause\$1after\$1compaction | booleano | false | Si se debe hacer una pausa después de generar el resumen de compactación | 
| instructions | cadena | null | Solicitud de resumen personalizada. Sustituye por completo al mensaje predeterminado cuando se proporciona. | 

## Configuración de desencadenadores
<a name="claude-messages-compaction-trigger"></a>

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
<a name="claude-messages-compaction-custom-instructions"></a>

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 la predeterminada, sino que la 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"])
```

## Pausa después de la compactación
<a name="claude-messages-compaction-pause"></a>

Se utiliza `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 los 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 después de 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
<a name="claude-messages-compaction-blocks"></a>

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

Una conversación prolongada puede provocar varias compactaciones. El último bloque de compactación refleja el estado final del mensaje 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
<a name="claude-messages-compaction-streaming"></a>

Cuando transmitas las respuestas con la compactación habilitada, recibirás un `content_block_start` evento cuando comience la compactación. El flujo del bloque de compactación es diferente al de los bloques de texto. Recibirás un `content_block_start` evento, seguido de un sencillo `content_block_delta` con el resumen completo del contenido (sin transmisión intermedia) y, a continuación, un `content_block_stop` evento.

## Almacenamiento en caché de peticiones
<a name="claude-messages-compaction-prompt-caching"></a>

Puedes añadir un `cache_control` punto de interrupción en los bloques de compactación, que almacenará en caché todo el mensaje del sistema junto con el contenido resumido. Se ignora el contenido compactado original. Ten en cuenta que, cuando se activa la compactación, es posible que se pierda la memoria caché en la siguiente solicitud.

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

## Entender el uso
<a name="claude-messages-compaction-usage"></a>

La compactación requiere un paso de muestreo adicional, lo que contribuye a los límites de tarifa y a la facturación. La API devuelve 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 produce la compactación, verá una `compaction` iteración seguida de la iteración principal. `message` Los recuentos de símbolos de la iteración final reflejan el tamaño efectivo del contexto tras la compactación.