Guide

Statut éditorial : En attente de relecture

Prompt Templates : structurer ses instructions avec LangChain

Créer des prompts réutilisables avec ChatPromptTemplate, séparer les rôles et valider les variables avant l’appel au modèle.

Classification du contenu

Types

  • Intelligence artificielle

Technologies

Niveau
Débutant
Prochaine vérification
10 novembre 2026

Un prompt copié dans une chaîne de caractères devient vite difficile à maintenir. Un template sépare les instructions stables des données variables et conserve les rôles des messages. Avec LangChain, ChatPromptTemplate produit la liste de messages attendue par un chat model.

Construire un template minimal

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "Tu es un rédacteur technique. Réponds en français."),
    ("human", "Explique {sujet} à un public {niveau}."),
])

messages = prompt.invoke({
    "sujet": "les embeddings",
    "niveau": "débutant",
})

Les noms entre accolades forment le contrat d’entrée. Un nom explicite comme niveau ou contraintes est plus facile à tester qu’une variable générique comme data.

Séparer instructions et contenu utilisateur

Le message système décrit le comportement durable : rôle, langue, politique de réponse et contraintes générales. Le message humain transporte la demande et les données propres à l’appel. Cette séparation améliore la lisibilité, mais ne constitue pas à elle seule une protection contre l’injection de prompt : les données externes doivent rester identifiées comme telles et les actions sensibles doivent être contrôlées dans le code.

Composer le prompt avec un modèle

from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser

model = ChatOpenAI(model="gpt-5-mini", temperature=0)
chain = prompt | model | StrOutputParser()
texte = chain.invoke({"sujet": "les embeddings", "niveau": "débutant"})

Le template reste indépendant du fournisseur. Le modèle et le traitement de sortie peuvent évoluer sans dupliquer les instructions.

Rendre le prompt testable

Vérifiez les variables requises, le rôle de chaque message et le format produit. Ajoutez des cas représentatifs dans un jeu de données : entrée normale, contenu vide, texte long, caractères spéciaux et tentative d’injection. Les tests ne doivent pas seulement comparer une phrase exacte ; ils peuvent vérifier la présence d’éléments attendus et l’absence de données interdites.

Éviter trois erreurs courantes

Première erreur : injecter directement un document non fiable dans le message système. Deuxième erreur : demander un format JSON uniquement en langage naturel alors qu’une sortie structurée est disponible. Troisième erreur : multiplier les règles contradictoires dans un seul bloc. Préférez des contraintes courtes, hiérarchisées et contrôlées par des tests.

À retenir

Questions fréquentes

Peut-on réutiliser un même template avec plusieurs modèles ?

Oui, si les modèles acceptent le même format de messages. Les capacités particulières, comme les outils ou le multimodal, peuvent toutefois nécessiter des adaptations.

Un template garantit-il une réponse conforme ?

Non. Il structure l’entrée. Pour une sortie exploitable par du code, utilisez un schéma, une validation et une stratégie de reprise sur erreur.

Contenus liés

Sources utilisées