Fine-tuning vs Prompt Engineering : Choisir la bonne approche
Pourquoi le choix compte
Vous disposez d'un grand modèle de langage (LLM) et d'une tâche : peut-être classer des e-mails clients, générer des descriptions de produits ou répondre à des questions de support. Vous pouvez soit élaborer un prompt astucieux, soit affiner le modèle sur vos données. Les deux visent à améliorer les performances, mais diffèrent en coût, rapidité et flexibilité. Choisir le mauvais peut gaspiller des semaines d'efforts ou exploser votre budget. Cet article détaille les compromis et vous donne un cadre pratique pour décider.
Qu'est-ce que le prompt engineering ?
Le prompt engineering consiste à concevoir le texte d'entrée pour orienter la sortie du modèle. Vous pouvez utiliser des instructions, des exemples ou un raisonnement en chaîne. Les poids du modèle restent figés. Vous itérez sur le prompt jusqu'à ce que les résultats soient suffisamment bons.
- Avantages : Aucun entraînement requis, itération immédiate, fonctionne avec n'importe quelle API de modèle, faible coût initial.
- Inconvénients : Limité par la fenêtre de contexte, peut nécessiter de nombreux exemples (few-shot) ce qui augmente le coût en tokens, les performances plafonnent.
Le prompt engineering est souvent la première chose à essayer. C'est rapide et peu coûteux pour le prototypage.
Qu'est-ce que le fine-tuning ?
Le fine-tuning met à jour les poids du modèle sur votre jeu de données. Vous fournissez de nombreuses paires entrée-sortie, et le modèle apprend des motifs spécifiques à votre domaine. Cela peut se faire via des API (par ex., le fine-tuning d'OpenAI) ou localement avec des modèles open source.
- Avantages : Peut atteindre une meilleure précision sur des tâches de niche, réduit la longueur du prompt (économisant des tokens), peut améliorer la latence.
- Inconvénients : Nécessite des données étiquetées, coûte de l'argent et du temps pour l'entraînement, nécessite un réentraînement lorsque les données changent, risque de surapprentissage.
Le fine-tuning brille lorsque vous avez des milliers d'exemples et une tâche stable.
Différences clés en un coup d'œil
| Aspect | Prompt Engineering | Fine-Tuning |
|---|---|---|
| Données nécessaires | Quelques exemples (0–10) | Des centaines à des milliers |
| Coût initial | Faible (appels API) | Élevé (calcul d'entraînement) |
| Vitesse d'itération | Minutes | Heures à jours |
| Coût en tokens par requête | Plus élevé (prompts longs) | Plus faible (prompts courts) |
| Flexibilité | Élevée (modifiable à tout moment) | Faible (réentraîner pour mettre à jour) |
| Idéal pour | Tâches générales, prototypes rapides | Tâches spécialisées, à haut volume |
Quand utiliser le prompt engineering
Commencez par le prompt engineering si l'un de ces cas s'applique :
- Vous prototypez. Vous devez valider l'idée rapidement sans investir dans la collecte de données.
- Votre tâche est courante. La summarisation, la traduction et les questions-réponses simples fonctionnent souvent bien avec de bons prompts.
- Vous avez des données limitées. Moins de quelques centaines d'exemples étiquetés.
- Vos besoins changent souvent. Les modifications de prompt sont instantanées ; le fine-tuning nécessite un réentraînement.
- Vous utilisez plusieurs modèles. Un prompt qui fonctionne sur un modèle fonctionne souvent sur d'autres avec des ajustements mineurs.
Même si vous finissez par faire du fine-tuning, le prompt engineering vous aide à comprendre la tâche et les performances de référence.
Quand envisager le fine-tuning
Le fine-tuning devient attractif lorsque :
- Vous avez un grand jeu de données de haute qualité. Au moins quelques centaines d'exemples, idéalement des milliers.
- Le prompt engineering plafonne. Vous avez essayé divers prompts et exemples few-shot mais la précision stagne.
- Vous devez réduire les coûts en tokens. Les prompts longs avec de nombreux exemples sont coûteux à l'échelle ; un modèle affiné peut utiliser des prompts plus courts.
- Votre tâche nécessite des connaissances spécialisées. Jargon spécifique au domaine, formatage ou raisonnement difficile à spécifier dans un prompt.
- Vous avez besoin d'un format de sortie cohérent. Le fine-tuning peut imposer une structure mieux que de simples instructions.
Mais attention : le fine-tuning n'est pas une solution magique. Si vos données sont bruitées ou la tâche ambiguë, le modèle apprendra le bruit.
Approches hybrides : RAG et Few-Shot
Vous n'êtes pas obligé de choisir une seule option. La génération augmentée par récupération (RAG) combine un récupérateur avec un LLM : vous récupérez des documents pertinents et les incluez dans le prompt. C'est idéal pour les tâches à forte intensité de connaissances où les faits changent fréquemment. Le few-shot prompting (inclure des exemples dans le prompt) est une alternative légère au fine-tuning pour les tâches avec des motifs clairs.
Considérez ces compromis :
- RAG : Pour les connaissances dynamiques, aucun entraînement nécessaire.
- Few-shot prompting : Pour les tâches où quelques exemples suffisent.
- Fine-tuning + RAG : Affinez pour le style et le format, utilisez RAG pour les faits.
Un cadre de décision pratique
Suivez ces étapes pour choisir :
- Définissez des métriques de succès. Précision, latence, coût par requête.
- Essayez d'abord le prompt engineering. Passez un jour ou deux à itérer sur les prompts, y compris des exemples few-shot.
- Évaluez. Si les métriques répondent à vos besoins, arrêtez. Sinon, continuez.
- Évaluez les données. Avez-vous suffisamment de données étiquetées de haute qualité ? Sinon, envisagez la collecte de données ou RAG.
- Estimez les coûts. Comparez les coûts en tokens des prompts longs vs l'entraînement et l'inférence du fine-tuning.
- Pilotez le fine-tuning. Commencez avec un petit modèle si possible, mesurez l'amélioration.
- Surveillez et itérez. Les modèles affinés nécessitent un réentraînement périodique à mesure que les données dérivent.
Exemple de code : Fine-tuning avec l'API OpenAI
Voici un exemple minimal de préparation de données et de lancement d'une tâche de fine-tuning (conceptuel, non exécutable sans clé API) :
import openai
# Prepare dataset in JSONL format
# Each line: {"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
openai.api_key = "your-api-key"
# Upload file
file = openai.File.create(
file=open("training_data.jsonl", "rb"),
purpose="fine-tune"
)
# Create fine-tune job
job = openai.FineTuningJob.create(
training_file=file.id,
model="gpt-3.5-turbo"
)
print(job.id)
Cela illustre le flux de travail : préparation des données, téléchargement et création de la tâche. L'implémentation réelle varie selon le fournisseur.
Considérations sur les coûts et les performances
Le fine-tuning a des coûts initiaux (entraînement) et des coûts continus (inférence sur un modèle personnalisé, qui peut être plus élevé par token que les modèles de base). Le prompt engineering a des coûts initiaux plus faibles mais des coûts par requête plus élevés si les prompts sont longs. À l'échelle, le fine-tuning peut être moins cher s'il raccourcit considérablement les prompts. Cependant, si votre tâche change fréquemment, la surcharge de réentraînement peut l'emporter sur les économies.
En termes de performances, le fine-tuning peut surpasser le prompting sur des tâches étroites, mais il peut se dégrader sur des tâches générales (oubli catastrophique). Le prompting conserve les capacités générales du modèle.
FAQ
Puis-je faire du fine-tuning sans un grand jeu de données ?
Vous pouvez, mais les résultats peuvent être médiocres. Le fine-tuning nécessite généralement au moins quelques centaines d'exemples pour voir une amélioration significative. Avec moins, le prompt engineering ou le few-shot learning est plus efficace.
Le fine-tuning est-il toujours meilleur pour la production ?
Non. De nombreux systèmes en production reposent uniquement sur le prompt engineering, surtout lorsque les tâches sont générales ou que les données changent souvent. Le fine-tuning est meilleur pour des tâches stables et spécialisées avec suffisamment de données.
Comment savoir si mon prompt est assez bon ?
Définissez des métriques claires (par ex., précision, F1, évaluation humaine) et testez sur un ensemble de validation. Si le prompt atteint votre objectif, vous n'avez pas besoin de fine-tuning. S'il plafonne en dessous de l'objectif, envisagez le fine-tuning ou RAG.
Conclusion
Le prompt engineering et le fine-tuning sont complémentaires, pas mutuellement exclusifs. Commencez par le prompting, épuisez son potentiel, puis évaluez si le fine-tuning vaut l'investissement. Pour de nombreuses applications, un prompt bien conçu combiné à RAG ou à des exemples few-shot offre d'excellents résultats sans la surcharge de l'entraînement. Lorsque vous faites du fine-tuning, assurez-vous que vos données sont propres et vos métriques claires.
Besoin de formater des données d'entraînement JSONL ? Essayez notre JSON Formatter pour valider et embellir vos jeux de données avant de les télécharger.