Principios básicos de la ingeniería de indicaciones en la IA generativa

Principios básicos de la IA generativa

Introducción

En este artículo, discutiremos la Ingeniería de Prompt en ChatGPT en la Inteligencia Artificial Generativa. ChatGPT ha sido uno de los temas más discutidos entre los técnicos y no tan técnicos desde noviembre de 2022. Es un tipo de conversación inteligente que marca el comienzo de una era de conversaciones inteligentes. Se puede preguntar casi cualquier cosa relacionada con ciencia, arte, comercio, deportes, etc., y obtener respuestas a esas preguntas.

Este artículo fue publicado como parte del Data Science Blogathon.

ChatGPT

Chat Generative Pre-trained Transformer, comúnmente conocido como ChatGPT, representa el acrónimo de Chat Generative Pre-trained Transformer, lo que significa su papel en la generación de nuevo texto basado en las indicaciones del usuario. Este marco de conversación implica entrenamiento en extensos conjuntos de datos para crear contenido original. OpenAI de Sam Altman es reconocido por desarrollar uno de los modelos de lenguaje más sólidos, como se ejemplifica en ChatGPT. Esta herramienta notable permite la ejecución sin esfuerzo de tareas de generación de texto, traducción y resumen. Es la tercera versión de GPT. No discutiremos la interfaz, el modus operandi, etc., de ChatGPT, ya que la mayoría de nosotros sabe cómo usar un chatbot. Sin embargo, discutiremos los LLM.

¿Qué es la Ingeniería de Prompt?

La Ingeniería de Prompt en la Inteligencia Artificial Generativa es una herramienta avanzada que aprovecha las capacidades de los modelos de lenguaje de IA. Optimiza el rendimiento de los modelos de lenguaje al desarrollar indicaciones tácticas, y se le dan instrucciones claras y específicas al modelo. Una ilustración de dar instrucciones es la siguiente.

Dar instrucciones explícitas a los modelos es beneficioso ya que esto haría que las respuestas sean precisamente precisas. Ejemplo: ¿Cuánto es 99*555? “Asegúrate de que tu respuesta sea precisa” es mejor que “¿Cuánto es 99*555?”

Modelos de Lenguaje Grandes (LLMs)

LLM es un algoritmo basado en IA que aplica técnicas de redes neuronales a vastas cantidades de datos para generar textos similares a los humanos utilizando técnicas de aprendizaje auto-supervisado. Chat GPT de OpenAI y BERT de Google son algunos ejemplos de LLM. Hay dos tipos de LLMs.

1. Base LLM: Predice la siguiente palabra en función de los datos de entrenamiento de texto. Ejemplo: Érase una vez, un rey vivía en un palacio con su reina y príncipe. Dime, ¿cuál es la capital de Francia? ¿Cuál es la ciudad más grande de Francia? ¿Cuál es la población de Francia? El Base LLM predice las líneas en cursiva.

2. LLM sintonizado a las instrucciones: Sigue las instrucciones. Sigue el aprendizaje por refuerzo con retroalimentación humana (RLHF). Ejemplo: ¿Sabes cuál es la capital de Francia? París es la capital de Francia. El LLM sintonizado a las instrucciones predice la línea en cursiva. El LLM sintonizado a las instrucciones sería menos propenso a producir resultados no deseados. En este trabajo, nos centraremos en el LLM sintonizado a las instrucciones.

Directrices para la indicación

En primer lugar, debemos instalar OpenAI.

!pip install openai

Esta línea de código instalará OpenAI de la siguiente manera:

Luego, cargaremos la clave de la API y las bibliotecas relevantes de Python. Para esto, debemos instalar python-dotenv. Lee pares clave-valor de un archivo .env y ayuda a desarrollar aplicaciones que incorporan el principio de los 12 factores.

pip install python-dotenv

Esta línea de código instalará python-dotenv de la siguiente manera.

La API de OpenAI utiliza una clave de API para la autenticación. La clave de API se puede obtener en la página de claves de API del sitio web de OpenAI. Es un secreto y no lo compartas. Ahora, importaremos openai

import openai
openai.api_key="sk-"

Luego, estableceremos la clave de openai, que es una clave secreta. Establécela como una variable de entorno. En este trabajo, ya la hemos establecido en el entorno.

import openai
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

openai.api_key  = os.getenv('OPENAI_API_KEY')

El modelo GPT-3.5-turbo de OpenAI y los puntos finales de finalización de chat se utilizarán aquí. Esta función auxiliar permite un uso más efectivo de las indicaciones y examina las salidas generadas.

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # este es el grado de aleatoriedad de la salida del modelo
    )
    return response.choices[0].message["content"]

Principios de la indicación

Existen dos principios básicos de la indicación: escribir instrucciones claras y específicas y dar tiempo al modelo para pensar. Los trucos para implementar estos principios se discutirán ahora. El primer truco sería usar delimitadores para identificar las entradas específicas de manera distintiva. Los delimitadores son puntuaciones claras entre las indicaciones y las piezas de texto específicas. Los triple backticks, las comillas, las etiquetas XML y los títulos de sección son delimitadores, y se puede utilizar cualquiera de ellos. Entonces, en las siguientes líneas de código, estamos tratando de resumir un texto extraído de Google News.

texto = f"""
El envío de Apple del iPhone 15 a su vasta base de clientes podría encontrar retrasos \
debido a los desafíos de suministro en curso que la compañía está abordando actualmente. Estos desarrollos\
aparecieron unas pocas semanas antes del próximo evento de Apple. Si bien la fecha de lanzamiento anticipada de la serie iPhone 15 es el 12 de septiembre, Apple aún no ha confirmado oficialmente esta fecha.\
"""
indicación = f"""
Resuma el texto delimitado por triple backticks \ have
en una sola oración.
```{texto}```
"""
respuesta = get_completion(indicación)
print(respuesta)

Salida en formato JSON y HTML

A partir de la salida, podemos ver que el texto ha sido resumido. El siguiente truco es solicitar una salida estructurada en JSON y HTML. En la siguiente ilustración, intentamos generar una lista de cinco libros escritos por Rabindranath Tagore en formato JSON y ver la salida correspondiente.

indicación = f"""
Genera una lista de cinco títulos de libros \ 
junto con sus autores como Rabindranath Tagore. 
Proporciónalos en formato JSON con las siguientes claves: 
book_id, title, genre.
"""
respuesta = get_completion(indicación)
print(respuesta)

Salida en formato JSON

De manera similar, en la siguiente ilustración, intentamos obtener una salida en formato JSON de tres thrillers médicos con ID de libro, título y autor.

indicación = f"""
Genera una lista de tres títulos de libros de thriller médico \ 
junto con sus autores. 
Proporciónalos en formato JSON con las siguientes claves: 
book_id, title, author.
"""
respuesta = get_completion(indicación)
print(respuesta)

Formato HTML

En ambos casos, recibimos la salida en el formato requerido exactamente de la manera en que lo indicamos. Ahora, descubriremos los libros escritos por Rabindranath Tagore en formato HTML.

prompt = f"""
Genera una lista de cinco títulos de libros junto con sus autores como Rabindranath Tagore. 
Proporciónalos en formato HTML con las siguientes claves: 
book_id, title, genre.
"""
response = get_completion(prompt)
print(response)

Cargar bibliotecas

Ahora hemos recibido la salida en formato HTML. Para ver HTML, necesitamos cargar las bibliotecas con la ayuda de las siguientes líneas de código.

from IPython.display import display, HTML

display(HTML(response))

La salida exacta que queríamos ahora se muestra. Otro truco es “sugerencia sin entrenamiento”. Aquí, no impartiremos un entrenamiento específico al modelo en su lugar, se basará en conocimientos previos, razonamiento y flexibilidad. La tarea es calcular el volumen de un cono donde conocemos la altura y el radio. Veamos qué hace el modelo en la salida.

prompt = f"""
Calcula el volumen de un cono si la altura = 20 cm y el radio = 5 cm
"""
response = get_completion(prompt)
print(response)

Se puede ver que el modelo da una solución paso a paso a la tarea. Primero, escribe la fórmula, pone los valores y calcula sin un entrenamiento específico.

Sugerencia de pocas tomas

El último truco del primer principio es “sugerencia de pocas tomas”. Aquí, estamos instruyendo al modelo que responda en un estilo coherente. La tarea del modelo sería responder en un estilo coherente. Hay una conversación entre un estudiante y un profesor. El estudiante le pide al profesor que le enseñe sobre la teoría celular. Entonces, el profesor responde. Ahora, le pedimos al modelo que enseñe sobre la teoría de los gérmenes. La ilustración se muestra a continuación.

prompt = f"""
Tu tarea es responder en un estilo coherente.

<estudiante>: Enséñame sobre la teoría celular .

<profesor>: Teoría celular, teoría científica fundamental de la biología según la cual \
las células se consideran las unidades básicas de todos los tejidos vivos. \
Propuesta por primera vez por los científicos alemanes Theodor Schwann y Matthias Jakob Schleiden en 1838, \
la teoría de que todas las plantas y animales están formados por células.

<niño>: Enséñame sobre la teoría de los gérmenes.
"""
response = get_completion(prompt)
print(response)

Entonces, el modelo nos ha respondido como se le indicó. Obtuvo la teoría de los gérmenes y respondió sin fallar. Todos los trucos o técnicas discutidos hasta ahora siguen el primer principio: escribir instrucciones claras y específicas. Ahora, veremos las técnicas para aplicar el segundo principio, es decir, darle tiempo al modelo para pensar. La primera técnica es especificar los pasos necesarios para completar una tarea. En la siguiente ilustración, hemos tomado un texto de una fuente de noticias para realizar los pasos mencionados en el texto.

text = f"""
El líder de AAP, Arvind Kejriwal, prometió el domingo varias "garantías", incluido \
energía gratuita, tratamiento médico y construcción de escuelas de calidad además \
de una asignación mensual de ₹ 3,000 para los jóvenes desempleados en Madhya Pradesh, en plena campaña electoral.
Hablando en una reunión del partido aquí, el coordinador nacional de AAP criticó indirectamente \
al jefe de gobierno de MP, Shivraj Singh Chouhan, y apeló a la gente a dejar de creer \
en el "tío" que ha "engañado a sus sobrinos y sobrinas".
"""
# ejemplo 1
prompt_1 = f"""
Realiza las siguientes acciones:
1 - Resumir el siguiente texto delimitado por triple \
comillas invertidas en 1 oración.
2 - Traduce el resumen al francés.
3 - Enumera cada nombre en el resumen en francés.
4 - Genera un objeto json que contenga las siguientes \
claves: resumen_francés, num_nombres.

Separa tus respuestas con saltos de línea.

Texto:
```{text}```
"""
response = get_completion(prompt_1)
print("Resultado para la sugerencia 1:")
print(response)

La salida indica que el modelo resumió el texto, tradujo el resumen al francés, enumeró el nombre, etc. Otra táctica es instruir al modelo para que no saque conclusiones y haga un autoentrenamiento sobre el problema. A continuación se muestra una ilustración de esta táctica

prompt = f"""
Determina si la solución del estudiante es correcta o no.

Pregunta:
Estoy construyendo una instalación de energía solar y necesito ayuda para calcular los aspectos financieros.
- El costo del terreno es de $100 por pie cuadrado.
- Puedo comprar paneles solares por $250 por pie cuadrado.
- Negocié un contrato de mantenimiento que costará una tarifa plana de $100,000 al año, y $10 adicionales por pie cuadrado.
¿Cuál es el costo total para el primer año de operaciones en función del número de pies cuadrados?

Solución del estudiante:
Sea x el tamaño de la instalación en pies cuadrados.
Costos:
1. Costo del terreno: 100x
2. Costo de los paneles solares: 250x
3. Costo de mantenimiento: 100,000 + 100x
Costo total: 100x + 250x + 100,000 + 100x = 450x + 100,000
"""
response = obtener_completado(prompt)
print(response)

prompt = f"""
Tu tarea es determinar si la solución del estudiante es correcta o no.
Para resolver el problema, sigue estos pasos:
- Primero, resuelve el problema tú mismo.
- Luego, compara tu solución con la solución del estudiante y evalúa si la solución del estudiante es correcta o no.
No decidas si la solución del estudiante es correcta hasta que hayas hecho el problema tú mismo.

Utiliza el siguiente formato:
Pregunta:
```
aquí va la pregunta
```
Solución del estudiante:
```
aquí va la solución del estudiante
```
Solución real:
```
pasos para resolver el problema y tu solución aquí
```
¿La solución del estudiante es igual a la solución real calculada?
```
sí o no
```
Calificación del estudiante:
```
correcta o incorrecta
```

Pregunta:
```
Estoy construyendo una instalación de energía solar y necesito ayuda para calcular los aspectos financieros.
- El costo del terreno es de $100 por pie cuadrado.
- Puedo comprar paneles solares por $250 por pie cuadrado.
- Negocié un contrato de mantenimiento que costará una tarifa plana de $100,000 al año, y $10 adicionales por pie cuadrado.
¿Cuál es el costo total para el primer año de operaciones en función del número de pies cuadrados?
```
Solución del estudiante:
```
Sea x el tamaño de la instalación en pies cuadrados.
Costos:
1. Costo del terreno: 100x
2. Costo de los paneles solares: 250x
3. Costo de mantenimiento: 100,000 + 100x
Costo total: 100x + 250x + 100,000 + 100x = 450x + 100,000
```
Solución real:
"""
response = obtener_completado(prompt)
print(response)

La salida indica que el modelo funcionó correctamente en el problema y produjo la salida deseada.

Conclusión

La IA generativa puede revolucionar la academia, la ciencia médica, la industria de la animación, el sector de la ingeniería y muchas otras áreas. ChatGPT, con más de 100 millones de usuarios, es un testimonio de que la IA generativa ha causado sensación en el mundo. Existe una gran esperanza de que estemos en el amanecer de una era de creatividad, eficiencia y progreso.

Puntos clave

  • La IA generativa puede generar fácilmente texto, traducciones, resúmenes, visualización de datos y creación de modelos a través de ChatGPT.
  • La Ingeniería de Prompts en la IA generativa es la herramienta que aprovecha diversas capacidades de la IA generativa mediante el desarrollo de indicaciones tácticas y brindando al modelo instrucciones claras y específicas.
  • El Modelo de Lenguaje Grande es el algoritmo que aplica las técnicas de redes neuronales en grandes cantidades de datos para generar textos similares a los humanos.
  • A través de los principios de la indicación, llevamos a cabo diversas tareas de generación de datos.
  • Podemos lograr que el modelo produzca la salida deseada mediante indicaciones adecuadas.

Espero que este artículo pueda agregar valor a su tiempo al leerlo.

Preguntas frecuentes

Referencias

  • https://colinscotland.com/unleash-the-power-of-chatgpt-11-epic-prompt-engineering-tips/
  • Aprenda Ingeniería de Indicaciones en 2 horas: Aprenda Ingeniería de Indicaciones de ChatGPT para aumentar la eficiencia y la producción (GPT 4). (2023). (s.f.): Cryptoineer Inc.
  • https://etinsights.et-edge.com/leading-large-language-models-llms-shaping-real-life-applications-revealed/

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.