La incitación y la ingeniería rápida son fácilmente las habilidades más demandadas de 2023. El rápido crecimiento de los LLM de modelos de lenguaje grande solo ha visto el surgimiento de esta nueva disciplina de IA llamada ingeniería rápida. En este artículo, echemos un breve vistazo a lo que son las indicaciones, lo que hacen los ingenieros de indicaciones y también los diferentes elementos de una indicación con los que trabaja un ingeniero de indicaciones.
Prompt es simplemente la entrada que proporciona a un modelo "entrenado". Cuando digo modelo entrenado, los pesos del modelo son fijos o congelados y no van a cambiar durante el proceso de solicitud. Ahora puede preguntar en qué se diferencia de la inferencia porque hemos estado entrenando modelos, implementando y ejecutando la inferencia en modelos de aprendizaje automático. El punto es que con la inferencia, la entrada es fija. Nunca lo cambiamos y lo que sea que el modelo dé como resultado, lo aceptamos como resultado. Piense en la clasificación de imágenes como una tarea de ejemplo.
Sin embargo, con las indicaciones, no está restringido a una sola entrada. Puede ajustar la entrada según sus necesidades para mejorar el comportamiento del modelo. Usted es más de instruir al modelo con la intención de guiarlo hacia la respuesta correcta. Mientras acepta el modelo como dado cuando se trata de inferencia, con indicaciones, está estudiando las capacidades y limitaciones del modelo.
El arte de diseñar o diseñar estos insumos para que se adapten al problema que se tiene entre manos y sirvan mejor da nacimiento a una disciplina relativamente nueva llamada ingeniería rápida .
Antes de sumergirnos en la ingeniería de avisos, comprendamos la motivación o la necesidad de diseñar avisos con ejemplos. Digamos que quiero resumir un pasaje dado. Así que doy un gran pasaje de wikipedia como entrada y al final digo, " resuma el párrafo anterior ". Esta forma de proporcionar instrucciones simples en el indicador para obtener una respuesta del LLM se conoce como solicitud de instrucción .
Pasemos a un caso de matemáticas un poco más complicado y pidamos al LLM que multiplique dos números. Probemos el mensaje, " qué es 2343*1232". La respuesta que obtenemos es “ 23431232 ”, que obviamente no es la multiplicación de los dos números sino ambos juntos.
Ahora permítame modificar el mensaje y agregar una línea adicional en el mensaje para ser más específico, " cuánto es 2343 multiplicado por 1232. Dame la respuesta exacta después de la multiplicación ". Ahora obtenemos, " 2886576 " la respuesta correcta del LLM.
Entonces, claramente la calidad de la salida del modelo está determinada por la calidad de la indicación. Aquí es donde entra en juego la ingeniería rápida. El objetivo de un ingeniero de avisos es evaluar la calidad de la salida de un modelo e identificar áreas de mejora en el aviso para obtener mejores resultados. Por lo tanto, la ingeniería rápida es una disciplina altamente experimental que estudia las capacidades y limitaciones del LLM por ensayo y error con la intención tanto de comprender el LLM como de diseñar buenas indicaciones.
Para diseñar o diseñar las indicaciones, debemos comprender los diferentes elementos de una indicación. Un aviso puede contener uno o más de los siguientes elementos.
Las indicaciones pueden ser instrucciones en las que le pide al modelo que haga algo. En nuestro ejemplo, proporcionamos una gran cantidad de texto y le pedimos al modelo que lo resuma.
Las solicitudes pueden incluir opcionalmente un contexto para que el modelo le sirva mejor. Por ejemplo, si tengo preguntas sobre, digamos, sitios del patrimonio inglés, primero puedo proporcionar un contexto como, "English Heritage se preocupa por más de 400 monumentos, edificios y lugares históricos, desde sitios prehistóricos de fama mundial hasta grandes castillos medievales, desde fortalezas romanas ... " y luego hago mi pregunta como, "¿ cuál es el sitio patrimonial inglés más grande? ”
Como parte del mensaje, también puede indicar el formato en el que desea ver la salida. Y así, un indicador puede tener opcionalmente un indicador de salida . Por ejemplo, puede preguntar “ Quiero una lista de todos los sitios del patrimonio inglés en Inglaterra, su ubicación y especialidad . Quiero los resultados en formato tabular .”
O si desea una respuesta aún mejor, puede ingresar el formato deseado con esta sintaxis para indicar que desea ver columnas y filas en la salida:
Desired format:
Company names: <comma_separated_list_of_sites>
Sites: -||-Location: -||-Speciality: -||-
Un indicador puede incluir uno o más datos de entrada donde proporcionamos entradas de ejemplo para lo que se espera del modelo. En el caso de la clasificación de sentimientos, eche un vistazo a este aviso donde comenzamos a proporcionar ejemplos para mostrar nuestras intenciones y también especificamos que no queremos ninguna explicación en la respuesta:
Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident.
sentiment:
Esta forma de dar ejemplos en el aviso es similar a cómo explicamos a los humanos mostrando ejemplos. En el mundo de las indicaciones, se llama indicaciones de pocos disparos . Proporcionamos ejemplos de alta calidad que tienen tanto la entrada como la salida de la tarea. De esta manera, el modelo entiende lo que buscas y responde mucho mejor.
Ampliando nuestro ejemplo, si quiero saber el sentimiento de un pasaje, en lugar de simplemente preguntar "cuál es el sentimiento del pasaje", puedo proporcionar algunos ejemplos que cubren las posibles clases en la salida. En este caso positivo y negativo:
Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident.
sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.
sentiment: Positive
Text: Walking in that neighbourhood is quite dangerous.sentiment: Negative
Text: I love watching tennis all day long
sentiment:
Y luego puedo dejar que el modelo responda al último texto que ingresé. Por lo general, de 5 a 8 ejemplos deberían ser lo suficientemente buenos para las indicaciones de pocas tomas. Como ya puede adivinar, el inconveniente de este enfoque es que habrá demasiados tokens en su aviso. Si desea comenzar de manera simple, no necesita proporcionar ningún ejemplo, pero salte directamente al problema como este mensaje:
Text: I love watching tennis all day long
sentimet:
Esta es una indicación de disparo cero en la que no proporciona ningún ejemplo, pero aún espera que el modelo le responda correctamente. Por lo general, durante la ingeniería rápida, comienza con cero disparos, ya que es más simple y, en función de la respuesta, pasa a unos pocos disparos proporcionando ejemplos para obtener una mejor respuesta.
Si desea saltar a un tema especializado con el LLM, puede dirigirlo directamente para que sea un experto en un campo asignándole un rol y esto se denomina indicación de rol .
Por lo general, comenzaría el aviso con el rol de experto que debe desempeñar el LLM. Luego siga con las instrucciones de lo que debe hacer. Como un ejemplo simple, el rol podría ser pedirle al LLM que sea poeta y la instrucción podría ser simplemente escribir un poema sobre AI Bites.
O podría ser un poco más complicado pidiéndole al LLM que actúe como una terminal de Linux . Y proporcionando instrucciones específicas para copiar las primeras 10 líneas de un archivo en un archivo diferente y guardarlo. Incluso puede evitar que incluya cualquier otro texto en la salida mencionando explícitamente que no debe dar ninguna explicación.
You are a poet.
Write a poem about AI Bites
Act as a linux terminalI want you to provide the shell command to read the contents of a file named "input.txt".Copy the first 10 lines to a different file with the name "new.txt" and save it.Do not give any explanations.
Diferentes elementos posibles de un aviso que podemos ingresar a un LLM
Con todo lo dicho, si quieres que formalice la estructura de un mensaje, lo haría así. Un aviso generalmente comienza con un papel que el modelo debe desempeñar si su aviso es sobre un tema especializado. Luego puede tener cualquier instrucción que le gustaría dar al LLM. Además de eso, si desea proporcionar información adicional al LLM, también puede ir después de la instrucción.
Poco después de eso, puede proporcionar ejemplos de alta calidad si está haciendo sugerencias de pocos intentos. Estos ejemplos pueden ser seguidos por cualquier contexto que desee proporcionar al modelo. Si desea hacer una pregunta y hacer una tarea q y A, puede incluir sus preguntas al final
Ahora que hemos visto lo que constituye un aviso, es aún mejor si sabemos cómo formatear estos avisos. Por ejemplo, es mejor mencionar explícitamente el formato deseado y luego proporcionar el formato.
Extract locations from the below textDesired format:Cities: <comma_separated_list_of_cities>Countries: <comma_separated_list_of_countries>Input: Although the exact age of Aleppo in Syria is unknown,an ancient temple discovered in the city dates to around 3,000 BC Excavations in the1990s unearthed evidence of 5,000 years of civilization,dating Beirut, which is now Lebanon's capital, to around 3,000 BC
Del mismo modo, para la entrada o el contexto, es mejor decir entrada seguida de dos puntos y luego proporcionar su entrada.
Al proporcionar ejemplos, es mejor separarlos con un par de hashes como en este ejemplo.
Text: Today I saw a movie. It was amazing.sentiment: Positive
Text: I don't very good after seeing that incident.sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.sentiment: PositiveText: Walking in that neighbourhood is quite dangerous.sentiment: Negative
Si está proporcionando información, puede envolverla entre comillas como este ejemplo:
Text: """{text input here}"""
Luego hay algo llamado secuencia de parada que le indica al modelo que deje de producir texto en masa porque ha terminado con la salida. Puede elegir una secuencia de parada con cualquier símbolo de su elección. Pero la nueva línea parece ser la opción habitual aquí.
Text: "Banana",
Output: "yellow \\n"
Text: "Tomato",
Output: "red \\n"
Text: "Apple",
Output: "red \\n"
Si está trabajando con la generación de código, es mejor proporcionar comentarios de acuerdo con el idioma en el que desea ver el código de salida que se generará.
/*
Get the name of the use as input and print it
*/
# get the name of the user as input and print it
Si has leído hasta aquí, supongo que te encantó el artículo o tienes curiosidad por la IA. De todos modos, ¿por qué no mira nuestro video sobre ingeniería rápida ? Este es el primer video de la serie de videos sobre Prompting. Entonces, ¿por qué no suscribirse y estar atento?
Con toda esa introducción sobre indicaciones, ingeniería de indicaciones y sus tipos, solo hemos arañado la superficie aquí. Por ejemplo, ¿cómo podemos pedirle al LLM que razone sobre una situación dada? Hay formas más avanzadas de generar sugerencias, como la cadena de pensamiento, la autoconsistencia, el conocimiento general, etc. Echemos un vistazo a estas en las próximas publicaciones y videos. ¡Por favor manténgase al tanto!