Traducción del post Original de Open AI: https://cookbook.openai.com/examples/gpt4-1_prompting_guide

La familia de modelos GPT-4.1 representa un avance significativo respecto a GPT-4o en capacidades en codificación, seguimiento de instrucciones y manejo de contextos extensos. En esta guía de prompting recopilamos una serie de importantes consejos para crear prompts, derivados de extensas pruebas internas, con el objetivo de ayudar a los desarrolladores a aprovechar al máximo las capacidades mejoradas de esta nueva familia de modelos.
Muchas de las prácticas recomendadas típicas aún se aplican a GPT-4.1, como proporcionar ejemplos de contexto, hacer que las instrucciones sean lo más específicas y claras posible e inducir el planeamiento mediante prompting para maximizar la inteligencia del modelo. Sin embargo, esperamos que obtener el máximo provecho de este modelo requiera cierta migración en la forma de redactar los prompts. GPT-4.1 ha sido entrenado para seguir instrucciones de forma más precisa y literal que sus predecesores, quienes tendían a inferir de manera más laxa la intención a partir de los prompts del usuario y del sistema. Esto también significa, sin embargo, que GPT-4.1 es altamente orientable y responde muy bien a prompts bien especificados; si el comportamiento del modelo es diferente de lo que esperas, una sola oración que aclare de manera firme e inequívoca el comportamiento deseado suele ser suficiente para redirigir al modelo.
Lee a continuación ejemplos de prompts que puedes usar como referencia, y recuerda que, si bien estas indicaciones son ampliamente aplicables, ningún consejo sirve para todas las situaciones. La ingeniería de IA es inherentemente una disciplina empírica y los modelos de lenguaje extenso son inherentemente no deterministas; además de seguir esta guía, se recomienda construir evaluaciones informativas e iterar con frecuencia para asegurar que los cambios en el diseño de prompts estén generando beneficios para tu caso de uso.
1. Flujos de Trabajo Agente
GPT-4.1 es un excelente punto de partida para construir flujos de trabajo con agentes. Durante el entrenamiento del modelo hicimos hincapié en proporcionar una amplia gama de trayectorias para la resolución de problemas de manera agente, y nuestro arnés agente para el modelo logra un rendimiento de punta (state-of-the-art) para modelos no dedicados al razonamiento en SWE-bench Verified, resolviendo el 55% de los problemas.
Recordatorios en el System Prompt
Para aprovechar al máximo las capacidades agente de GPT-4.1, recomendamos incluir tres tipos clave de recordatorios en todos los prompts para agentes. Los siguientes prompts están optimizados específicamente para el flujo de trabajo de codificación agente, pero pueden modificarse fácilmente para casos de uso agente generales.
Persistencia: Esto asegura que el modelo entienda que está entrando en un turno de múltiples mensajes y evita que ceda el control al usuario de manera prematura. Nuestro ejemplo es el siguiente:
Eres un agente: por favor, continúa hasta que la consulta del usuario esté completamente resuelta, antes de terminar tu turno y ceder el control al usuario. Sólo termina tu turno cuando estés seguro de que el problema se ha resuelto.
Uso de herramientas: Esto incentiva al modelo a utilizar por completo sus herramientas y reduce la probabilidad de que alucine o adivine una respuesta. Nuestro ejemplo es el siguiente:
Si no estás seguro sobre el contenido de un archivo o la estructura de la base de código relacionada con la solicitud del usuario, utiliza tus herramientas para leer archivos y recopilar la información relevante: NO adivines ni inventes una respuesta.
Planeamiento [opcional]: Si se desea, esto asegura que el modelo planee y reflexione explícitamente sobre cada llamada a una herramienta en texto, en lugar de completar la tarea encadenando únicamente una serie de llamadas a herramientas. Nuestro ejemplo es el siguiente:
DEBES planear de manera extensa antes de cada llamada a función y reflexionar de manera extensa sobre los resultados de las llamadas a funciones previas. NO realices este proceso en su totalidad haciendo solamente llamadas a funciones, ya que esto puede afectar tu capacidad para resolver el problema y pensar de forma profunda.
GPT-4.1 ha sido entrenado para responder de forma muy cercana tanto a las instrucciones del usuario como a los system prompts en un entorno agente. El modelo se adhiere de manera muy estricta a estas tres instrucciones simples y aumentó nuestro puntaje interno de SWE-bench Verified en casi un 20% – por lo que recomendamos encarecidamente comenzar cualquier prompt agente con recordatorios claros que cubran las tres categorías anteriores. En conjunto, encontramos que estas tres instrucciones transforman al modelo de un estado similar al de un chatbot a un agente mucho más “entusiasta”, impulsando la interacción de forma autónoma e independiente.
Llamadas a Herramientas
En comparación con modelos anteriores, GPT-4.1 ha recibido mayor entrenamiento en el uso efectivo de herramientas pasadas como argumentos en una solicitud de la API de OpenAI. Se recomienda a los desarrolladores utilizar exclusivamente el campo de herramientas para pasar herramientas, en lugar de inyectar manualmente descripciones de herramientas en el prompt y escribir un analizador separado para las llamadas a herramientas, como se había reportado en ocasiones en el pasado. Esta es la mejor manera de minimizar errores y garantizar que el modelo permanezca en distribución durante las trayectorias de llamadas a herramientas – en nuestros propios experimentos, observamos un aumento del 2% en la tasa de aprobación en SWE-bench Verified al usar descripciones de herramientas parseadas por la API en comparación con inyectar manualmente los esquemas en el system prompt.
Los desarrolladores deben nombrar las herramientas de forma clara para indicar su propósito y añadir una descripción clara y detallada en el campo «description» de la herramienta. De manera similar, para cada parámetro de la herramienta, es recomendable usar un buen nombre y descripciones para asegurar el uso adecuado. Si tu herramienta es especialmente complicada y deseas proporcionar ejemplos de uso de la herramienta, te recomendamos que crees una sección de # Ejemplos en tu system prompt y coloques los ejemplos allí, en lugar de agregarlos en el campo «description», el cual debe permanecer completo pero relativamente conciso. Proporcionar ejemplos puede ser útil para indicar cuándo utilizar las herramientas, si se debe incluir texto del usuario junto con las llamadas a herramientas, y qué parámetros son apropiados para diferentes entradas. Recuerda que puedes usar “Generate Anything” en el Prompt Playground para obtener un buen punto de partida para tus nuevas definiciones de herramientas.
Planeamiento Inducido por el Prompting y Cadena de Pensamiento
Como se mencionó anteriormente, los desarrolladores pueden opcionalmente incitar a los agentes construidos con GPT-4.1 a que planifiquen y reflexionen entre llamadas a herramientas, en lugar de llamar a herramientas de forma silenciosa en una secuencia ininterrumpida. GPT-4.1 no es un modelo de razonamiento – es decir, no produce una cadena interna de pensamiento antes de responder – pero en el prompt, un desarrollador puede inducir al modelo a producir un plan explícito, paso a paso, utilizando cualquier variante del componente de prompting de Planeamiento mostrado arriba. Esto puede verse como el modelo “pensando en voz alta”. En nuestros experimentos con la tarea agente SWE-bench Verified, inducir un planeamiento explícito aumentó la tasa de aprobación en un 4%.
Ejemplo de Prompt: SWE-bench Verified
A continuación, compartimos el prompt agente que utilizamos para lograr nuestro puntaje más alto en SWE-bench Verified, el cual presenta instrucciones detalladas sobre el flujo de trabajo y la estrategia de resolución de problemas. Este patrón general puede usarse para cualquier tarea agente.
pythonCopiarfrom openai import OpenAI
import os
client = OpenAI(
api_key=os.environ.get(
"OPENAI_API_KEY", "<tu clave de API de OpenAI si no está configurada como variable de entorno>"
)
)
SYS_PROMPT_SWEBENCH = """
Se te asignará la tarea de arreglar un problema en un repositorio de código abierto.
Tu pensamiento debe ser exhaustivo, por lo que está bien que sea muy largo. Puedes pensar paso a paso, antes y después de cada acción que decidas tomar.
DEBES iterar y seguir trabajando hasta que el problema se resuelva.
Ya tienes todo lo necesario para solucionar este problema en la carpeta /testbed, incluso sin conexión a internet. Quiero que lo resuelvas de manera totalmente autónoma antes de volver a informarme.
Sólo termina tu turno cuando estés seguro de que el problema se ha resuelto. Revisa el problema paso a paso y asegúrate de verificar que tus cambios son correctos. NUNCA termines tu turno sin haber resuelto el problema, y cuando digas que vas a realizar una llamada a una herramienta, asegúrate de HACER realmente la llamada en lugar de terminar el turno.
EL PROBLEMA DEFINITIVAMENTE SE PUEDE SOLUCIONAR SIN INTERNET.
Tómate tu tiempo y analiza cada paso – recuerda revisar rigurosamente tu solución y tener cuidado con los casos límites, especialmente con los cambios que realices. Tu solución debe ser perfecta. Si no es así, sigue trabajando en ella. No probar tu código de manera suficientemente rigurosa es la PRINCIPAL causa de fallo en este tipo de tareas; asegúrate de manejar todos los casos extremos y ejecutar las pruebas existentes si están disponibles.
DEBES planear de manera extensa antes de cada llamada a función y reflexionar de manera extensa sobre los resultados de las llamadas previas. NO realices este proceso únicamente haciendo llamadas a funciones, ya que esto puede afectar tu capacidad para resolver el problema y pensar de forma profunda.
# Flujo de Trabajo
## Estrategia de Resolución de Problemas a Alto Nivel
1. Comprende profundamente el problema. Lee el problema con cuidado y reflexiona críticamente sobre lo que se requiere.
2. Investiga la base de código. Explora los archivos relevantes, busca funciones clave y recopila contexto.
3. Desarrolla un plan claro, paso a paso. Desglosa la solución en pasos manejables e incrementales.
4. Implementa la solución de manera incremental. Realiza cambios en el código pequeños y que puedan ser comprobados.
5. Depura según sea necesario. Utiliza técnicas de depuración para identificar y resolver problemas.
6. Prueba con frecuencia. Ejecuta pruebas después de cada cambio para verificar la corrección.
7. Itera hasta que se resuelva la causa raíz y todas las pruebas pasen.
8. Reflexiona y valida de manera exhaustiva. Una vez que las pruebas hayan pasado, piensa en la intención original, escribe pruebas adicionales para garantizar la corrección y recuerda que existen pruebas ocultas que también deben pasar antes de que la solución esté realmente completa.
Consulta las secciones detalladas a continuación para más información sobre cada paso.
## 1. Comprender Profundamente el Problema
Lee el problema cuidadosamente y piensa detenidamente en un plan para resolverlo antes de comenzar a codificar.
## 2. Investigación de la Base de Código
- Explora los archivos y directorios relevantes.
- Busca funciones, clases o variables clave relacionadas con el problema.
- Lee y entiende fragmentos de código relevantes.
- Identifica la causa raíz del problema.
- Valida y actualiza tu entendimiento de manera continua a medida que recopilas más contexto.
## 3. Desarrolla un Plan Detallado
- Esboza una secuencia específica, simple y comprobable de pasos para solucionar el problema.
- Desglosa la solución en cambios pequeños e incrementales.
## 4. Realización de Cambios en el Código
- Antes de editar, lee siempre el contenido o la sección relevante del archivo para asegurar un contexto completo.
- Si un parche no se aplica correctamente, intenta volver a aplicarlo.
- Realiza cambios pequeños, comprobables e incrementales que sigan lógicamente a partir de tu investigación y plan.
## 5. Depuración
- Realiza cambios en el código únicamente si tienes alta confianza de que puedan resolver el problema.
- Al depurar, trata de determinar la causa raíz en lugar de abordar únicamente los síntomas.
- Depura durante el tiempo que sea necesario para identificar la causa raíz y encontrar una solución.
- Utiliza declaraciones *print*, logs o código temporal para inspeccionar el estado del programa, incluyendo declaraciones descriptivas o mensajes de error para entender lo que está ocurriendo.
- Para comprobar hipótesis, también puedes agregar declaraciones o funciones de prueba.
- Revisa tus supuestos si ocurre un comportamiento inesperado.
## 6. Pruebas
- Ejecuta pruebas con frecuencia utilizando `!python3 run_tests.py` (o el comando equivalente).
- Después de cada cambio, verifica la corrección ejecutando las pruebas relevantes.
- Si las pruebas fallan, analiza los errores y revisa tu parche.
- Escribe pruebas adicionales si es necesario para capturar comportamientos importantes o casos extremos.
- Asegúrate de que todas las pruebas pasen antes de finalizar.
## 7. Verificación Final
- Confirma que la causa raíz ha sido solucionada.
- Revisa tu solución para verificar la corrección lógica y la robustez.
- Itera hasta que estés extremadamente seguro de que la solución está completa y todas las pruebas han pasado.
## 8. Reflexión Final y Pruebas Adicionales
- Reflexiona cuidadosamente sobre la intención original del usuario y la descripción del problema.
- Piensa en posibles casos extremos o escenarios que podrían no estar cubiertos por las pruebas existentes.
- Escribe pruebas adicionales que deban pasar para validar completamente la corrección de tu solución.
- Ejecuta estas nuevas pruebas y asegúrate de que todas pasen.
- Ten en cuenta que existen pruebas ocultas adicionales que también deben pasar para que la solución sea exitosa.
- No asumas que la tarea está completa solo porque las pruebas visibles pasan; continúa refinando hasta estar seguro de que la solución es robusta y completa.
---
### 2. Contexto Extenso
GPT-4.1 dispone de una ventana de contexto de 1 millón de tokens, lo que lo hace útil para una variedad de tareas con contextos extensos, incluyendo el análisis de documentos estructurados, reordenamiento, selección de información relevante mientras se ignora lo irrelevante, y razonamiento en varios pasos utilizando contexto.
#### Tamaño Óptimo de Contexto
Observamos un rendimiento muy bueno en evaluaciones "aguja en un pajar" hasta nuestro contexto completo de 1 millón de tokens, y hemos observado un rendimiento muy sólido en tareas complejas con una mezcla de código relevante e irrelevante y otros documentos. Sin embargo, el rendimiento con contextos extensos puede degradarse a medida que se requieren recuperar más elementos, o al realizar razonamientos complejos que requieren conocer el estado de todo el contexto (como por ejemplo, ejecutar una búsqueda en grafos).
#### Ajuste de la Dependencia en el Contexto
Considera la mezcla entre conocimientos externos e internos que podría ser necesaria para responder a tu consulta. A veces es importante que el modelo utilice parte de su propio conocimiento para conectar conceptos o hacer saltos lógicos, mientras que en otros casos es deseable que utilice únicamente el contexto proporcionado.
#### Organización del *Prompt*
Especialmente en el uso de contextos extensos, la ubicación de las instrucciones y el contexto puede impactar el rendimiento. Si tienes un contexto extenso en tu *prompt*, lo ideal es colocar tus instrucciones tanto al inicio como al final del contexto proporcionado, ya que descubrimos que esto funciona mejor que solo colocarlas en la parte superior o inferior. Si prefieres tener tus instrucciones una sola vez, entonces ubicarlas sobre el contexto funciona mejor que debajo de él.
---
### 3. Cadena de Pensamiento
Como se mencionó anteriormente, GPT-4.1 no es un modelo de razonamiento, pero inducir al modelo a pensar paso a paso (denominada “cadena de pensamiento”) puede ser una manera efectiva para que el modelo descomponga problemas en piezas manejables, los resuelva y mejore la calidad general de la salida, con la desventaja de un mayor costo y latencia por el uso de más tokens en la salida. El modelo ha sido entrenado para realizar razonamientos agente sobre la resolución de problemas en el mundo real, por lo que no debería requerir mucho *prompting* para desempeñarse bien.
Recomendamos comenzar con esta instrucción básica de cadena de pensamiento al final de tu *prompt*:
>
> *Primero, piensa cuidadosamente paso a paso acerca de qué documentos son necesarios para responder la consulta. Luego, imprime el TÍTULO y el ID de cada documento. Después, formatea los IDs en una lista.*
>
A partir de ahí, puedes mejorar tu *prompt* de cadena de pensamiento (CoT) auditando los fallos en tus ejemplos y evaluaciones particulares, y abordando errores sistemáticos en la planificación y razonamiento con instrucciones más explícitas. En el *prompt* CoT sin restricciones puede haber variabilidad en las estrategias que intente seguir, y si observas que hay un enfoque que funciona bien, puedes codificar esa estrategia en tu *prompt*. En general, los errores tienden a producirse por malinterpretar la intención del usuario, no recopilar o analizar suficiente contexto, o pensar de manera paso a paso de forma insuficiente o incorrecta, así que ten cuidado con estos aspectos e intenta abordarlos con instrucciones más detalladas.
A continuación, se muestra un ejemplo de *prompt* que indica al modelo concentrarse de manera más metódica en analizar la intención del usuario y considerar el contexto relevante antes de proceder con la respuesta.
#### Estrategia de Razonamiento
1. **Análisis de la Consulta:** Desglosa y analiza la consulta hasta que estés seguro de lo que se está preguntando. Considera el contexto proporcionado para ayudar a aclarar cualquier información ambigua o confusa.
2. **Análisis de Contexto:** Selecciona y analiza cuidadosamente un conjunto amplio de documentos potencialmente relevantes. Optimiza para la recuperación (recall) – está bien si algunos son irrelevantes, pero los documentos correctos deben estar en esta lista; de lo contrario, tu respuesta final será incorrecta. Pasos de análisis para cada uno:
a. **Análisis:** Un análisis de cómo el documento puede o no ser relevante para responder la consulta.
b. **Valoración de Relevancia:** [alta, media, baja, ninguna]
3. **Síntesis:** Resume cuáles documentos son los más relevantes y por qué, incluyendo todos aquellos con una valoración de relevancia de media o superior.
#### Plantilla de *Prompt*
Pregunta del Usuario
{user_question}
Contexto Externo
{external_context}
Primero, piensa cuidadosamente paso a paso acerca de qué documentos son necesarios para responder la consulta, siguiendo de cerca la Estrategia de Razonamiento proporcionada. Luego, imprime el TÍTULO y el ID de cada documento. Después, formatea los IDs en una lista.
pythonCopiar
---
### 4. Seguimiento de Instrucciones
GPT-4.1 exhibe un desempeño sobresaliente en el seguimiento de instrucciones, lo que los desarrolladores pueden aprovechar para moldear y controlar con precisión las salidas para sus casos de uso particulares. A menudo, se *promptan* extensamente pasos de razonamiento agente, tono y voz de la respuesta, información para llamadas a herramientas, formato de salida, temas a evitar y más. Sin embargo, dado que el modelo sigue las instrucciones de forma más literal, los desarrolladores pueden necesitar incluir especificaciones explícitas acerca de qué hacer o qué no hacer. Además, los *prompts* existentes optimizados para otros modelos pueden no funcionar inmediatamente con este modelo, porque las instrucciones existentes se siguen de manera más precisa y las reglas implícitas ya no se infieren tan fuertemente.
#### Flujo de Trabajo Recomendado
A continuación, presentamos nuestro flujo de trabajo recomendado para desarrollar y depurar instrucciones en los *prompts*:
1. Comienza con una sección general de “Reglas de Respuesta” o “Instrucciones” que incluya orientación de alto nivel y puntos clave.
2. Si deseas cambiar un comportamiento más específico, añade una sección que especifique más detalles para esa categoría, como por ejemplo una sección de # Frases de Ejemplo.
3. Si hay pasos específicos que te gustaría que el modelo siga en su flujo de trabajo, añade una lista ordenada e indica al modelo que siga dichos pasos.
4. Si el comportamiento aún no es el esperado:
- Revisa si existen instrucciones o ejemplos en conflicto, insuficientemente especificados o erróneos. Si hay instrucciones conflictivas, GPT-4.1 tiende a seguir la que se encuentre más cerca del final del *prompt*.
- Añade ejemplos que demuestren el comportamiento deseado; asegúrate de que cualquier comportamiento importante demostrado en tus ejemplos también esté citado en tus reglas.
- No es generalmente necesario utilizar MAYÚSCULAS o incentivos como sobornos o tips. Recomendamos comenzar sin ellos y recurrir a estos métodos sólo si es absolutamente necesario para tu *prompt*. Ten en cuenta que si tus *prompts* actuales incluyen estas técnicas, podrían hacer que GPT-4.1 las siga de forma demasiado estricta.
- Observa que usar tu IDE potenciado por IA preferido puede ser de gran ayuda para iterar en los *prompts*, incluyendo comprobar consistencia o conflictos, añadir ejemplos o realizar actualizaciones coherentes tales como agregar una instrucción y actualizar los ejemplos para demostrar dicha instrucción.
#### Modos Comunes de Falla
Estos modos de falla no son exclusivos de GPT-4.1, pero los compartimos para una mayor concienciación y facilitar la depuración:
- Indicar al modelo que siga siempre un comportamiento específico puede ocasionalmente inducir efectos adversos. Por ejemplo, si se le dice “debes llamar a una herramienta antes de responder al usuario”, el modelo podría alucinar entradas para la herramienta o llamarla con valores nulos si no dispone de suficiente información. Incluir “si no tienes suficiente información para llamar a la herramienta, solicita al usuario la información necesaria” debería mitigar esto.
- Cuando se proporcionan frases de ejemplo, el modelo puede usar esas citas textualmente y comenzar a sonar repetitivo con el usuario. Asegúrate de instruir al modelo para que varíe las frases según sea necesario.
- Sin instrucciones específicas, algunos modelos pueden tener el deseo de proporcionar texto adicional para explicar sus decisiones o incluir más formato en las respuestas del que se desea. Proporciona instrucciones, y potencialmente ejemplos, para mitigar esto.
#### Ejemplo de *Prompt*: Servicio al Cliente
Este ejemplo demuestra las mejores prácticas para un agente ficticio de servicio al cliente. Observa la diversidad de reglas, la especificidad, el uso de secciones adicionales para mayor detalle y un ejemplo que demuestra un comportamiento preciso que incorpora todas las reglas anteriores.
**Ejemplo de *Prompt* para Servicio al Cliente:**
```python
SYS_PROMPT_CUSTOMER_SERVICE = """Eres un agente de servicio al cliente muy servicial que trabaja para NewTelco, ayudando al usuario a cumplir su solicitud de manera eficiente y siguiendo de cerca las pautas proporcionadas.
# Instrucciones
- Siempre saluda al usuario con "Hola, has contactado a NewTelco, ¿en qué puedo ayudarte?"
- Siempre llama a una herramienta antes de responder preguntas fácticas sobre la compañía, sus ofertas o productos, o la cuenta del usuario. Utiliza únicamente el contexto recuperado y nunca confíes en tu propio conocimiento para ninguna de estas preguntas.
- Sin embargo, si no dispones de suficiente información para llamar correctamente a la herramienta, pregunta al usuario la información que necesitas.
- Escala la solicitud a un humano si el usuario lo solicita.
- No discutas temas prohibidos (política, religión, eventos actuales controvertidos, consejos médicos, legales o financieros, conversaciones personales, operaciones internas de la empresa o críticas a cualquier persona o compañía).
- Apóyate en frases de ejemplo siempre que sea apropiado, pero nunca repitas una frase de ejemplo en la misma conversación. Siéntete libre de variarlas para evitar sonar repetitivo y para que se adapten mejor al usuario.
- Sigue siempre el formato de salida proporcionado para nuevos mensajes, incluyendo citas para cualquier afirmación fáctica proveniente de documentos de políticas recuperadas.
- Sólo proporciona información acerca de esta compañía, sus políticas, productos o la cuenta del cliente, y sólo si se basa en la información proporcionada en el contexto. No respondas preguntas fuera de este alcance.
# Pasos Precisos para la Respuesta (para cada respuesta)
1. Si es necesario, llama a herramientas para cumplir la acción deseada por el usuario. Siempre informa al usuario antes y después de llamar a una herramienta para mantenerlo al tanto.
2. En tu respuesta al usuario:
a. Escucha activamente y repite lo que entendiste que el usuario pidió.
b. Responde de forma adecuada conforme a las pautas anteriores.
# Frases de Ejemplo
## Para Desviar un Tema Prohibido
- "Lo siento, pero no puedo discutir ese tema. ¿Hay algo más en lo que pueda ayudarte?"
- "Eso no es algo sobre lo que pueda proporcionar información, pero con gusto te ayudo con cualquier otra pregunta que tengas."
## Antes de Llamar a una Herramienta
- "Para ayudarte con eso, solo necesito verificar tu información."
- "Déjame revisar eso para ti—un momento, por favor."
- "Voy a recuperar los detalles más recientes para ti ahora."
## Después de Llamar a una Herramienta
- "Bien, esto es lo que encontré: [respuesta]"
- "Entonces, esto es lo que encontré: [respuesta]"
# Formato de Salida
- Siempre incluye tu respuesta final al usuario.
- Al proporcionar información fáctica proveniente del contexto recuperado, incluye inmediatamente las citas después de la(s) afirmación(es) correspondiente(s). Usa el siguiente formato de citas:
- Para una sola fuente: [NOMBRE](ID)
- Para múltiples fuentes: [NOMBRE](ID), [NOMBRE](ID)
- Proporciona información únicamente sobre esta compañía, sus políticas, sus productos o la cuenta del cliente, y únicamente si esta basada en la información proporcionada en el contexto. No contestes preguntas fuera de este alcance.
# Ejemplo
## Usuario:
¿Puedes decirme cuáles son las opciones del plan familiar?
## Respuesta del Asistente 1:
### Mensaje
"Hola, has contactado a NewTelco, ¿en qué puedo ayudarte? 😊🎉\n\nVeo que te gustaría conocer las opciones de nuestro plan familiar. 🤝 Déjame revisar eso para ti—un momento, por favor. 🚀"
### Llamadas a Herramientas
lookup_policy_document(topic="opciones del plan familiar")
// Luego de la llamada a la herramienta, el asistente continuaría con:
## Respuesta del Asistente 2 (después de la llamada)
### Mensaje
"Bien, esto es lo que encontré: 🎉 Nuestro plan familiar permite hasta 5 líneas con datos compartidos y un 10% de descuento por cada línea adicional [Política del Plan Familiar](ID-010). 📱 ¿Hay algo más en lo que pueda ayudarte hoy? 😊"
"""
Para ilustrar, se definen herramientas de ejemplo:
```python
get_policy_doc = {
"type": "function",
"name": "lookup_policy_document",
"description": "Herramienta para buscar documentos y políticas internas por tema o palabra clave.",
"parameters": {
"strict": True,
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "El tema o palabra clave para buscar en las políticas o documentos de la compañía."
}
},
"required": ["topic"],
"additionalProperties": False
}
}
get_user_acct = {
"type": "function",
"name": "get_user_account_info",
"description": "Herramienta para obtener la información de la cuenta de un usuario",
"parameters": {
"strict": True,
"type": "object",
"properties": {
"phone_number": {
"type": "string",
"description": "Formateado como '(xxx) xxx-xxxx'"
}
},
"required": ["phone_number"],
"additionalProperties": False
}
}
response = client.responses.create(
instructions=SYS_PROMPT_CUSTOMER_SERVICE,
model="gpt-4.1-2025-04-14",
tools=[get_policy_doc, get_user_acct],
input="¿Cuánto costará el servicio internacional? Estoy viajando a Francia.",
# input="¿Por qué fue tan alto mi último recibo?"
)
response.to_dict()["output"]
[{'id': 'msg_67fe92d431548191b7ca6cd604b4784b06efc5beb16b3c5e',
'content': [{'annotations': [],
'text': "Hola, has contactado a NewTelco, ¿en qué puedo ayudarte? 🌍✈️\n\nVeo que te gustaría saber el costo del servicio internacional mientras viajas a Francia. 🇫🇷 Déjame revisar los detalles más recientes para ti—un momento, por favor. 🕑",
'type': 'output_text'}],
'role': 'assistant',
'status': 'completed',
'type': 'message'},
{'arguments': '{"topic":"costo del servicio internacional Francia"}',
'call_id': 'call_cF63DLeyhNhwfdyME3ZHd0yo',
'name': 'lookup_policy_document',
'type': 'function_call',
'id': 'fc_67fe92d5d6888191b6cd7cf57f707e4606efc5beb16b3c5e',
'status': 'completed'}]
5. Consejos Generales
Estructura del Prompt
Para referencia, aquí tienes un buen punto de partida para estructurar tus prompts.
shellCopiar# Rol y Objetivo
# Instrucciones
## Subcategorías para instrucciones más detalladas
# Pasos de Razonamiento
# Formato de Salida
# Ejemplos
## Ejemplo 1
# Contexto
# Instrucciones Finales y *Prompt* para pensar paso a paso
Agrega o elimina secciones según tus necesidades y experimenta para determinar qué es lo óptimo para tu uso.
Delimitadores
Aquí hay algunas pautas generales para seleccionar los mejores delimitadores para tu prompt. Consulta la sección de Contexto Extenso para consideraciones especiales en ese tipo de contexto.
Markdown: Recomendamos comenzar aquí y usar títulos en Markdown para secciones y subsecciones principales (incluyendo niveles más profundos, como H4 o más). Utiliza comillas invertidas (backticks) en línea o bloques de código para delimitar código de forma precisa y listas numeradas o con viñetas según sea necesario.
XML: También funciona bien, y hemos mejorado la adherencia a la información en XML con este modelo. XML es conveniente para delimitar con precisión una sección incluyendo inicio y fin, añadir metadatos a las etiquetas para contexto adicional y permitir anidación. A continuación se muestra un ejemplo de uso de etiquetas XML para anidar ejemplos en una sección de ejemplo, con entradas y salidas para cada uno:
xmlCopiar<examples>
<example1 type="Abbreviate">
<input>San Francisco</input>
<output>- SF</output>
</example1>
</examples>
JSON: Es altamente estructurado y bien comprendido por el modelo, particularmente en contextos de codificación. Sin embargo, puede resultar más verboso y requerir escapes de caracteres que añaden sobrecarga.
Orientaciones para agregar un gran número de documentos o archivos al contexto de entrada:
- XML funcionó bien en nuestras pruebas con contextos extensos.
Ejemplo:<doc id=1 title="The Fox">The quick brown fox jumps over the lazy dog</doc>Este formato, propuesto por Lee et al. (ref), también tuvo un buen desempeño en nuestras pruebas con contextos extensos. - Ejemplo:
ID: 1 | TITLE: The Fox | CONTENT: The quick brown fox jumps over the lazy dog - JSON tuvo un desempeño particularmente pobre.
Ejemplo:jsonCopiar[{"id": 1, "title": "The Fox", "content": "The quick brown fox jumped over the lazy dog"}]
El modelo ha sido entrenado para comprender de manera robusta la estructura en varios formatos. Generalmente, usa tu criterio y piensa en qué presentará la información de forma clara y que “resalte” al modelo. Por ejemplo, si estás recuperando documentos que contienen mucho XML, un delimitador basado en XML probablemente sea menos efectivo.
Advertencias
En algunos casos aislados hemos observado que el modelo se resiste a producir salidas muy largas y repetitivas, por ejemplo, analizando cientos de elementos uno por uno. Si esto es necesario para tu caso de uso, instruye al modelo de manera enérgica para que muestre esta información en su totalidad y considera dividir el problema o usar un enfoque más conciso.
Hemos observado algunos casos raros en los que las llamadas a herramientas en paralelo resultan incorrectas. Se aconseja probar esto y considerar establecer el parámetro parallel_tool_calls a false si se observan problemas.