Durante los últimos meses, aplicaciones como DallE y chatGPT han popularizado la IA generativa y han demostrado no solo la capacidad de esta tecnología para resolver problemas reales que tienen las empresas que hasta ahora no se podían resolver, sino también la capacidad de agilizar y automatizar tareas de generación de contenido y software.

Sin embargo, a pesar de estar muy clara su utilidad, no está tan claro para las empresas cómo se pueden construir e industrializar soluciones basadas en IA generativa de manera que sean robustas, gobernables y escalables. En este post plantearemos los diferentes problemas que surgen en este tipo de proyectos y hablaremos de cómo los resolvemos en Paradigma con nuestro framework propio, Promptmeteo.

Inteligencia artificial general

La IA generativa es una rama dentro de la IA cuyo objetivo no consiste en clasificar o predecir dados unos datos de entrada (por ejemplo, dado un texto clasificarlo basándonse en su contenido), sino que trata de generar contenido, como imágenes y texto generalmente, con el objetivo de parecer verosímil y a partir de un texto de entrada.

Para la generación de texto, los principales sistemas de IA generativa usan un tipo de algoritmo denominado Large Language Models (LLMs). Este tipo de algoritmos son capaces de generar texto de manera automática e imitando cómo lo haría un humano. Para ello, estos modelos reciben un texto inicial de entrada y son capaces de continuarlo de manera que tenga la apariencia de que han sido escritos por un humano.

Texto de entrada: The artificial intelligence is
Respuesta del LLM: an umbrella term that encompasses many different aspects of technology. Generally speaking, artificial intelligence is defined as the ability of a computer system to perform tasks that normally require human intelligence, such as visual perception, speech recognition, decision-making, and translation between languages. More specifically, artificial intelligence applications may include robotics, machine learning, natural language processing, and computer vision systems. Increasingly, AI systems are being incorporated into everyday items, such as self-driving cars, voice-activated digital personal assistants, and facial recognition systems for security purposes.

Nota: Resultado generado con la API de GPT3.5 en modo “complete”.

Pero el gran hito de los LLMs que ha hecho que se vuelvan tan populares no es el conseguir resolver el problema de generación de texto con mucha verosimilitud, sino que además se han demostrado ser capaces de aprender instrucciones. Estos modelos que son capaces de aprender instrucciones (Instruction Models) no tienen el objetivo de generar texto, sino de, dada una instrucción de entrada, generar una respuesta. A este texto de entrada que se le pasa a una IA generativa se denomina prompt.

Texto de entrada: Translate the following text into Spanish: "How are you?"
Respuesta del LLM: ¿Cómo estás?
Texto de entrada: Compute the following calculation. Answer just with a number, no words: 2+3*0
Respuesta del LLM: 2
Texto de entrada: Anonymize the following text replacing name with acronym: "Ángel Delgado Panadero es un empleado de Paradigma Digital"
Respuesta del LLM: A. D. P. es un empleado de P. D.

Nota: Resultado generado con la API de GPT3.5 en modo “assistant”.

Modelos como chatGPT han demostrado ser capaces, no solo de funcionar bien como modelos de instrucción, sino que además también se ha visto que funcionan bien para múltiples tipos de instrucciones a la vez. Debido a ello es común referirse a este tipo de modelos, no simplemente como IA generativa, sino como Inteligencia Artificial General (IAG).

El hecho de que estos modelos sean capaces de resolver diferentes problemas a partir de un texto de entrada, permite que se pueden construir soluciones que usan como “motor de razonamiento” este tipo de modelos, sin necesidad de tener que crear un software y/o un modelo de inteligencia artificial específico para ese problema, sino simplemente construir un texto de entrada describiendo el problema con lenguaje natural.

Prompt Engineering

Como hemos visto, el texto de entrada que le pasas a una IA generativa sirve para generar la respuesta y el formato y tipo de respuesta dependen de cómo hagas la pregunta. De esta manera, se ha visto que se pueden aplicar diferentes técnicas para conseguir los resultados deseados en términos de formato de respuesta, nivel de detalle, calidad, personalización… La creación y uso de este conjunto de técnicas a la hora de obtener resultados de una IA generativa es lo que se denomina Prompt Engineering.

Texto de entrada: Compute the following calculation. Answer just with a number, no words: 2+3*0
Respuesta del LLM: 2
Texto de entrada: Compute the following calculation. Give the result in json format with the key “result”: 2+3*0
Respuesta del LLM: {"result": 2}
Texto de entrada: Compute the following calculation. Explain the arithmetic process step by step: 2+3*0
Respuesta del LLM: In this calculation, we follow the arithmetic rules of order of operations (PEMDAS/BODMAS). According to these rules, multiplication should be performed before addition.

Step 1: 3 * 0 = 0
Step 2: 2 + 0 = 2

Therefore, 2 + 3 * 0 = 2.

Nota: Resultado generado con la API de GPT3.5 en modo “assistant”.

Existen muchas técnicas de prompt engineering (y siguen apareciendo nuevas técnicas actualmente), pero algunas de las principales técnicas‚ de Prompt Engineering:

Un ejemplo de prompt que combina alguna de las técnicas anteriores podría ser el siguiente:

Role:

Texto de entrada: Necesito que me ayudes en una tarea de clasificación de texto.

Instrucción:

Los textos que tienes que clasificar se corresponden con reseñas de productos de un e-commerce. Algunos ejemplos son los siguientes

Por favor argumenta tu respuesta paso a paso, explica por qué crees que está justificada tu elección final.

Chain of thoughts:

Finalmente, termina tu respuesta con el nombre de la clase, como una única palabra, en minúscula, sin puntuación, y sin añadir ninguna otra afirmación o palabra.

Few-shot:

EJEMPLO: Era un regalo y la verdad que está dando la talla que deseaba!! Fácil de utilizar y muy creativo.
RESPUESTA: la talla que deseaba, positivo
EJEMPLO: No me gusto porque se equivocaron de producto, y estoy esperando a que vengan a por él, y hace casi un mes y no ha pasado nadie.
RESPUESTA: se equivocaron de producto, negativo

Texto de entrada

EJEMPLO: La compré porque tenía la original que me quedaba grande. Ésta me queda perfecta. Llevo con ella ya tiempo y sigue como el primer día.
RESPUESTA: 
Respuesta del LLM: perfecta, positivo

Nota: Resultado generado con la API de GPT3.5 en modo “complete”

Problemas y retos del Prompt Engineering

Los resultados de la IA generativa a la hora de resolver diferente tipo de tareas son prometedores y abren la puerta para automatizar y resolver muchos problemas que tienen muchas compañías actualmente.

Sin embargo, las aplicaciones basadas en IA generativa tienen algunos problemas a la hora de su industrialización. Alguno de los antipatrones más comunes que se ven actualmente son los siguientes:

¿Cómo lo resolvemos? Promptmeteo

Tras nuestra experiencia trabajando con IA generativa y habiendo detectado los problemas que hemos mencionado anteriormente, en Paradigma hemos desarrollado un framework de software para la creación de aplicaciones basadas en IA generativa: Promptmeteo. Este framework sirve como una capa intermedia entre el usuario y el LLM, que no solo contiene software, sino técnicas de prompt engineering que permiten customizar la interacción del usuario, reducir el tiempo de implementación de soluciones de GenAI y asegurar la calidad del servicio, evitando problemas como prompt injection y "alucinaciones"

Promptmeteo está construido sobre Langchain para facilitar la integración con los diferentes servicios cloud y productos de IA generativa que existen actualmente, pero añade una capa por encima para asegurar la correcta creación de los prompts, su validación y facilitar el despliegue. Las claves del diseño de Promptmeteo son las siguientes:

Un ejemplo de un template de prompt de Promptmeteo para clasificación de texto en español con OpenAI es el siguiente. Como vemos, tiene configurados los argumentos de entrada como variables de inyección en formato f-string. El resultado de este template de prompt se corresponde con el prompt de ejemplo que hemos visto en la sección anterior.

TEMPLATE:
    "Necesito que me ayudes en una tarea de clasificación de texto.
    {__PROMPT_LABELS__}

    {__PROMPT_DOMAIN__}

    {__CHAIN_THOUGHT__}

    {__ANSWER_FORMAT__}"

PROMPT_DOMAIN:
    "Los textos que tienes que clasificar se corresponden con {__DOMAIN__}."

PROMPT_LABELS:
    "Quiero que me clasifiques los textos una de las siguientes categorías:
    {__LABELS__}."

PROMPT_DETAIL:
    ""

CHAIN_THOUGHT:
    "Por favor argumenta tu respuesta paso a paso, explica por qué crees que
    está justificada tu elección final."

ANSWER_FORMAT:
    "Finalmente, termina tu respuesta con el nombre de la clase, como una única
    palabra, en minúscula, sin puntuación, y sin añadir ninguna otra
    afirmación o palabra."

La inicialización de Promptmeteo solamente requiere los argumentos de entrada para construir el prompt (aunque tiene muchos más argumentos para customizar más el servicio). La clase DocumentClassifier define que queremos usar promptmeteo para la tarea de clasificación de documentos, y los argumentos language, mode_name y model_provider_name definen el idioma, modelo y el proveedor del modelo respectivamente.

from promptmeteo import DocumentClassifier

clf = DocumentClassifier(
        language            = 'en',
        model_provider_name = 'hf_pipeline',
        model_name          = 'google/flan-t5-small',
 )

Un proceso de entrenamiento con Promptmeteo se puede ejecutar de la siguiente manera.

clf.train(
    examples    = ['i am happy', 'doesnt matter', 'I hate it'],
    annotations = ['positive', 'neutral', 'negative'],
)

clf.save_model(“custom_classifer.meteo”)

A partir de un modelo entrenado y una configuración, se puede cargar un modelo para hacer predicciones de la siguiente manera:

from promptmeteo import DocumentClassifier

clf = DocumentClassifier(
        language            = 'en',
        model_provider_name = 'hf_pipeline',
        model_name          = 'google/flan-t5-small',
 ).load_model(“custom_classifer.meteo”)

clf.predict(['so cool!!'])
[“positive”]

Conclusiones

En este post hemos visto cómo los modelos de IA generativa, más allá de funcionar como modelos de generación de lenguaje, son capaces de llegar a resolver problemas de razonamiento a partir de instrucciones definidas con lenguaje natural. Esto permite automatizar procesos y reducir tiempos de desarrollo en la mayoría de procesos digitales de las empresas actuales.

El principal reto que tienen este tipo de soluciones no es conseguir resultados prometedores, sino industrializar la creación y despliegue de aplicaciones basadas en IA generativa. A lo largo del post hemos visto los principales antipatrones que se ven en la industria en este tipo de aplicaciones y cómo, en Paradigma, lo hemos resuelto creando Promptmeteo, un framework propio de código abierto que permite desarrollar, testear y versionar prompts de la misma forma que el código.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete

Estamos comprometidos.

Tecnología, personas e impacto positivo.