Guía de OpenAI para escribir prompts para la IA «que razona»
Los modelos de IA que razón cada vez se usan más y por eso OpenAI ha publicado una guía para escribir prompts para ellos.
Estos modelos funcionan mejor con instrucciones sencillas. Algunas técnicas de ingeniería de prompts, como el aprendizaje few-shot1 o las instrucciones para que el modelo «piense paso a paso» («think step by step2«), pueden no mejorar el rendimiento (y a veces pueden entorpecerlo).
Estas son las mejores prácticas de prompting para modelos de IA que razonan:
- Los mensajes para desarrolladores son los nuevos mensajes del sistema: A partir de
o1-2024-12-17
, los modelos o1 admiten mensajes del desarrollador en lugar de mensajes del sistema, para alinearse con el comportamiento de la cadena de mando descrito en la especificación del modelo. - Instrucciones sencillas y directas: los modelos destacan por su capacidad para comprender y responder a instrucciones breves y claras sin necesidad de una orientación exhaustiva.
- Evita las instrucciones de cadena de pensamiento: Dado que estos modelos razonan internamente, no es necesario pedirles que «piensen paso a paso» o «expliquen su razonamiento».
- Utiliza delimitadores para mayor claridad: Utiliza delimitadores como comillas triples, etiquetas XML o títulos de sección para indicar claramente las distintas partes de la entrada y ayudar al modelo a interpretar adecuadamente las diferentes secciones.
- Limita el contexto adicional en la generación aumentada por recuperación (RAG): Cuando proporciones contexto o documentos adicionales, incluye sólo la información más relevante para evitar que el modelo complique en exceso su respuesta.
- Formato Markdown: A partir de
o1-2024-12-17
, los modelos o1 de la API evitarán generar respuestas con formato markdown. Para indicarle al modelo que quieres una respuesta en formato Markdown, hay que incluir en en la primera línea de su mensaje de desarrollador «formatting re-enabled
«.
Lo más importante: el uso de delimitadores
Lo más importante es utilizar delimitadores, por ejemplo etiquetas XML con el siguiente aspecto:
<context>
Tu texto....
</context>
También puedes anidar etiquetas, por ejemplo:
<outer><inner></inner></outer>
Un ejemplo concreto:
<context>
Estoy construyendo una sencilla aplicación de calculadora en Python. Por ahora es una aplicación de interfaz de línea de comandos (CLI), centrada en operaciones aritméticas básicas. Estoy usando librerías Python estándar y no he implementado ningún manejo de errores complejo o UI todavía.
<problem>
Cuando realizo una suma simple, como '2 + 2', la calculadora a veces devuelve '5' en lugar de '4'. Esto no sucede constantemente, pero es reproducible después de unos pocos cálculos. Parece ser más frecuente después de realizar una operación de división.
</problem>
<goal>
Identifica la causa de este resultado de suma incorrecto y asegura que las operaciones aritméticas básicas, en concreto la suma, devuelven siempre el valor correcto. Necesito encontrar el error en mi lógica que está causando este cálculo incorrecto intermitente, posiblemente después de una división.
</goal>
</context>
<codebase>
<file1>
{{Contenido de archivo 1}}
</file1>
<file2>
{{Contenido de archivo 2}}
</file2>
</codebase>
Otro tema importante: no descomponer en la tarea en pasos
Estos modelos se descomponen por sí solos la tarea en pasos. Así que no añadas «pasos a seguir» o «explicación del razonamiento» a tus prompts.
Recomendaciones para todo modelo que razone, no solo los de OpenAI
Y ten en cuenta que estas recomendaciones sirven para todos los modelos de razonamiento – o1, o1 mini, Gemini 2.0 Flash Thinking, QwQ, etc.
Información basada en las publicaciones Advice on prompting y Building prompts de OpenAI.
- Few-shot learning es una técnica de aprendizaje automático donde el modelo aprende a realizar una tarea con solo unos pocos ejemplos (o «shots«). En el contexto de los modelos de lenguaje, esto significa que el modelo puede generalizar a partir de un número limitado de ejemplos para realizar tareas sin necesidad de un entrenamiento extenso.
Ejemplo de prompt: Se proporciona al modelo un prompt que incluye un pequeño número de ejemplos de la tarea que se espera que realice. Por ejemplo:Traduce estas frases del inglés al español:
"Hello" -> "Hola"
"Goodbye" -> "Adiós"
Ahora traduce: "Thank you"
Resultado: El modelo, habiendo visto solo unos pocos ejemplos, debería responder «Gracias» basándose en los ejemplos dados. ↩︎ - Think step by step es una técnica de prompting que guía al modelo a desglosar una tarea compleja en pasos más pequeños y manejables. Esta técnica se basa en la premisa de que resolver problemas de manera incremental puede mejorar la precisión y la coherencia de las respuestas.
Ejemplo de prompt: El prompt se estructura de manera que el modelo responda a la pregunta paso a paso. Por ejemplo:Resuelve este problema matemático paso a paso:
Problema: Si tienes 5 manzanas y te dan 3 más, ¿cuántas manzanas tienes ahora?
↩︎
Paso 1: Empieza con el número de manzanas que tienes inicialmente - 5 manzanas.
Paso 2: Añade las manzanas que te dan - 3 manzanas.
Paso 3: Suma las manzanas - 5 + 3 = 8.
Respuesta: Tienes 8 manzanas.