Cuando trabajas con la API de OpenAI, chat completions es la herramienta que te permite darle contexto al modelo mediante roles y ejemplos, para que sus respuestas sean más precisas y alineadas con tu objetivo. Aquí te muestro cómo configurar roles, ajustar la temperatura y evitar alucinaciones usando GPT 3.5 Turbo.
¿Qué son los chat completions en OpenAI y para qué sirven?
Los chat completions son una funcionalidad de la API que te permite construir conversaciones estructuradas con el modelo. En lugar de mandar un prompt suelto, le pasas una lista de mensajes con roles definidos para que el modelo entienda quién dice qué y cómo debe responder.
La documentación oficial sugiere dos modelos para estas tareas: GPT 3.5 Turbo y GPT 4. Con cualquiera de los dos puedes redactar emails, generar estructuras de código o construir agentes conversacionales completos.
¿Qué hace chat completions diferente de un prompt simple? Te permite pasar varios mensajes con roles (system, user, assistant) para que el modelo siga un flujo conversacional y mantenga coherencia con el contexto que tú definiste.
¿Cómo se usan los roles system, user y assistant?
La estructura de mensajes en chat completions gira alrededor de tres roles, y cada uno cumple una función específica dentro de la conversación [02:10].
- system: define el contexto principal y la personalidad del asistente. La documentación recomienda siempre empezar por aquí. Por ejemplo: "Eres un asistente que da información sobre deportes".
- user: representa lo que pregunta o pide la persona que interactúa con el modelo.
- assistant: muestra cómo debería responder el modelo, sirviendo como ejemplo del comportamiento esperado.
En la práctica, podrías configurar al asistente como agente de marketing, soporte técnico o cualquier otro rol. Lo importante es que las preguntas y respuestas que vengan después estén alineadas con ese contexto inicial.
¿Cómo se construye una llamada a chat completions paso a paso?
El flujo básico arranca llamando a openai.ChatCompletion.create() y pasándole dos parámetros esenciales: el modelo y la lista de mensajes [01:40].
- Selecciona el modelo, en este caso
gpt-3.5-turbo.
- Arma la lista
messages con el rol system y su contenido.
- Agrega un mensaje con rol user haciendo una pregunta, por ejemplo: "¿Quién ganó el Mundial de fútbol?".
- Incluye un mensaje con rol assistant mostrando la respuesta esperada: "El Mundial de 2022 lo ganó Argentina".
- Cierra con una nueva pregunta del user, como "¿Dónde se jugó?", para que el modelo continúe el flujo.
Para leer la respuesta de forma limpia, accede a response.choices[0].message.content. Esto te devuelve solo el texto generado, sin todo el objeto que retorna OpenAI.
¿Cómo afecta la temperatura a las respuestas del modelo?
La temperatura controla cuánta libertad creativa tiene el modelo al generar texto, y su impacto se nota mucho cuando ya configuraste roles claros [05:30].
Con una temperatura de 0.2, el modelo se vuelve más restrictivo y tiende a dar respuestas extensas pero apegadas al contexto. Por ejemplo, ante la pregunta "¿Dónde se jugó?", devolvió: "El mundial de fútbol de 2022 se jugó en Catar" y agregó información adicional coherente.
Con temperatura en 1, la libertad aumenta tanto que el modelo puede equivocarse. En la prueba, respondió que "el mundial de fútbol de 2022 aún no se ha celebrado", una respuesta incorrecta.
¿Qué son las alucinaciones en modelos de OpenAI? Son respuestas inventadas o incorrectas que el modelo genera cuando no encuentra información clara o cuando la temperatura le da demasiada libertad creativa. Pueden parecer convincentes, pero no son confiables.
Por eso, ajustar la temperatura según el caso de uso es clave: bajo para tareas factuales, alto para creatividad.
¿Qué otros parámetros y recursos vale la pena explorar?
Más allá del modelo y los mensajes, la documentación de chat completions cubre temas que afectan directamente tu producto y tu presupuesto.
- Formato de respuesta: define cómo recibes el output del modelo.
- Manejo de tokens: controla los costos asociados al prompt y al resultado generado.
- API references: en la sección chat encuentras todos los parámetros disponibles para personalizar las llamadas.
Un detalle importante: si no defines el parámetro de máximo de tokens, las respuestas pueden variar mucho en longitud. Definirlo te ayuda a mantener consistencia y a controlar el gasto.
La estructura básica siempre será la misma: llamas a la funcionalidad, eliges el modelo, y pasas los ejemplos de conversación empezando por el rol system. A partir de ahí, puedes sumar tantos pares user-assistant como necesites para guiar el comportamiento.
Con esto ya tienes la base para construir asistentes con contexto. El siguiente paso natural es llevarlo más lejos con fine tuning, que te permite entrenar un modelo de OpenAI con tus propios datos. ¿Qué tipo de asistente quieres construir tú? Cuéntame en los comentarios.