Few-shot-Prompt-Vorlagen
Das Einbeziehen interaktiver Beispiele in Vorlagen hilft dem Modell, das Benutzeranliegen besser zu verstehen und bessere Antworten zu geben oder Aufgaben zu erledigen. Few-shot-Prompt-Vorlagen beziehen sich darauf, dem Modell mithilfe einer kleinen Anzahl von Beispielen zu zeigen, wie es mit neuen Eingaben umgehen soll. Diese Beispiele können verwendet werden, um das Modell zu trainieren, damit es ähnliche Fragen besser versteht und beantworten kann.
Beispiel:
F: Was ist Batman?
A: Batman ist eine fiktive Comicfigur.
F: Was ist Torsalplexität?
A: Unbekannt.
F: Was ist ein Sprachmodell?
A:
Dem Modell mitteilen, dass F die Frage und A die Antwort ist, und in diesem Format interagieren.
Im Folgenden wird die von Lanchain bereitgestellte Tool-Klasse zur Einfügung einer kleinen Anzahl interaktiver Beispiele in die Vorlage erklärt.
Verwendung des Beispielsatzes
Erstellen eines Beispielsatzes
Definieren Sie unten ein Beispiele
-Array, das eine Reihe von Frage-Antwort-Beispielen enthält.
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
examples = [
{
"Frage": "Wessen Lebensdauer ist länger, Muhammad Ali oder Alan Turing?",
"Antwort":
"""
Müssen wir der Frage nachgehen: Ja.
Nachfrage: Wie alt war Muhammad Ali bei seinem Tod?
Zwischenantwort: Muhammad Ali war 74 Jahre alt, als er starb.
Nachfrage: Wie alt war Alan Turing bei seinem Tod?
Zwischenantwort: Alan Turing war 41 Jahre alt, als er starb.
Die endgültige Antwort lautet also: Muhammad Ali
"""
},
{
"Frage": "Wann wurde der Gründer von Craigslist geboren?",
"Antwort":
"""
Müssen wir der Frage nachgehen: Ja.
Nachfrage: Wer ist der Gründer von Craigslist?
Zwischenantwort: Craigslist wurde von Craig Newmark gegründet.
Nachfrage: Wann wurde Craig Newmark geboren?
Zwischenantwort: Craig Newmark wurde am 6. Dezember 1952 geboren.
Die endgültige Antwort lautet also: 6. Dezember 1952
"""
},
{
"Frage": "Wer waren die Großeltern von George Washingtons Mutter?",
"Antwort":
"""
Müssen wir der Frage nachgehen: Ja.
Nachfrage: Wer ist die Mutter von George Washington?
Zwischenantwort: Die Mutter von George Washington ist Mary Ball Washington.
Nachfrage: Wer ist der Vater von Mary Ball Washington?
Zwischenantwort: Der Vater von Mary Ball Washington ist Joseph Ball.
Die endgültige Antwort lautet also: Joseph Ball
"""
},
{
"Frage": "Kommen die Regisseure von 'Jaws' und 'Casino Royale' aus dem gleichen Land?",
"Antwort":
"""
Müssen wir der Frage nachgehen: Ja.
Nachfrage: Wer ist der Regisseur von 'Jaws'?
Zwischenantwort: Der Regisseur von 'Jaws' ist Steven Spielberg.
Nachfrage: Woher stammt Steven Spielberg?
Zwischenantwort: Aus den Vereinigten Staaten.
Nachfrage: Wer ist der Regisseur von 'Casino Royale'?
Zwischenantwort: Der Regisseur von 'Casino Royale' ist Martin Campbell.
Nachfrage: Woher stammt Martin Campbell?
Zwischenantwort: Aus Neuseeland.
Die endgültige Antwort lautet also: Nein
"""
}
]
Erstellen eines Formatters für kleine Beispielsätze
Fügen Sie einfach Beispiele in die Vorlagen mithilfe des PromptTemplate
-Objekts ein.
beispiel_vorlage = PromptTemplate(input_variables=["Frage", "Antwort"], template="Frage: {Frage}\\n{Antwort}")
print(beispiel_vorlage.format(**examples[0]))
Ausgabe:
Frage: Wessen Lebensdauer ist länger, Muhammad Ali oder Alan Turing?
Müssen wir der Frage nachgehen: Ja.
Nachfrage: Wie alt war Muhammad Ali bei seinem Tod?
Zwischenantwort: Muhammad Ali war 74 Jahre alt, als er starb.
Nachfrage: Wie alt war Alan Turing bei seinem Tod?
Zwischenantwort: Alan Turing war 41 Jahre alt, als er starb.
Die endgültige Antwort lautet also: Muhammad Ali
Bereitstellung von Beispielen und Formatierung für FewShotPromptTemplate
Mit dem Objekt FewShotPromptTemplate
können Sie Beispielinhalt massenhaft einfügen.
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
suffix="Frage: {input}",
input_variables=["input"]
)
print(prompt.format(input="Wer ist der Vater von George Washington?"))
Ergebnis:
Frage: Wessen Lebensdauer ist länger, Muhammad Ali oder Alan Turing?
Müssen wir auf diese Frage weiter eingehen: Ja.
Weiterführende Frage: Wie alt war Muhammad Ali, als er starb?
Zwischenantwort: Muhammad Ali war 74 Jahre alt, als er starb.
Weiterführende Frage: Wie alt war Alan Turing, als er starb?
Zwischenantwort: Alan Turing war 41 Jahre alt, als er starb.
Also lautet die endgültige Antwort: Muhammad Ali
Frage: Wann wurde der Gründer von Craigslist geboren?
Müssen wir auf diese Frage weiter eingehen: Ja.
Weiterführende Frage: Wer ist der Gründer von Craigslist?
Zwischenantwort: Craigslist wurde von Craig Newmark gegründet.
Weiterführende Frage: Wann wurde Craig Newmark geboren?
Zwischenantwort: Craig Newmark wurde am 6. Dezember 1952 geboren.
Also lautet die endgültige Antwort: 6. Dezember 1952
Frage: Wer ist die Mutter von George Washingtons Großeltern?
Müssen wir auf diese Frage weiter eingehen: Ja.
Weiterführende Frage: Wer ist die Mutter von George Washington?
Zwischenantwort: Die Mutter von George Washington ist Mary Ball Washington.
Weiterführende Frage: Wer ist der Vater von Mary Ball Washington?
Zwischenantwort: Der Vater von Mary Ball Washington ist Joseph Ball.
Also lautet die endgültige Antwort: Joseph Ball
Frage: Kommen die Regisseure von "Der weiße Hai" und "Casino Royale" aus dem gleichen Land?
Müssen wir auf diese Frage weiter eingehen: Ja.
Weiterführende Frage: Wer ist der Regisseur von "Der weiße Hai"?
Zwischenantwort: Der Regisseur von "Der weiße Hai" ist Steven Spielberg.
Weiterführende Frage: Woher stammt Steven Spielberg?
Zwischenantwort: Die Vereinigten Staaten.
Weiterführende Frage: Wer ist der Regisseur von "Casino Royale"?
Zwischenantwort: Der Regisseur von "Casino Royale" ist Martin Campbell.
Weiterführende Frage: Woher stammt Martin Campbell?
Zwischenantwort: Neuseeland.
Also lautet die endgültige Antwort: Nein
Frage: Wer ist der Vater von George Washington?
Verwendung von Beispielauswahlfunktionen
Beispielbereitstellung für ExampleSelector
Hier verwenden wir denselben Beispielsatz und die gleiche Muster-Vorlage wie im vorherigen Abschnitt. Anstatt die Beispiele direkt dem Objekt FewShotPromptTemplate
bereitzustellen und alle Beispiele in die Musterfrage einzufügen, werden sie einem ExampleSelector
-Objekt übergeben, um einen Teil der Beispiele einzufügen.
In diesem Fall verwenden wir die Klasse SemanticSimilarityExampleSelector
. Diese Klasse wählt anhand ihrer Ähnlichkeit zum Eingang eine kleine Beispielauswahl aus. Sie verwendet ein Einbettungsmodell, um die Ähnlichkeit zwischen dem Eingang und den kleinen Beispielen zu berechnen, und führt dann eine Ähnlichkeitssuche in einer Vektordatenbank durch, um Beispiele zu finden, die dem Eingang ähnlich sind.
- Hinweis: Dies beinhaltet Vektorberechnungen und eine Vektordatenbank, die hauptsächlich im KI-Bereich für die Ähnlichkeitssuche von Daten verwendet werden, z. B. Abfragen von ähnlichen Artikelinhalten, ähnlichen Bildern, Videos usw. Erhalten Sie hier vorerst nur ein grundlegendes Verständnis.
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
)
question = "Wer ist der Vater von George Washington?"
selected_examples = example_selector.select_examples({"question": question})
print(f"Das ähnlichste Beispiel: {question}")
for example in selected_examples:
print("\\n")
for k, v in example.items():
print(f"{k}: {v}")
Hier werden Beispiele, die der Frage ähnlich sind, abgeglichen, und das Folgende wird zurückgegeben:
Chroma direkt über die lokale API ausführen.
Die Datenbank wird in DuckDB-Speicher verwendet. Die Daten sind vorübergehend.
Das ähnlichste Beispiel: Wer ist die Mutter von George Washingtons Großeltern?
question: Wer ist die Mutter von George Washington?
answer:
Müssen wir bei dieser Frage weitermachen: Ja.
Weiterführende Frage: Wer ist die Mutter von George Washington?
Zwischenantwort: Die Mutter von George Washington ist Mary Ball Washington.
Weiterführende Frage: Wer ist der Vater von Mary Ball Washington?
Zwischenantwort: Der Vater von Mary Ball Washington ist Joseph Ball.
Also lautet die endgültige Antwort: Joseph Ball
from fewshot import FewShotPromptTemplate
# Schließlich erstellen Sie ein Objekt der Klasse FewShotPromptTemplate. Basierend auf dem Beispiel-Auswahler aus dem vorherigen Beispiel, wählen Sie ein Beispiel aus, das der Frage ähnelt.
prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
suffix="Frage: {input}",
input_variables=["input"]
)
print(prompt.format(input="Wer ist der Vater von George Washington?"))