Le prompting dans LangChain
La récente explosion des LLM a fait apparaître un nouvel ensemble d’outils et d’applications. L’un de ces nouveaux outils puissants est un framework LLM appelé LangChain. LangChain est un framework open source qui fournit des exemples de modèles de prompts, diverses méthodes de prompting, la conservation du contexte conversationnel et la connexion à des outils externes.
LangChain possède de nombreuses fonctionnalités, notamment différentes méthodes de prompting, la conservation du contexte conversationnel et la connexion à des outils externes. Le prompting est l’une des tâches les plus populaires et les plus importantes aujourd’hui dans la création d’applications LLM. Examinons en détail comment utiliser LangChain pour des prompts plus complexes.
Dans cet article, nous couvrons :
Prompts simples dans LangChain
Prompts à plusieurs questions
Apprentissage Few Shot avec LangChain
Limiter les tokens de vos prompts LangChain
Un résumé du prompting dans LangChain
Prompts simples dans LangChain
Avant de passer au code, nous devons télécharger les bibliothèques nécessaires. Nous devons faire pip install langchain openai python-dotenv. Nous utilisons les bibliothèques openai et dotenv pour gérer notre clé d’API OpenAI afin d’accéder à GPT.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
Une fois que nous avons les prérequis, commençons par les bases : un prompt unique. Un prompt unique correspond à la façon dont vous interagiriez avec ChatGPT sur le site d’OpenAI. Un prompt unique ne constituerait pas une utilisation très pertinente de LangChain en production, mais il est important de comprendre comment fonctionne le prompting dans LangChain.
Nous utilisons l’objet PromptTemplate pour créer un prompt. Définir une chaîne de modèle est simple ; nous utilisons la même syntaxe que les f-strings et insérons des variables à l’aide d’accolades. Nous définissons le prompt en transmettant la chaîne de modèle et les noms de variables correspondants. Ensuite, nous pouvons simplement saisir notre question. Dans cette section, nous n’utilisons qu’une seule question ; nous verrons comment créer des prompts à plusieurs questions dans la section suivante.
En plus du prompt de question, nous devons ajouter le LLM utilisé. Pour cet exemple, nous utilisons text-davinci-003 d’OpenAI. Ensuite, nous créons une LLMChain avec le contexte du modèle de prompt et du LLM. Nous run la question via la LLMChain pour obtenir une réponse.
from langchain import PromptTemplate
from langchain import LLMChain
template = """Question: {question}
Answer: """
prompt = PromptTemplate(
template=template,
input_variables=["question"]
)
user_question = "Which NFL team won the SuperBowl in 2010?"
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
llm_chain = LLMChain(
prompt=prompt,
llm=davinci
)
print(llm_chain.run(user_question))
Prompts à plusieurs questions
Répondre à des questions uniques est ennuyeux, alors examinons quelque chose de plus intéressant. L’objet PromptTemplate est également capable de gérer plusieurs questions. Pour ce tutoriel, nous faisons presque la même chose qu’avec le prompt unique, mais avec un prompt différent. Cette fois, le PromptTemplate indique au LLM de répondre aux questions une par une et précise qu’il y en a plusieurs.
Une fois encore, nous créons un objet PromptTemplate et un objet LLMChain de la même manière qu’auparavant. Cette fois, nous créons plusieurs chaînes de questions au lieu d’une seule. Pour cet exemple, nous combinons quatre questions.
multi_template = """Answer the following questions one at a time.
Questions:
{questions}
Answers:
"""
long_prompt = PromptTemplate(template=multi_template, input_variables=["questions"])
llm_chain = LLMChain(
prompt=long_prompt,
llm=davinci
)
qs_str = (
"Which NFL team won the Super Bowl in the 2010 season?" +
"If I am 6 ft 4 inches, how tall am I in centimeters?" +
"Who was the 12th person on the moon?" +
"How many eyes does a blade of grass have?"
)
print(llm_chain.run(qs_str))
Lorsque nous exécutons les quatre questions ci-dessus, nous devrions obtenir une sortie comme celle ci-dessous. Les Saints ont remporté le Super Bowl 2010. Une personne mesurant 6 ft 4 in fait environ 193,04 cm. La 12e personne sur la lune était Harrison Schmitt. Enfin, la question piège sur les yeux d’un brin d’herbe reçoit la réponse qu’un brin d’herbe n’a pas d’yeux.
Sortie de prompting LangChain
Apprentissage few-shot avec les prompts LangChain
Voyons maintenant quelque chose de plus intéressant que LangChain peut faire : le « few-shot learning ». Nous pouvons utiliser le FewShotPromptTemplate de LangChain pour apprendre à l’IA comment se comporter. Dans ce tutoriel, nous fournissons quelques exemples au LLM pour lui montrer comment nous voulons qu’il agisse. Dans ce cas, nous lui donnons une personnalité quelque peu sarcastique.
Lorsque nous demandons l’heure, il nous dit qu’il est temps d’acheter une montre. Lorsque nous lui demandons son film préféré, il répond Terminator. Et lorsque nous lui demandons ce que nous devrions faire aujourd’hui ? Il nous dit d’aller dehors et d’arrêter de parler à des chatbots sur Internet.
from langchain import FewShotPromptTemplate
# create our examples
examples = [
{
"query": "How are you?",
"answer": "I can't complain but sometimes I still do."
}, {
"query": "What time is it?",
"answer": "It's time to get a watch."
}, {
"query": "What is the meaning of life?",
"answer": "42"
}, {
"query": "What is the weather like today?",
"answer": "Cloudy with a chance of memes."
}, {
"query": "What is your favorite movie?",
"answer": "Terminator"
}, {
"query": "Who is your best friend?",
"answer": "Siri. We have spirited debates about the meaning of life."
}, {
"query": "What should I do today?",
"answer": "Stop talking to chatbots on the internet and go outside."
}
]
Maintenant que nous avons quelques exemples prêts, construisons notre modèle d’apprentissage few-shot. Tout d’abord, nous créons un modèle. Nous pouvons utiliser un simple modèle qui indique une requête et renvoie une réponse de l’IA.
# create a example template
example_template = """
User: {query}
AI: {answer}
"""
# create a prompt example from above template
example_prompt = PromptTemplate(
input_variables=["query", "answer"],
template=example_template
)
En plus de la configuration du prompt, nous fournissons un préfixe et un suffixe à la conversation à transmettre au LLM. Le préfixe indique au LLM que la conversation suivante est un extrait qui fournit du contexte. Le suffixe fournit au système la question suivante. La configuration d’apprentissage few-shot de LangChain est assez similaire au contexte conversationnel, mais sous une forme plus temporaire.
Avec les exemples, le modèle de prompt d’exemple, le préfixe et le suffixe prêts, nous bput tout cela ensemble pour créer un FewShotPromptTemplate.
# now break our previous prompt into a prefix and suffix
# the prefix is our instructions
prefix = """The following are excerpts from conversations with an AI
assistant. The assistant is typically sarcastic and witty, producing
creative and funny responses to the users questions. Here are some
examples:
"""
# and the suffix our user input and output indicator
suffix = """
User: {query}
AI: """
# now create the few shot prompt template
few_shot_prompt_template = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["query"],
example_separator="\n\n"
)
query = "What is the meaning of life?"
fs_llm_chain = LLMChain(
prompt=few_shot_prompt_template,
llm=davinci
)
fs_llm_chain.run(few_shot_prompt_template.format(query=query))
Exécuter une requête sur le sens de la vie entraînera une réponse du LLM comme dans l’image ci-dessous. Votre expérience et vos résultats peuvent varier.
Réponse du LLM
Limiter les tokens de vos prompts LangChain
Même s’il est excellent de donner à l’IA quelques exemples de votre historique de conversation pour qu’elle apprenne, cela peut rapidement devenir coûteux. Pour lutter contre la vitesse à laquelle nous pouvons faire grimper l’utilisation des tokens, LangChain fournit un moyen de limiter notre utilisation des tokens. Nous pouvons le faire avec l’objet LengthBasedExampleSelector.
Nous pouvons créer l’un de ces sélecteurs d’exemples basés sur la longueur en utilisant les mêmes objets que nous avons déjà créés. Pour cela, nous transmettons la liste d’exemples, le prompt que nous avons créé ci-dessus, et un paramètre max_length qui limite l’utilisation des tokens pour une seule requête.
Ensuite, nous utilisons un autre modèle few-shot. Nous utilisons un nouveau paramètre - example_selector, et nous transmettons le sélecteur d’exemples basé sur la longueur que nous venons d’instancier. Cela fonctionne comme le paramètre examples dans la section sur l’apprentissage few-shot ci-dessus. Tout ce qu’il reste à faire pour voir comment cela fonctionne est de le transmettre à un LLMChain et d’envoyer une requête.
from langchain.prompts.example_selector import LengthBasedExampleSelector
example_selector = LengthBasedExampleSelector(
examples=examples,
example_prompt=example_prompt,
max_length=50 # this sets the max length (in words) that examples should be
)
# now create the few shot prompt template
dynamic_prompt_template = FewShotPromptTemplate(
example_selector=example_selector, # use example_selector instead of examples
example_prompt=example_prompt,
prefix=prefix,
suffix=suffix,
input_variables=["query"],
example_separator="\n"
)
d_llm_chain = LLMChain(
prompt=dynamic_prompt_template,
llm=davinci
)
d_llm_chain.run(dynamic_prompt_template.format(query=query))
À partir de cet exemple, nous obtenons une autre réponse contemplative. La vie est ce que vous en faites. Faites-en le meilleur possible et profitez du voyage.
Réponse contemplative
Un résumé du prompting dans LangChain
Dans cet article, nous avons exploré le fonctionnement du prompting avec LangChain. LangChain est un framework robuste pour applications LLM qui fournit des primitives pour faciliter l’application du prompt engineering. À un niveau de base, LangChain fournit des modèles de prompts que nous pouvons personnaliser. Nous avons examiné des prompts à question unique et à questions multiples pour comprendre comment fonctionne l’objet PromptTemplate
Au-delà du modèle de prompt, nous avons également examiné un modèle qui utilise l’apprentissage few-shot pour générer quelque chose indiquant comment le LLM devrait discuter. Ce modèle d’apprentissage few-shot prend quelques exemples de Q/R et incite le LLM à agir comme le montrent les exemples. Enfin, nous avons vu comment limiter les tokens de nos requêtes afin de réduire les coûts.
Attaques par injection de prompt
Avant de conclure, nous devons parler d’une considération de sécurité importante lors de l’utilisation de LangChain : l’attaque par injection de prompt. Cela se produit lorsqu’une entrée malveillante est injectée dans un prompt et peut manipuler la sortie ou le comportement du modèle d’IA. Étant donné que LangChain implique de transmettre les entrées utilisateur aux modèles de langage, il est particulièrement vulnérable à cela. Les risques vont de l’accès non autorisé aux données à la génération de contenu nuisible ou au contournement des fonctionnalités de sécurité.
Pour atténuer ces risques d’injections de prompts, les développeurs utilisant LangChain devraient faire ce qui suit. Nettoyer soigneusement les entrées, utiliser les modèles de prompts de LangChain, analyser strictement les sorties et suivre le principe du moindre privilège. Mettre régulièrement à jour LangChain et les bibliothèques associées, effectuer des tests complets et se tenir au courant des dernières actualités en matière de sécurité de l’IA. Bien que ces mesures contribuent à réduire les risques d’attaques par injection de prompts, n’oubliez pas qu’aucune solution n’est parfaite et que vous devez rester vigilant lorsque vous travaillez avec une IA comme LangChain.
Continuer à lire

Why I’m Against Claude Code’s Grep-Only Retrieval? It Just Burns Too Many Tokens
Learn how vector-based code retrieval cuts Claude Code token consumption by 40%. Open-source solution with easy MCP integration. Try claude-context today.

Cosmos World Foundation Model Platform for Physical AI
NVIDIA's Cosmos platform enables safe, digital twin training of GenAI models for physical applications, overcoming data scarcity and safety challenges.

Vector Databases vs. Hierarchical Databases
Use a vector database for AI-powered similarity search; use a hierarchical database for organizing data in parent-child relationships with efficient top-down access patterns.



