Cómo mantener conversaciones y agentes largos sin perder el contexto importante

Responses API ofrece varias formas de conservar estado entre turnos. Puedes encadenar respuestas con previous_response_id, utilizar Conversations para persistir items en el servidor y aplicar compaction cuando el historial crece demasiado. La clave es conservar decisiones, IDs, resultados de tools y objetivos activos sin reenviar indefinidamente todo el historial.

Context management en Responses API: guía completa para conversaciones y agentes

OpenAI · Responses API · Context Management

Context management en Responses API: compaction, Conversations y contexto largo

Aprende a mantener conversaciones y agentes de larga duración sin reenviar indefinidamente todo el historial, perder decisiones importantes o alcanzar el límite de contexto de forma inesperada.

Actualizado: agosto 2026 Responses API Conversations API Compaction Agentes IA Python

Context management en Responses API es el conjunto de decisiones que determinan qué información recibe el modelo en cada turno, cómo se conserva el estado y qué hacer cuando una conversación crece durante horas, días o cientos de ejecuciones.

En una aplicación sencilla, enviar unos cuantos mensajes anteriores puede ser suficiente. Sin embargo, un agente que utiliza herramientas, recupera archivos, crea tareas y mantiene objetivos durante muchos turnos necesita una estrategia más sólida.

OpenAI ofrece varias piezas para resolver este problema. Puedes encadenar Responses mediante previous_response_id, guardar items dentro de una Conversation y aplicar compaction cuando el historial se vuelve demasiado grande.

La idea principal: “tener memoria” no significa enviar absolutamente todo en cada petición. Una buena arquitectura conserva lo que sigue siendo relevante y reduce aquello que ya puede resumirse o comprimirse.
Conversation Persiste items de múltiples Responses dentro de un mismo hilo.
previous_response_id Encadena turnos sin tener que construir manualmente todo el input.
/compact Reduce el historial a un estado reutilizable y más pequeño.
Opaque state El elemento de compaction debe tratarse como contenido opaco.

El problema del contexto largo en agentes de IA

Cada modelo tiene una ventana de contexto finita. Por tanto, una conversación no puede crecer indefinidamente sin que llegue un momento en el que necesites eliminar, resumir o compactar información anterior.

Además, el problema no es únicamente técnico. Un contexto más grande puede aumentar el número de tokens procesados. Asimismo, cuanto más ruido incluyes, más difícil puede resultar mantener clara la tarea principal.

01

Más historial

Cada turno añade mensajes, resultados de herramientas, decisiones y datos recuperados.

02

Más tokens

Reenviar información antigua una y otra vez puede aumentar el volumen de entrada procesado.

03

Más ruido

Información que ya no afecta al objetivo puede competir con instrucciones y datos realmente importantes.

Sin gestión de contexto
Turno 1
Turno 2 · Turno 3
HISTORIAL
cada vez mayor
Más tokens
+ límite de contexto

Tres formas de mantener estado con Responses API

No existe una única estrategia. La mejor opción depende de si quieres que OpenAI gestione el hilo, si necesitas control manual o si tu aplicación debe funcionar de manera stateless.

EnfoqueCómo funcionaCuándo usarlo
previous_response_id Cada nueva Response referencia la Response anterior. Chats sencillos y secuencias lineales de varios turnos.
Conversation Un objeto Conversation almacena items y las nuevas Responses se añaden automáticamente. Hilos persistentes, agentes, productos con sesión y CRM.
Estado manual Tu aplicación decide qué output items devolver en el siguiente input. store:false, Zero Data Retention o control avanzado.
Importante: conversation y previous_response_id son alternativas en una misma petición. La referencia oficial de Responses indica que no pueden utilizarse simultáneamente.

Cómo usar previous_response_id

Para una conversación lineal, previous_response_id es una de las formas más sencillas de continuar un turno anterior.

Primero creas una Response. Después, utilizas su ID en la siguiente petición. De esta forma, Responses API puede continuar la conversación sin que tengas que reconstruir manualmente todos los mensajes.

Python · conversación con previous_response_id
from openai import OpenAI

client = OpenAI()

first = client.responses.create(
    model="gpt-5.6",
    instructions="Eres un asistente técnico para una aplicación SaaS.",
    input="Mi cliente utiliza PostgreSQL y Redis."
)

second = client.responses.create(
    model="gpt-5.6",
    instructions="Eres un asistente técnico para una aplicación SaaS.",
    previous_response_id=first.id,
    input="¿Qué arquitectura de caché recomendarías?"
)

print(second.output_text)
!
Vuelve a enviar las instructions cuando lo necesites

La referencia actual de Responses API aclara que las instructions del Response anterior no se heredan automáticamente cuando continúas mediante previous_response_id.

Ventajas

Muy sencillo

Solo necesitas guardar el ID de la Response anterior para continuar una secuencia.

Bueno para chats lineales

Funciona bien cuando cada nuevo turno deriva directamente del anterior.

Cuándo se queda corto

Si el producto necesita sesiones que sobreviven durante días, varias interfaces accediendo al mismo hilo o una gestión explícita de items, suele ser más natural utilizar Conversations.

Cómo utilizar Conversations API

Conversations API crea un objeto persistente al que puedes asociar diferentes Responses. Además, puedes añadir metadata para relacionar la conversación con tu propia aplicación.

Cuando una Response incluye el identificador de la Conversation, los items existentes se añaden al contexto de la petición. Después, los inputs y outputs nuevos se incorporan automáticamente a esa Conversation.

Python · crear Conversation
from openai import OpenAI

client = OpenAI()

conversation = client.conversations.create(
    metadata={
        "customer_id": "customer_482",
        "channel": "support"
    }
)

print(conversation.id)
Python · enviar Responses a la misma Conversation
response = client.responses.create(
    model="gpt-5.6",
    conversation=conversation.id,
    instructions=(
        "Ayuda al usuario con su cuenta. "
        "No inventes datos que no existan en el contexto."
    ),
    input="Estoy intentando configurar el webhook de pagos."
)

print(response.output_text)

next_response = client.responses.create(
    model="gpt-5.6",
    conversation=conversation.id,
    instructions=(
        "Ayuda al usuario con su cuenta. "
        "No inventes datos que no existan en el contexto."
    ),
    input="El endpoint ya responde 200. ¿Qué debería validar ahora?"
)

print(next_response.output_text)
Conversation
conv_123
Response 1
input + output
Response 2
continúa estado

Qué guarda realmente una Conversation

Una Conversation no debe imaginarse solamente como una lista de mensajes. Responses API trabaja con items, y esos items pueden representar diferentes partes de una ejecución.

Por tanto, un agente puede mantener más que texto. Según la operación, el contexto puede incluir mensajes, llamadas a herramientas, resultados y otros items compatibles con Responses API.

Mensajes

Instrucciones del usuario y salidas visibles que forman parte de la conversación.

Tool calls

Acciones que el modelo decidió ejecutar durante un flujo agentic.

Tool outputs

Resultados que posteriormente pueden ser relevantes para decisiones del agente.

Consejo de arquitectura: guarda en tu propia base de datos el ID de la Conversation junto con el usuario, organización o caso al que pertenece. No dependas de que el modelo descubra por sí solo qué hilo corresponde a cada cliente.

Qué es compaction en Responses API

Compaction está diseñada para conversaciones y flujos de larga duración. En lugar de seguir enviando un historial completo cada vez más grande, puedes ejecutar una pasada de compactación.

El endpoint actual es POST /responses/compact. El resultado contiene los mensajes de usuario correspondientes y un item de compaction con contenido cifrado.

Ese item es opaco. En consecuencia, tu aplicación no debería intentar interpretar su estructura interna ni convertirlo en una fuente de información para la interfaz.

Qué hace compaction
Historial largo
+ tools + resultados
RESPONSES
/compact
Estado compacto
reutilizable

Cuándo resulta útil

Agentes largos

Procesos que realizan muchas acciones antes de completar el objetivo.

Tool-heavy workflows

Sesiones que acumulan múltiples llamadas y resultados de herramientas.

Chats persistentes

Conversaciones donde todavía necesitas información importante de turnos antiguos.

Cómo compactar una conversación paso a paso

El patrón general es sencillo. Primero conservas los items relevantes del flujo. Después, llamas al endpoint de compaction. Finalmente, reutilizas el output compacto como parte del siguiente input.

01

Acumula estado útil

Conserva mensajes, outputs y resultados necesarios para continuar el trabajo.

02

Decide el momento de compactar

Hazlo antes de que la conversación se aproxime peligrosamente al límite del modelo.

03

Llama a responses.compact

Envía el estado que quieres comprimir utilizando un modelo compatible.

04

Guarda el output compacto

Trata el item de compaction como contenido opaco.

05

Continúa la tarea

Usa ese estado reducido junto con el siguiente input del usuario.

Python · patrón simplificado de compaction
from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="gpt-5.6",
    input="Diseña la arquitectura inicial de un CRM con agentes."
)

history = [
    {
        "role": "user",
        "content": "Diseña la arquitectura inicial de un CRM con agentes."
    },
    *[item.model_dump() for item in response.output]
]

compacted = client.responses.compact(
    model="gpt-5.6",
    input=history
)

compact_state = [
    item.model_dump()
    for item in compacted.output
]

next_response = client.responses.create(
    model="gpt-5.6",
    input=[
        *compact_state,
        {
            "role": "user",
            "content": "Ahora agrega facturación y permisos por equipo."
        }
    ]
)

print(next_response.output_text)
API
Valida el ejemplo contra la versión de tu SDK

OpenAI continúa ampliando Responses API y context management. En producción, utiliza la versión actual del SDK y revisa la referencia del endpoint antes de desplegar.

Context management automático en Responses API

Además del endpoint manual de compaction, la referencia actual de responses.create expone una configuración context_management.

Esta configuración incluye un umbral de compactación. Por tanto, la API puede ayudarte a definir cuándo debe intervenir la gestión de contexto en lugar de depender únicamente de lógica personalizada en tu backend.

Manual

Tu backend mide el estado y decide exactamente cuándo llamar a /responses/compact.

  • Máximo control.
  • Más lógica propia.
  • Fácil de instrumentar con reglas internas.

Context management

La propia petición configura la estrategia de gestión y su umbral de compactación.

  • Menos orquestación manual.
  • Más integrado con Responses API.
  • Revisa siempre el schema vigente.
Para contenido evergreen: evita copiar una estructura experimental sin comprobarla. El nombre y los campos del schema pueden evolucionar, mientras que el principio se mantiene: compactar antes de que el contexto deje de ser manejable.

Arquitectura recomendada para un agente de larga duración

Una buena arquitectura separa tres tipos de memoria. Primero, utiliza el contexto del modelo para el trabajo inmediato. Después, usa Conversations o estado equivalente para continuidad. Finalmente, guarda hechos duraderos en tu propia base de datos.

NOW

Contexto activo

Objetivo actual, últimos turnos, resultados recientes y herramientas necesarias para la siguiente decisión.

CONV

Estado conversacional

Conversation, previous response o items compactados que permiten continuar el hilo.

DB

Memoria de negocio

Clientes, pedidos, permisos, preferencias y hechos que deben sobrevivir aunque cambies de conversación.

Patrón de producción
Base de datos
hechos duraderos
RESPONSES API
contexto activo
Tools + acciones
del agente

Qué debes conservar cuando el agente utiliza herramientas

Los agentes de producción no generan únicamente texto. También llaman APIs, consultan bases de datos y ejecutan acciones. Por eso, el contexto importante incluye resultados operativos.

Conserva

  • Objetivo activo.
  • Acciones ya completadas.
  • IDs creados por herramientas.
  • Resultados que afectan decisiones futuras.
  • Supuestos todavía vigentes.
  • Bloqueos no resueltos.

Reduce cuando sea posible

  • Logs repetitivos.
  • Resultados enormes ya procesados.
  • Mensajes sociales sin impacto futuro.
  • Opciones descartadas definitivamente.
  • Datos duplicados.
  • Explicaciones intermedias innecesarias.

Ejemplo

Si un agente creó una orden con ID ord_7281, ese identificador puede ser importante diez turnos después. En cambio, probablemente no necesitas conservar cada campo de la respuesta JSON original si ya guardaste la orden en tu base de datos.

Qué cambia con store:false o Zero Data Retention

Algunas aplicaciones no quieren depender del estado almacenado por Responses API. En ese caso, tu backend debe reenviar los items relevantes en los turnos posteriores.

La guía actual de modelos de OpenAI recomienda preservar los output items relevantes cuando administras el historial manualmente. Esto es especialmente importante en flujos de razonamiento y tools.

Response
devuelve items
Tu backend
guarda estado
Próximo request
reenvía items
No confundas stateless con “sin memoria”. Puedes mantener memoria en tu infraestructura y proporcionar únicamente la parte necesaria en cada llamada.

Compaction vs prompt caching: resuelven problemas diferentes

Prompt caching y compaction pueden parecer similares porque ambos ayudan con prompts grandes. Sin embargo, no hacen lo mismo.

CaracterísticaCompactionPrompt caching
ObjetivoReducir el estado necesario para continuar.Reutilizar prefijos de input repetidos.
Modifica el estadoSí, genera un estado compacto.No sustituye el contenido lógico del prompt.
Uso idealConversaciones y agentes largos.Instrucciones y contexto repetido entre requests.
Beneficio principalControlar crecimiento del contexto.Mejorar eficiencia de inputs repetidos.

Por tanto, una aplicación puede utilizar ambas estrategias. Puedes mantener un prompt estable que aproveche caching y, al mismo tiempo, compactar una conversación cuando su estado crece demasiado.

Por qué truncation no debería ser tu estrategia principal

Responses API todavía expone truncation en su referencia, aunque actualmente aparece como deprecado.

Con la opción automática, el sistema puede eliminar items del principio cuando el input supera la ventana disponible. El problema es que esos items antiguos pueden contener una decisión o ID que siga siendo crítico.

CUT
Cortar no es lo mismo que compactar

Truncar elimina contexto. Compaction intenta conservar la información relevante en un estado comprimido para continuar. Por eso, una estrategia de producción debería preferir gestión intencional del estado.

Cómo reducir tokens sin perder memoria útil

La optimización no consiste en eliminar información al azar. Primero debes identificar qué datos siguen afectando las decisiones futuras.

01

Separa hechos de conversación

Guarda datos duraderos en tu propia base de datos en lugar de depender de mensajes antiguos.

02

Evita outputs gigantes de tools

Filtra o transforma resultados antes de introducirlos al contexto cuando no necesitas todos los campos.

03

Compacta después de hitos

Un buen momento puede ser al finalizar una fase importante del workflow.

04

Mide usage

Registra tokens de entrada y salida para detectar conversaciones que crecen demasiado rápido.

05

Conserva IDs y decisiones

Reducir contexto nunca debería borrar el estado operativo necesario para continuar.