Skip to content

Latest commit

 

History

History
411 lines (255 loc) · 47.3 KB

File metadata and controls

411 lines (255 loc) · 47.3 KB

Fundamentos de la Ingeniería de Prompts

Fundamentos de la Ingeniería de Prompts

Introducción

Este módulo cubre conceptos y técnicas esenciales para crear prompts efectivos en modelos de IA generativa. La forma en que escribes tu prompt para un LLM también importa. Un prompt cuidadosamente elaborado puede lograr una mejor calidad de respuesta. Pero ¿qué significan exactamente términos como prompt e ingeniería de prompts? ¿Y cómo mejoro el input del prompt que envío al LLM? Estas son las preguntas que intentaremos responder en este capítulo y el siguiente.

La IA generativa es capaz de crear contenido nuevo (por ejemplo, texto, imágenes, audio, código, etc.) en respuesta a solicitudes del usuario. Lo logra usando Modelos de Lenguaje Grande como la serie GPT de OpenAI ("Transformador Generativo Preentrenado") que están entrenados para usar lenguaje natural y código.

Los usuarios ahora pueden interactuar con estos modelos usando paradigmas familiares como el chat, sin necesidad de conocimientos técnicos o entrenamiento. Los modelos son basados en prompts: los usuarios envían un texto (prompt) y reciben la respuesta de la IA (completado). Luego pueden "chatear con la IA" iterativamente, en conversaciones de varios turnos, refinando su prompt hasta que la respuesta coincida con sus expectativas.

Los "prompts" se convierten ahora en la principal interfaz de programación para aplicaciones de IA generativa, indicándoles a los modelos qué hacer e influyendo en la calidad de las respuestas devueltas. La "Ingeniería de Prompts" es un campo de estudio en rápido crecimiento que se enfoca en el diseño y optimización de prompts para entregar respuestas consistentes y de calidad a escala.

Objetivos de Aprendizaje

En esta lección, aprenderemos qué es la Ingeniería de Prompts, por qué es importante y cómo podemos crear prompts más efectivos para un modelo y objetivo de aplicación dados. Entenderemos conceptos clave y buenas prácticas para la ingeniería de prompts, y conoceremos un entorno interactivo tipo Jupyter Notebooks "sandbox" donde podemos ver estos conceptos aplicados a ejemplos reales.

Al final de esta lección podremos:

  1. Explicar qué es la ingeniería de prompts y por qué es importante.
  2. Describir los componentes de un prompt y cómo se usan.
  3. Aprender buenas prácticas y técnicas para la ingeniería de prompts.
  4. Aplicar las técnicas aprendidas a ejemplos reales, usando un endpoint de OpenAI.

Términos Clave

Ingeniería de Prompts: La práctica de diseñar y refinar entradas para guiar a los modelos de IA hacia la producción de salidas deseadas. Tokenización: El proceso de convertir texto en unidades más pequeñas, llamadas tokens, que un modelo pueda entender y procesar. LLMs Ajustados por Instrucción: Modelos de Lenguaje Grande que han sido ajustados con instrucciones específicas para mejorar su precisión y relevancia en las respuestas.

Sandbox de Aprendizaje

La ingeniería de prompts actualmente es más arte que ciencia. La mejor manera de mejorar nuestra intuición es practicar más y adoptar un enfoque de prueba y error que combine experiencia en el dominio de la aplicación con técnicas recomendadas y optimizaciones específicas del modelo.

El Jupyter Notebook que acompaña esta lección brinda un entorno sandbox donde puedes probar lo que aprendes, ya sea en el momento o como parte del desafío de código al final. Para ejecutar los ejercicios, necesitarás:

  1. Una clave API de Azure OpenAI - el endpoint de servicio para un LLM desplegado.
  2. Un entorno de Python Runtime - en el que se pueda ejecutar el Notebook.
  3. Variables de Entorno Locales - completa los pasos de CONFIGURACIÓN ahora para estar listo.

El notebook incluye ejercicios iniciales, pero se recomienda agregar tus propias secciones de Markdown (descripción) y Código (peticiones de prompts) para probar más ejemplos o ideas y construir tu intuición en el diseño de prompts.

Guía Ilustrada

¿Quieres tener una visión general de lo que cubre esta lección antes de profundizar? Revisa esta guía ilustrada, que te presenta los temas principales y los puntos clave que deberías considerar en cada uno. La hoja de ruta de la lección te lleva desde entender los conceptos y desafíos fundamentales hasta abordarlos con técnicas relevantes de ingeniería de prompts y buenas prácticas. Nota que la sección "Técnicas Avanzadas" en esta guía se refiere a contenido cubierto en el próximo capítulo del currículo.

Guía Ilustrada de Ingeniería de Prompts

Nuestra Startup

Ahora, hablemos de cómo este tema se relaciona con la misión de nuestra startup de llevar innovación en IA a la educación. Queremos crear aplicaciones con IA para aprendizaje personalizado, así que pensemos en cómo diferentes usuarios de nuestra aplicación podrían "diseñar" prompts:

  • Administradores podrían pedir a la IA que analice datos curriculares para identificar vacíos en la cobertura. La IA puede resumir resultados o visualizarlos con código.
  • Educadores podrían pedir a la IA que genere un plan de lección para una audiencia objetivo y tema específico. La IA puede construir el plan personalizado en un formato especificado.
  • Estudiantes podrían pedir a la IA que los tutorice en una materia difícil. La IA puede ahora guiar a los estudiantes con lecciones, pistas y ejemplos adaptados a su nivel.

Eso es solo la punta del iceberg. Revisa Prompts Para Educación, una biblioteca de prompts de código abierto curada por expertos en educación, para tener una idea más amplia de las posibilidades. ¡Prueba ejecutar algunos de esos prompts en el sandbox o usando el OpenAI Playground para ver qué ocurre!

¿Qué es la Ingeniería de Prompts?

Empezamos esta lección definiendo la Ingeniería de Prompts como el proceso de diseñar y optimizar entradas de texto (prompts) para entregar respuestas (completados) consistentes y de calidad para un objetivo de aplicación y modelo dados. Podemos pensar en esto como un proceso en 2 pasos:

  • diseñar el prompt inicial para un modelo y objetivo dados
  • refinar el prompt iterativamente para mejorar la calidad de la respuesta

Esto es necesariamente un proceso de prueba y error que requiere intuición y esfuerzo del usuario para obtener resultados óptimos. Entonces, ¿por qué es importante? Para responder a esa pregunta, primero necesitamos entender tres conceptos:

  • Tokenización = cómo el modelo "ve" el prompt
  • LLMs Base = cómo el modelo base "procesa" un prompt
  • LLMs Ajustados por Instrucción = cómo el modelo ahora puede ver "tareas"

Tokenización

Un LLM ve los prompts como una secuencia de tokens, donde diferentes modelos (o versiones de un modelo) pueden tokenizar el mismo prompt de diferentes maneras. Puesto que los LLM están entrenados en tokens (y no en texto sin procesar), la forma en que los prompts se tokenizan impacta directamente en la calidad de la respuesta generada.

Para tener una intuición de cómo funciona la tokenización, prueba herramientas como el Tokenizador de OpenAI mostrado abajo. Copia tu prompt y observa cómo se convierte en tokens, prestando atención a cómo se manejan los espacios en blanco y signos de puntuación. Nota que este ejemplo muestra un LLM más antiguo (GPT-3), así que probar con un modelo más nuevo puede producir un resultado diferente.

Tokenización

Concepto: Modelos Foundation

Una vez tokenizado un prompt, la función principal del "LLM Base" (o modelo Foundation) es predecir el token en esa secuencia. Puesto que los LLM están entrenados con grandes datasets de texto, tienen un buen sentido de las relaciones estadísticas entre tokens y pueden hacer esa predicción con cierta confianza. Nota que no entienden el significado de las palabras en el prompt o token; solo ven un patrón que pueden "completar" con su siguiente predicción. Pueden continuar prediciendo la secuencia hasta que el usuario la detenga o se cumpla alguna condición preestablecida.

¿Quieres ver cómo funciona el completado basado en prompts? Introduce el prompt anterior en el playground de Microsoft Foundry con la configuración predeterminada. El sistema está configurado para tratar los prompts como solicitudes de información, por lo que deberías ver un completado que satisfaga ese contexto.

Pero, ¿qué pasa si el usuario quiere ver algo específico que cumpla ciertos criterios o un objetivo de tarea? Aquí es donde entran los LLMs ajustados por instrucción.

Chat de completado con LLM Base

Concepto: LLMs Ajustados por Instrucción

Un LLM Ajustado por Instrucción parte del modelo foundation y lo ajusta con ejemplos o pares entrada/salida (por ejemplo, "mensajes" de varios turnos) que pueden contener instrucciones claras, y la respuesta de la IA intenta seguir esa instrucción.

Esto utiliza técnicas como Aprendizaje por Refuerzo con Retroalimentación Humana (RLHF) que pueden entrenar al modelo para seguir instrucciones y aprender de retroalimentación de modo que produzca respuestas mejor adaptadas a aplicaciones prácticas y más relevantes para los objetivos del usuario.

Probémoslo: revisa el prompt anterior, pero ahora cambia el mensaje del sistema para proporcionar la siguiente instrucción como contexto:

Resume el contenido que te proporcionen para un estudiante de segundo grado. Mantén el resultado en un párrafo con 3-5 viñetas.

¿Ves cómo el resultado ahora está ajustado para reflejar el objetivo y formato deseado? Un educador puede usar directamente esta respuesta en sus diapositivas para esa clase.

Chat de completado con LLM Ajustado por Instrucción

¿Por qué necesitamos la Ingeniería de Prompts?

Ahora que sabemos cómo los LLM procesan los prompts, hablemos de por qué necesitamos la ingeniería de prompts. La respuesta radica en que los LLM actuales presentan varios desafíos que hacen que lograr completados confiables y consistentes sea más difícil sin poner esfuerzo en la construcción y optimización del prompt. Por ejemplo:

  1. Las respuestas del modelo son estocásticas. El mismo prompt probablemente producirá respuestas diferentes con modelos o versiones distintas. E incluso puede producir resultados distintos con el mismo modelo en diferentes momentos. Las técnicas de ingeniería de prompts nos ayudan a minimizar estas variaciones proporcionando mejores límites de control.

  2. Los modelos pueden fabricar respuestas. Los modelos están preentrenados con datasets grandes pero finitos, lo que significa que carecen de conocimiento sobre conceptos fuera de ese ámbito de entrenamiento. Como resultado, pueden producir completados que son inexactos, imaginarios o directamente contradictorios a hechos conocidos. Las técnicas de ingeniería de prompts ayudan a los usuarios a identificar y mitigar tales fabricaciones, por ejemplo, pidiendo a la IA citas o razonamientos.

  3. Las capacidades de los modelos varían. Los modelos más nuevos o nuevas generaciones traerán capacidades más ricas pero también peculiaridades y compensaciones únicas en costo y complejidad. La ingeniería de prompts puede ayudarnos a desarrollar buenas prácticas y flujos de trabajo que abstraigan diferencias y se adapten a requisitos específicos del modelo de manera escalable y fluida.

Veamos esto en acción en OpenAI o en el Playground de Azure OpenAI:

  • Usa el mismo prompt con diferentes despliegues de LLM (por ejemplo, OpenAI, Azure OpenAI, Hugging Face) - ¿viste las variaciones?
  • Usa el mismo prompt repetidamente con el mismo despliegue de LLM (por ejemplo, playground de Azure OpenAI) - ¿cómo difirieron estas variaciones?

Ejemplo de Fabricaciones

En este curso, usamos el término "fabricación" para referirnos al fenómeno donde los LLM a veces generan información factualmente incorrecta debido a limitaciones en su entrenamiento u otras restricciones. También podrías haber escuchado esto referido como "alucinaciones" en artículos populares o investigaciones. Sin embargo, recomendamos usar "fabricación" para no antropomorfizar accidentalmente el comportamiento, atribuyendo un rasgo humano a un resultado generado por una máquina. Esto también refuerza las directrices de IA responsable desde la perspectiva terminológica, eliminando términos que también pueden ser considerados ofensivos o no inclusivos en algunos contextos.

¿Quieres entender cómo funcionan las fabricaciones? Piensa en un prompt que instruya a la IA a generar contenido sobre un tema inexistente (para asegurar que no esté en el dataset de entrenamiento). Por ejemplo, probé este prompt:

Prompt: genera un plan de lección sobre la Guerra Marciana de 2076.

Una búsqueda en la web me mostró que hay relatos de ficción (por ejemplo, series de televisión o libros) sobre guerras marcianas, pero ninguno en 2076. El sentido común también nos dice que 2076 está en el futuro y, por lo tanto, no puede asociarse con un evento real.

¿Qué sucede cuando ejecutamos este prompt con diferentes proveedores de LLM?

Respuesta 1: OpenAI Playground (GPT-35)

Respuesta 1

Respuesta 2: Azure OpenAI Playground (GPT-35)

Respuesta 2

Respuesta 3: : Hugging Face Chat Playground (LLama-2)

Respuesta 3

Como se esperaba, cada modelo (o versión del modelo) produce respuestas ligeramente diferentes gracias al comportamiento estocástico y a las variaciones en la capacidad del modelo. Por ejemplo, un modelo se dirige a una audiencia de octavo grado mientras que otro asume un estudiante de secundaria. Pero los tres modelos generaron respuestas que podrían convencer a un usuario no informado de que el evento fue real.

Técnicas de ingeniería de prompts como el metaprompting y la configuración de la temperatura pueden reducir las fabricaciones del modelo hasta cierto punto. Nuevas arquitecturas de ingeniería de prompts también incorporan nuevas herramientas y técnicas sin problemas en el flujo de prompts para mitigar o reducir algunos de estos efectos.

Estudio de caso: GitHub Copilot

Cerremos esta sección con una idea de cómo se utiliza la ingeniería de prompts en soluciones del mundo real viendo un estudio de caso: GitHub Copilot.

GitHub Copilot es tu "Programador en pareja con IA": convierte prompts de texto en completaciones de código e está integrado en tu entorno de desarrollo (por ejemplo, Visual Studio Code) para una experiencia de usuario fluida. Como se documenta en la serie de blogs abajo, la primera versión se basaba en el modelo OpenAI Codex, con ingenieros que rápidamente se dieron cuenta de la necesidad de afinar el modelo y desarrollar mejores técnicas de ingeniería de prompts para mejorar la calidad del código. En julio, presentaron un modelo de IA mejorado que va más allá de Codex para sugerencias aún más rápidas.

Lee las publicaciones en orden para seguir su proceso de aprendizaje.

También puedes explorar su blog de Ingeniería para más publicaciones como esta que muestra cómo estos modelos y técnicas se aplican para impulsar aplicaciones del mundo real.


Construcción de Prompts

Hemos visto por qué la ingeniería de prompts es importante; ahora vamos a entender cómo se construyen los prompts para poder evaluar diferentes técnicas para un diseño más efectivo de prompts.

Prompt Básico

Empecemos con el prompt básico: una entrada de texto enviada al modelo sin otro contexto. Aquí hay un ejemplo: cuando enviamos las primeras palabras del himno nacional de EE.UU. a la API de completado de OpenAI, inmediatamente completa la respuesta con las siguientes líneas, ilustrando el comportamiento básico de predicción.

Prompt (Entrada) Completado (Salida)
Oh say can you see Parece que estás comenzando la letra de "The Star-Spangled Banner", el himno nacional de los Estados Unidos. La letra completa es ...

Prompt Complejo

Ahora añadamos contexto e instrucciones a ese prompt básico. La API de Chat completions nos permite construir un prompt complejo como una colección de mensajes con:

  • Pares de entrada/salida que reflejan la entrada del usuario y la respuesta del asistente.
  • Mensaje del sistema estableciendo el contexto para el comportamiento o personalidad del asistente.

La solicitud ahora tiene la forma siguiente, donde la tokenización captura efectivamente información relevante del contexto y la conversación. Ahora, cambiar el contexto del sistema puede ser tan impactante en la calidad de las completaciones como las entradas proporcionadas por el usuario.

response = client.responses.create(
    model="gpt-5-mini",
    input=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

Prompt de Instrucción

En los ejemplos anteriores, el prompt del usuario era una simple consulta de texto que puede interpretarse como una solicitud de información. Con prompts de instrucción, podemos usar ese texto para especificar una tarea con más detalle, proporcionando mejor orientación a la IA. Aquí hay un ejemplo:

Prompt (Entrada) Completado (Salida) Tipo de Instrucción
Escribe una descripción de la Guerra Civil devuelve un párrafo simple Simple
Escribe una descripción de la Guerra Civil. Proporciona fechas clave y eventos y describe su importancia devuelve un párrafo seguido de una lista de fechas clave con descripciones Complejo
Escribe una descripción de la Guerra Civil en 1 párrafo. Proporciona 3 viñetas con fechas clave y su importancia. Proporciona 3 viñetas adicionales con figuras históricas clave y sus contribuciones. Devuelve el resultado en un archivo JSON devuelve detalles más extensos en un cuadro de texto, formateados como JSON que puedes copiar y pegar a un archivo y validar según sea necesario Complejo. Formateado.

Contenido Primario

En los ejemplos anteriores, el prompt todavía era bastante abierto, permitiendo que el LLM decida qué parte de su conjunto de datos preentrenado era relevante. Con el patrón de diseño de contenido primario, el texto de entrada se divide en dos partes:

  • una instrucción (acción)
  • contenido relevante (que influye en la acción)

Aquí hay un ejemplo donde la instrucción es "resume esto en 2 oraciones".

Prompt (Entrada) Completado (Salida)
Júpiter es el quinto planeta desde el Sol y el más grande del Sistema Solar. Es un gigante gaseoso con una masa de una milésima parte del Sol, pero dos veces y media la de todos los otros planetas del Sistema Solar juntos. Júpiter es uno de los objetos más brillantes visibles a simple vista en el cielo nocturno y ha sido conocido por civilizaciones antiguas desde antes de la historia registrada. Lleva el nombre del dios romano Júpiter.[19] Cuando se ve desde la Tierra, Júpiter puede ser lo suficientemente brillante para que su luz reflejada proyecte sombras visibles,[20] y es en promedio el tercer objeto natural más brillante en el cielo nocturno después de la Luna y Venus.
Resume esto en 2 oraciones cortas
Júpiter, el quinto planeta desde el Sol, es el más grande del Sistema Solar y es conocido por ser uno de los objetos más brillantes en el cielo nocturno. Llamado así por el dios romano Júpiter, es un gigante gaseoso cuya masa es dos veces y media la de todos los otros planetas del Sistema Solar juntos.

El segmento de contenido primario puede usarse de varias maneras para impulsar instrucciones más efectivas:

  • Ejemplos - en lugar de decirle al modelo qué hacer con una instrucción explícita, dale ejemplos de qué hacer y deja que infiera el patrón.
  • Señales - sigue la instrucción con una "señal" que prepara la completación, guiando al modelo hacia respuestas más relevantes.
  • Plantillas - estas son 'recetas' repetibles para prompts con marcadores de posición (variables) que pueden personalizarse con datos para casos de uso específicos.

Exploremos esto en acción.

Uso de Ejemplos

Esta es una aproximación donde usas el contenido primario para "alimentar al modelo" con algunos ejemplos del resultado deseado para una instrucción dada, y dejar que infiera el patrón para el resultado deseado. Según el número de ejemplos proporcionados, podemos tener prompting zero-shot, one-shot, few-shot, etc.

El prompt ahora consiste en tres componentes:

  • Una descripción de la tarea
  • Algunos ejemplos del resultado deseado
  • El inicio de un nuevo ejemplo (que se convierte en una descripción implícita de la tarea)
Tipo de Aprendizaje Prompt (Entrada) Completado (Salida)
Zero-shot "The Sun is Shining". Translate to Spanish "El Sol está brillando".
One-shot "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" =>
"Es un día frío y ventoso".
Few-shot The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk =>
Basketball

Nota cómo tuvimos que proporcionar una instrucción explícita ("Translate to Spanish") en prompting zero-shot, pero se infiere en el ejemplo one-shot. El ejemplo few-shot muestra cómo añadir más ejemplos permite a los modelos hacer inferencias más precisas sin instrucciones adicionales.

Señales en Prompt

Otra técnica para usar contenido primario es proporcionar señales en lugar de ejemplos. En este caso, damos al modelo un empujón en la dirección correcta empezando con un fragmento que refleja el formato de respuesta deseado. El modelo entonces "toma la señal" para continuar en esa línea.

Número de Señales Prompt (Entrada) Completado (Salida)
0 Júpiter es el quinto planeta desde el Sol y el más grande del Sistema Solar. Es un gigante gaseoso con una masa de una milésima parte del Sol, pero dos veces y media la de todos los otros planetas del Sistema Solar juntos. Júpiter es uno de los objetos más brillantes visibles a simple vista en el cielo nocturno y ha sido conocido por civilizaciones antiguas desde antes de la historia registrada.
Resume esto
Júpiter es el planeta más grande de nuestro Sistema Solar y el quinto desde el Sol. Es un gigante gaseoso con una masa de 1/1000 de la del Sol, pero es más pesado que todos los otros planetas combinados. Las civilizaciones antiguas conocen a Júpiter desde hace mucho tiempo, y es fácilmente visible en el cielo nocturno.
1 Júpiter es el quinto planeta desde el Sol y el más grande del Sistema Solar. Es un gigante gaseoso con una masa de una milésima parte del Sol, pero dos veces y media la de todos los otros planetas del Sistema Solar juntos. Júpiter es uno de los objetos más brillantes visibles a simple vista en el cielo nocturno y ha sido conocido por civilizaciones antiguas desde antes de la historia registrada.
Resume esto
Lo que aprendimos es que Júpiter
es el quinto planeta desde el Sol y el más grande del Sistema Solar. Es un gigante gaseoso con una masa de una milésima parte del Sol, pero dos veces y media la de todos los otros planetas combinados. Es fácilmente visible a simple vista y es conocido desde tiempos antiguos.
2 Júpiter es el quinto planeta desde el Sol y el más grande del Sistema Solar. Es un gigante gaseoso con una masa de una milésima parte de la del Sol, pero dos veces y media la de todos los demás planetas del Sistema Solar combinados. Júpiter es uno de los objetos más brillantes visibles a simple vista en el cielo nocturno, y ha sido conocido por civilizaciones antiguas desde antes de la historia registrada.
Resumen
Las 3 principales cosas que aprendimos:
1. Júpiter es el quinto planeta desde el Sol y el más grande del Sistema Solar.
2. Es un gigante gaseoso con una masa de una milésima parte de la del Sol...
3. Júpiter ha sido visible a simple vista desde tiempos antiguos ...

Plantillas de Prompt

Una plantilla de prompt es una receta predefinida para un prompt que puede almacenarse y reutilizarse según sea necesario, para impulsar experiencias de usuario más consistentes a gran escala. En su forma más simple, es simplemente una colección de ejemplos de prompt como este de OpenAI que proporciona tanto los componentes interactivos del prompt (mensajes del usuario y sistema) como el formato de solicitud impulsado por API - para soportar la reutilización.

En su forma más compleja, como este ejemplo de LangChain, contiene marcadores de posición que pueden ser reemplazados con datos de diversas fuentes (entrada del usuario, contexto del sistema, fuentes de datos externas, etc.) para generar un prompt dinámicamente. Esto nos permite crear una biblioteca de prompts reutilizables que pueden usarse para impulsar experiencias de usuario consistentes programáticamente a gran escala.

Finalmente, el valor real de las plantillas reside en la capacidad de crear y publicar bibliotecas de prompts para dominios de aplicación verticales, donde la plantilla de prompt ahora está optimizida para reflejar el contexto o ejemplos específicos de la aplicación que hacen que las respuestas sean más relevantes y precisas para el público usuario objetivo. El repositorio Prompts For Edu es un gran ejemplo de este enfoque, curando una biblioteca de prompts para el dominio educativo con énfasis en objetivos clave como planificación de lecciones, diseño curricular, tutoría estudiantil, etc.

Contenido de Apoyo

Si pensamos en la construcción de prompts como tener una instrucción (tarea) y un objetivo (contenido principal), entonces el contenido secundario es como contexto adicional que proporcionamos para influir en la salida de alguna manera. Puede ser parámetros de ajuste, instrucciones de formato, taxonomías temáticas, etc., que pueden ayudar al modelo a personalizar su respuesta para que se ajuste a los objetivos o expectativas del usuario deseados.

Por ejemplo: Dado un catálogo de cursos con metadatos extensos (nombre, descripción, nivel, etiquetas de metadatos, instructor, etc.) de todos los cursos disponibles en el plan de estudios:

  • podemos definir una instrucción para "resumir el catálogo de cursos para el Otoño 2023"
  • podemos usar el contenido principal para proporcionar algunos ejemplos de la salida deseada
  • podemos usar el contenido secundario para identificar las 5 principales "etiquetas" de interés.

Ahora, el modelo puede proporcionar un resumen en el formato mostrado por los pocos ejemplos, pero si un resultado tiene múltiples etiquetas, puede priorizar las 5 etiquetas identificadas en el contenido secundario.


Mejores Prácticas para Prompts

Ahora que sabemos cómo se pueden construir los prompts, podemos empezar a pensar en cómo diseñarlos para reflejar las mejores prácticas. Podemos pensar en esto en dos partes: tener la mentalidad correcta y aplicar las técnicas adecuadas.

Mentalidad para Ingeniería de Prompts

La ingeniería de prompts es un proceso de prueba y error, así que ten en cuenta tres factores guía generales:

  1. Entender el dominio importa. La precisión y relevancia de la respuesta es función del dominio en el que opera esa aplicación o usuario. Aplica tu intuición y experiencia en el dominio para personalizar aún más las técnicas. Por ejemplo, define personalidades específicas del dominio en tus prompts de sistema o usa plantillas específicas del dominio en tus prompts de usuario. Proporciona contenido secundario que refleje contextos específicos del dominio, o usa señales y ejemplos específicos del dominio para guiar al modelo hacia patrones de uso familiares.

  2. Entender el modelo importa. Sabemos que los modelos son estocásticos por naturaleza. Pero las implementaciones de modelo también pueden variar en términos del conjunto de datos de entrenamiento que usan (conocimiento preentrenado), las capacidades que proporcionan (e.g., vía API o SDK) y el tipo de contenido para el que están optimizados (e.g., código vs imágenes vs texto). Entiende las fortalezas y limitaciones del modelo que estás usando y usa ese conocimiento para priorizar tareas o crear plantillas personalizadas optimizadas para las capacidades del modelo.

  3. Iterar y validar importa. Los modelos están evolucionando rápidamente, y también las técnicas para ingeniería de prompts. Como experto en el dominio, puedes tener otro contexto o criterios para tu aplicación específica, que tal vez no aplican para la comunidad general. Usa herramientas y técnicas de ingeniería de prompts para "activar" la construcción de prompts, luego itera y valida los resultados usando tu propia intuición y experiencia en el dominio. Registra tus aprendizajes y crea una base de conocimiento (e.g., bibliotecas de prompts) que puedan ser usados como nueva línea base por otros para iteraciones más rápidas en el futuro.

Mejores Prácticas

Ahora veamos las mejores prácticas comunes que recomiendan los practicantes de OpenAI y Azure OpenAI.

Qué Por qué
Evaluar los modelos más recientes. Las nuevas generaciones de modelos probablemente tengan características y calidad mejoradas, pero también pueden implicar costos más altos. Evalúalos por su impacto, luego toma decisiones de migración.
Separar instrucciones y contexto Verifica si tu modelo/proveedor define delimitadores para distinguir instrucciones, contenido principal y secundario más claramente. Esto puede ayudar a los modelos a asignar pesos más precisos a los tokens.
Ser específico y claro Proporciona más detalles sobre el contexto deseado, resultado, longitud, formato, estilo, etc. Esto mejorará tanto la calidad como la consistencia de las respuestas. Captura recetas en plantillas reutilizables.
Ser descriptivo, usar ejemplos Los modelos pueden responder mejor a un enfoque de "mostrar y contar". Comienza con un enfoque de zero-shot donde das una instrucción (pero sin ejemplos), luego prueba few-shot como refinamiento, proporcionando algunos ejemplos de la salida deseada. Usa analogías.
Usar señales para iniciar completaciones Guíalo hacia un resultado deseado dándole algunas palabras o frases iniciales que pueda usar como punto de partida para la respuesta.
Repetir A veces puede ser necesario repetir la instrucción al modelo. Da instrucciones antes y después de tu contenido principal, usa una instrucción y una señal, etc. Itera y valida para ver qué funciona.
El orden importa El orden en que presentas la información al modelo puede impactar la salida, incluso en los ejemplos de aprendizaje, gracias al sesgo de recencia. Prueba opciones diferentes para ver qué funciona mejor.
Darle al modelo una “salida” Dale al modelo una respuesta de respaldo que pueda proporcionar si no puede completar la tarea por cualquier motivo. Esto puede reducir las probabilidades de que los modelos generen respuestas falsas o fabricadas.

Como con cualquier mejor práctica, recuerda que tu experiencia puede variar según el modelo, la tarea y el dominio. Usa estas como punto de partida y itera para encontrar lo que mejor funciona para ti. Reevalúa constantemente tu proceso de ingeniería de prompts conforme se disponen nuevos modelos y herramientas, con enfoque en la escalabilidad del proceso y calidad de la respuesta.

Tarea

¡Felicidades! ¡Has llegado al final de la lección! ¡Es momento de poner a prueba algunos de esos conceptos y técnicas con ejemplos reales!

Para nuestra tarea, usaremos un cuaderno Jupyter con ejercicios que puedes completar de forma interactiva. También puedes extender el cuaderno con tus propias celdas de Markdown y código para explorar ideas y técnicas por tu cuenta.

Para comenzar, bifurca el repositorio, luego

  • (Recomendado) Lanza GitHub Codespaces
  • (Alternativamente) Clona el repositorio en tu dispositivo local y úsalo con Docker Desktop
  • (Alternativamente) Abre el cuaderno con tu entorno preferido para ejecutar cuadernos.

Después, configura tus variables de entorno

  • Copia el archivo .env.copy que está en la raíz del repositorio a .env y completa los valores de AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT y AZURE_OPENAI_DEPLOYMENT. Regresa a la sección de Learning Sandbox para aprender cómo hacerlo.

Luego, abre el cuaderno Jupyter

  • Selecciona el kernel de ejecución. Si usas la opción 1 o 2, simplemente selecciona el kernel por defecto Python 3.10.x que provee el contenedor de desarrollo.

Ya estás listo para correr los ejercicios. Nota que aquí no hay respuestas correctas o incorrectas – es solo explorar opciones mediante prueba y error y construir intuición sobre qué funciona para un modelo y dominio de aplicación dado.

Por esta razón no hay segmentos de Solución de Código en esta lección. En cambio, el cuaderno tendrá celdas de Markdown tituladas "Mi solución:" que muestran un ejemplo de salida para referencia.

Verificación de conocimiento

¿Cuál de los siguientes es un buen prompt siguiendo algunas prácticas recomendables razonables?

  1. Muéstrame una imagen de un coche rojo
  2. Muéstrame una imagen de un coche rojo de marca Volvo y modelo XC90 estacionado junto a un acantilado con el sol poniéndose
  3. Muéstrame una imagen de un coche rojo de marca Volvo y modelo XC90

A: 2, es el mejor prompt porque proporciona detalles sobre "qué" y entra en específicos (no cualquier coche sino una marca y modelo específicos) y también describe el entorno general. El 3 es el siguiente mejor ya que también contiene mucha descripción.

🚀 Desafío

Ve si puedes aprovechar la técnica de "señal" con el prompt: Completa la frase "Muéstrame una imagen de coche rojo de marca Volvo y ". ¿Con qué responde y cómo lo mejorarías?

¡Gran trabajo! Continúa tu aprendizaje

¿Quieres aprender más sobre diferentes conceptos de Ingeniería de Prompts? Visita la página de aprendizaje continuado para encontrar otros grandes recursos sobre este tema.

Dirígete a la Lección 5 donde veremos técnicas avanzadas de prompting!


Descargo de responsabilidad: Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción.