Introducción a las interacciones conversacionales
Los modelos de lenguaje como GPT funcionan de manera fundamentalmente distinta a los sistemas conversacionales tradicionales. Cada petición a la API es independiente y aislada, sin memoria automática de interacciones anteriores. Este comportamiento se conoce como stateless (sin estado), lo que significa que el modelo no retiene información entre llamadas sucesivas.
Cuando enviamos un mensaje al modelo, este procesa únicamente el contenido que recibe en esa petición específica. Si queremos que el modelo "recuerde" algo mencionado anteriormente, debemos incluir explícitamente ese contexto en cada nueva llamada. Esta característica es crucial para entender cómo construir aplicaciones conversacionales efectivas.
La gestión del estado conversacional se vuelve esencial en cualquier aplicación que requiera mantener un diálogo coherente. Sin ella, el modelo respondería cada pregunta como si fuera la primera vez que interactúa con el usuario, perdiendo completamente el hilo de la conversación. Esto afectaría negativamente a casos de uso como asistentes virtuales, chatbots de atención al cliente o sistemas de tutoría interactiva.
Para ilustrar este comportamiento, consideremos un ejemplo donde preguntamos sobre un lenguaje de programación y posteriormente hacemos una pregunta de seguimiento. Si no gestionamos el estado, el modelo no sabrá a qué nos referimos con "ese lenguaje" en la segunda pregunta, ya que no tiene acceso automático a la primera interacción.
La API de OpenAI proporciona diferentes estrategias para abordar este desafío, desde la gestión manual del historial de mensajes hasta soluciones más automatizadas que simplifican el desarrollo de aplicaciones conversacionales complejas.
Gestión manual
La forma más básica de mantener el estado conversacional es acumular los mensajes de la conversación para enviarlos en cada llamada al LLM:
from openai import OpenAI
client = OpenAI()
history = [
{
"role": "user",
"content": "Indica cuál es el framework de desarrollo más habitual para el lenguaje Java."
}
]
response1 = client.responses.create(
model="gpt-5-nano",
input=history
)
history.append({"role": "assistant", "content": response1.output_text})
history.append({"role": "user", "content": "Indica qué IDE se suele usar para programar en ese framework"})
response2 = client.responses.create(
model="gpt-5-nano",
input=history
)
print(response2.output_text)
La dificultad reside en mantener el historial de mensajes en una lista y no perderlo.
Si bien esta es una forma de mantener la conversación, OpenAI proporciona opciones más avanzadas como se explora a continuación.
Parámetro previous_response_id
La API Responses de OpenAI simplifica significativamente este proceso mediante el uso del parámetro previous_response_id, que permite encadenar respuestas de forma automática sin necesidad de gestionar manualmente el historial completo de mensajes.
response = client.responses.create(
model="gpt-5-nano",
input="Indica cuál es el framework de desarrollo más habitual para el lenguaje Java.",
)
second_response = client.responses.create(
model="gpt-5-nano",
previous_response_id=response.id,
input=[{"role": "user", "content": "Indica qué IDE se suele usar para programar en ese framework"}],
)
third_response = client.responses.create(
model="gpt-5-nano",
previous_response_id=second_response.id,
input=[{"role": "user", "content": "Ahora indica cuál es la empresa que desarrolla ese IDE."}],
)
El previous_response_id está limitado solo al último mensaje Responses API, lo que presenta desafíos para conversaciones complejas.
Por otro lado, los mensajes por defecto permanecen en el historial por 30 días y después podrían no estar disponibles, por lo que esto podría generar problemas en conversaciones que se retoman después de meses.
Otro problema es la longitud, si la conversación se vuelve muy larga pasar toda la conversación en cada petición puede ser problemático.
No obstante, OpenAI proporciona una manera más avanzada de gestionar la conversación, como comentaremos a continuación.
Conversations API
La API Conversations es la opción moderna que ofrece OpenAI para gestionar el estado conversacional.
Lo primero es crear una conversación:
conversation = client.conversations.create()
A partir de aquí, cada llamada irá vinculada a esa conversación, sin necesidad de preocuparnos de encadenar manualmente ids de respuestas anteriores ni acumular mensajes en una lista:
# primera llamada
response = client.responses.create(
model="gpt-5.1",
input="Me llamo Mike, cuenta un chiste sobre Python.",
conversation=conversation.id
)
print(response.output_text)
# segunda llamada
response = client.responses.create(
model="gpt-5.1",
input="Hey cómo me llamo?",
conversation=conversation.id
)
print(response.output_text) #el modelo recuerda mi nombre porque está en la conversation
La API Conversations permite recuperar todos los mensajes de la conversación para no tener que almacenarlos localmente:
items = client.conversations.items.list(conversation.id, limit=10)
for message in items.data:
print(message)
Ejemplo de salida:
Message(id='msg_019787e9245f127d00691cbeab58b08190beb0052ca303a47e', content=[ResponseOutputText(annotations=[], text='Te llamas Mike.', type='output_text', logprobs=[])], role='assistant', status='completed', type='message')
Message(id='msg_019787e9245f127d00691cbeaa9fe08190a83dc8a92a8cd12a', content=[ResponseInputText(text='Hey cómo me llamo?', type='input_text')], role='user', status='completed', type='message')
Message(id='msg_019787e9245f127d00691cbe8db01881909015db28399b17cf', content=[ResponseOutputText(annotations=[], text='Claro, Mike, ahí va otro:\n\n¿Por qué el código en Python nunca se siente solo?\n\nPorque siempre está bien *indentado* en su grupo.', type='output_text', logprobs=[])], role='assistant', status='completed', type='message')
Message(id='msg_019787e9245f127d00691cbe8d36148190b625a98895dda7d4', content=[ResponseInputText(text='Me llamo Mike, cuenta un chiste sobre Python.', type='input_text')], role='user', status='completed', type='message')
Message(id='msg_019787e9245f127d00691cbe7715208190848cc2ae945b5229', content=[ResponseOutputText(annotations=[], text='Vale, Mike, aquí va uno:\n\n¿Por qué el programador de Python estaba siempre tranquilo?\n\nPorque cada vez que tenía un problema, lo envolvía en un *try* y lo dejaba ir con un *except* 😄', type='output_text', logprobs=[])], role='assistant', status='completed', type='message')
Message(id='msg_019787e9245f127d00691cbe769d8881908163957552b631ac', content=[ResponseInputText(text='Me llamo Mike, cuenta un chiste sobre Python.', type='input_text')], role='user', status='completed', type='message')
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en OpenAI
Documentación oficial de OpenAI
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, OpenAI es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de OpenAI
Explora más contenido relacionado con OpenAI y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
- Comprender la importancia de mantener el historial conversacional para la coherencia en diálogos.
- Aprender a implementar el seguimiento del contexto usando el parámetro previous_response_id.
- Desarrollar estrategias para gestionar conversaciones largas y optimizar el uso del contexto.
- Conocer métodos para persistir el historial entre sesiones y asegurar continuidad.
- Aplicar buenas prácticas para la gestión eficiente y robusta del contexto conversacional.
Cursos que incluyen esta lección
Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje