Modèles de prompt few-shot

Inclure des exemples interactifs dans les prompts aide le modèle à mieux comprendre l'intention de l'utilisateur et à fournir de meilleures réponses ou à exécuter des tâches. Les modèles de prompt few-shot font référence à l'utilisation d'un petit ensemble d'exemples pour guider le modèle dans le traitement de nouvelles entrées. Ces exemples peuvent être utilisés pour entraîner le modèle afin qu'il puisse mieux comprendre et répondre à des questions similaires.

Exemple:

Q: Qu'est-ce que Batman ?
A: Batman est un personnage de bande dessinée fictif.

Q: Qu'est-ce que la torsalplexité ?
A: Inconnu.

Q: Qu'est-ce qu'un modèle de langage ?
A:

Dites au modèle que Q est la question et A est la réponse, et interagissez dans ce format.

Ce qui suit est une explication de la classe d'outil fournie par Lanchain pour insérer un petit nombre d'exemples interactifs dans le prompt.

Utilisation de l'ensemble d'exemples

Création de l'ensemble d'exemples

Définissez un tableau examples ci-dessous, qui contient un ensemble d'exemples de questions-réponses.

from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate

examples = [
  {
    "question": "Quelle est la durée de vie la plus longue, celle de Muhammad Ali ou d'Alan Turing ?",
    "answer":
"""
Devons-nous faire un suivi de la question : Oui.
Suivi : Quel âge avait Muhammad Ali lorsqu'il est mort ?
Réponse intermédiaire : Muhammad Ali avait 74 ans lorsqu'il est mort.
Suivi : Quel âge avait Alan Turing lorsqu'il est mort ?
Réponse intermédiaire : Alan Turing avait 41 ans lorsqu'il est mort.
Donc la réponse finale est : Muhammad Ali
"""
  },
  {
    "question": "Quand le fondateur de Craigslist est-il né ?",
    "answer":
"""
Devons-nous faire un suivi de la question : Oui.
Suivi : Qui est le fondateur de Craigslist ?
Réponse intermédiaire : Craigslist a été fondé par Craig Newmark.
Suivi : Quand Craig Newmark est-il né ?
Réponse intermédiaire : Craig Newmark est né le 6 décembre 1952.
Donc la réponse finale est : 6 décembre 1952
"""
  },
  {
    "question": "Qui était la mère des grands-parents de George Washington ?",
    "answer":
"""
Devons-nous faire un suivi de la question : Oui.
Suivi : Qui est la mère de George Washington ?
Réponse intermédiaire : La mère de George Washington est Mary Ball Washington.
Suivi : Qui est le père de Mary Ball Washington ?
Réponse intermédiaire : Le père de Mary Ball Washington est Joseph Ball.
Donc la réponse finale est : Joseph Ball
"""
  },
  {
    "question": "Les réalisateurs de 'Les Dents de la Mer' et 'Casino Royale' viennent-ils du même pays ?",
    "answer":
"""
Devons-nous faire un suivi de la question : Oui.
Suivi : Qui est le réalisateur de 'Les Dents de la Mer' ?
Réponse intermédiaire : Le réalisateur de 'Les Dents de la Mer' est Steven Spielberg.
Suivi : D'où vient Steven Spielberg ?
Réponse intermédiaire : Les États-Unis.
Suivi : Qui est le réalisateur de 'Casino Royale' ?
Réponse intermédiaire : Le réalisateur de 'Casino Royale' est Martin Campbell.
Suivi : D'où vient Martin Campbell ?
Réponse intermédiaire : Nouvelle-Zélande.
Donc la réponse finale est : Non
"""
  }
]

Création d'un formateur pour ces petits exemples

Insérez simplement des exemples dans le modèle de prompt à l'aide de l'objet PromptTemplate.

exemple_prompt = PromptTemplate(input_variables=["question", "réponse"], template="Question : {question}\\n{réponse}")

print(exemple_prompt.format(**examples[0]))

Sortie :

Question : Quelle est la durée de vie la plus longue, celle de Muhammad Ali ou d'Alan Turing ?

Devons-nous faire un suivi de la question : Oui.
Suivi : Quel âge avait Muhammad Ali lorsqu'il est mort ?
Réponse intermédiaire : Muhammad Ali avait 74 ans lorsqu'il est mort.
Suivi : Quel âge avait Alan Turing lorsqu'il est mort ?
Réponse intermédiaire : Alan Turing avait 41 ans lorsqu'il est mort.
Donc la réponse finale est : Muhammad Ali

Fournir des échantillons et une mise en forme pour FewShotPromptTemplate

Avec l'objet FewShotPromptTemplate, vous pouvez insérer en masse du contenu d'exemple.

prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Question : {input}",
    input_variables=["input"]
)

print(prompt.format(input="Qui est le père de George Washington ?"))

Renvoie :

Question : Qui a une durée de vie plus longue, Muhammad Ali ou Alan Turing ?

Devons-nous suivre cette question : Oui.
Suivi : Quel âge avait Muhammad Ali quand il est mort ?
Réponse intermédiaire : Muhammad Ali avait 74 ans lorsqu'il est mort.
Suivi : Quel âge avait Alan Turing quand il est mort ?
Réponse intermédiaire : Alan Turing avait 41 ans lorsqu'il est mort.
Donc la réponse finale est : Muhammad Ali

Question : Quand le fondateur de craigslist est-il né ?

Devons-nous suivre cette question : Oui.
Suivi : Qui est le fondateur de craigslist ?
Réponse intermédiaire : craigslist a été fondé par Craig Newmark.
Suivi : Quand Craig Newmark est-il né ?
Réponse intermédiaire : Craig Newmark est né le 6 décembre 1952.
Donc la réponse finale est : 6 décembre 1952

Question : Qui est la mère des grands-parents de George Washington ?

Devons-nous suivre cette question : Oui.
Suivi : Qui est la mère de George Washington ?
Réponse intermédiaire : La mère de George Washington est Mary Ball Washington.
Suivi : Qui est le père de Mary Ball Washington ?
Réponse intermédiaire : Le père de Mary Ball Washington est Joseph Ball.
Donc la réponse finale est : Joseph Ball

Question : Les réalisateurs de "Les Dents de la mer" et de "Casino Royale" viennent-ils du même pays ?

Devons-nous suivre cette question : Oui.
Suivi : Qui est le réalisateur des "Dents de la mer" ?
Réponse intermédiaire : Le réalisateur des "Dents de la mer" est Steven Spielberg.
Suivi : D'où vient Steven Spielberg ?
Réponse intermédiaire : Des États-Unis.
Suivi : Qui est le réalisateur de "Casino Royale" ?
Réponse intermédiaire : Le réalisateur de "Casino Royale" est Martin Campbell.
Suivi : D'où vient Martin Campbell ?
Réponse intermédiaire : De Nouvelle-Zélande.
Donc la réponse finale est : Non

Question : Qui est le père de George Washington ?

Utilisation des sélecteurs d'exemples

Fournir des exemples à ExampleSelector

Ici, nous réutilisons l'ensemble d'exemples et le modèle de mise en forme d'exemples de la section précédente. Cependant, au lieu de fournir directement les exemples à l'objet FewShotPromptTemplate et d'insérer tous les exemples dans la demande, nous les fournirons à un objet ExampleSelector pour insérer une partie des exemples.

Nous utiliserons la classe SemanticSimilarityExampleSelector ici. Cette classe sélectionne un petit exemple basé sur sa similarité avec l'entrée. Elle utilise un modèle d'incorporation pour calculer la similarité entre l'entrée et les petits exemples, puis utilise une base de données vectorielle pour effectuer une recherche de similarité et récupérer des exemples similaires à l'entrée.

  • Remarque : Cela implique des calculs vectoriels et une base de données vectorielle, principalement utilisés dans le domaine de l'IA pour la recherche de similarité de données, tels que la recherche de contenu d'articles similaires, d'images similaires, de vidéos, etc. Gardez une compréhension simple pour le moment.
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 = "Qui est le père de George Washington ?"
selected_examples = example_selector.select_examples({"question": question})
print(f"L'exemple le plus similaire : {question}")
for example in selected_examples:
    print("\\n")
    for k, v in example.items():
        print(f"{k} : {v}")

Ici, des exemples similaires à la question sont assortis, et ce qui suit est retourné :

Exécution de Chroma directement en utilisant l'API locale.
    Utilisation de la base de données en mémoire DuckDB. Les données seront transitoires.
    L'exemple le plus similaire : Qui est la mère des grands-parents de George Washington ?

    question : Qui est la mère de George Washington ?
    answer : 
    Devons-nous suivre cette question : Oui.
    Suivi : Qui est la mère de George Washington ?
    Réponse intermédiaire : La mère de George Washington est Mary Ball Washington.
    Suivi : Qui est le père de Mary Ball Washington ?
    Réponse intermédiaire : Le père de Mary Ball Washington est Joseph Ball.
    Donc la réponse finale est : Joseph Ball

Fournir le sélecteur d'exemple à FewShotPromptTemplate

Enfin, créez un objet FewShotPromptTemplate. Sur la base du sélecteur d'exemple de l'exemple précédent, sélectionnez un exemple similaire à la question.

prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    suffix="Question : {input}",
    input_variables=["input"]
)

print(prompt.format(input="Qui est le père de George Washington?"))

Renvoie :

Question : Qui est la mère des grands-parents de George Washington?

Devons-nous faire un suivi avec cette question : Oui.
Suivi : Qui est la mère de George Washington?
Réponse intermédiaire : La mère de George Washington est Mary Ball Washington.
Suivi : Qui est le père de Mary Ball Washington?
Réponse intermédiaire : Le père de Mary Ball Washington est Joseph Ball.
Donc la réponse finale est : Joseph Ball

Question : Qui est le père de George Washington?