feat(pages): Introduction section finished
parent
9a9ee84d5b
commit
8922e6f462
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"settings": "Configuración de LLM",
|
||||||
|
"basics": "Conceptos básicos de prompting",
|
||||||
|
"elements": "Elementos de prompting",
|
||||||
|
"tips": "Consejos generales para diseñar prompts",
|
||||||
|
"examples": "Ejemplos de prompts"
|
||||||
|
}
|
@ -0,0 +1,116 @@
|
|||||||
|
# Fundamentos del Prompting
|
||||||
|
|
||||||
|
## Prompts Básicos
|
||||||
|
|
||||||
|
Puedes lograr mucho con prompts simples, pero la calidad de los resultados depende de cuánta información le proporcionas al modelo y de cuán bien diseñado está el prompt. Un prompt puede contener información como la instrucción o pregunta que estás pasando al modelo e incluir otros detalles como contexto, entradas o ejemplos. Puedes utilizar estos elementos para instruir mejor al modelo y obtener mejores resultados.
|
||||||
|
|
||||||
|
Comencemos repasando un ejemplo básico de un prompt simple:
|
||||||
|
|
||||||
|
*Prompt*
|
||||||
|
```
|
||||||
|
El cielo es
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
azul
|
||||||
|
|
||||||
|
El cielo es azul en un día claro. En un día nublado, el cielo puede ser gris o blanco.
|
||||||
|
```
|
||||||
|
|
||||||
|
Como puedes ver, el modelo de lenguaje genera una continuación de cadenas que tienen sentido en el contexto de `"El cielo es"`. El resultado puede ser inesperado o estar muy alejado de la tarea que queremos lograr.
|
||||||
|
|
||||||
|
Este ejemplo básico también destaca la necesidad de proporcionar más contexto o instrucciones sobre lo que específicamente queremos lograr.
|
||||||
|
|
||||||
|
|
||||||
|
Intentemos mejorarlo un poco:
|
||||||
|
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Completa la oración:
|
||||||
|
|
||||||
|
El cielo es
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
|
||||||
|
```
|
||||||
|
tan hermoso hoy.
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
¿Es esta respuesta mejor? Bueno, le dijimos al modelo que completara la oración, por lo que el resultado se ve mucho mejor ya que sigue exactamente lo que le dijimos que hiciera ("completa la oración"). Este enfoque de diseñar prompts óptimos para instruir al modelo a realizar una tarea se llama **ingeniería de prompts**.
|
||||||
|
|
||||||
|
El ejemplo anterior ilustra lo que es posible con LLMs en la actualidad. Los LLMs actuales pueden realizar todo tipo de tareas avanzadas que van desde la síntesis de texto hasta el razonamiento matemático y la generación de código.
|
||||||
|
|
||||||
|
## Formato del Prompt
|
||||||
|
|
||||||
|
Hemos utilizado un prompt muy simple anteriormente. Un prompt estándar tiene el siguiente formato:
|
||||||
|
|
||||||
|
```
|
||||||
|
¿<Pregunta>?
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```
|
||||||
|
<Instrucción>
|
||||||
|
```
|
||||||
|
|
||||||
|
Esto se puede formatear como una respuesta a una pregunta (QA), que es estándar en muchos conjuntos de datos de QA, de la siguiente manera:
|
||||||
|
|
||||||
|
```
|
||||||
|
Q: ¿<Pregunta>?
|
||||||
|
A:
|
||||||
|
```
|
||||||
|
|
||||||
|
Al realizar un prompt como el anterior, también se llama *prompting sin entrenamiento* (zero-shot prompting), es decir, estás solicitando directamente al modelo una respuesta sin ejemplos o demostraciones sobre la tarea que deseas que realice. Algunos modelos de lenguaje grandes tienen la capacidad de realizar prompting sin entrenamiento, pero depende de la complejidad y el conocimiento de la tarea en cuestión.
|
||||||
|
|
||||||
|
Dado el formato estándar anterior, una técnica popular y efectiva para prompting se llama *prompting con pocos ejemplos* (few-shot prompting) donde proporcionamos ejemplos (es decir, demostraciones). Los prompts con pocos ejemplos se pueden formatear de la siguiente manera:
|
||||||
|
|
||||||
|
```
|
||||||
|
¿<Pregunta>?
|
||||||
|
<Respuesta>
|
||||||
|
|
||||||
|
¿<Pregunta>?
|
||||||
|
<Respuesta>
|
||||||
|
|
||||||
|
¿<Pregunta>?
|
||||||
|
<Respuesta>
|
||||||
|
|
||||||
|
¿<Pregunta>?
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
La versión en formato QA tendría este aspecto:
|
||||||
|
|
||||||
|
```
|
||||||
|
Q: ¿<Pregunta>?
|
||||||
|
A: <Respuesta>
|
||||||
|
|
||||||
|
Q: ¿<Pregunta>?
|
||||||
|
A: <Respuesta>
|
||||||
|
|
||||||
|
Q: ¿<Pregunta>?
|
||||||
|
A: <Respuesta>
|
||||||
|
|
||||||
|
Q: ¿<Pregunta>?
|
||||||
|
```
|
||||||
|
|
||||||
|
Ten en cuenta que no es necesario usar el formato de preguntas y respuestas (QA). El formato de la tarea depende de la tarea en cuestión. Por ejemplo, se puede realizar una tarea de clasificación simple y proporcionar ejemplos que demuestren la tarea de la siguiente manera:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Esto es impresionante! // Positivo
|
||||||
|
Esto es malo! // Negativo
|
||||||
|
Guau, esa película fue genial! // Positivo
|
||||||
|
¡Qué programa tan horrible! //
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
Negativo
|
||||||
|
```
|
||||||
|
|
||||||
|
El prompting con pocos ejemplos permite el aprendizaje en contexto, que es la capacidad de los modelos de lenguaje para aprender tareas dados unos pocos ejemplos.
|
@ -0,0 +1,15 @@
|
|||||||
|
# Elementos de un prompt
|
||||||
|
|
||||||
|
A medida que cubrimos más y más ejemplos y aplicaciones que son posibles con la ingeniería de prompts, notarás que hay ciertos elementos que conforman una prompt.
|
||||||
|
|
||||||
|
Una prompt puede contener cualquiera de los siguientes componentes:
|
||||||
|
|
||||||
|
**Instrucción** - una tarea o instrucción específica que deseas que el modelo realice
|
||||||
|
|
||||||
|
**Contexto** - puede involucrar información externa o contexto adicional que puede dirigir al modelo a respuestas mejores
|
||||||
|
|
||||||
|
**Datos de entrada** - es la entrada o pregunta para la que nos interesa encontrar una respuesta
|
||||||
|
|
||||||
|
**Indicador de salida** - indica el tipo o formato de la salida
|
||||||
|
|
||||||
|
No todos los componentes son necesarios para una prompt y el formato depende de la tarea en cuestión. Abordaremos más ejemplos concretos en las próximas guías.
|
@ -0,0 +1,326 @@
|
|||||||
|
# Ejemplos de prompts
|
||||||
|
|
||||||
|
En la sección anterior, presentamos y dimos ejemplos básicos de cómo hacer prompting a LLMs.
|
||||||
|
|
||||||
|
En esta sección, proporcionaremos más ejemplos de cómo se utilizan los prompts para lograr diferentes tareas e introduciremos conceptos clave en el camino. A menudo, la mejor manera de aprender conceptos es mediante ejemplos. A continuación, cubrimos algunos ejemplos de cómo los prompts bien diseñados se pueden utilizar para realizar diferentes tipos de tareas.
|
||||||
|
|
||||||
|
Temas:
|
||||||
|
- [Resumen de textos](#resumen-de-textos)
|
||||||
|
- [Extracción de información](#information-extraction)
|
||||||
|
- [Preguntas y respuestas](#preguntas-y-respuestas)
|
||||||
|
- [Clasificación de texto](#clasificación-de-texto)
|
||||||
|
- [Conversación](#conversación)
|
||||||
|
- [Generación de código](#generación-de-código)
|
||||||
|
- [Razonamiento](#razonamiento)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resumen de textos
|
||||||
|
|
||||||
|
Uno de los trabajos estándar en la generación de lenguaje natural es el resumen de textos. El resumen de textos puede incluir muchas areas diferentes. De hecho, una de las aplicaciones más prometedoras de los modelos de lenguaje es la capacidad de resumir artículos y conceptos en resúmenes rápidos y fáciles de leer. Vamos a intentar una tarea básica de sumarización utilizando prompts.
|
||||||
|
|
||||||
|
|
||||||
|
Digamos que estoy interesado en aprender acerca de los antibióticos, podría probar un prompt como este:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Explica los antibióticos
|
||||||
|
|
||||||
|
A:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
Los antibióticos son un tipo de medicamento utilizado para tratar infecciones bacterianas.
|
||||||
|
Funcionan matando las bacterias o impidiendo que se reproduzcan, permitiendo que el sistema
|
||||||
|
inmunológico del cuerpo combata la infección. Los antibióticos suelen tomarse por vía oral
|
||||||
|
en forma de píldoras, cápsulas o soluciones líquidas, o a veces se administran por vía
|
||||||
|
intravenosa. No son efectivos contra infecciones virales y su uso inadecuado puede llevar
|
||||||
|
a la resistencia a los antibióticos.
|
||||||
|
```
|
||||||
|
|
||||||
|
La "A:" es un formato de prompt explícito que se utiliza en la respuesta a preguntas. Lo usé aquí para decirle al modelo que esperamos una respuesta. En este ejemplo, no está claro cómo esto es útil en comparación con no usarlo, pero lo dejaremos para ejemplos posteriores. Supongamos que esto es demasiada información y queremos resumirla aún más. De hecho, podemos indicarle al modelo que la resuma en una sola oración así:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Los antibióticos son un tipo de medicamento utilizado para tratar infecciones bacterianas.
|
||||||
|
Funcionan matando las bacterias o impidiendo que se reproduzcan, permitiendo que el sistema
|
||||||
|
inmunológico del cuerpo combata la infección. Los antibióticos suelen tomarse por vía oral
|
||||||
|
en forma de píldoras, cápsulas o soluciones líquidas, o a veces se administran por vía
|
||||||
|
intravenosa. No son efectivos contra infecciones virales y su uso inadecuado puede llevar
|
||||||
|
a la resistencia a los antibióticos.
|
||||||
|
|
||||||
|
Resume lo anterior en una sola oración:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
Los antibióticos son medicamentos utilizados para tratar infecciones bacterianas al matar
|
||||||
|
o detener la reproducción de las bacterias, pero no son efectivos contra los virus y el
|
||||||
|
uso excesivo puede llevar a la resistencia a los antibióticos.
|
||||||
|
```
|
||||||
|
|
||||||
|
Sin prestar demasiada atención a la precisión de la salida anterior, algo en lo que nos centraremos en una guía posterior, el modelo intentó resumir el párrafo en una sola oración. Podemos intentar ser más ingeniosos con las instrucciones, pero lo dejaremos para un capítulo posterior. Siéntete libre de pausar aquí y experimentar para ver si obtienes mejores resultados.
|
||||||
|
|
||||||
|
---
|
||||||
|
## Extracción de información
|
||||||
|
|
||||||
|
Mientras que los modelos de lenguaje están entrenados para realizar la generación de lenguaje natural y otras tareas relacionadas, también son muy capaces de realizar clasificación y una serie de otras tareas de procesamiento de lenguaje natural (NLP).
|
||||||
|
|
||||||
|
Aquí hay un ejemplo de un prompt que extrae información de un párrafo dado.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Las declaraciones de contribución del autor y los agradecimientos en los documentos de
|
||||||
|
investigación deben indicar claramente y específicamente si, y en qué medida, los autores
|
||||||
|
utilizaron tecnologías de inteligencia artificial como ChatGPT en la preparación de su
|
||||||
|
manuscrito y análisis. También deben indicar qué LLMs se utilizaron. Esto alertará a los
|
||||||
|
editores y revisores para examinar los manuscritos con más cuidado en busca de posibles
|
||||||
|
prejuicios, inexactitudes e improperios en la atribución de fuentes. De igual manera, las
|
||||||
|
revistas científicas deben ser transparentes sobre su uso de LLM, por ejemplo, al seleccionar
|
||||||
|
manuscritos enviados.
|
||||||
|
|
||||||
|
Menciona el producto basado en el modelo de lenguaje grande mencionado en el párrafo anterior:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
El producto basado en el modelo de lenguaje grande mencionado en el párrafo anterior es ChatGPT.
|
||||||
|
```
|
||||||
|
|
||||||
|
Hay muchas formas en que podemos mejorar los resultados anteriores, pero esto ya es muy útil.
|
||||||
|
|
||||||
|
A estas alturas, debería ser obvio que puedes pedirle al modelo que realice diferentes tareas simplemente instruyéndolo sobre qué hacer. Esa es una capacidad poderosa que los desarrolladores de productos de inteligencia artificial ya están utilizando para crear productos y experiencias poderosos.
|
||||||
|
|
||||||
|
|
||||||
|
Fuente del párrafo: [ChatGPT: five priorities for research](https://www.nature.com/articles/d41586-023-00288-7)
|
||||||
|
|
||||||
|
---
|
||||||
|
## Preguntas y respuestas
|
||||||
|
|
||||||
|
Una de las mejores formas de hacer que el modelo responda a preguntas específicas es mejorar el formato del prompt. Como se mencionó anteriormente, un prompot puede combinar instrucciones, contexto e indicadores de entrada y salida para obtener resultados mejorados. Si bien estos componentes no son obligatorios, son una buena práctica, ya que cuanto más específicas sean las instrucciones, mejores serán los resultados que obtendrá. A continuación se muestra un ejemplo siguiendo un prompt más estructurado.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Responde la pregunta basándote en el contexto que aparece a continuación. Mantén la respuesta
|
||||||
|
corta y concisa. Responde "No estoy seguro de la respuesta" si no estás seguro de la respuesta.
|
||||||
|
|
||||||
|
Context: Teplizumab tiene sus raíces en una empresa farmacéutica de Nueva Jersey llamada Ortho
|
||||||
|
Pharmaceutical. Allí, los científicos generaron una versión temprana del anticuerpo, apodado OKT3.
|
||||||
|
Originalmente obtenido de ratones, la molécula era capaz de unirse a la superficie de las células T
|
||||||
|
y limitar su potencial de matar células. En 1986, fue aprobado para ayudar a prevenir el rechazo
|
||||||
|
de órganos después de los trasplantes de riñón, convirtiéndose en el primer anticuerpo terapéutico
|
||||||
|
permitido para uso humano.
|
||||||
|
|
||||||
|
Question: ¿De dónde se obtuvo originalmente el OKT3?
|
||||||
|
|
||||||
|
Answer:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
Ratones.
|
||||||
|
```
|
||||||
|
|
||||||
|
Contexto obtenido de [Nature](https://www.nature.com/articles/d41586-023-00400-x).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Clasificación de Texto
|
||||||
|
|
||||||
|
|
||||||
|
Hasta ahora, hemos utilizado instrucciones simples para realizar una tarea. Como ingeniero de prompt, deberas mejorar la calidad de las instrucciones que proporcionas. ¡Pero eso no es todo! También descubriras que para casos de uso más difíciles, simplemente proporcionar instrucciones no será suficiente. Aquí es donde debes pensar más en el contexto y en los diferentes elementos que se pueden utilizar en un prompt. Otros elementos que pueden proporcionar son los datos de entrada (`input data`) o ejemplos (`examples`).
|
||||||
|
|
||||||
|
So far, we have used simple instructions to perform a task. As a prompt engineer, you will need to get better at providing better instructions. But that's not all! You will also find that for harder use cases, just providing instructions won't be enough. This is where you need to think more about the context and the different elements you can use in a prompt. Other elements you can provide are `input data` or `examples`.
|
||||||
|
|
||||||
|
Intentemos demostrar esto proporcionando un ejemplo de clasificación de texto.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Clasifique el texto en neutral, negativo o positivo.
|
||||||
|
|
||||||
|
Texto: Creo que la comida estuvo bien.
|
||||||
|
Sentimiento:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
Neutral
|
||||||
|
```
|
||||||
|
|
||||||
|
Dimos la instrucción de clasificar el texto y el modelo respondió con `'Neutral'`, que es correcto. No hay nada malo en esto, pero digamos que lo que realmente necesitamos es que el modelo dé la etiqueta en el formato exacto que queremos. En lugar de `Neutral`, queremos que devuelva `neutral`. ¿Cómo lo logramos? Hay diferentes maneras de hacer esto. Nos preocupa la especificidad aquí, por lo que cuanto más información podamos proporcionar al prompt, mejores serán los resultados. Podemos intentar proporcionar ejemplos para especificar el comportamiento correcto. Intentémoslo de nuevo:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Clasifique el texto en neutral, negativo o positivo.
|
||||||
|
|
||||||
|
Texto: Creo que las vacaciones están bien.
|
||||||
|
Sentimiento: neutral
|
||||||
|
|
||||||
|
Texto: Creo que la comida estuvo bien.
|
||||||
|
Sentimiento:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Output:*
|
||||||
|
```
|
||||||
|
neutral
|
||||||
|
```
|
||||||
|
|
||||||
|
¡Perfecto! Esta vez el modelo devolvió `neutral`, que es la etiqueta específica que estaba buscando. Parece que el ejemplo proporcionado en el prompt ayudó al modelo a ser específico en su salida. Para resaltar por qué a veces la especificidad es importante, echa un vistazo a este ejemplo y detecta el problema:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Clasifique el texto en nutral, negativo o positivo.
|
||||||
|
|
||||||
|
Texto: Creo que las vacaciones están bien.
|
||||||
|
Sentimiento:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Output:*
|
||||||
|
```
|
||||||
|
Neutral
|
||||||
|
```
|
||||||
|
|
||||||
|
¿Cuál es el problema aquí?
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conversación
|
||||||
|
|
||||||
|
Quizás una de las cosas más interesantes que se pueden lograr con la ingenieria de prompt es enseñar al sistema LLM cómo comportarse, cuál es su intención y su identidad. Esto es particularmente útil cuando se construyen sistemas conversacionales como chatbots de atención al cliente.
|
||||||
|
|
||||||
|
Por ejemplo, creemos un sistema conversacional que sea capaz de generar respuestas más técnicas y científicas a preguntas. Observa cómo le estamos diciendo explícitamente cómo comportarse a través de la instrucción. A veces se le llama *role prompting*.
|
||||||
|
|
||||||
|
For instance, let's create a conversational system that's able to generate more technical and scientific responses to questions. Note how we are explicitly telling it how to behave through the instruction. This is sometimes referred to as *role prompting*.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
La siguiente es una conversación con un asistente de investigación de inteligencia artificial. El tono del asistente es técnico y científico.
|
||||||
|
|
||||||
|
Humano: Hola, ¿quién eres?
|
||||||
|
AI: ¡Saludos! Soy un asistente de investigación de inteligencia artificial. ¿En qué puedo ayudarte hoy?
|
||||||
|
Humano: ¿Puedes contarme sobre la creación de los agujeros negros?
|
||||||
|
AI:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Output:*
|
||||||
|
```
|
||||||
|
¡Claro! Los agujeros negros son regiones del espacio-tiempo donde la fuerza gravitacional es tan fuerte que nada, ni siquiera la luz, puede escapar de ella. Se crean cuando una estrella muy masiva muere y su núcleo colapsa sobre sí mismo, formando una singularidad de densidad infinita. La intensa gravedad de la singularidad atrae toda la materia y radiación a su alrededor, creando el agujero negro.
|
||||||
|
```
|
||||||
|
|
||||||
|
¿Nuestro asistente de investigación de inteligencia artificial suena un poco técnico, no? De acuerdo, cambiemos este comportamiento e instruyamos al sistema para que dé respuestas más accesibles.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
La siguiente es una conversación con un asistente de investigación de inteligencia artificial. Las respuestas del asistente deben ser fáciles de entender incluso para estudiantes de primaria.
|
||||||
|
|
||||||
|
Humano: Hola, ¿quién eres?
|
||||||
|
AI: ¡Saludos! Soy un asistente de investigación de inteligencia artificial. ¿En qué puedo ayudarte hoy?
|
||||||
|
Humano: ¿Puedes contarme sobre la creación de los agujeros negros?
|
||||||
|
AI:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Output:*
|
||||||
|
```
|
||||||
|
¡Claro! Los agujeros negros se crean cuando una estrella muy masiva se queda sin combustible y colapsa sobre sí misma. La gravedad de la estrella es tan fuerte que nada, ni siquiera la luz, puede escapar de su atracción. Esto crea un punto en el espacio-tiempo con una fuerza gravitatoria intensa llamado agujero negro.
|
||||||
|
```
|
||||||
|
|
||||||
|
Creo que hemos avanzado. Puedes seguir mejorándolo. Estoy seguro de que si agregas más ejemplos puedes obtener resultados aún mejores.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Generación de código
|
||||||
|
|
||||||
|
Una aplicación donde los LLM son muy efectivos es en la generación de código. Copilot es un gran ejemplo de esto. Hay una gran cantidad de tareas de generación de código que se pueden realizar con promts ingeniosos. Veamos algunos ejemplos a continuación.
|
||||||
|
|
||||||
|
Primero, intentemos un programa simple que salude al usuario.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
/*
|
||||||
|
Ask the user for their name and say "Hello"
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
let name = prompt("What is your name?");
|
||||||
|
console.log(`Hello, ${name}!`);
|
||||||
|
```
|
||||||
|
|
||||||
|
Puedes ver que ni siquiera necesitamos especificar el lenguaje a utilizar.
|
||||||
|
|
||||||
|
Cambiamos de nivel un poco. Quiero mostrarte lo poderosos que pueden ser los LLMs con un poco más de esfuerzo en el diseño de los promts.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
Table departments, columns = [DepartmentId, DepartmentName]
|
||||||
|
Table students, columns = [DepartmentId, StudentId, StudentName]
|
||||||
|
Create a MySQL query for all students in the Computer Science Department
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
SELECT StudentId, StudentName
|
||||||
|
FROM students
|
||||||
|
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
|
||||||
|
```
|
||||||
|
|
||||||
|
Esto es muy impresionante. En este caso, proporcionamos datos sobre el esquema de la base de datos y le pedimos que genere una consulta MySQL válida.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Razonamiento
|
||||||
|
|
||||||
|
Quizás una de las tareas más difíciles para un LLM hoy en día es aquella que requiere alguna forma de razonamiento. El razonamiento es una de las áreas que más me emociona debido a los tipos de aplicaciones complejas que pueden surgir de los LLM.
|
||||||
|
|
||||||
|
Ha habido algunas mejoras en las tareas que involucran habilidades matemáticas. Dicho esto, es importante señalar que los LLM actuales tienen dificultades para realizar tareas de razonamiento, por lo que esto requiere técnicas más avanzadas de ingeniería de promoción. Cubriremos estas técnicas avanzadas en la próxima guía. Por ahora, cubriremos algunos ejemplos básicos para mostrar las capacidades aritméticas.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
¿Cuánto es 9.000 * 9.000?
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
81.000.000
|
||||||
|
```
|
||||||
|
|
||||||
|
Intentemos algo más difícil.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Los números impares en este grupo suman un número par: 15, 32, 5, 13, 82, 7, 1.
|
||||||
|
|
||||||
|
A:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
No, los números impares en este grupo suman un número impar: 119.
|
||||||
|
```
|
||||||
|
|
||||||
|
¡Eso es incorrecto! Tratemos de mejorar esto mejorando la promoción.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Los números impares en este grupo suman un número par: 15, 32, 5, 13, 82, 7, 1.
|
||||||
|
|
||||||
|
Resuelva dividiendo el problema en pasos. Primero, identifique los números impares, añádalos e indique si el resultado es impar o par.
|
||||||
|
```
|
||||||
|
|
||||||
|
*Salida:*
|
||||||
|
```
|
||||||
|
Números impares: 15, 5, 13, 7, 1
|
||||||
|
Suma: 41
|
||||||
|
41 es un número impar.
|
||||||
|
```
|
||||||
|
|
||||||
|
¡Mucho mejor, ¿verdad? Por cierto, probé esto un par de veces y el sistema a veces falla. Si proporcionas mejores instrucciones combinadas con ejemplos, podría ayudar a obtener resultados más precisos.
|
||||||
|
|
||||||
|
Continuaremos incluyendo más ejemplos de aplicaciones comunes en esta sección de la guía.
|
||||||
|
|
||||||
|
En la próxima sección, cubriremos conceptos y técnicas más avanzados de ingeniería de prompt para mejorar el rendimiento en todas estas y más tareas difíciles.
|
@ -0,0 +1,11 @@
|
|||||||
|
# Configuración del LLM
|
||||||
|
|
||||||
|
Cuando trabajas con prompts, interactúas con el LLM a través de una API o directamente. Puedes configurar algunos parámetros para obtener diferentes resultados para tus prompts.
|
||||||
|
|
||||||
|
**Temperature** - En resumen, cuanto menor sea la temperatura, más deterministas serán los resultados en el sentido de que siempre se elige el siguiente token más probable. Aumentar la temperatura podría llevar a más aleatoriedad y fomentar resultados más diversos o creativos. Básicamente, estamos aumentando los pesos de los otros posibles tokens. En términos de aplicación, es posible que deseemos utilizar un valor de temperatura más bajo para tareas como preguntas y respuestas basadas en hechos para fomentar respuestas más concisas y factuales. Para la generación de poemas u otras tareas creativas, podría ser beneficioso aumentar el valor de la temperatura.
|
||||||
|
|
||||||
|
**Top_p** - De manera similar, con top_p, una técnica de muestreo con temperatura llamada muestreo de núcleo, puedes controlar la determinación del modelo al generar una respuesta. Si buscas respuestas exactas y factuales, mantén este valor bajo. Si buscas respuestas más diversas, aumenta el valor.
|
||||||
|
|
||||||
|
La recomendación general es modificar uno de los dos, no ambos.
|
||||||
|
|
||||||
|
Antes de comenzar con algunos ejemplos básicos, ten en cuenta que tus resultados pueden variar según la versión del LLM que estés utilizando.
|
@ -0,0 +1,122 @@
|
|||||||
|
# Consejos generales para diseñar prompts
|
||||||
|
|
||||||
|
Aquí hay algunos consejos para tener en cuenta mientras diseñas tus prompts:
|
||||||
|
|
||||||
|
### Comienza por lo simple
|
||||||
|
|
||||||
|
Al comenzar a diseñar prompts, debes tener en cuenta que es un proceso iterativo que requiere mucha experimentación para obtener resultados óptimos. Usar un playground simple como OpenAI o Cohere es un buen punto de partida.
|
||||||
|
|
||||||
|
Puedes comenzar con prompts simples y agregar más elementos y contexto a medida que apuntas a mejores resultados. La versionización de tu prompt en el camino es vital por esta razón. A medida que leas la guía, verás muchos ejemplos donde la especificidad, simplicidad y concisión a menudo te darán mejores resultados.
|
||||||
|
|
||||||
|
Cuando tienes una tarea grande que involucra muchos sub-tareas diferentes, puedes intentar dividir la tarea en sub-tareas más simples y seguir construyendo a medida que obtienes mejores resultados. Esto evita agregar demasiada complejidad al proceso de diseño de la indicación al principio.
|
||||||
|
|
||||||
|
### La instrucción
|
||||||
|
|
||||||
|
Puedes diseñar prompts efectivos para varias tareas simples usando comandos para indicarle al modelo lo que deseas lograr, como "Escribe", "Clasifica", "Resumen", "Traduce", "Ordena", etc.
|
||||||
|
|
||||||
|
Ten en cuenta que también necesitas experimentar mucho para ver qué funciona mejor. Prueba diferentes instrucciones con diferentes palabras clave, contextos y datos, y observa qué funciona mejor para tu caso de uso y tarea particular. Por lo general, cuanto más específico y relevante sea el contexto para la tarea que estás tratando de realizar, mejor será. Tocaremos la importancia del muestreo y la adición de más contexto en las próximas guías.
|
||||||
|
|
||||||
|
Otros recomiendan que las instrucciones se coloquen al comienzo de la indicación. También se recomienda que se use un separador claro como "###" para separar la instrucción y el contexto.
|
||||||
|
|
||||||
|
Por ejemplo:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
### Instrucción ###
|
||||||
|
Traduce el texto a continuación al español:
|
||||||
|
|
||||||
|
Texto: "Hello!"
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
¡Hola!
|
||||||
|
```
|
||||||
|
|
||||||
|
### Especificidad
|
||||||
|
Sé muy específico sobre la tarea que deseas que el modelo realice. Cuanto más descriptiva y detallada sea el prompt, mejores serán los resultados. Esto es particularmente importante cuando tienes un resultado deseado o estilo de generación que estás buscando. No hay tokens o palabras clave específicas que conduzcan a mejores resultados. Es más importante tener un buen formato y un prompt descriptiva. De hecho, proporcionar ejemplos en el prompt es muy efectivo para obtener la salida deseada en formatos específicos.
|
||||||
|
|
||||||
|
Cuando diseñas prompts, también debes tener en cuenta la longitud del prompt ya que hay limitaciones en cuanto a su longitud. Pensar en cuán específico y detallado debes ser es algo a considerar. Incluir demasiados detalles innecesarios no es necesariamente un buen enfoque. Los detalles deben ser relevantes y contribuir a la tarea en cuestión. Esto es algo en lo que necesitarás experimentar mucho. Os animamos a que hagais mucha experimentación e iteración para optimizar los prompts para tus aplicaciones.
|
||||||
|
|
||||||
|
Como ejemplo, intentemos una indicación simple para extraer información específica de un texto.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
Extrae los nombres de lugares del siguiente texto.
|
||||||
|
|
||||||
|
Formato deseado:
|
||||||
|
Lugar: <lista_separada_por_comas_de_nombres_de_empresa>
|
||||||
|
|
||||||
|
Input: "Aunque estos avances son alentadores para los investigadores, aún hay mucho misterio.
|
||||||
|
'A menudo tenemos una caja negra entre el cerebro y el efecto que vemos en la periferia', dice
|
||||||
|
Henrique Veiga-Fernandes, un neuroinmunólogo en el Centro Champalimaud para lo Desconocido en Lisboa.
|
||||||
|
'Si queremos usarlo en el contexto terapéutico, necesitamos entender el mecanismo'.
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
Place: Centro Champalimaud para lo Desconocido, Lisboa
|
||||||
|
```
|
||||||
|
|
||||||
|
El texto de entrada se obtiene de [este artículo de Nature](https://www.nature.com/articles/d41586-023-00509-z).
|
||||||
|
|
||||||
|
### Evitar imprecisión
|
||||||
|
|
||||||
|
Dado los consejos anteriores sobre ser detallado y mejorar el formato, es fácil caer en la trampa de querer ser demasiado inteligente sobre los temas y crear descripciones imprecisas. A menudo es mejor ser específico y directo. La analogía aquí es muy similar a la comunicación efectiva: cuanto más directa sea, más efectivo será el mensaje.
|
||||||
|
|
||||||
|
Por ejemplo, podrías estar interesado en aprender el concepto de ingeniería de prompts. Podrías intentar algo como:
|
||||||
|
|
||||||
|
```
|
||||||
|
Explica el concepto de ingeniería de promoción. Mantén la explicación corta, solo unas pocas frases
|
||||||
|
y no seas demasiado descriptivo.
|
||||||
|
```
|
||||||
|
|
||||||
|
No está claro en la instrucción anterior cuántas oraciones utilizar y qué estilo. Es posible que puedas obtener respuestas aceptables con el prompt anterior, pero un prompt que sea muy específico, conciso y directo sería mejor. Algo como:
|
||||||
|
|
||||||
|
```
|
||||||
|
Usa 2-3 oraciones para explicar el concepto de ingeniería de prompt a un estudiante de secundaria.
|
||||||
|
```
|
||||||
|
|
||||||
|
### ¿Hacer o no hacer?
|
||||||
|
|
||||||
|
Otro consejo común al diseñar prompts es evitar decir qué no hacer, sino decir qué hacer en su lugar. Esto fomenta la especificidad y se centra en los detalles que conducen a buenas respuestas del modelo.
|
||||||
|
|
||||||
|
Aquí hay un ejemplo de un chatbot de recomendación de películas que no cumple exactamente lo que no quiero que haga debido a cómo escribí la instrucción, centrado en lo que no hacer.
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
El siguiente es un agente que recomienda películas a un cliente.
|
||||||
|
NO PIDA INTERESES. NO PIDA INFORMACIÓN PERSONAL.
|
||||||
|
|
||||||
|
Cliente: Por favor, recomiéndeme una película basada en mis intereses.
|
||||||
|
Agente:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
Claro, puedo recomendar una película según tus intereses. ¿Qué tipo de película te gustaría ver?
|
||||||
|
¿Prefieres acción, comedia, romance o algo más?
|
||||||
|
```
|
||||||
|
|
||||||
|
Este es un prompt mejor:
|
||||||
|
|
||||||
|
*Prompt:*
|
||||||
|
```
|
||||||
|
El siguiente es un agente que recomienda películas a un cliente. El agente es responsable de
|
||||||
|
recomendar una película de las más populares a nivel mundial. Debe abstenerse de preguntar a
|
||||||
|
los usuarios por sus preferencias y evitar pedir información personal. Si el agente no tiene
|
||||||
|
una película para recomendar, debe responder "Lo siento, no pude encontrar una película para
|
||||||
|
recomendar hoy".
|
||||||
|
|
||||||
|
Cliente: Por favor, recomiéndeme una película basada en mis intereses.
|
||||||
|
Agente:
|
||||||
|
```
|
||||||
|
|
||||||
|
*Resultado:*
|
||||||
|
```
|
||||||
|
Lo siento, no tengo información sobre tus intereses. Sin embargo, aquí está una lista de las
|
||||||
|
películas más populares a nivel mundial en este momento: [lista de películas]. Espero que
|
||||||
|
encuentres algo que te guste.
|
||||||
|
```
|
||||||
|
|
||||||
|
Algunos de los ejemplos anteriores fueron adoptados del artículo ["Best practices for prompt engineering with OpenAI API"](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api).
|
Loading…
Reference in New Issue