Guide

Statut éditorial : Validé

Prompt Templates : structurer ses instructions avec LangChain

Créer des prompts LangChain lisibles, typés, testables et séparés des données non fiables.

Classification du contenu

Types

  • Modèles et API

Technologies

Niveau
Débutant
Publié le
10 août 2026
Dernière relecture
31 août 2026
Prochaine vérification
3 mars 2027

Un Prompt Template transforme des variables en texte ou messages destinés au modèle. Son intérêt n’est pas d’ajouter une couche décorative, mais de rendre le contrat visible, réutilisable et testable. Les instructions stables, les données utilisateur et le contexte récupéré doivent rester distincts.

Choisir texte ou messages

Pour une complétion simple, un template textuel suffit. Pour un modèle de chat, utilisez des messages système, utilisateur et éventuellement exemples avec leurs rôles. Ne concaténez pas aveuglément une conversation complète dans une chaîne : le format des messages et la chat template du fournisseur influencent le comportement.

Déclarer les variables

Donnez des noms métier, validez les champs obligatoires et définissez clairement les valeurs facultatives. Un template ne remplace pas un schéma d’entrée. Échappez ou encapsulez les données non fiables et indiquez qu’un document est une source, pas une instruction. Ne placez jamais de secrets dans le prompt.

Versionner et évaluer

Conservez les templates avec le code ou dans un registre versionné. Pour chaque changement, lancez un dataset de cas normaux, ambigus, hostiles et longs. Mesurez qualité, format, tokens et latence. Modifiez un seul élément à la fois afin d’attribuer les régressions.

Composition

Un template peut être composé avec un modèle et un parser via les primitives Runnable. Gardez cependant les étapes lisibles et typées. Si le parcours comporte boucles, outils et état durable, un graphe ou workflow est plus adapté qu’un template toujours plus complexe.

FAQ

Un template protège-t-il contre l’injection ?

Non. Il aide à séparer les rôles, mais les permissions et validations doivent être appliquées dans le code.

Faut-il tout mettre dans le message système ?

Non. Conservez seulement les règles stables et placez contexte et demande dans des champs distincts.

Peut-on partager un template entre modèles ?

Oui comme point de départ, mais retestez format, outils et comportement pour chaque modèle.

Template de messages avec historique borné

~~~python from langchain_core.prompts import ( ChatPromptTemplate, MessagesPlaceholder, )

prompt = ChatPromptTemplate.from_messages([ ("system", "Réponds à partir du contexte fourni. Cite les sources."), MessagesPlaceholder("history", optional=True), ("human", "Contexte :\n{context}\n\nQuestion : {question}"), ])

messages = prompt.invoke({ "context": "[doc-12] Les jetons expirent après 30 minutes.", "question": "Quand dois-je renouveler le jeton ?", "history": [], }) ~~~

N’utilisez pas une interpolation pour fabriquer un rôle système à partir du texte utilisateur. Vérifiez que toutes les variables attendues sont présentes et bornez historique et contexte avant le rendu. Pour tester le template, inspectez les messages produits — rôles, ordre et contenu — plutôt qu’une simple chaîne finale. Versionnez les modifications importantes du prompt avec les résultats d’évaluation associés.

Sources utilisées