Índice
- Introducción
- Base LLM vs Instruction Tuned LLM
- Guía de diseño para los prompts
- Desarrollo iterativo de prompts
- El poder de resumir
- Inferir sentimientos
- Transformación
- Temperatura
- Conclusiones
- 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
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.
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:
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.
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.
Ahora el texto sin instrucciones.
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.
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.
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.
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:
Your task is to determine if the student's solution \ is correct or not. To solve the problem do the following: - First, work out your own solution to the problem. - Then compare your solution to the student's solution \ and evaluate if the student's solution is correct or not. Don't decide if the student's solution is correct until you have done the problem yourself. Use the following format: Question: ``` question here ``` Student's solution: ``` student's solution here ``` Actual solution: ``` steps to work out the solution and your solution here ``` Is the student's solution the same as actual solution \ just calculated: ``` yes or no ``` Student grade: ``` correct or incorrect ``` Question: ``` I'm building a solar power installation and I need help \ working out the financials. - Land costs $100 / square foot - I can buy solar panels for $250 / square foot - I negotiated a contract for maintenance that will cost \ me a flat $100k per year, and an additional $10 / square \ foot What is the total cost for the first year of operations \ as a function of the number of square feet. ``` Student's solution: ``` Let x be the size of the installation in square feet. Costs: 1. Land cost: 100x 2. Solar panel cost: 250x 3. Maintenance cost: 100,000 + 100x Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000 ``` Actual solution:
Y la respuesta del modelo a esto fue:
To calculate the total cost for the first year of operations as a function of the number of square feet, we need to consider the costs of land, solar panels, and maintenance. Let x be the size of the installation in square feet. Land cost: $100 per square foot Solar panel cost: $250 per square foot Maintenance cost: $100,000 flat fee per year + $10 per square foot To calculate the total cost, we add up these costs: Total cost = Land cost + Solar panel cost + Maintenance cost Total cost = $100x + $250x + ($100,000 + $10x) Total cost = $350x + $100,000 + $10x Total cost = $360x + $100,000 Is the student's solution the same as the actual solution just calculated? No, the student's solution is not the same. Student grade: Incorrect.
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:
Your task is to help a marketing team create a description for a retail website of a product based on a technical fact sheet. Write a product description based on the information provided in the technical specifications delimited by triple backticks. Technical specifications: """ OVERVIEW - Part of a beautiful family of mid-century inspired office furniture, including filing cabinets, desks, bookcases, meeting tables, and more. - Several options of shell color and base finishes. - Available with plastic back and front upholstery (SWC-100) or full upholstery (SWC-110) in 10 fabric and 6 leather options. - Base finish options are: stainless steel, matte black, gloss white, or chrome. - Chair is available with or without armrests. - Suitable for home or business settings. - Qualified for contract use. CONSTRUCTION - 5-wheel plastic coated aluminum base. - Pneumatic chair adjust for easy raise/lower action. DIMENSIONS - WIDTH 53 CM | 20.87” - DEPTH 51 CM | 20.08” - HEIGHT 80 CM | 31.50” - SEAT HEIGHT 44 CM | 17.32” - SEAT DEPTH 41 CM | 16.14” OPTIONS - Soft or hard-floor caster options. - Two choices of seat foam densities: medium (1.8 lb/ft3) or high (2.8 lb/ft3) - Armless or 8 position PU armrests MATERIALS SHELL BASE GLIDER - Cast Aluminum with modified nylon PA6/PA66 coating. - Shell thickness: 10 mm. SEAT - HD36 foam COUNTRY OF ORIGIN - Italy """
Y nos da esta respuesta:
Introducing the [Product Name], a stunning addition to our collection of mid-century inspired office furniture. Crafted with meticulous attention to detail, this chair embodies timeless elegance and exceptional functionality. Designed to complement your workspace, the [Product Name] is part of a beautiful family of office furniture that includes filing cabinets, desks, bookcases, meeting tables, and more. Its versatile design seamlessly blends into any home or business setting, adding a touch of sophistication to your environment. Customization is key with the [Product Name]. You have the freedom to choose from several options of shell colors and base finishes, allowing you to create a chair that perfectly matches your aesthetic preferences. The chair is available in two upholstery options: plastic back and front upholstery (SWC-100) or full upholstery (SWC-110) in a range of 10 fabric and 6 leather choices, ensuring both style and comfort. To cater to your individual needs, the [Product Name] is available with or without armrests. Whether you prefer a streamlined look or desire the added support and relaxation that armrests provide, we've got you covered. Constructed with durability in mind, the [Product Name] features a 5-wheel plastic-coated aluminum base that ensures stability and mobility. The pneumatic chair adjustment mechanism allows for effortless raise and lower actions, making it convenient for you to find your ideal seating position. When it comes to dimensions, the [Product Name] strikes the perfect balance between compactness and comfort. With a width of 53 cm (20.87"), depth of 51 cm (20.08"), and height of 80 cm (31.50"), it offers a spacious and ergonomic seating experience. The seat height measures 44 cm (17.32") and the seat depth is 41 cm (16.14"), providing optimal support for extended periods of sitting. We understand the importance of personalizing your chair even further, which is why we offer a range of options to meet your specific requirements. Choose between soft or hard-floor casters, allowing you to seamlessly glide across different surfaces. Additionally, you can select from two seat foam densities: medium (1.8 lb/ft3) or high (2.8 lb/ft3), enabling you to customize the level of comfort you desire. The [Product Name] also offers the choice of armless or 8-position PU armrests, ensuring your seating experience is tailored to your liking. Crafted from premium materials, the [Product Name] exemplifies durability and quality. The shell base glider is constructed using cast aluminum with a modified nylon PA6/PA66 coating, boasting a shell thickness of 10 mm. The seat features HD36 foam, providing a supportive and cushioned surface that will stand the test of time. With pride, we can confidently say that the [Product Name] is made in Italy, renowned for its impeccable craftsmanship and attention to detail. This chair is not only a testament to Italian design excellence but also a guarantee of its superior quality. Elevate your workspace with the exquisite [Product Name]. Experience the perfect blend of style, comfort, and functionality. Shop now and embrace the elegance that this Italian masterpiece brings to your office or home environment.
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:
Use at most 50 words.
De esta forma nos devuelve algo mas conciso:
Introducing the [Product Name]: a versatile mid-century inspired office chair with customizable options. Choose from various shell colors, base finishes, and upholstery materials. The chair features a 5-wheel base, pneumatic chair adjustment, and comes with or without armrests. Made with high-quality materials in Italy.
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:
Your task is to help a marketing team create a description for a retail website of a product based on a technical fact sheet. Write a product description based on the information provided in the technical specifications delimited by triple backticks. The description is intended for furniture retailers, so should be technical in nature and focus on the materials the product is constructed from. At the end of the description, include every 7-character Product ID in the technical specification. After the description, include a table that gives the product's dimensions. The table should have two columns. In the first column include the name of the dimension. In the second column include the measurements in inches only. Give the table the title 'Product Dimensions'. Format everything as HTML that can be used in a website. Place the description in a <div> element. Technical specifications: ...
Y nos devuelve lo siguiente:
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.
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.
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.
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.
Vamos a subir un nivel más, hagamos que esto de información útil para pintar en el frontend.
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:
Translate the following text to French and Spanish and English pirate: \ ```I want to order a basketball```
Respuesta:
French: "Je veux commander un ballon de basket." Spanish: "Quiero ordenar un balón de baloncesto." English Pirate: "Arr, I be wantin' to order a basketball, matey!"
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:
import requests def chatGPT(prompt): api_key = '<API_KEY>' url = 'https://api.openai.com/v1/chat/completions' headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {api_key}' } data = { 'messages': [{'role': 'system', 'content': '...'}, {'role': 'user', 'content': prompt}], 'temperature': 0.8 } response = requests.post(url, json=data, headers=headers) ...
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 🙂