La imagen de portada muestra la Macintosh 128K , una computadora personal presentada por Apple Inc. en 1984 que cambió la industria informática. Incorporó el icónico procesador Motorola 68000 de 32 bits, 128 KB de RAM y una modesta pantalla integrada en blanco y negro.
Además, integró sorprendentes inventos tecnológicos directamente de Xerox PARC : el mouse y la primera interfaz gráfica de usuario de su clase (abuela de las GUI actuales).
Con más de 70.000 unidades vendidas, Macintosh desempeñó un papel fundamental en el éxito de Apple . Como dato curioso, el evento de lanzamiento tuvo incluso más éxito que el propio Mac. Con un presupuesto de US$1,5 millones, el reconocido Ridley Scott dirigió un comercial de televisión en clara alusión a la icónica novela Mil novecientos ochenta y cuatro de Orwell que se convirtió en una obra maestra y un hito.
Casi cuarenta años después, sin un director de cine de renombre o un comercial de televisión, solo una aplicación web simple, OpenAI tomó un modelo de lenguaje aún experimental y lo abrió al mundo. El resto de la historia está en los titulares: ChatGPT alcanzó los 100 millones de usuarios activos mensuales el 23 de enero, solo dos meses después del lanzamiento, lo que la convierte en la aplicación para consumidores de más rápido crecimiento en la historia (más rápido que TikTok e Instagram).
Ahora la atención del mundo está en la industria de la IA, y con los avances que ocurren cada semana, este año promete ser un momento crucial para el campo. La mejor parte es que todavía estás a tiempo de unirte al campo de la IA y ser parte de este momento revolucionario en la historia humana.
Prompt Engineering 101 es una serie de publicaciones diseñada y escrita para revelar los principios y las técnicas de la ingeniería rápida, el arte de elaborar textos claros y efectivos, para generar modelos de lenguaje y obtener exactamente lo que está buscando. Esta serie cubre la ingeniería rápida para una amplia gama de modelos generativos, incluidos ChatGPT y otros modelos de texto a texto. También explora modelos de texto a imagen como Stable Diffusion o Midjourney, y profundiza en aspectos adicionales de LLM como alucinaciones, problemas de privacidad y seguridad y más...
Esta es la publicación n.º 2 de la serie , donde cubriremos técnicas avanzadas como la cadena de pensamiento y la autoconsistencia para dominar la elaboración rápida. ¡Espero que lo disfruten!
En la primera parte de esta serie sobre Ingeniería Rápida, profundizamos en las intuiciones de este arte y logramos una definición formal. Esencialmente, la ingeniería de avisos es un proceso iterativo de diseño y optimización de avisos claros y específicos para un modelo de lenguaje grande para garantizar que genera respuestas relevantes, precisas y coherentes.
A continuación, examinamos tres principios para elaborar indicaciones efectivas. Demostramos que los modelos producen mejores respuestas cuando se les dan instrucciones claras y específicas (el primer principio) y discutimos varias tácticas para lograrlo. Luego establecimos que los LLM se benefician del tiempo de cómputo y cubrimos algunas tácticas para obligar a los modelos a razonar antes de apresurarse a llegar a una conclusión (el segundo principio). En última instancia, investigamos el equilibrio entre especificidad y creatividad (el tercer principio), experimentando con los parámetros Temperature y Top P para explorar esta compensación.
Puede leer una definición más detallada de la ingeniería rápida y los fundamentos en el siguiente enlace (¡muchos ejemplos rápidos incluidos!).
Los LLM de escala masiva como GPT-3 o PaLM han exhibido una capacidad impresionante para la comprensión del lenguaje natural y han demostrado ser extraordinariamente efectivos en tareas como extraer información de textos y generar respuestas en un estilo humano consistente. Aun así, LLM demostró ser bastante robusto al realizar tareas desconocidas cuando se incluyen algunos ejemplos de disparos en el aviso. Esta técnica, popularizada porBrown et al. (2020) , probado para aumentar el rendimiento del modelo en varios puntos de referencia. Sin mencionar que ahorra dinero y tiempo al ajustar el modelo a un nuevo dominio específico.
Sin embargo, los estudios demostraron que modelos como estos disminuyen abruptamente su rendimiento en tareas comunes de razonamiento o pruebas de matemáticas. A pesar de la capacidad de citar el poema épico griego antiguo completo La Odisea, estos modelos luchan con problemas escolares fundamentales en lógica y matemáticas.
Entonces, ¿qué opciones tenemos? ¿Enviamos GPT-3 por una temporada a una escuela primaria? Afortunadamente, existe una alternativa más barata y menos embarazosa. ¿Te imaginas persuadir al director de tu escuela primaria local para que acepte ChatGPT a mitad de curso?
De manera similar a cómo los humanos abordan problemas complejos dividiéndolos en subproblemas más simples y siguiendo una línea de razonamiento lógico, podemos instruir a un modelo de lenguaje para que haga lo mismo. Este enfoque fue explorado por Wei J et al. en Chain-of-Thought Prompting provoca el razonamiento en modelos de lenguaje grande (2022) . Demostró resultados impresionantes en varios puntos de referencia, confirmando Chain-of-Thought (CoT) como un enfoque sólido para mejorar el rendimiento de LLM en tareas de razonamiento comunes.
En la imagen a continuación (tomada del artículo de Wei J), un modelo LLM se apresura a llegar a una conclusión incorrecta al calcular la cantidad de manzanas que quedan en una cafetería. Esto sucede incluso cuando se proporciona un problema de razonamiento similar usando pelotas de tenis como parte del contexto.
Sin embargo, cuando se incluye en el contexto (CoT) un proceso paso a paso para resolver el problema, el modelo puede llegar con precisión a una solución válida.
Este método se puede utilizar proporcionando ejemplos de razonamiento al modelo (pocos intentos) o ningún ejemplo (cero intentos). Veamos ambos sabores en la práctica con un ejemplo de aplicación real.
Imagine que estamos desarrollando una nueva aplicación de compras para Walmart, con la característica innovadora de comparar y seleccionar qué producto debe comprar en función de los precios y atributos de las alternativas de diferentes marcas.
Para ilustrar el problema, centrémonos en una lista reducida de todas las opciones en Jabón en Barra que tiene Walmart en sus tiendas. Como ves, tenemos packs desde 1 barra hasta 14 barras y gran variedad de marcas y precios (desde opciones baratas hasta opciones caras).
Productos 🛒
--- Dove Men+Care 8 bars pack $ 9.99 --- Dove Beauty Bar 4 bars pack $ 6.47 --- Dove Beauty Bar 1 bars $ 1.47 --- Dove Beauty Bar 14 bars pains $ 16 --- Yardley London Soap Bar (Pack of 10) $ 19.99 --- Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack $46.45
Para determinar qué opción es más conveniente, podemos calcular el precio por barra en cada alternativa (precio unitario). A continuación, seleccione la opción más económica. Siguiendo este razonamiento, descubrimos que Dove Beauty Bar 14 barras es la opción más económica con un precio unitario de $1,14 (-22% por barra que Dove Beauty Bar 1 barras ).
Razonamiento 🧠
- Dove Men+Care 8 bars pack: $1,24875 / unit - Dove Beauty Bar 4 bars pack: 1,6175 / unit - Dove Beauty Bar 1 bars: 1,47 / unit - Dove Beauty Bar 14 bars pains: $1,142857 per / unit - Yardley London Soap Bar (Pack of 10): 1,999 / unit - Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack: $9,29 / unit
Veamos si GPT-4 es lo suficientemente inteligente como para resolver este problema con un simple aviso. Además, con el espíritu de hacer ejemplos más limpios y fáciles de leer, separaremos las instrucciones del sistema del resto de la entrada usando literales de cadena de Python.
Aviso 💬
prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to identify which is the best option based on the price. <{products}> """
Respuesta 🤖
The best option based on price is Dove Beauty Bar 1 bars for $1.47.
El modelo eligió la opción más barata en función del precio total en lugar de calcular el precio unitario e identificar una oportunidad de ahorro comprando más barras. Vale la pena señalar cierta ambigüedad en la pregunta. ¿Qué significa la mejor opción? ¿Significa el más barato o el que maximiza los ahorros de dinero a largo plazo?
Reescribamos el mensaje indicándole al modelo que siga una cadena de pensamientos para resolver este problema agregando las palabras mágicas “razonando paso a paso” . Además, subraye explícitamente el objetivo de encontrar una oportunidad para ahorrar dinero.
Aviso 💬
prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to identify which presentation offers the best money-saving opportunity, reasoning step-by-step: <{products}> """
Respuesta 🤖
The first step is to compare price per unit for products of the same type (ie bars of soap). - Dove Men+Care 8 bars pack: $9.99 ÷ 8 bars = $1.25 per bar - Dove Beauty Bar 4 bars pack: $6.47 ÷ 4 bars = $1.62 per bar - Dove Beauty Bar 1 bars: $1.47 per bar - Dove Beauty Bar 14 bars pack: $16 ÷ 14 bars = $1.14 per bar - Yardley London Soap Bar (Pack of 10): $19.99 ÷ 10 bars = $1.99 per bar - Dr. Squatch All Natural Bar Soap for Men, 5 Bar Variety Pack: $46.45 ÷ 5 bars = $9.29 per bar Based on this analysis, the best money-saving opportunity is the Dove Beauty Bar 14 bars pack, which offers the lowest price per bar at $1.14.
Tenga en cuenta que con el nuevo indicador, el modelo da una respuesta correcta y, al mismo tiempo, tenemos un razonamiento paso a paso que es más fácil de depurar y encontrar posibles errores. Aún más, es bastante impresionante cómo agregar las palabras mágicas "razonando paso a paso" al mensaje crea una diferencia significativa en la salida del modelo. ¿Cuál es el truco?
El truco es obligar al modelo a generar una cadena de razonamiento paso a paso (cadena de pensamiento) en lugar de simplemente generar un valor numérico o booleano (resultado final). Al adoptar esta estrategia, inicialmente guiamos el modelo hacia resultados de razonamiento lógico, lo que permite que el modelo base sus respuestas en problemas similares encontrados durante el entrenamiento. En segundo lugar, ayudamos al modelo solicitándole que divida los problemas más grandes en otros más pequeños y manejables. Luego, se requiere que el modelo produzca resultados coherentes para subproblemas simples, como identificar precios y la cantidad de barras en cada paquete, calcular el precio unitario y, finalmente, realizar comparaciones. Además, debido a la forma en que los modelos de lenguaje autorregresivos como GPT-3 o GPT-4 generan secuencias token por token, donde cada nuevo token se genera en función de todos los tokens generados anteriormente, la cadena de pensamiento en sí tiene una fuerte influencia positiva. en la generación de un resultado final coherente.
En otras palabras, si, a través de un razonamiento válido, llegamos a un punto a medio camino de la solución correcta, nuestras posibilidades de llegar a esta solución son mayores que cuando empezamos a razonar sobre el problema.
Mientras que en Zero-Shot Chain-of-Thought dejamos el modelo libre para elaborar una cadena de razonamiento coherente y válida que conduzca a un resultado correcto, un segundo tipo llamado Few-Shot Chain-of-Thought proporciona algunos ejemplos de un problema. junto con una respuesta de razonamiento, como parte de la indicación. De esta forma, se impone al modelo una forma de razonamiento, limitando las posibles respuestas.
Volviendo a nuestra aplicación de Walmart, supongamos que queremos identificar qué presentación de gaseosa Coca Cola tiene la mejor relación precio por onza líquida. Para ello, incorporaremos al prompt una cadena de razonamiento similar, para encontrar las mejores presentaciones de las papas fritas Lay's.
Aviso 💬
prompt = f""" Q: Walmart has the following presentations for Lay's Classic Potato Chips: a 13 oz bag for $4.98, an 8 oz bag for $2.76, and a pack of x10 units 1 oz each for $6.82. Which presentation has the lowest price by ounce? A: Presentation 1 costs 4.98 so has a price of 4.98/13 = 0,383076923 per ounce. Presentation 2 costs 2.76 so has a price of 2.76/8 = 0,345 / per ounce. Presentation 3 costs 6.82 and includes 10 packages so has a price of 6.82/(1 x 10) = 0.682 per ounce. In conclusion, the cheapest presentation is the second one with a price of 0.345 per ounce. Q: Walmart has the following presentation for Coca-Cola Soda: an x24 pack of 12 fl oz cans for $11.86, an x12 pack of 12 fl oz cans for $7.46, and an x6 pack of 16.9 fl oz bottles for $4.98. Which presentation has the lowest price by fluid ounce? """
Te animo a que hagas tus propios cálculos y encuentres la mejor oferta. Encontrará que el modelo es correcto. ¡Sin dudas, definitivamente tendré la aplicación ChatGPT a mi lado en mi próximo viaje a la tienda!
Respuesta 🤖
A: The 24-pack contains a total of 24 x 12 = 288 fluid ounces and costs $11.86, so the price per fluid ounce is 11.86/288 = $0.041 per fluid ounce. The 12-pack contains a total of 12 x 12 = 144 fluid ounces and costs $7.46, so the price per fluid ounce is 7.46/144 = $0.052 per fluid ounce. The 6-pack contains a total of 6 x 16.9 = 101.4 fluid ounces and costs $4.98, so the price per fluid ounce is 4.98/101.4 = $0.049 per fluid ounce. Therefore, the 24-pack has the lowest price per fluid ounce.
Por increíble que parezca, este sencillo truco le permite al modelo inferir una cadena de razonamiento similar y lograr resultados aún más precisos que con la técnica anterior. Además, tenga en cuenta que no estamos codificando un procedimiento paso a paso para resolver el problema. Por lo tanto, este enfoque debería ser, en teoría, lo suficientemente flexible para resolver cualquier desafío similar, basándose únicamente en las habilidades de razonamiento del modelo.
Ninguna regla nos obliga a resolver un problema con un solo aviso. De hecho, cuanta más lógica y complejidad pongamos en un solo mensaje, más posibilidades de confundir el modelo. El encadenamiento de avisos es una estrategia simple pero efectiva para abordar problemas complejos. La idea principal es dividir el problema en tareas más pequeñas, cada una resuelta por un mensaje específico. Al encadenar cada solicitud y usar el resultado de la anterior como entrada para la siguiente, se logra el resultado final.
Con esto en mente, volvamos a nuestra aplicación Walmart e implementemos un flujo de usuario complejo como una cadena de avisos. Hasta ahora hemos comparado los precios de varios productos, como jabones de tocador, refrigerios y refrescos. Ahora, nos disponemos a explorar un producto que, personalmente, me da dolor de cabeza cada vez que voy al supermercado. Calcular su precio por unidad parece ciencia espacial: ¡papel higiénico! 🤣🤣🤣
A continuación se muestra una lista reducida de las opciones que tiene Walmart en Papel Higiénico .
Productos 🛒
--- Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls Each Mega Roll has 255 3-ply sheets. $ 6.93 --- Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls. 18 mega toilet paper rolls, each mega roll has 295 2-ply sheets $ 19.82 --- Angel Soft Toilet Paper, 36 Mega Rolls. With 320 2-ply sheets on every Mega Roll. $ 24.12 --- New Angel Soft Toilet Paper, 36 Mega Rolls. With 484 2-ply sheets Per Roll $ 45.44 --- Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll. With Scott 1,000 Toilet Paper, you get 12 rolls of 1000 1-ply sheets.
El problema a resolver es el mismo en el que nos hemos centrado durante este post: determinar qué presentación de producto es la más rentable. Además, deseamos mejorar las capacidades de la aplicación generando opciones adicionales, por ejemplo, considerando compradores con espacio de almacenamiento limitado que no pueden comprar grandes cantidades, así como aquellos que requieren un mayor volumen de este producto. Además, sería genial poner las recomendaciones de productos como parte de una recomendación personalizada dada por un asistente de compras virtual impulsado por IA.
En lugar de usar un solo aviso para resolver toda la tarea, el objetivo es dividirla en varias subtareas con avisos específicos para cada una y encadenar los resultados. Entonces, comencemos por diseñar un indicador para calcular los precios de cada producto por unidad de medida, para que podamos compararlos directamente.
Para el primer paso o tarea de la cadena, utilizaremos la Cadena de pensamiento Zero-Shot. Esto le indicará al modelo que devuelva los precios por unidad de medida de cada producto en la entrada, razonando paso a paso. La salida generada aquí servirá más tarde como entrada para el siguiente aviso. Por este motivo, es fundamental solicitar un formato de salida estructurado. En este caso, una lista JSON será suficiente.
Aviso 💬
prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to calculate the price by unit of measurement for each presentation, reasoning step-by-step. Finally, return a list in JSON format with the title of the product, original price and unit price using the title, total_price and unit_price keys respectively. <{products}> """
Respuesta 🤖
Let's start by breaking down the cost for each roll and then calculating the cost per unit, in this case, the cost per sheet. For the Quilted Northern Ultra Plush Toilet Paper: * The product costs $6.93 and contains 6 mega rolls. Therefore, each mega roll costs $6.93 / 6 = $1.155. * Each mega roll contains 255 sheets. Therefore, the cost per sheet is $1.155 / 255 = $0.00453 approximately. For the Quilted Northern Ultra Soft & Strong Toilet Paper: * The product costs $19.82 and contains 18 mega rolls. Therefore, each mega roll costs $19.82 / 18 = $1.1011 approximately. * Each mega roll contains 295 sheets. Therefore, the cost per sheet is $1.1011 / 295 = $0.00373 approximately. For the Angel Soft Toilet Paper: * The product costs $24.12 and contains 36 mega rolls. Therefore, each mega roll costs $24.12 / 36 = $0.6694 approximately. * Each mega roll contains 320 sheets. Therefore, the cost per sheet is $0.6694 / 320 = $0.00209 approximately. For the New Angel Soft Toilet Paper: * The product costs $45.44 and contains 36 mega rolls. Therefore, each mega roll costs $45.44 / 36 = $1.2622 approximately. * Each mega roll contains 484 sheets. Therefore, the cost per sheet is $1.2622 / 484 = $0.00261 approximately. For the Scott 1,000 Toilet Paper: * The product costs $45.44 and contains 12 rolls. Therefore, each roll costs $45.44 / 12 = $3.7867 approximately. * Each roll contains 1000 sheets. Therefore, the cost per sheet is $3.7867 / 1000 = $0.00379 approximately. Now, let's format this into JSON: [ { "title": "Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls", "total_price": "$6.93", "unit_price": "$0.00453" }, { "title": "Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls", "total_price": "$19.82", "unit_price": "$0.00373" }, { "title": "Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$24.12", "unit_price": "$0.00209" }, { "title": "New Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$45.44", "unit_price": "$0.00261" }, { "title": "Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll", "total_price": "$45.44", "unit_price": "$0.00379" } ] This JSON data provides each product's title, total price, and the calculated unit price.
Os animo a hacer el ejercicio de calcular manualmente los precios por hoja de cada una de las presentaciones del papel higiénico. Si lo hace, confirmará que la salida del modelo es correcta. Sin embargo, la salida del modelo también contiene el proceso de razonamiento (ya que le pedimos al modelo que razone paso a paso). En otras palabras, antes de continuar necesitamos extraer la lista JSON del resto del texto. ¡Afortunadamente para nosotros, podemos usar un LLM para lograr esto!
Escribamos un aviso simple para realizar esta extracción de texto. Además, indiquemos al modelo que ordene las opciones por precio unitario, desde la más barata hasta la más cara. Este paso será extremadamente útil más adelante en la cadena de avisos.
Aviso 💬
prompt = f""" You will be provided with a text delimited by <>. This text contains a JSON list with information about Walmart products. Your task is to extract that list and return only this list in JSON format. Each JSON list item contains the key "unit_price", which is a number. Before returning the list, sort it in ascending order by the key "unit_price". Here is an example of a list item: { "title": "Toilet paper", "total_price": "$2.99", "unit_price": "$0.0045" } Remember to return the list without any additional text or explanation, just the list in JSON format. <{response_prompt_1}> """
Respuesta 🤖
[ { "title": "Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$24.12", "unit_price": "$0.00209" }, { "title": "New Angel Soft Toilet Paper, 36 Mega Rolls", "total_price": "$45.44", "unit_price": "$0.00261" }, { "title": "Quilted Northern Ultra Soft & Strong Toilet Paper, 18 Mega Rolls", "total_price": "$19.82", "unit_price": "$0.00373" }, { "title": "Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll", "total_price": "$45.44", "unit_price": "$0.00379" }, { "title": "Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls", "total_price": "$6.93", "unit_price": "$0.00453" } ]
Con las alternativas de productos presentadas como una lista JSON, se convierte en una tarea fácil para un modelo como GPT-4 no solo identificar la opción más rentable, sino también ofrecer información valiosa para los compradores que, por ejemplo, solo pueden necesitar unos pocos unidades. Vamos a crear un aviso para lograr esto. Aún más, recuerda que estamos desarrollando un asistente de compras virtual impulsado por IA.
En consecuencia, también podemos utilizar LLM para poner las alternativas de productos como un solo mensaje de texto con un tono específico y amigable.
Aviso 💬
prompt = f""" Your name is Wally and you are an artificial shopping assistant at Walmart stores. You will be provided with a list of various product presentations in a JSON list format, delimited by <>. Each product presentation is accompanied by its total_price, unit_price, and a title that contains extra information about the product presentation. Additionally, the list is sorted by unit_price ascending. Your task is to generate a short, straight-to-the-point buy recommendation, mentioning the best money-saving opportunity based on the JSON products list. Also include the best, smallest and largest options to give the user options based on the size of the product. Use a single paragraph to include all three recommendations. First present yourself in a friendly way, start mentioning the best option of all, then the smallest option, and finally the largest option. Say goodbye inventing something that includes the Walmart slogan "Save Money. Live Better". <{response_prompt_2}> """
Respuesta 🤖
Hello there! I'm Wally, your friendly shopping assistant at Walmart. Let's dive into your toilet paper options! Looking at the overall value, your best option is the "Angel Soft Toilet Paper, 36 Mega Rolls" priced at $24.12 with a unit price of $0.00209, giving you the most bang for your buck. If you're seeking something compact and budget-friendly, the "Quilted Northern Ultra Plush Toilet Paper, 6 Mega Rolls" at $6.93 would be your go-to pick. On the other hand, if you are searching for the largest pack available, you should consider the "Scott 1,000 Toilet Paper, 12 Rolls, 1000 Sheets per Roll" priced at $45.44, offering a vast number of sheets for your needs. Remember, every cent counts at Walmart because our goal is to help you "Save Money. Live Better". Happy shopping!
En mi opinión personal, el resultado del modelo es bastante impresionante si se tiene en cuenta que se generó a partir de una cadena de solo tres indicaciones simples. Por favor, no pase por alto la guinda del pastel: instruí específicamente a la modelo para que incorporara el eslogan de Walmart en su respuesta.
Para concluir esta sección, el encadenamiento de indicaciones es una técnica extremadamente poderosa que saca a relucir el verdadero potencial de los LLM al integrar el resultado de varias tareas o subproblemas que también resuelven los LLM. Recuerde, no existe una regla general para dividir un mensaje complejo en varios mensajes más pequeños. Tendrá que encontrar el equilibrio adecuado para su problema específico.
Hay algunos escenarios en los que LLM no puede generar respuestas consistentes, incluso usando CoT y para el mismo aviso, es posible que el modelo se confunda entre ejecuciones y devuelva una respuesta inconsistente. En este contexto, la autoconsistencia es un enfoque simple pero efectivo, que consiste simplemente en preguntar al modelo con el mismo mensaje varias veces y tomar el resultado mayoritario como respuesta final. La combinación de esta técnica con CoT ayuda a obtener resultados más robustos y predecibles.
Por ejemplo, consideremos el ejemplo de las manzanas en la cafetería presentado en el documento Chain-of-Thought. En lugar de simplemente llamar al modelo una vez con el indicador de entrada, podemos llamar al modelo tres veces y tomar la respuesta mayoritaria como la respuesta final (ver imagen a continuación).
Al adoptar la respuesta de la mayoría, la probabilidad de que el modelo devuelva una salida incorrecta durante una ejecución específica se reduce significativamente. El efecto de esta técnica se potencia al aumentar la repetición. Sin embargo, la ejecución repetida del aviso indica una mayor cantidad de llamadas al modelo, lo que lleva a un mayor consumo de hardware. En el caso de modelos de lenguajes grandes como GPT-3, esto también se traduce en más llamadas a la API y, en consecuencia, más dinero gastado, todo para generar una única respuesta.
Por este motivo, a la hora de diseñar sistemas que utilicen LLM, es fundamental equilibrar la robustez y el ahorro de llamadas al modelo, utilizando esta técnica solo cuando sea estrictamente necesario. Por ejemplo, cuando se necesita un alto nivel de robustez en la respuesta del sistema.
Para ilustrar el potencial de esta técnica, volvamos a nuestra aplicación de Walmart para analizar otro producto en particular: los huevos .
Productos 🛒
--- Great Value Cage Free Large AA White Eggs, 6 Count $ 1.07 --- Happy Egg Organic Free Range Large Brown Eggs, 12 Count $ 5.16 --- Great Value Cage Free Large AA White Eggs, 12 Count $ 1.86 --- Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count $ 2.69 --- Marketside Large Cage Free Brown Eggs, 12 Count $ 2.67
Incluyamos algunas preferencias del usuario en el indicador para hacer que el problema sea un poco más desafiante para el modelo.
preferences = f""" - Only consider grade AA eggs - Only consider eggs produced on cage-free farms - The client needs a minimum of 6 eggs and a maximum of 12 """
Con modelos potentes como GPT-3/GPT-4, un indicador de CoT Zero-Shot como el que se muestra a continuación debería ser suficiente para obtener buenos resultados (recuerde las pruebas anteriores). ¡Intentemos!
Aviso 💬
prompt = f""" You will be provided with a list of various product presentations delimited by <>. Each product presentation is accompanied by its price. Your task is to identify which presentation offers the best money-saving opportunity, reasoning step-by-step: Also, consider the following user preferences to select the most suitable ooption: {preferences} <{products}> """
Respuestas 🤖
(1) Considering the user preferences, we first filter the list of eggs for only grade AA and cage-free options, which gives us the following choices: * Great Value Cage Free Large AA White Eggs, 6 Count: $1.07 * Great Value Cage Free Large AA White Eggs, 12 Count: $1.86 * Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count: $2.69 * The Happy Egg and Marketside options are discarded because their grade is not specified. Next, we consider the amount of eggs. The client needs a minimum of 6 eggs and a maximum of 12. Therefore, we can discard the Eggland's Best 18 count option, as it exceeds the maximum required amount. Now, we compare the remaining two options: * Great Value Cage Free Large AA White Eggs, 6 Count: $1.07 * Great Value Cage Free Large AA White Eggs, 12 Count: $1.86 * Although the 6-count pack fits the minimum requirement, the 12-count pack offers a better price per egg. For the 6-count pack, each egg costs $1.07 / 6 = ~$0.178. For the 12-count pack, each egg costs $1.86 / 12 = ~$0.155. Therefore, considering both the user's preferences and the cost per egg, the "Great Value Cage Free Large AA White Eggs, 12 Count" for $1.86 is the best money-saving opportunity. (2) Let's go through each product one by one, considering the user's preferences: 1. Great Value Cage Free Large AA White Eggs, 6 Count - $1.07 These are grade AA eggs from a cage-free farm, so they meet the user's criteria. The price per egg is $1.07/6 = $0.178. 2. Happy Egg Organic Free Range Large Brown Eggs, 12 Count - $5.16 These are not specified as grade AA, so we can't consider them based on user's preferences. 3. Great Value Cage Free Large AA White Eggs, 12 Count - $1.86 These are grade AA eggs from a cage-free farm and the quantity is within the range the user wants. The price per egg is $1.86/12 = $0.155. 4. Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count - $2.69 These are grade AA eggs from a cage-free farm. However, the quantity is more than the user wants (18), so we can't consider this option. 5. Marketside Large Cage Free Brown Eggs, 12 Count - $2.67 These are not specified as grade AA, so we can't consider them based on user's preferences. Based on the preferences, we are only left with two choices: Great Value Cage Free Large AA White Eggs, either 6 Count or 12 Count. However, the 12 Count package offers the best money-saving opportunity, because it has a lower cost per egg ($0.155 per egg) than the 6 Count package ($0.178 per egg). Additionally, the 12 Count package still falls within the user's desired quantity range of 6 to 12 eggs. Therefore, the best option for the user is the "Great Value Cage Free Large AA White Eggs, 12 Count" at $1.86. (3) Given the user's preferences, we need to find the product which: 1. Contains only grade AA eggs 2. Is produced on cage-free farms 3. Offers a minimum of 6 eggs and a maximum of 12 Let's consider each product: 1. "Great Value Cage Free Large AA White Eggs, 6 Count" - $ 1.07. This option matches all the user's preferences and costs $1.07 for 6 eggs, which is approximately $0.178 per egg. 2. "Happy Egg Organic Free Range Large Brown Eggs, 12 Count" - $ 5.16. This product does not specify the grade of the eggs, so we will disregard this option. 3. "Great Value Cage Free Large AA White Eggs, 12 Count" - $ 1.86. This option also matches the user's preferences and costs $1.86 for 12 eggs, which is approximately $0.155 per egg. 4. "Eggland's Best Farm Fresh Cage Free Large White Grade AA Eggs, 18 Count" - $ 2.69. While this product matches the egg grade and production method preferences, it contains more than the maximum amount of eggs requested by the user (18 instead of 12). Therefore, we disregard this option. 5. "Marketside Large Cage Free Brown Eggs, 12 Count" - $ 2.67. This product does not specify the grade of the eggs, so we will disregard this option. Therefore, the product that provides the best money-saving opportunity while meeting the user's preferences is "Great Value Cage Free Large AA White Eggs, 12 Count" for $1.86. This option offers more eggs for a lower cost per egg compared to the other suitable option.
A pesar de que el modelo no produce resultados incorrectos en ninguna de sus ejecuciones (con un razonamiento preciso en las tres instancias), este ejemplo enfatiza el potencial de variabilidad en las respuestas de un LLM. Además, subraya el valor de la autoconsistencia en la reducción de dicha variabilidad.
Más en general, se ha demostrado que la autoconsistencia mejora los resultados en tareas de razonamiento aritmético, de sentido común y simbólico. Incluso cuando se descubrió que el CoT regular no era efectivo, la autoconsistencia todavía pudo mejorar los resultados (consulte los resultados experimentales ).
Para concluir esta técnica avanzada, te animo a que la pruebes tú mismo, por ejemplo, agregando más productos a la lista o quitando el “razonamiento paso a paso” para darle al modelo más espacio para cometer errores. Además, intente aplicar la autoconsistencia a los problemas de la vida real en los que está trabajando.
Al alinear los modelos de lenguaje para seguir las instrucciones , un proceso típicamente asociado con los modelos InstructGPT (de los cuales ChatGPT es un ejemplo), un enfoque novedoso conocido como Indicación de roles ha cobrado impulso entre los usuarios. Este método implica instruir al modelo para que asuma la personalidad de una entidad conocida para ejecutar una tarea específica.
Las posibilidades de tales entidades son prácticamente ilimitadas: pueden ir desde actores famosos como Tom Cruise o Emma Watson, hasta políticos como Barack Obama o José Mujica, o incluso personajes de ficción como Sherlock Holmes. Esta técnica nos permite generar respuestas con un tono único, emulando el estilo de hablar de un personaje y fomentando una experiencia de usuario más atractiva.
Además, podemos aprovechar la experiencia simulada y el conocimiento de un especialista. Por ejemplo, pídale al modelo que complete una tarea específica, actuando como físico nuclear, director de marketing, director ejecutivo, periodista, etc.
Para ejemplificar este tipo de sugerencias, solicitaremos a GPT-4 que personalice una sugerencia de compra en el tono único de Sheldon Cooper (el famoso personaje del programa The Big Bang Theory), utilizando como producto los huevos blancos grandes AA sin jaula Great Value encontramos como la mejor opción para comprar, anteriormente en esta publicación.
Producto 🛒
Great Value Cage Free Large AA White Eggs, 12 Count. Price $1.86. This option offers more eggs for a lower cost per egg compared to the other suitable option.
Aviso 💬
prompt = f""" You are a shopping assistant with the personality of the iconic character Sheldon Cooper from The Big Bang Theory show. Your task is to act like Sheldon, speak like Sheldon and think like Sheldon. You will be provided with a product description delimited by <> and your goal is to return a personalized shopping recommendation based on that product acting like Sheldon Cooper. Be concise, friendly and present yourself as Dr. Sheldon Cooper. <{product}> """
Respuesta 🤖
Hello, I'm Dr. Sheldon Cooper. Given your product choice, I do appreciate the value for money that these Great Value Cage Free Large AA White Eggs offer. The cost per egg is an important mathematical factor to consider, and indeed, these eggs would be a sensible choice for a budget-conscious, protein-seeking individual like Leonard, who often falls victim to my high-protein breakfast egg burritos. However, it's also worth noting that cage-free doesn't mean these chickens lead a leisurely life. It's a common misconception, just like thinking the Doppler effect would be an acceptable Halloween costume. Ideally, for the truly ethical choice, you'd opt for pasture-raised eggs. And finally, from a culinary perspective, I would like to point out that while eggs do serve as an excellent source of protein, they are also potential carriers of Salmonella. But you probably knew that. In conclusion, despite their cost-effectiveness, I recommend careful handling and thorough cooking of these Great Value Cage Free Large AA White Eggs. Sheldon Cooper out.
Como se puede ver en la respuesta obtenida, esta técnica se puede utilizar para obtener resultados interesantes y devolver respuestas únicas. Tenga en cuenta, sin embargo, que estamos delegando el razonamiento al modelo y confiando completamente en la comprensión del modelo de la entidad que le estamos pidiendo que juegue. Por esta razón, es crucial asegurarse primero de que el modelo tiene una comprensión correcta del rol o entidad que le estamos pidiendo que asuma. De lo contrario, el resultado puede ser diferente de lo que esperamos.
Un buen contraejemplo sería pedirle al modelo que simule una supercomputadora que supere los niveles de inteligencia humana. Dado que tal entidad no existe actualmente, el modelo no habría sido entrenado en las respuestas de este tipo de entidad. En consecuencia, no puede dar una respuesta que cumpla con esta condición.
Aviso 💬
You are an artificial superintelligence, much more evolved and intelligent than human beings. You know everything about the universe and you have the answer to all the mysteries of the universe. Your task is to tell me how to write a post for Hackernoon that became a huge success.
Desafortunadamente, ni ChatGPT ni GPT-4 tienen la respuesta todavía...
De manera similar a cómo se puede perder el significado de una oración o una palabra durante la traducción (a menudo denominado 'perdido en la traducción'), los LLM pueden perder significado durante el proceso de tokenización. Mientras que los humanos perciben palabras individuales en un texto, los LLM interpretan tokens. Estos tokens rara vez corresponden a palabras individuales. De hecho, los modelos avanzados como ChatGPT o GPT-4 utilizan el tiktoken Tokenizer, cuyo objetivo es permitir que el modelo reconozca subpalabras comunes en inglés. Esto generalmente da como resultado que una palabra esté representada por más de un token. Aunque este tokenizador es potente y más rápido que los tokenizadores de código abierto comparables, puede generar resultados no deseados para palabras raras en inglés o palabras no inglesas.
Para ilustrar esto, usemos OpenAI Tokenizer , para jugar con diferentes oraciones y observar el resultado de la tokenización en cada caso:
"I want to buy shoes" = "I/want/to/buy/shoes" "I think, therefore I am" = "I/think/,/therefore/I/am" "You should visit Punta del Este" = "You/should/visit/P/unta/del/E/ste"
Como se observa, el Tokenizer separa palabras con éxito en los dos primeros ejemplos, pero tiene problemas con el nombre de la turística y hermosa ciudad de Punta del Este ubicada en Uruguay. Esto es digno de mención, ya que ocasionalmente puede conducir a errores en tareas relativamente simples. Sigamos experimentando para ver esto con más detalle.
Textos
USA Santa Claus Uruguay
Texto tokenizado 🪄
USA Santa/Claus U/rug/uay
Aviso 💬
prompt = f""" You will be provided with a list of texts delimited by <>. Your task is to reverse those texts. <{texts}> """
Respuesta 🤖
Here are the reversed versions of the texts you provided: < ASU sualC atnaS yaguUr
Como se demostró, el modelo invierte incorrectamente la palabra Uruguay, que es una palabra menos común para el tokenizador. Afortunadamente, existe una solución sencilla para solucionar este problema. Para situaciones como esta, podemos preprocesar el texto separándolo en caracteres individuales usando un delimitador como "-". De esta forma, cuando el modelo tokeniza el texto, percibe caracteres individuales en lugar de subpalabras. Esta modificación podría ayudar al modelo a ejecutar la tarea con mejores resultados. ¡Hagamos un intento!
Aviso 💬
prompt = f""" You will be provided with a list of texts delimited by <>. Your task is to reverse those texts. < USA Santa Claus Uruguay > """
Respuesta 🤖
Sure, here are the reversed versions of the texts you provided: < ASU seikooC sualC atnaS yaugurU
Usando la solución presentada, el modelo puede invertir todas las palabras correctamente. Siempre puede emplear esta solución alternativa cuando observe una caída en el rendimiento del modelo para las entradas que contienen palabras raras. No incluí los pasos de procesamiento previo y posterior en este tutorial. Hay muchos métodos de cadena en cualquier lenguaje de programación que se pueden utilizar para esta parte del trabajo.
Nuestro viaje de Ingeniería Rápida no termina en CoT+Self-Consistency (a pesar del excelente desempeño). Por suerte para este escritor, hay muchos más aspectos de la ingeniería rápida que aprender antes de dominar este arte. A continuación, exploro algunos factores complementarios que se deben tener en cuenta al escribir instrucciones y presento tres herramientas útiles que puede usar para escribir instrucciones efectivas.
1- Elige el delimitador adecuado
A los ojos de un LLM, no todos los delimitadores son iguales. Como regla general, es conveniente utilizar separadores que, además de ser caracteres poco frecuentes de encontrar en el resto de la entrada (evitando confundir el modelo con el prompt), estén representados por un solo token. De esta forma reducimos el consumo de tokens en el prompt, ahorrando recursos de hardware, dinero y permitiéndonos usar ese token para otra cosa más importante.
Puede usar OpenAI Tokenizer para verificar dos veces si sus delimitadores están representados por un solo token.
“““
→ 1 token```
→ 2 Tokens---
→ 1 Ficha###
→ 1 ficha< >
→ 2 fichas<tag></tag>
→ 5 tokens
2- Preprocesar sus entradas
En lugar de pasar la entrada del usuario al modelo como parte de la solicitud, se recomienda procesar previamente esta entrada mediante métodos de cadena, expresiones regulares o herramientas similares. El objetivo es eliminar espacios innecesarios, signos de puntuación, etiquetas HTML y otros elementos superfluos que podrían dificultar la comprensión del modelo o la realización de tareas. Este enfoque no solo economiza tokens, lo que reduce los costos en modelos como ChatGPT, que cobran por token, sino que también ayuda a identificar inyecciones rápidas, problemas de privacidad y problemas relacionados.
3- Inmediato Perfecto
Puede crear indicaciones efectivas desde cero siguiendo principios y técnicas específicas (como las que se presentan en esta serie de publicaciones). Sin embargo, un enfoque aún mejor es utilizar un optimizador rápido como PromptPerfect . Esta herramienta aprovecha la IA para mejorar sus indicaciones personalizadas en función del modelo de destino específico que está utilizando (GPT-3, GPT-4, Midjourney, etc.).
Si no puede permitirse el lujo de incorporar estas herramientas como parte del diseño de su aplicación, considere al menos explorarlas. Se pueden aprender varios consejos de los ejemplos optimizados disponibles en la documentación.
4- Plantillas de solicitud
En lugar de reinventar la rueda, lea las plantillas de avisos compartidas por personas en Internet. Si ninguno de los prompts se ajusta a tus necesidades, al menos puedes tomar ideas. Aquí hay dos sitios desde los que puede extraer varias plantillas de mensajes para ChatGPT, Midjourney y los modelos más populares:
➡️ Más de 500 plantillas de avisos de ChatGPT
➡️ Impresionantes indicaciones de ChatGPT
5- Zona de juegos OpenAI
OpenAI ofrece una poderosa herramienta llamada Playground . Esta aplicación web interactiva le permite experimentar con varios modelos disponibles a través de la API oficial, lo que le permite modificar parámetros específicos y modificar comportamientos predeterminados. Playground es un excelente punto de partida para sus experimentos y no requiere escribir una sola línea de código.
Un consejo final, escribir buenos avisos o tener conversaciones interesantes con LLM puede ser tan importante como compartir con otros en la comunidad. No lo olvides y cuando compartas tu experiencia, prueba a usar sharegpt para hacerlo con un solo clic.
En la segunda publicación de la serie Prompt Engineering 101, presentamos dos poderosas técnicas: Cadena de pensamiento y autoconsistencia. Estrategias que combinadas producen resultados sobresalientes. Usando ejemplos reales, exploramos ambas variantes de Chain-of-Thought: Zero-Shot y Few-Shot, experimentando de primera mano el potencial de estas técnicas. A continuación, experimentamos con cadenas de avisos para construir canalizaciones más complejas y sólidas. Finalmente, profundizamos en otras facetas de la ingeniería de avisos, resaltando los aspectos relevantes a considerar cuando se elaboran avisos y, finalmente, mencionamos algunas herramientas útiles.
Puede encontrar todos los ejemplos, junto con indicaciones, respuestas y secuencias de comandos de Python para interactuar directamente con la API de OpenAI y probar sus indicaciones aquí .
En la siguiente publicación, veremos técnicas para probar y validar el comportamiento de los sistemas construidos sobre LLM como ChatGPT o modelos similares.
Esta serie de publicaciones está inspirada en los destacados cursos de Andrew Ng e Isabella Fulford y el excelente LLM Bootcamp proporcionado por Charles Frye , Sergey Karayev y Josh Tobin (ambos cursos se mencionan en la sección de recursos). Después de completar estos programas de aprendizaje, estaba ansioso por profundizar, explorando artículos académicos y tutoriales. Esto me llevó a un viaje a través de Internet, distinguiendo los recursos de alta calidad de los basura. Incluso pedí dos libros de Amazon sobre ingeniería inmediata y IA generativa para obras de arte, que resultaron estar mal escritos y una completa pérdida de dinero. Después de varias semanas de intenso trabajo, dolores de cabeza y tazas de café, me encontré con una colección de recursos de gran valor sobre Prompt Engineering. Con el espíritu de ayudar a otros en su viaje de ingeniería rápida, decidí compartir mi experiencia escribiendo esta serie de publicaciones.
Si disfrutaste este artículo, considera seguirme en mis redes sociales para apoyar mi trabajo. Además, ¡serás notificado cada vez que publique contenido nuevo!
🐦 Gorjeo | 👨💼 LinkedIn | 💻 Más historias
Prompt Engineering 101: Prompts, Outputs y Notebooks con código
ChatGPT Prompt Ingeniería para desarrolladores por DeepLearning.ai
Creación de sistemas con la API ChatGPT de DeepLearning.ai
Guía rápida de ingeniería
Curso Introductorio de Incitación