Modelli di prompt few-shot
Includere esempi interattivi nei prompt aiuta il modello a comprendere meglio l'intento dell'utente e a fornire migliori risposte o svolgere compiti. I modelli di prompt few-shot si riferiscono all'uso di un piccolo set di esempi per guidare il modello nel gestire nuovi input. Questi esempi possono essere utilizzati per addestrare il modello in modo che possa comprendere meglio e rispondere a domande simili.
Esempio:
Q: Chi è Batman?
A: Batman è un personaggio di fantasia dei fumetti.
Q: Cos'è la torsalplessicità?
A: Sconosciuto.
Q: Cos'è un modello linguistico?
A:
Informa il modello che Q è la domanda e A è la risposta, e interagisci in questo formato.
Di seguito è riportata una spiegazione della classe di strumenti fornita da Lanchain per l'inserimento di un piccolo numero di esempi interattivi nel prompt.
Utilizzo dell'insieme di esempi
Creazione di un insieme di esempi
Definisci un array examples
di seguito, che contiene un set di esempi di domande e risposte.
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
examples = [
{
"question": "Di chi è più lunga la vita, Muhammad Ali o Alan Turing?",
"answer":
"""
Dobbiamo seguire la domanda: Sì.
Seguito: Quanti anni aveva Muhammad Ali quando è morto?
Risposta intermedia: Muhammad Ali aveva 74 anni quando è morto.
Seguito: Quanti anni aveva Alan Turing quando è morto?
Risposta intermedia: Alan Turing aveva 41 anni quando è morto.
Quindi la risposta finale è: Muhammad Ali
"""
},
{
"question": "Quando è nato il fondatore di craigslist?",
"answer":
"""
Dobbiamo seguire la domanda: Sì.
Seguito: Chi è il fondatore di craigslist?
Risposta intermedia: craigslist è stata fondata da Craig Newmark.
Seguito: Quando è nato Craig Newmark?
Risposta intermedia: Craig Newmark è nato il 6 dicembre 1952.
Quindi la risposta finale è: 6 dicembre 1952
"""
},
{
"question": "Chi era la madre dei nonni di George Washington?",
"answer":
"""
Dobbiamo seguire la domanda: Sì.
Seguito: Chi è la madre di George Washington?
Risposta intermedia: La madre di George Washington è Mary Ball Washington.
Seguito: Chi è il padre di Mary Ball Washington?
Risposta intermedia: Il padre di Mary Ball Washington è Joseph Ball.
Quindi la risposta finale è: Joseph Ball
"""
},
{
"question": "I registi di 'Jaws' e 'Casino Royale' vengono dallo stesso paese?",
"answer":
"""
Dobbiamo seguire la domanda: Sì.
Seguito: Chi è il regista di 'Jaws'?
Risposta intermedia: Il regista di 'Jaws' è Steven Spielberg.
Seguito: Da dove viene Steven Spielberg?
Risposta intermedia: Dagli Stati Uniti.
Seguito: Chi è il regista di 'Casino Royale'?
Risposta intermedia: Il regista di 'Casino Royale' è Martin Campbell.
Seguito: Da dove viene Martin Campbell?
Risposta intermedia: Dalla Nuova Zelanda.
Quindi la risposta finale è: No
"""
}
]
Creazione di un formato per i piccoli esempi
Inserisci semplicemente gli esempi nel modello del prompt utilizzando l'oggetto PromptTemplate
.
example_prompt = PromptTemplate(input_variables=["question", "answer"], template="Domanda: {question}\\n{answer}")
print(example_prompt.format(**examples[0]))
Output:
Domanda: Di chi è più lunga la vita, Muhammad Ali o Alan Turing?
Dobbiamo seguire la domanda: Sì.
Seguito: Quanti anni aveva Muhammad Ali quando è morto?
Risposta intermedia: Muhammad Ali aveva 74 anni quando è morto.
Seguito: Quanti anni aveva Alan Turing quando è morto?
Risposta intermedia: Alan Turing aveva 41 anni quando è morto.
Quindi la risposta finale è: Muhammad Ali
Fornire esempi e formattazione per FewShotPromptTemplate
Con l'oggetto FewShotPromptTemplate
, è possibile inserire in blocco il contenuto dell'esempio.
prompt = FewShotPromptTemplate(
examples=esempi,
example_prompt=prompt_esempio,
suffix="Domanda: {input}",
input_variables=["input"]
)
print(prompt.format(input="Chi è il padre di George Washington?"))
Risultato:
Domanda: Di chi è più lunga la vita, Muhammad Ali o Alan Turing?
Abbiamo bisogno di seguire questa domanda: Sì.
Seguito: Quanti anni aveva Muhammad Ali quando è morto?
Risposta intermedia: Muhammad Ali aveva 74 anni quando è morto.
Seguito: Quanti anni aveva Alan Turing quando è morto?
Risposta intermedia: Alan Turing aveva 41 anni quando è morto.
Quindi la risposta finale è: Muhammad Ali
Domanda: Quando è nato il fondatore di craigslist?
Abbiamo bisogno di seguire questa domanda: Sì.
Seguito: Chi è il fondatore di craigslist?
Risposta intermedia: craigslist è stato fondato da Craig Newmark.
Seguito: Quando è nato Craig Newmark?
Risposta intermedia: Craig Newmark è nato il 6 dicembre 1952.
Quindi la risposta finale è: 6 dicembre 1952
Domanda: Chi è la madre dei nonni di George Washington?
Abbiamo bisogno di seguire questa domanda: Sì.
Seguito: Chi è la madre di George Washington?
Risposta intermedia: La madre di George Washington è Mary Ball Washington.
Seguito: Chi è il padre di Mary Ball Washington?
Risposta intermedia: Il padre di Mary Ball Washington è Joseph Ball.
Quindi la risposta finale è: Joseph Ball
Domanda: I registi di "Jaws" e "Casino Royale" vengono dallo stesso paese?
Abbiamo bisogno di seguire questa domanda: Sì.
Seguito: Chi è il regista di "Jaws"?
Risposta intermedia: Il regista di "Jaws" è Steven Spielberg.
Seguito: Da dove viene Steven Spielberg?
Risposta intermedia: Dagli Stati Uniti.
Seguito: Chi è il regista di "Casino Royale"?
Risposta intermedia: Il regista di "Casino Royale" è Martin Campbell.
Seguito: Da dove viene Martin Campbell?
Risposta intermedia: Dalla Nuova Zelanda.
Quindi la risposta finale è: No
Domanda: Chi è il padre di George Washington?
Utilizzo dei selettori di esempi
Fornire esempi a ExampleSelector
Qui riutilizziamo l'insieme di esempi e il modello di esempio dalla sezione precedente. Tuttavia, anziché fornire direttamente gli esempi all'oggetto FewShotPromptTemplate
e inserire tutti gli esempi nel prompt, li forniremo a un oggetto ExampleSelector
per inserire una parte degli esempi.
Utilizzeremo la classe SemanticSimilarityExampleSelector
qui. Questa classe seleziona un piccolo esempio di esempio in base alla sua similarità con l'input. Utilizza un modello di embedding per calcolare la similarità tra l'input e i piccoli esempi di esempio, e quindi utilizza un database vettoriale per eseguire la ricerca di similarità e recuperare esempi simili all'input.
- Nota: Questo coinvolge calcoli vettoriali e un database vettoriale, che vengono utilizzati principalmente nel campo dell'IA per la ricerca di similarità dei dati, come la query di contenuti simili degli articoli, immagini simili, video, ecc. Per ora, acquisire semplicemente una comprensione di base qui.
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=1
)
domanda = "Chi è il padre di George Washington?"
esempi_selezionati = example_selector.select_examples({"domanda": domanda})
print(f"L'esempio più simile: {domanda}")
for esempio in esempi_selezionati:
print("\\n")
for k, v in esempio.items():
print(f"{k}: {v}")
Qui, vengono abbinati esempi simili alla domanda, e viene restituito quanto segue:
Esegui Chroma direttamente utilizzando l'API locale.
Utilizzo del database in memoria DuckDB. I dati saranno transitori.
L'esempio più simile: Chi è la madre dei nonni di George Washington?
domanda: Chi è la madre di George Washington?
risposta:
Abbiamo bisogno di seguire questa domanda: Sì.
Seguito: Chi è la madre di George Washington?
Risposta intermedia: La madre di George Washington è Mary Ball Washington.
Seguito: Chi è il padre di Mary Ball Washington?
Risposta intermedia: Il padre di Mary Ball Washington è Joseph Ball.
Quindi la risposta finale è: Joseph Ball
Fornire il selettore dell'esempio a FewShotPromptTemplate
Infine, crea un oggetto FewShotPromptTemplate
. Basandoti sul selettore dell'esempio dall'esempio precedente, seleziona un esempio simile alla domanda.
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="Domanda: {input}",
input_variables=["input"]
)
print(prompt.format(input="Chi è il padre di George Washington?"))
Ritorna:
Domanda: Chi è il padre dei nonni di George Washington?
Dobbiamo seguire con questa domanda: Sì.
Seguito: Chi è la madre di George Washington?
Risposta intermedia: La madre di George Washington è Mary Ball Washington.
Seguito: Chi è il padre di Mary Ball Washington?
Risposta intermedia: Il padre di Mary Ball Washington è Joseph Ball.
Quindi la risposta finale è: Joseph Ball
Domanda: Chi è il padre di George Washington?