Utilice role prompting con IBM watsonx y Granite

Vanna Winland

AI Advocate & Technology Writer

Anna Gutowska

AI Engineer, Developer Advocate

IBM

¿Qué es role prompting?

En este tutorial, seguiremos instrucciones paso a paso para realizar una técnica de ingeniería rápida llamada role prompting. Utilizaremos un modelo IBM® Granite para asignar personalidades para resultados matizados del modelo.

Role prompting es una técnica de ingeniería rápida que instruye a un modelo de inteligencia artificial (IA) para que asuma un rol o personalidad específicos al generar una respuesta. Esta técnica se puede utilizar para guiar el tono, el estilo y el comportamiento del modelo, lo que puede conducir a resultados más atractivos.

La ingeniería rápida consiste en optimizar la entrada del modelo, para que responda con respuestas apropiadas y significativas. Zero-shot y few-shot prompting son dos técnicas populares que se emplean para conversar con modelos de lenguaje grandes (LLM). Los LLM tienen una capacidad natural para realizar tareas de procesamiento de lenguaje natural (PLN) debido a su capacidad para procesar e interpretar el lenguaje humano. Las capacidades de lenguaje de los modelos de IA son valiosas para tareas que van desde conversaciones de chatbot e interacciones entre múltiples agentes hasta escritura creativa abierta. 

La IA generativa se vuelve más personal cuando se le indica a un LLM que actúe como una personalidad específica para satisfacer las necesidades específicas de un rol. Las respuestas de la IA pueden ser más precisas y relevantes cuando se le proporciona una instrucción por primera vez con un rol asignado. Los modelos de IA aprovechan enormes conjuntos de datos, por lo que un rol asignado puede ser cualquier cosa, desde un profesor, una figura histórica, un vendedor u otros, limitados solo por lo que la imaginación puede pensar. Esta capacidad es lo que hace que role prompting, también conocido como persona prompting, sea una técnica tan poderosa. La adaptabilidad de un modelo de IA lo convierte en un maestro del disfraz, capaz de generar respuestas adaptadas a las necesidades específicas de un usuario o sistema.

Cómo se utiliza role prompting

Role prompting se puede utilizar para dar a un chatbot una personalidad para interactuar mejor con los usuarios o a un agente de IA para interactuar mejor con otros agentes. Si está familiarizado con las plantillas de instrucciones, es posible que ya haya visto role prompting en acción. Por ejemplo, muchos marcos utilizan agentes de juego de roles para completar tareas y colaborar de manera efectiva. ChatDev utiliza una técnica de ingeniería de instrucciones y roles llamada mecanismo de autoatención. Este mecanismo define claramente el rol del agente que actúa como guía para sus resultados generados.

Requisitos previos

Para seguir este tutorial, necesita una cuenta de IBM® Cloud para crear un proyecto watsonx.ai .

Pasos

Paso 1: Configuración del entorno 

Si bien puede elegir entre varias herramientas, este tutorial lo guiará a través de cómo configurar una cuenta de IBM para usar un Jupyter Notebook. Los Jupyter Notebooks se utilizan ampliamente dentro de la ciencia de datos para combinar código, texto, imágenes y visualizaciones de datos para formular un análisis bien formado.

  1. Inicie sesión en watsonx.ai Runtime con su cuenta de IBM Cloud.
  2. Cree un proyecto watsonx.ai.

                 Tome nota del ID del proyecto en project > Manage > General > Project ID.
                 Necesitará este ID para este tutorial.

 3. Cree un Jupyter Notebook.

Este paso abre un entorno de notebook donde puede copiar el código de este tutorial para realizar una clasificación zero-shot por su cuenta. También puede descargar este Notebook en su sistema local y cargarlo en su proyecto watsonx.ai como activo. Este Jupyter Notebook está disponible en GitHub.

Paso 2. Configuración de una instancia de watsonx.ai Runtime y una clave de API

En este paso, asocia su proyecto con el servicio watsonx.ai.

  1. Cree una instancia de watsonx.ai Runtime (elija el plan Lite, que es una instancia gratuita).

  2. Genere una clave de API en watsonx.ai.

  3. Asocie el servicio de watsonx.ai Runtime al proyecto que creó en watsonx.ai.

Paso 3. Instalación e importación de bibliotecas relevantes y configuración de sus credenciales

Necesitaremos algunas bibliotecas y módulos para este tutorial. Asegúrese de importar lo siguiente y, si no están instalados, una instalación rápida de pip resolverá el problema.

%pip install -q -U langchain_ibm 
%pip install –q ibm_watsonx_ai 
 
import getpass 
 
from langchain_ibm import WatsonxLLM 
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams 

Paso 4. Configuración de sus credenciales de watsonx

Ejecute lo siguiente para ingresar y guardar su clave de API de watsonx.ai Runtime y su ID de proyecto:

credentials = { 
    "url": "https://us-south.ml.cloud.ibm.com", 
    "apikey": getpass.getpass("Please enter your watsonx.ai Runtime API key (hit enter): "), 
    "project_id": getpass.getpass("Please enter your project ID (hit enter): "), 
}

Paso 5. Configuración del modelo para role prompting

A continuación, configuraremos Granite-3.1-8B-Instruct de IBM para realizar role prompting.

model = WatsonxLLM( 
model_id =  "ibm/granite-3-8b-instruct", 
url = credentials.get("url"), 
apikey = credentials.get("apikey"), 
project_id =  credentials.get("project_id"), 
params={ 
        GenParams.MAX_NEW_TOKENS: 500, 
        GenParams.MIN_NEW_TOKENS: 1, 
        GenParams.REPETITION_PENALTY: 1.1, 
        GenParams.TEMPERATURE: 0.7, # Adjust for variable responses 
        GenParams.TOP_K: 100, 
        GenParams.TOP_P: 0, 
    }, 
)

Paso 6. Conversión de las letras de las canciones en sonetos

Para dar un ejemplo simple y ameno de role prompting, pidamos al modelo que asuma la personalidad de una figura famosa, William Shakespeare. Le pediremos al modelo, con su nuevo rol asignado, que reescriba algunas letras de canciones al estilo de los famosos sonetos de Shakespeare.

El siguiente bloque de código configura y define la instrucción a la que responderá el modelo. Siéntase libre de cambiar la canción a lo que quiera, pero tenga en cuenta que Granite no fue entrenado en contenido protegido por derechos de autor. Si elige una canción que no es parte del dominio público, por ejemplo, "Espresso" de Sabrina Carpenter, también tendrá que pegar la letra con la instrucción.   
 
Para una instrucción que simplemente funcione, este ejemplo utilizará la clásica canción de cuna infantil "Estrellita, ¿dónde estás?" de Jane Taylor (1806). Ejecute el bloque de código para definir su instrucción de usuario junto con un texto de entrada de ejemplo.

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = "You are William Shakespeare, rewrite ‘Twinkle, Twinkle, Little Star’ by Jane Taylor as a sonnet."

Paso 7. Generación de una respuesta

Una vez definida la instrucción, podemos ejecutar el siguiente bloque de código para permitir que el modelo genere un resultado. Esperemos que esté a la altura de nuestros estándares shakesperianos.

# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


Aquí está el resultado del modelo con formato legible:

"Twinkle, twinkle, little star, how I wonder what you are; 
Up above the world so high, like a diamond in the sky. 
In night's velvet cloak, you shine so bright, 
Guiding sailors through the darkest night. 
 
Your radiant beams, a celestial art, 
Illuminate the canvas of the heart. 
In silent whispers, secrets you share, 
Of galaxies far and constellations rare. 
 
Yet, mortal eyes can never grasp your form, 
Beyond our realm, in realms beyond the storm. 
O, star! O, star! Your light does pierce my soul, 
A cosmic dance, a timeless role. 
 
In dreams, I chase you, in slumber's hold, 
Your mystery, like an enchanted scroll. 
 
But wakefulness claims me, daylight steals your guise, 
Leaving behind but a memory of your surprise.
 
Thus, twinkling star, in slumber's peaceful reign, 
I bid you farewell, till morning brings again
."

El modelo pudo producir una respuesta a la instrucción basada en roles para reescribir la canción como un soneto de Shakespeare. El modelo pudo cumplir con las reglas y el estilo esperados de su instrucción de roles. *Tenga en cuenta que, debido a la naturaleza creativa de la instrucción, su resultado puede verse diferente a este ejemplo.

Paso 8. Role prompting para obtener respuestas de chatbot más empáticas

En el siguiente ejemplo, comparamos un indicador del sistema sencillo con un indicador del sistema basado en roles. Digamos que un consultorio veterinario implementó recientemente un asistente virtual en su página web. Para brindar la mejor atención al cliente, este consultorio quiere que los dueños de sus mascotas se sientan escuchados y apoyados incluso en sus interacciones virtuales, un objetivo con el que se pueden relacionar muchas empresas. Un visitante podría hacer una pregunta como: "Mi gato ha estado estornudando mucho últimamente y se está lamiendo las patas, ¿qué debo hacer?" En este escenario, al modelo no se le ha asignado un rol en su instrucción. Solo estamos empleando el modelo listo para usar sin orientación de entrada.

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = " My pet cat has been sneezing a lot lately and is licking her paws what should I do?" 
 
# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


El modelo responde en consecuencia con consejos e información; sin embargo, no hay un toque personal y no es muy diferente de lo que vería en la página de resultados de un motor de búsqueda. El resultado del modelo no está procesado y carece de creatividad. Esta solución puede ser aceptable, pero no diferencia al asistente virtual de este consultorio veterinario del resto. Intentemos la misma pregunta nuevamente, esta vez asignándole un rol como "veterinario compasivo, profesional y experimentado".

def generate_text(prompt): 
    response = None  # Ensure the variable is defined before the try block 
    try: 
        response = model.generate([prompt]) 
        return str(response) 
    except Exception as e: 
        print(f"Error: {e}") 
        if response: 
            print(f"Response: {response}") 
            return None 
    # Define the prompt here 
defined_prompt = "You are a compassionate, professional, and experienced veteraniarian. My pet cat has been sneezing a lot lately and is licking her paws what should I do?" 
 
# Generate and print the text based on the defined prompt 
generated_text = generate_text(defined_prompt) 
print("Generated text:", generated_text)


El lenguaje en la respuesta del modelo es más humanizado porque habla de una concientización emocional del contexto que la instrucción directa del sistema carecía. El modelo pudo lograr este tono y, al mismo tiempo, proporcionó una respuesta completa y relevante que demuestra que es una respuesta más matizada. Este tipo de interacción humana con la inteligencia artificial es una forma de cumplir con las expectativas subjetivas dentro de las organizaciones y aplicaciones.

¿Por qué es importante role prompting?

Si es un desarrollador o una empresa que busca agregar más personalización e interacciones significativas en sus aplicaciones de IA generativa, considere comprender cómo role prompting puede tener un impacto. La mayoría de los modelos de lenguaje modernos son capaces de hacer role prompting. Es posible que algunos modelos básicos no capten los matices del rol ni mantengan la coherencia en sus respuestas, mientras que otros pueden ajustarse para responder de cierta manera. Los modelos fundacionales, como la serie Granite de IBM, se entrenan con grandes cantidades de datos específicos de la empresa que aumentan la capacidad de los modelos para asumir roles y producir respuestas personalizadas basadas en las necesidades del negocio.

Resumen

La instrucción de roles incentiva al modelo a desempeñarse constantemente dadas las expectativas de su personalidad asignada. Realizamos un ejemplo simple asignando al LLM el rol de una figura histórica en nuestra instrucción para convertir las letras de las canciones en un soneto. A continuación, comparamos los resultados de un modelo asistido sin roles frente a un modelo asistido por roles para las respuestas de chatbot. Concluimos abordando que la respuesta proporcionada por role prompting es más matizada y de apoyo en su lenguaje, proporcionando una atención al cliente elevada.

Soluciones relacionadas
IBM® watsonx.ai

Entrene, valide, ajuste y despliegue IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de próxima generación para creadores de IA. Diseñe aplicaciones de IA en menos tiempo y con menos datos.

Explore watsonx.ai
Soluciones de inteligencia artificial

Ponga a trabajar la IA en su negocio con la experiencia en IA líder del sector y la cartera de soluciones de IBM a su lado.

Explore las soluciones de IA
Consultoría y servicios de inteligencia artificial (IA)

Los servicios de IA de IBM Consulting ayudan a reinventar la forma en que las empresas trabajan con IA para la transformación.

Explore los servicios de IA
Dé el siguiente paso

Con la IA, IBM Concert muestra insights cruciales sobre operaciones y proporciona recomendaciones de mejora específicas de las aplicaciones. Descubra cómo Concert puede hacer avanzar su negocio.

Explore Concert Explore las soluciones de automatización de procesos de negocio