Utilizzare il prompt dei ruoli con IBM watsonx e Granite

Vanna Winland

AI Advocate & Technology Writer

Anna Gutowska

AI Engineer, Developer Advocate

IBM

Che cos'è il suggerimento di ruolo?

In questo tutorial seguiremo le istruzioni passo a passo per eseguire una tecnica di prompt engineering chiamata role prompting. Utilizzeremo un modello IBM® Granite per assegnare persone per output di modelli dettagliati.

La richiesta di ruolo è una tecnica di prompt engineering che indica a un modello di intelligenza artificiale (AI) di assumere un ruolo o una persona specifici quando genera una risposta. Questa tecnica può essere utilizzata per determinare il tono, lo stile e il comportamento del modello, portando a risultati più coinvolgenti.

La Prompt Engineering riguarda l'ottimizzazione dell'input del modello, in modo che risponda con risposte appropriate e significative. Zero-shot e generazione di prompt few-shot sono due tecniche popolari utilizzate per conversare con modelli linguistici di grandi dimensioni (LLM). Gli LLM hanno la capacità di eseguire attività di elaborazione del linguaggio naturale (PNL) grazie alla loro abilità nell'elaborare e interpretare il linguaggio umano. Le funzionalità dei modelli AI sono utili per attività che vanno dalle conversazioni dei chatbot e dalle interazioni multiagente alla scrittura creativa. 

L'AI generativa (gen AI) diventa più personale quando un LLM viene incaricato di agire come un soggetto specifico per soddisfare le esigenze particolari di un ruolo. Le risposte dell'AI possono essere più accurate e pertinenti quando viene sollecitata per la prima volta con un ruolo assegnato. I modelli di AI utilizzano enormi set di dati, quindi un ruolo assegnato può essere qualsiasi cosa, da un insegnante a un personaggio storico, venditore o altro, vincolato solo da ciò a cui l'immaginazione può pensare. Questa capacità è la caratteristica che rende il role prompting, noto anche come persona prompting, una tecnica così potente. L'adattabilità di un modello AI lo rende un maestro del travestimento, in grado di generare risposte su misura per le esigenze specifiche di un utente o di un sistema.

Come viene utilizzato il role prompting

Il role prompting può essere utilizzato per dare a un chatbot una "persona" attraverso la quale interagire meglio con gli utenti, oppure a un Agente AI per interagire meglio con altri agenti. Se hai familiarità con i modelli di prompt, potresti aver già visto il role prompting in azione. Ad esempio, molti framework utilizzano agenti di role-playing per completare le attività e collaborare in modo efficace. ChatDev utilizza una tecnica di prompting chiamata meccanismo di auto-attenzione che definisce chiaramente il ruolo dell'agente che funge da linea guida per gli output generati.

Prerequisiti

Per seguire questo tutorial, è necessario un account IBM Cloud per creare un progetto watsonx.ai .

Passaggi

Passaggio 1. Configurare il tuo ambiente 

Sebbene sia possibile scegliere tra diversi strumenti, questo tutorial illustra come configurare un account IBM per l'utilizzo di un Jupyter Notebook. I Jupyter Notebook sono ampiamente utilizzati nella data science per combinare codice, testo, immagini e visualizzazioni dei dati per formulare un'analisi ben strutturata.

  1. Accedi a watsonx.ai Runtime utilizzando il tuo account IBM® Cloud.
  2. Crea un progetto watsonx.ai.

                 Prendi nota dell'ID del progetto in progetto > Gestisci > Generale > ID progetto.
                 L'ID ti sarà utile per questo tutorial.

 3. Crea un Jupyter Notebook.

Questo passaggio apre un ambiente notebook in cui è possibile copiare il codice da questo tutorial per eseguire autonomamente la classificazione zero-shot. In alternativa, puoi scaricare questo notebook sul tuo sistema locale e caricarlo nel tuo progetto watsonx.ai come asset. Questo Jupyter Notebook è disponibile su GitHub.

Passaggio 2: configura un'istanza di runtime di watsonx.ai e una chiave API

In questo passaggio, assocerai il tuo progetto al servizio watsonx.ai.

  1. Crea un'istanza di runtime watsonx.ai (scegli il piano Lite, che è un'istanza gratuita).

  2. Genera una chiave API in watsonx.ai.

  3. Associa il servizio watsonx.ai Runtime al progetto che hai creato in watsonx.ai.

Passaggio 3: installa e importa le librerie pertinenti e configura le tue credenziali

Abbiamo bisogno di alcune librerie e moduli per questo tutorial. Assicurati di importare i seguenti elementi e, se non sono installati, una rapida installazione tramite pip risolverà il 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 

Passaggio 4: configura le tue credenziali watsonx

Esegui quanto segue per input e salva la chiave API di watsonx.ai Runtime e l'ID del progetto:

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): "), 
}

Passaggio 5. Impostare il modello per il role prompting

Successivamente, configureremo Granite-3.1-8B-Instruct di IBM per eseguire il prompting del ruolo.

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, 
    }, 
)

Passaggio 6. Trasformare i testi delle canzoni in sonetti

Per fare un esempio semplice e divertente di suggerimento di ruolo, chiediamo al soggetto di interpretare il personaggio di un personaggio famoso, William Shakespeare. Chiederemo al soggetto, con il ruolo appena assegnato, di riscrivere i testi di alcune canzoni nello stile dei famosi sonetti di Shakespeare.

Il blocco di codice seguente imposta e definisce il prompt a cui il modello risponderà. Sentiti libero di modificare la canzone come preferisci, ma ricorda che Granite non è stato addestrato su contenuti protetti da copyright. Se scegli una canzone che non è di pubblico dominio, ad esempio "Espresso" di Sabrina Carpenter, dovrai incollare anche il testo insieme al prompt.   
 
Per un prompt che funziona, in questo esempio utilizzeremo la classica ninna nanna per bambini "Twinkle, Twinkle, Little Star" di Jane Taylor (1806). Esegui il blocco di codice per definire il prompt dell'utente insieme a qualche esempio di testo di input.

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."

Passaggio 7. Generare una risposta

Una volta definito il prompt, possiamo eseguire il blocco di codice successivo per consentire al modello di generare un output. Ci auguriamo che sia all'altezza dei nostri standard shakesperiani.

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


Di seguito è riportato l'output del modello con formattazione leggibile:

"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
."

Il modello è stato in grado di produrre una risposta al prompt per riscrivere la canzone come un sonetto shakespeariano. Inoltre, è stato in grado di attenersi alle regole e allo stile atteso dal suo prompt di ruolo. *Si prega di notare che, a causa della natura creativa del prompt, il tuo output potrebbe avere un aspetto diverso da questo esempio.

Passaggio 8: usa i suggerimenti di ruolo per risposte più empatiche da parte dei chatbot

Nel prossimo esempio, confrontiamo un prompt di sistema semplice con un prompt di sistema basato sui ruoli. Supponiamo che una clinica veterinaria abbia recentemente implementato un assistente virtuale sulla sua pagina web. Per fornire il miglior supporto clienti possibile, la clinica vuole che i proprietari di animali si sentano ascoltati e supportati anche nelle loro interazioni virtuali, un obiettivo riconoscibile per molte aziende. Un visitatore potrebbe porre una domanda come: "Il mio gatto starnutisce molto ultimamente e si lecca spesso le zampe, cosa devo fare?" In questo scenario, al modello non è stato assegnato un ruolo nel prompt. Utilizziamo solo il modello pronto all'uso senza indicazioni di input.

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)


Il modello risponde di conseguenza con consigli e informazioni, ma non c'è un tocco personale e non è molto diverso da quello che si vedrebbe nella pagina dei risultati di un motore di ricerca. L'output del modello è grezzo e privo di creatività. Questa soluzione può essere accettabile ma non distingue l'assistente virtuale di questa clinica veterinaria dal resto. Proviamo a porre di nuovo la stessa domanda, questa volta assegnandole il ruolo di "veterinario empatico, professionale ed esperto".

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)


Il linguaggio nella risposta del modello è più umano perché dimostra di una consapevolezza emotiva del contesto che nel semplice prompt del sistema non c'era. Il modello è stato in grado di raggiungere questo tono fornendo anche una risposta completa e pertinente, dimostrando che si tratta di una risposta più dettagliata. Questo tipo di interazione umana con l'intelligenza artificiale è un modo per soddisfare le aspettative soggettive all'interno di organizzazioni e applicazioni.

Perché il role prompting è importante?

Se sei uno sviluppatore o un'azienda che desidera aggiungere maggiore personalizzazione e interazioni significative nelle tue applicazioni gen AI, considera di capire come la richiesta di ruolo può avere un impatto. La maggior parte dei modelli linguistici moderni è in grado di suggerire i ruoli. Alcuni modelli di base potrebbero non cogliere le sfumature del ruolo o mantenere la coerenza nelle loro risposte, mentre altri potrebbero essere perfezionati per rispondere in un certo modo. I foundation model come la serie Granite di IBM sono addestrati su grandi quantità di dati aziendali specifici che aumentano la capacità dei modelli di assumere ruoli per produrre risposte su misura in base alle esigenze aziendali.

Riepilogo

Il suggerimento del ruolo incoraggia il modello a comportarsi costantemente in base alle aspettative nei confronti della persona assegnata. Abbiamo fatto un semplice esempio assegnando all'LLM il ruolo di personaggio storico nel nostro prompt per trasformare i testi delle canzoni in un sonetto. Successivamente, abbiamo confrontato l'output di un modello non basato su un ruolo con quello di un modello basato su un ruolo per le risposte del chatbot. Concludiamo sottolineando che la risposta fornita dal prompting del ruolo è più sfumata e di supporto nel suo linguaggio, fornendo un'assistenza clienti elevata.

Soluzioni correlate
IBM® watsonx.ai

Addestra, convalida, adatta e implementa le funzionalità di AI generativa, foundation model e machine learning con IBM watsonx.ai, uno studio aziendale di nuova generazione per builder AI. Crea applicazioni AI in tempi ridotti e una minima quantità di dati.

Esplora watsonx.ai
Soluzioni di intelligenza artificiale

Metti l'AI al servizio della tua azienda con l'esperienza leader di settore e il portfolio di soluzioni di IBM nel campo dell'AI.

Esplora le soluzioni AI
Consulenza e servizi per l'intelligenza artificiale (AI)

I servizi di AI di IBM Consulting aiutano a reinventare il modo in cui le aziende lavorano con l'AI per la trasformazione.

Esplora i servizi AI
Fasi successive

Ottieni l'accesso completo a funzionalità che coprono l'intero ciclo di vita dello sviluppo dell'AI. Crea soluzioni AI all'avanguardia con interfacce intuitive, workflow e accesso alle API e agli SDK standard di settore.

Esplora watsonx.ai Prenota una demo live