Dans le domaine du développement avec les grands modèles de langage (LLMs), la pertinence des prompts conditionne largement la qualité des résultats obtenus. Les Example Selectors jouent un rôle crucial dans la construction de prompts adaptés et intelligents. Ces composants permettent de sélectionner dynamiquement les meilleurs exemples à inclure dans un prompt, en fonction de l'entrée fournie, tout en respectant les limites imposées par la taille de la fenêtre de contexte du modèle.
Que vous soyez en train de construire un agent conversationnel, une application de question-réponse, une interface de traduction ou un système de classification, les Example Selectors vous permettent d'adapter vos exemples à la volée pour améliorer la compréhension du modèle. Ils répondent à un enjeu central : comment fournir au modèle suffisamment de contexte pertinent sans l'encombrer inutilement ?
Dans cet article, nous allons plonger en profondeur dans l'univers des
Example Selectors de
LangChain. Nous détaillerons les types existants, leur fonctionnement interne, les cas d'usage dans lesquels ils excellent, et comment les intégrer dans vos flux de prompts dynamiques. Nous verrons aussi comment créer vos propres logiques de sélection personnalisées pour des scénarios spécifiques, notamment lorsqu'aucune solution préexistante ne répond exactement à votre besoin. Enfin, nous aborderons les possibilités d'intégration avec des jeux de données versionnés comme ceux de LangSmith pour pousser encore plus loin l'automatisation de la sélection d'exemples.
Qu'est-ce qu'un Example Selector ?
Un ExampleSelector est une interface fournie par LangChain, dont la méthode principale est selectexamples(inputvariables: Dict[str, str]) -> List[dict]. Cette méthode retourne dynamiquement une liste d'exemples à inclure dans un prompt, en fonction des variables d'entrée. L'objectif est de fournir des exemples pertinents sans surcharger le contexte utilisé par le LLM, ce qui permet de maximiser la performance du modèle.
Chaque implémentation d'Example Selector peut avoir sa propre logique de sélection : similarité sémantique, longueur du contenu, chevauchement lexical, ou toute autre métrique pertinente. LangChain fournit plusieurs implémentations prêtes à l'emploi, mais vous pouvez également définir vos propres sélecteurs si vos besoins dépassent les cas standards.
Les principaux types d'Example Selectors
LangChain propose plusieurs stratégies intégrées pour la sélection automatique d'exemples. Voici les plus utilisées :
1. Similarity Selector
Ce sélecteur choisit les exemples les plus proches de l'entrée en utilisant des embeddings vectoriels. Il repose sur des bibliothèques comme OpenAI Embeddings et
des moteurs de recherche vectorielle tels que Chroma ou FAISS. Il est idéal lorsque la compréhension du sens global est plus importante que la correspondance exacte des mots.
Cette approche permet de capter les nuances sémantiques entre l'entrée et les exemples. Elle est particulièrement efficace dans les applications nécessitant une compréhension contextuelle profonde, comme lors de la
gestion de l'historique de conversation avec LangChain.
2. MMR (Maximal Marginal Relevance) Selector
La sélection MMR combine la similarité sémantique avec une métrique de diversité. Cela signifie qu'en plus de chercher les exemples les plus pertinents par rapport à l'entrée, elle tente d'éviter de sélectionner des exemples trop similaires entre eux.
Cette méthode est idéale pour créer des prompts équilibrés contenant des cas variés et complémentaires, améliorant ainsi la robustesse des réponses du modèle.
3. Length-Based Selector
Ce sélecteur évalue la taille totale des exemples formatés et sélectionne ceux qui respectent un seuil de longueur. Il est très utile pour contrôler le volume du prompt généré, surtout si vous travaillez avec des modèles ayant des contextes limités.
En fonction de la longueur de l'entrée, ce sélecteur peut ajuster dynamiquement le nombre d'exemples inclus. Cela permet d'optimiser l'utilisation de l'espace de contexte sans sacrifier la qualité.
4. N-gram Overlap Selector
Le NGramOverlapExampleSelector classe les exemples en fonction du nombre de n-grammes partagés avec l'entrée. Il repose sur un score BLEU calculé via la bibliothèque NLTK.
Cette approche est simple, rapide, et très utile lorsque les entrées ont des structures lexicales proches des exemples disponibles. Elle offre un bon compromis entre performance et coût computationnel.
On peut facilement enrichir le pool d'exemples avec de nouveaux cas :
Créer un Example Selector personnalisé
Dans certains cas, vous souhaiterez créer votre propre logique de sélection. Voici un exemple simple qui sélectionne un exemple en fonction de la longueur du mot d'entrée. Cela peut être utile pour des cas pédagogiques ou des entrées très contrôlées.
Un tel sélecteur personnalisé peut également être enrichi pour intégrer des critères supplémentaires : score de confiance, présence de mots-clés, etc.
Intégration dans un Prompt Few-Shot
Tous les Example Selectors peuvent être intégrés dans des prompts dynamiques via la classe FewShotPromptTemplate.
Cela permet d'automatiser complètement la sélection et la mise en forme des exemples pour chaque nouvelle requête utilisateur.
Utilisation avec LangSmith
LangSmith est une plateforme complémentaire à LangChain qui permet de gérer des datasets versionnés. Ces jeux de données peuvent être utilisés comme source dynamique d'exemples pertinents grâce à des fonctionnalités d'indexation et de recherche.
Cette méthode permet d’externaliser les exemples, d’assurer leur traçabilité, et de faciliter leur mise à jour sans avoir à modifier le code de l’application.
Vous pouvez même combiner cela avec des chaînes asynchrones en utilisant RunnableLambda pour adapter dynamiquement les exemples au contexte d’appel.
Conclusion
Les Example Selectors de LangChain représentent une pièce maîtresse dans la création de prompts efficaces, évolutifs et adaptés au contexte. Grâce à eux, vous pouvez automatiser la sélection des exemples, optimiser l’utilisation de l’espace de contexte, et améliorer significativement la qualité des réponses produites par les LLMs.
LangChain vous donne le choix entre des sélecteurs prônant la similarité sémantique, la diversité, l’optimisation de la longueur, ou le chevauchement lexical. Et si aucune méthode existante ne suffit, vous avez la liberté de créer vos propres stratégies. En combinant ces outils à des sources dynamiques comme LangSmith, vous obtenez une solution robuste, personnalisable, et prête pour la production.