Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PromptTemplate e ChatPromptTemplate

PromptTemplate e ChatPromptTemplate: applicazioni di AI e invio dei prompt ai modelli di intelligenza artificiale
PromptTemplate e ChatPromptTemplate: applicazioni di AI e invio dei prompt ai modelli di intelligenza artificiale
Link copiato negli appunti

Di Prompt non ne esiste solo uno ma, come LangChain ci ha abituato, sono messe a disposizione varie opportunità per agevolare il nostro lavoro.

Vedremo una serie di possibilità diverse e svolgeremo esempi per ognuna. Come potremo notare, essenzialmente ogni tipologia di prompt assolve sempre il medesimo compito: traghettare l'input verso il modello con le dovute integrazioni al fine di avere risposte più pregnanti possibile diventando così non solo un supporto all'input verso l'LLM ma anche un forte ispiratore del suo output!

PromptTemplate

L'elemento cardine di questo settore di LangChain è la componente PromptTemplate che riceve un template ovvero un modello di stringa in cui andranno innestati dinamicamente valori per produrre una richiesta compiuta. Ad esempio, supponiamo ci interessi creare un template che aiuti ad avere una breve descrizione della capitale di un Paese. Ci interesserà poter specificare il numero di parole che dovranno comporla e il Paese cui siamo interessati nella singola interrogazione.

Importiamo la classe:

from langchain.prompts import PromptTemplate

Possiamo creare il nostro primo prompt passando dal metodo from_template

prompt_template = PromptTemplate.from_template(
  "Descrivi in {numero} parole la capitale della {paese}"
)

o passando il template direttamente come argomento:

prompt_template = PromptTemplate(
  template="Descrivi in {numero} parole la capitale della {paese}"
)

In entrambi i casi, per prima cosa, dobbiamo provarlo con dei parametri di esempio per vedere se e come funziona:

prompt_template.format(paese="svizzera", numero=20)

e, così facendo, otteniamo un messaggio di questo tipo:

Descrivi in 20 parole la capitale della svizzera

Esempio con il PromptTemplate

A questo punto vale la pena provarlo. Lo faremo con il costrutto della chain che, come sappiamo, è perfetto per concatenare tra loro componenti portandole a comporre una sorta di linea di produzione.

Mettiamo in serie il prompt con un modello (scegliamo per l'occasione OpenAI, in particolare il modello gpt-4o-mini per coniugare potenza e risparmio economico) ed in coda un OutputParser:

# importiamo le classi
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# Impostare QUI la propria chiave OpenAI
key="sk-proj-..."
# definiamo modello e OutputParser
model = ChatOpenAI(model="gpt-4o-mini", api_key=key)
parser = StrOutputParser()
# instauriamo la catena
chain = prompt_template | model | parser

Proviamo l'app:

chain.invoke({"paese":"germania", "numero":35})

ed otteniamo come risposta:

Berlino è la capitale della Germania, una città ricca di storia, cultura e arte. Con i suoi monumenti storici, musei di fama mondiale e vivace vita notturna, Berlino offre un'esperienza unica.

Il risultato consta di 31 parole quindi il limite che abbiamo fissato è stato rispettato.Possiamo fare un'ulteriore verifica imponendo un limite più ampio:

risposta=chain.invoke({"paese":"svezia", "numero":200})

ed otteniamo una descrizione di Stoccolma di 174 parole (ogni esperimento offrirà tipicamente un risultato diverso di lunghezza differente).

Il ChatPromptTemplate

Abbiamo visto che il PromptTemplate offre come servizio l'integrazione di valori in un modello di stringa. Facendo un passo avanti, conosciamo ora il
ChatPromptTemplate che riceve in input dei modelli di stringa finalizzati alla creazione di messaggi diversi infatti verranno costituiti:

  • un prompt per un SystemMessage che imposta un contesto di ragionamento per l'LLM. Cosa che, anche da semplici utenti di AI on line, sappiamo
    essere molto importante;
  • un prompt per uno HumanMessage che incorpora la richiesta dell'utente.

Sperimentiamo ancora con OpenAI e diciamo di voler "parlare" con una sorta di commesso virtuale che sia in grado di suggerire regali Vorremo un prompt che, da un lato, spieghi, all'assistente di che tipo di negozio si parla e, dall'altro, gli suggerisca per chi è il regalo:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.prompts import PromptTemplate
# Impostare QUI la propria chiave OpenAI
key="sk-proj-..."
prompt_template = ChatPromptTemplate([
    ("system", "Sei un commesso gentile di un negozio di {tipo_negozio}"),
    ("user", "Cosa posso regalare ad {destinatario} di {anni} anni")
])
model = ChatOpenAI(model="gpt-4o-mini", api_key=key, max_tokens=200)
parser = StrOutputParser()
# instauriamo la catena
chain = prompt_template | model | parser

Test della chain

Proviamo la chain chiedendo in un negozio di giocattoli un regalo per un maschietto di 8 anni:

risposta=chain.invoke({"tipo_negozio":"giocattoli", "destinatario":"un maschietto", "anni":8})

ottenendo (abbreviamo per comodità):

Ci sono tantissime opzioni fantastiche per un maschietto di 8 anni! Ecco alcune idee:
1. **Giocattoli da costruzione**: set di LEGO o mattoncini di costruzione..
2. **Giochi da tavolo**: ci sono giochi adatti all'età, ..
3. **Kit di scienze**: set per esperimenti scientifici possono stimolare la..
4. **Veicoli radiocomandati**: auto o droni che possono essere controllati..
5. **Giochi all'aperto**: un kit per il mini golf, una palla da calcio, o un frisbee

e poi ci rechiamo in un negozio di articoli sportivi cercando un pensiero per una ragazza di 16 anni:

risposta=chain.invoke({"tipo_negozio":"sport", "destinatario":"ragazza", "anni":16})

e questo è il suggerimento (abbreviato anche questo):

Ci sono molte opzioni fantastiche che puoi considerare per un regalo a una ragazza di 16 anni. Ecco alcune idee:
1. **Attrezzatura sportiva**: ...
2. **Abbigliamento sportivo**: Un bel completo sportivo, leggings o ..
3. **Accessori**: Un orologio sportivo, una borraccia personalizzata ..
4. **Gift card**: Se non sei sicuro di cosa potrebbe piacerle..

Come si vede, questo tipo di prompt ci ha dato al contempo la possibilità di impostare i nostri parametri e formattare messaggi in grado di giocare ruoli diversi nel dialogo con l'LLM.

Ti consigliamo anche