Prompt Engineering para desarrolladores… y no tan desarrolladores

0
133

Índice

  1. Introducción
  2. Base LLM vs Instruction Tuned LLM
  3. Guía de diseño para los prompts
  4. Desarrollo iterativo de prompts
  5. El poder de resumir
  6. Inferir sentimientos
  7. Transformación
  8. Temperatura
  9. Conclusiones
  10. Referencias

1. Introducción

En los últimos meses quizás hayas oído hablar acerca de un nuevo y «disruptor» trabajo: Prompt Engineer. Todo esto relacionado con la aparición de ChatGPT y su irrupción en el mundo del desarrollo.

Pero seguramente estes pensando que sea demasiado ponerle la coletilla de Engineer a un trabajo que «solo consiste en escribir texto a una IA», ¿pero estás seguro de eso? En este tutorial te voy a hablar acerca de por qué la IA no ha venido a ser nuestra enemiga, sino a ser una gran aliada, y que cuanto antes os hagais amigos, mucho mejor, por último, también hablaremos acerca de un nuevo concepto en las empresas llamado «hiperproductividad».

Para los ejemplos de este tutorial usaremos la web de ChatGPT.

Si necesitas mas información acerca de ChatGPT te dejo este tutorial

Comencemos.

2. Base LLM vs Instruction Tuned LLM

Antes de empezar vamos a aclarar una serie de conceptos.

Para empezar, cuando escuches hablar sobre LLM, nos estamos refiriendo a Large Language Model, que es un modelo de lenguaje basado en inteligencia artificial, como ChatGPT. Estos modelos son capaces de comprender y generar lenguaje humano. Son entrenados utilizando grandes cantidades de texto para aprender patrones y estructuras lingüísticas, lo que les permite responder preguntas, generar texto coherente y realizar otras tareas relacionadas con el procesamiento del lenguaje natural.

Base LLM

Los modelos básicos (Base LLM) son capaces de predecir la siguiente palabra en función de el entrenamiento que haya recibido.

En este caso si le escribimos:

Hace mucho tiempo existía una tortuga…

El modelo lo completará de la siguiente forma:

Hace mucho tiempo existía una tortuga que vivía en una isla mágica con sus amigos unicornios.

Pero, ¿que ocurre si le hacemos una pregunta exacta?

Por ejemplo:

¿Cuál es la capital de Alemania?

El modelo podría responder lo siguiente:

¿Cuál es la capital de Alemania?

¿Cuál es la ciudad más grande de Alemania?

¿Cuál es la cantidad de habitantes de Alemania?

¿Cuál es la moneda de Alemania?

Y esto se debe a que muchos sitios web o blogs podrían tener varias preguntas relacionadas con el tema, y como este modelo básico solo se encarga de predecir palabras, cree que lo más probable es que después de una pregunta… exista otra pregunta.

Por lo que este modelo no parece muy inteligente.

Instruction Tuned LLM

Pero llegamos a este punto, al modelo al que pertenece ChatGPT y muchas otras IA, y que son las que nos han fascinado en estos últimos meses.

Este modelo no va a tratar solo de predecir, sino que va a intentar seguir las instrucciones que le damos, no solo eso, su aprendizaje se verá reforzado por el feedback que pueda recibir de los diferentes humanos que la vayan usando.

Y esto hace que además de haber sido entrenado con datos, se realice un ajuste fino, a través de diferentes tareas sencillas, como análisis de textos, resumen, traducción, etc.

De este modo, ante el ejemplo anterior de:

¿Cuál es la capital de Alemania?

El modelo respondería:

¿Cuál es la capital de Alemania?

La capital de Alemania es Berlín.

Ahora si empezamos a ver signos de inteligencia.

Si quieres profundizar más acerca de esto, te recomiendo este enlace.

3. Guía de diseño para los prompts

Si, no puedes escribir cualquier cosa a una IA y que te de exactamente los resultados que quieres, hay que saber que escribirle y como redactarlo, además de como pedir los resultados.

Para todos los ejemplos que verás a continuación se ha usado la versión 12 May de ChatGPT.

ChatGPT version
ChatGPT Version

Existen 2 principios muy importantes, escribir instrucciones claras y específicas y darle al modelo tiempo para pensar, veamos en que consiste cada uno.

Escribir instrucciones claras y específicas

Claras y específicas es diferente de cortas. No hace falta que resumas tus instrucciones, si necesitas escribir un párrafo grande porque es necesario, hazlo.

Para conseguir esto existen varias tácticas:

Táctica 1: Usar delimitadores

El uso de delimitadores nos va a ayudar a especificarle al modelo con mas precisión lo que queremos, y además nos va a proteger de posibles inyecciones en el prompt por parte del modelo, por ejemplo, si le pedimos que resuma un texto, podría añadir palabras al texto para que sea más fácil de resumir, pero no sería lo que le estamos pidiendo y podría dar lugar a errores no deseados, veamos un ejemplo:

Captura de ChatGPT
Captura de ChatGPT

Como vemos cumple a la perfección la instrucción, ignorando cualquier texto que esta fuera de los delimitadores, para estos últimos he usado triple comillas, pero puedes usar puntos, rayas, barras, tags HTML, lo que mejor te convenga.

Táctica 2: Especifica como quieres el resultado

Si vamos a un restaurante y pedimos carne, seguramente le diremos al camarero el punto de la carne y la guarnición, pues esto es lo mismo, no esperemos que la IA sea adivina (es Inteligencia Artificial no Inteligencia Adivina), por lo que necesitamos decirle como queremos que nos entregue el resultado, esto nos ahorrará mucho tiempo.

Captura de ChatGPT
Captura de ChatGPT

Ahora le he pedido que genere una serie de datos, y le he pedido que el resultado de todo me lo dé en formato JSON, también le he especificado las keys del JSON, si le hubiera escrito en español, las keys también estarían en este idioma, cuando lo normal en el mundo del desarrollo es colocarlas en inglés, pero este es el motivo por el que debemos ser concisos sobre la forma en la que queremos el resultado, porque el modelo va a sobreentender que si lo pides en español lo querrás en ese idioma.

Como ves cuanto mas conciso seas, mejores resultados vas a obtener.

Táctica 3: Comprobar si se cumplen las condiciones

Podemos pedirle que en función de ciertas condiciones nos devuelva un resultado u otro, al igual que un if…else.

Como ejemplo, le voy a pasar un texto que tiene una serie de instrucciones y luego otro sin ellas, si tiene instrucciones quiero que me lo dé en un formato y si no las tiene en otro formato.

Captura de ChatGPT
Captura de ChatGPT

Ahora el texto sin instrucciones.

Captura de ChatGPT
Captura de ChatGPT

Como ves esto es muy útil para que dado un texto la IA pueda generar una serie de instrucciones para un usuario por ejemplo, nos puede servir para tutoriales de videojuegos, de software, de montaje de muebles, y podríamos automatizarlo e integrarlo en nuestros sistemas de forma sencilla.

Y fíjate que he hablado de integración en sistemas, y es que la IA puede ser una librería más de nuestros proyectos, pero una con muchas capacidades y posibilidades, y no solo como librería sino que también como compañera, pero ya hablaremos de esto más adelante.

Táctica 4: Dar ejemplo

Como buenos padres y miembros de una sociedad civilizada, debemos dar ejemplo a nuestros jovenes que están aprendiendo, pues igual funciona con la IA, ella no es perfecta y puede cometer errores, pero si le decimos como queremos que haga las cosas y le damos un ejemplo de como sería, es capaz de seguir al pie de la letra nuestras instrucciones.

Aquí le muestro un ejemplo de como debe responderme y cuál es el estilo a seguir y es capaz de hacerlo sin ningún problema.

Captura de ChatGPT
Captura de ChatGPT

De este modo, podemos enseñarle cuál es nuestro estilo de escritura y que redacte emails siguiendo esta forma, o incluso de una manera más trabajada nuestro estilo de programación para que genere código con nuestro criterio, pero esto último es más complicado ya que existen muchas variantes, pero yo he hecho el ejemplo con una clase de testing, yo no escribo el modificador de public al comienzo de la clase ni en los métodos, le he puesto un ejemplo y le he pedido que rellene el resto del test.

Captura de ChatGPT
Captura de ChatGPT

Este es el primer principio de diseño de prompts, ahora vamos a ver el segundo.

Darle al modelo tiempo para pensar

Y no se trata darle literalmente 1 semana para que haga las tareas, se trata de «animar» al modelo a que trabaje un poco más en su propia solución en lugar de quizá darnos una respuesta rápida o estándar que ya conozca.

Vamos con un ejemplo con un problema matemático.

Captura de ChatGPT
Captura de ChatGPT

Nos dice que la solución es correcta…pero no.

Vamos a pasarle un nuevo prompt más específico, al ser demasiado grande no he podido sacar una captura de pantalla, por lo que lo dejaré en formato escrito a continuación:

Y la respuesta del modelo a esto fue:

Como vemos, una vez le decimos que haga sus propios deberes es capaz de entender que es incorrecta y rectificar, pero también nos damos cuenta de que aún tiene muchos puntos débiles que afinar.

4. Desarrollo iterativo de prompts

Al igual que en el mundo del desarrollo se itera para conseguir un producto final, en el mundo de los prompts es exactamente igual.

Antes de continuar vamos a ver un poco el proceso del Machine Learning para poder hacer una comparación con el proceso que te explicaré más adelante.

En el mundo del Machine Learning se da este proceso:

Idea -> Implementación -> Resultado experimental -> Análisis de error

Si extrapolamos esto al mundo del prompt engineer, nos quedaría un proceso tal que así:

Ser claro y específico -> Analizar por qué el resultado no es el correcto -> Refinar la idea y el prompt -> Repetir

Esto combina los procesos que hemos ido viendo hasta el momento.

Vamos a ver esto con un ejemplo:

Le introducimos este prompt:

Y nos da esta respuesta:

El primer problema que nos encontramos es que el texto es extremadamente grande, por lo que vamos a solucionar este primer problema.

Vamos a usar el mismo prompt pero añadiéndole:

De esta forma nos devuelve algo mas conciso:

Pero aún queremos ser más especificos, porque nos damos cuenta de que los resultados necesitamos publicarlos en una web, por lo que pedimos una tabla en HTML, por lo que finalmente le pasamos este prompt:

Y nos devuelve lo siguiente:

Captura de ChatGPT
Captura de ChatGPT

Como vemos hemos ido iterando y refinando hasta lograr el resultado deseado.

Por lo que finalmente el mejor enfoque para este proceso sería:

Intentar algo -> Analizar el por qué el resultado no es el que esperamos -> Clarificar instrucciones, mas tiempo para pensar -> Refinar prompts con una serie de ejemplos.

Resumiendo, no se trata de hacer el prompt perfecto, se trata de tener un buen proceso para desarrollar prompts.

5. El poder de resumir

Una de las habilidades mas importantes de estos modelos es su poder de resumir, para poder simplificar la información, redactar mejores textos, o simplemente como apoyo para el estudio.

Vamos a poner un ejemplo de como pedirle un buen resumen a ChatGPT, para ello no solo vamos a pedirle que lo resuma, sino que el resumen tiene el propósito de darle feedback al departamento de precios de nuestra compañía.

Captura de ChatGPT
Captura de ChatGPT

Y a pesar del corto resumen, mantiene el enfoque en el precio, vamos a ir un paso más allá, le diremos que se centre en el envío y la entrega.

Captura de ChatGPT
Captura de ChatGPT

Nuevamente es capaz de centrarse en el resumen exacto que le estamos pidiendo.

Esto tiene muchas utilidades, imagina una tienda online, en la que existen múltiples reviews, la mayoría pueden ser extensas de leer, pero podemos pedirle a la IA que resuma cada una centrándose en algún aspecto que consideremos importante, y si el cliente hace clic en una de ellas le mostraremos la original, muchas personas enfocan la IA como un sustituto de los desarrolladores, pero quizá sea un compañero interno dentro de nuestro código.

6. Inferir sentimientos

Dicen que las máquinas no pueden sentir ni tener emociones, pero lo que si saben es detectarlas en textos, vamos a hablar ahora de una de las herramientas mas interesantes dentro de estos modelos, la capacidad de extraer sentimientos positivos o negativos a partir de un texto.

Vamos a pedirle que a partir de una review nos diga si el sentimiento del cliente es positivo o negativo.

Captura de ChatGPT
Captura de ChatGPT

Como vemos lo hace muy bien, pero vamos a ir un paso más allá, vamos a pedirle que nos extraiga una serie de emociones de esta review del usuario.

Captura de ChatGPT
Captura de ChatGPT

Vamos a subir un nivel más, hagamos que esto de información útil para pintar en el frontend.

Captura de ChatGPT
Captura de ChatGPT

Ahora tenemos un JSON con información sobre el sentimiento del cliente, si está enfadado o no, el producto y la marca sobre el que está opinando, de esta forma podemos crear un JSON y agruparlo por marcas y mostrar los productos con mejores valoraciones, o crear gráficos, o lo que sea, el límite es la imaginación.

También podríamos crear un servicio de email que envíe correos a usuarios poco satisfechos con sus productos, o muy satisfechos para saber si comprarían algo más, como vemos, integrar la IA en nuestros proyectos puede empezar a ser una realidad.

7. Transformación

Una de las últimas características que vamos a ver en este artículo es el de la transformación, estos modelos son capaces de traducir, de convertir una frase en un correo formal, en leer y corregir errores gramaticales, e incluso ¡hablar en pirata!

Algunos ejemplos que podrías introducir son:

  • Traduce el siguiente texto en inglés al español y…
  • Dime de qué idioma se trata
  • Traduzca el siguiente texto inglés al español y… pirata inglés
  • Traduzca el siguiente texto inglés al español en formas formales e informales
  • Traduzca el siguiente texto de argot a una carta comercial:
  • Traducir el siguiente diccionario python de JSON a una tabla HTML con encabezados de columna y título
  • Revisar y corregir…

Y te dejo el ejemplo del pirata, que seguro te da curiosidad:

Respuesta:

8. Temperatura

Y hemos llegado al final, pero antes quiero comentarte acerca de un parámetro llamado temperature en el modelo, esto le dice al modelo como de creativas tienen que ser las respuestas, es un valor que fluctúa entre 0 y 1.

Si lo ajustamos a 0 el modelo dará las mismas respuestas a las mismas entradas una y otra vez, mientras que entre más cerca al 1 esté mas variedad de respuestas y creatividad tendrá, depende de la tarea que le hayas asignado le puedes ajustar este valor cuando lo uses en tus proyectos.

En cada código se implementará de una forma diferente, pero la idea es parecida, por lo que voy a dejarte un ejemplo de como sería en código Python:

9. Conclusiones

Espero que este tutorial te haya gustado y te sirva para empezar a utilizar la IA de una forma más eficiente, la puedes usar como compañera de trabajo e incluso adaptarla a las necesidades de tus proyectos, las posibilidades son infinitas.

Y ya ves como el mundo va a la velocidad de la luz, y lo más importante es saberse adaptar, pero te dejo con unas preguntas finales, ¿a dónde vamos con tanta prisa? ¿Por qué la gente está preocupada en que la IA nos vaya a destruir y no en que pueda salvarnos de muchos problemas como escasez de agua, comida, calentamiento global, desigualdades…? ¿Cuál es la razón de que tengamos que ser más y más y más productivos? ¿Será para tener más tiempo libre o para producir a niveles que ni tengan sentido? Respiremos un momento, las mejores ideas vienen en la ducha 😉

Nos vemos en el próximo tutorial 🙂

10. Referencias

ChatGPT Prompt Engineering for Developers

ChatGPT OpenAi

Dejar respuesta

Please enter your comment!
Please enter your name here