Few-shot prompting : l'apprentissage par l'exemple
Le few-shot prompting consiste à fournir quelques exemples (shots) au modèle pour qu'il comprenne le pattern attendu. C'est l'une des techniques les plus fiables pour obtenir des sorties cohérentes et formatées.
Pourquoi le few-shot est puissant
- Communique le format de sortie mieux que toute description
- Désambiguïse les instructions floues
- Calibre le ton et le niveau de détail
- Fonctionne sur tous les modèles, même les plus petits
Combien d'exemples ?
- 1-2 exemples : Suffisant pour le format de sortie
- 3-5 exemples : Bon pour la classification et les tâches structurées
- 5-10 exemples : Pour les tâches avec beaucoup de nuances
- Au-delà : Rendements décroissants, préférer le fine-tuning
Structure d'un prompt few-shot
[Instruction optionnelle]
[Exemple 1]
Input: ...
Output: ...
[Exemple 2]
Input: ...
Output: ...
[Cas réel]
Input: ...
Output:Sélection des exemples
Diversité
Couvrir les différents cas de figure :
# Classification de tickets support
Ticket: "Je ne peux pas me connecter depuis 3 jours"
Catégorie: authentification
Priorité: haute
Ticket: "Comment changer ma photo de profil ?"
Catégorie: how-to
Priorité: basse
Ticket: "L'app crash quand j'ouvre les paramètres"
Catégorie: bug
Priorité: hauteExemples boundary
Inclure des cas limites pour calibrer :
# Cas ambigu - montrer la décision attendue
Ticket: "Le chargement est lent depuis la mise à jour"
Catégorie: performance # Pas "bug" car pas de crash
Priorité: moyenne # Pas "haute" car fonctionnelExemples négatifs
Montrer ce qu'il ne faut PAS faire :
# Résumé - bon exemple
Texte: [article de 500 mots]
Résumé: "L'entreprise X a levé 50M€ pour développer son outil de RAG." (1 phrase)
# Pas comme ça (trop long, trop de détails)Dynamic few-shot
Sélectionner les exemples dynamiquement selon la requête :
from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import SemanticSimilarityExampleSelector
selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
Chroma,
k=3 # 3 exemples les plus similaires
)
prompt = FewShotPromptTemplate(
example_selector=selector,
example_prompt=example_template,
prefix="Classifie le ticket suivant :",
suffix="Input: {input}\nOutput:"
)Formatage des exemples
Délimiteurs clairs
---
Input: "texte d'entrée"
Output: {"label": "...", "score": 0.9}
---Cohérence stricte
Tous les exemples doivent suivre exactement le même format. Une incohérence confond le modèle.
Erreurs courantes
- Exemples tous du même type (pas de diversité)
- Format incohérent entre les exemples
- Trop d'exemples (dépasse le contexte, dilue l'attention)
- Exemples non représentatifs des cas réels
- Oublier les cas limites (le modèle inventera son propre comportement)