Une ingénierie de prompt efficace combine une communication claire, une utilisation stratégique des exemples et une expérimentation systématique.
Les techniques fondamentales que nous allons explorer, notamment le zero-shot prompting, le few-shot prompting, le raisonnement par chaîne de pensée, le role prompting et le prompt chaining, constituent une base solide pour travailler avec les modèles linguistiques d’IA.
Les principes clés restent les mêmes pour tous les modèles et toutes les applications :
- Soyez précis et clair dans vos instructions.
- Fournissez un contexte suffisant pour que le modèle puisse fonctionner.
- Spécifiez le format de sortie dont vous avez besoin.
- Utilisez des exemples lorsqu’ils apportent une valeur ajoutée et itérez en fonction des résultats.
L’ingénierie des prompts consiste à élaborer des instructions qui guident les modèles linguistiques d’IA afin qu’ils génèrent les résultats souhaités.
À première vue, cela peut sembler simple. Il suffit de dire à l’IA ce que l’on veut, et elle s’exécute. Cependant, quiconque a déjà travaillé avec ces modèles se rend vite compte que rédiger des prompts efficaces est plus difficile qu’il n’y paraît.
La facilité avec laquelle on peut se lancer dans l’ingénierie des prompts peut être trompeuse.
Si tout le monde peut rédiger un prompt, tout le monde n’est pas capable d’en rédiger un qui produise systématiquement des résultats de haute qualité.
Les principes fondamentaux sont accessibles, mais la maîtrise nécessite de la pratique, de l’expérimentation et une compréhension de la manière dont ces modèles traitent l’information.
Dans cet article, nous examinerons les techniques essentielles et les meilleures pratiques en matière d’ingénierie des prompts. Nous explorerons différentes approches de prompts, allant de simples instructions « zero-shot » au raisonnement avancé par chaîne de pensée.
Qu’est-ce qui fait un bon prompt ?
Une prompt se compose généralement de plusieurs éléments :
- La description de la tâche explique ce que nous voulons que le modèle fasse, y compris le rôle ou le personnage qu’il doit adopter.
- Le contexte fournit les informations de base nécessaires. Les exemples illustrent le comportement ou le format souhaité.
- La tâche concrète est la question spécifique à laquelle il faut répondre ou l’action à effectuer.
La plupart des API permettent de distinguer les prompts du système des prompts de l’utilisateur.
- Les prompts système contiennent généralement des descriptions de tâches et des instructions de jeu de rôle qui déterminent le comportement du modèle tout au long de la conversation.
- En revanche, les prompts utilisateur contiennent la tâche ou la question proprement dite.
Par exemple, si nous développons un chatbot destiné à aider les acheteurs à comprendre les informations relatives à un bien immobilier, le prompt système pourrait demander au modèle d’agir comme un agent immobilier expérimenté, tandis que le prompt utilisateur contiendrait la question spécifique concernant un bien immobilier.
La clarté est le facteur clé d’une formulation efficace des prompts. Tout comme une communication claire aide les humains à comprendre ce dont nous avons besoin, des instructions précises et sans ambiguïté aident les modèles d’IA à générer des réponses appropriées. Nous devons expliquer exactement ce que nous voulons, définir les systèmes de notation ou les formats attendus, et éliminer toute supposition quant à ce que le modèle pourrait déjà savoir.
Le contexte est tout aussi important. Fournir des informations pertinentes aide les modèles à mieux fonctionner et réduit les hallucinations. Si nous voulons que le modèle réponde à des questions sur un article de recherche, inclure cet article dans le contexte améliorera considérablement la qualité de la réponse. Sans contexte suffisant, le modèle doit s’appuyer sur ses connaissances internes, qui peuvent être obsolètes ou incorrectes.
Comment les modèles traitent les prompts
L’apprentissage en contexte est le mécanisme fondamental qui permet à l’ingénierie des prompts de fonctionner.
Ce terme désigne la capacité d’un modèle à acquérir de nouveaux comportements à partir d’exemples fournis dans le prompt lui-même, sans qu’il soit nécessaire de modifier les poids du modèle. Lorsque nous montrons à un modèle des exemples illustrant comment effectuer une tâche, il peut adapter ses réponses pour qu’elles correspondent au modèle que nous lui avons présenté.
Les modèles comprennent généralement mieux les instructions situées au début et à la fin des prompts qu’au milieu. Ce phénomène, parfois appelé le problème de « l’aiguille dans une botte de foin », signifie que nous devons placer les informations les plus importantes à des endroits stratégiques dans nos prompts.
Le nombre d’exemples nécessaires dépend à la fois des capacités du modèle et de la complexité de la tâche. Les modèles plus performants ont généralement besoin de moins d’exemples pour comprendre ce que nous voulons.
- Pour des tâches plus simples, les modèles puissants peuvent ne nécessiter aucun exemple.
- Pour les applications spécifiques à un domaine ou les exigences de mise en forme complexes, fournir plusieurs exemples peut faire une différence significative.
Techniques de base pour la formulation des prompts
Examinons quelques techniques clés de formulation des prompt s:
Technique 1 : la formulation de prompt « zero-shot »
La formulation de prompt « zero-shot » consiste à donner des instructions au modèle sans fournir d’exemples. Dans cette approche, nous décrivons simplement ce que nous voulons, et le modèle tente de répondre à la demande en se basant sur son apprentissage.
Cette technique est particulièrement efficace pour les tâches simples où le résultat attendu ressort clairement des instructions seules. Par exemple, « Traduisez le texte suivant en français » ou « Résumez cet article en trois phrases » sont deux exemples de prompts « zero-shot » efficaces.
Le principal avantage des prompts « zero-shot » réside dans leur efficacité. Ils utilisent moins de tokens, ce qui réduit les coûts et la latence. Ces prompts sont également plus simples à rédiger et à maintenir. Cependant, les prompts « zero-shot » présentent certaines limites. Lorsque nous avons besoin d’une mise en forme ou d’un comportement spécifique qui diffère des réponses par défaut du modèle, les prompts « zero-shot » peuvent s’avérer insuffisants.
Les bonnes pratiques en matière de prompts « zero-shot » consistent :
- à être aussi explicite que possible sur ce que nous voulons
- à spécifier clairement le format de sortie
- et à énoncer d’emblée toute contrainte ou exigence.
Si la réponse initiale du modèle ne correspond pas à nos attentes, nous devons réviser le prompt pour y ajouter plus de détails plutôt que de passer immédiatement à des exemples « few-shot ».
Technique 2 : le « few-shot prompting »
Le « few-shot prompting » consiste à fournir des exemples illustrant la manière dont nous souhaitons que le modèle réponde. Le « one-shot prompting » utilise un seul exemple, tandis que le « few-shot » implique généralement deux à cinq exemples, voire plus.
Cette technique s’avère utile lorsque nous avons besoin d’une mise en forme spécifique ou lorsque le comportement souhaité pourrait être ambigu si l’on se base uniquement sur les instructions. Par exemple, si nous développons un bot destiné à dialoguer avec de jeunes enfants et que nous voulons qu’il réponde d’une manière particulière aux questions concernant des personnages fictifs, donner un exemple aide le modèle à comprendre le ton et l’approche attendus.
Le nombre d’exemples a son importance. Un plus grand nombre d’exemples conduit généralement à de meilleures performances, mais nous sommes limités par la longueur du contexte et des considérations de coût. Pour la plupart des applications, trois à cinq exemples constituent un bon compromis. Nous devons faire des essais pour trouver le nombre optimal pour notre cas d’utilisation spécifique.
Lors de la mise en forme des exemples, nous pouvons économiser des tokens en choisissant des structures efficaces. Par exemple, « pizza -> comestible » utilise moins de tokens que « Entrée : pizza, Sortie : comestible » tout en transmettant la même information. Ces petites optimisations s’additionnent, en particulier lorsque l’on travaille avec plusieurs exemples.
Technique 3 : Chain-of-Thought Prompting
La formulation de prompts par chaîne de pensée, souvent abrégée en CoT, consiste à demander explicitement au modèle de réfléchir étape par étape avant de fournir une réponse. Cette technique encourage la résolution systématique des problèmes et s’est avérée améliorer considérablement les performances sur des tâches de raisonnement complexes.
La mise en œuvre la plus simple consiste à ajouter des expressions telles que « réfléchis étape par étape » ou « explique ton raisonnement » à nos prompts. Le modèle traite alors le problème de manière méthodique, en montrant son processus de raisonnement avant d’arriver à une conclusion.
Le CoT améliore souvent les performances des modèles dans divers tests de performance, en particulier pour les problèmes mathématiques, les casse-têtes logiques et les tâches de raisonnement en plusieurs étapes. Le CoT contribue également à réduire les « hallucinations », car le modèle doit justifier ses réponses par des étapes de raisonnement explicites.
Nous pouvons implémenter le CoT de plusieurs façons. Le CoT « zero-shot » ajoute simplement une instruction de raisonnement à notre prompt . Nous pouvons également spécifier les étapes exactes que nous voulons que le modèle suive, ou fournir des exemples illustrant le processus de raisonnement. Le choix de la variante dépend de l’application spécifique et du degré de contrôle dont nous avons besoin sur la structure du raisonnement.
Le compromis avec le CoT est une latence et un coût accrus. Le modèle génère davantage de tokens au fur et à mesure qu’il avance dans son raisonnement, ce qui prend plus de temps et augmente les coûts de l’API. Pour les tâches complexes où la précision est cruciale, ce compromis en vaut généralement la peine.
Technique 4 : Role Prompting
Le « role prompting » attribue au modèle un personnage ou un domaine d’expertise spécifique. En demandant au modèle d’adopter un rôle particulier, nous influençons la perspective et le style de ses réponses.
L’utilisation de prompts de rôle est particulièrement efficace pour les applications de service client, les contenus éducatifs, l’écriture créative et tout scénario où le contexte ou le niveau d’expertise importe. Le modèle peut s’adapter : au vocabulaire, au niveau de détail et son approche en fonction du rôle attribué.
Lorsque l’on utilise des prompts de rôle, il faut être précis quant au rôle et à ses caractéristiques pertinentes. Plutôt que de simplement dire « agissez comme un enseignant », on pourrait dire « agissez comme un enseignant de CP encourageant qui met l’accent sur l’effort et la progression ». Plus nous sommes précis, mieux le modèle peut incarner cette perspective.
Technique 5 : Prompt Chaining et décomposition des prompts
L’enchaînement des prompts consiste à décomposer des tâches complexes en sous-tâches plus petites et gérables, chacune avec son propre prompt. Au lieu de tout traiter dans une seul prompt gigantesque, nous créons une série de prompts plus simples et les enchaînons.
Prenons l’exemple d’un chatbot de service client. Le processus de réponse à une demande client peut être décomposé en deux étapes principales : le premièr prompt vise uniquement à déterminer si le client a besoin d’aide pour la facturation, d’un support technique, d’une gestion de compte ou d’informations générales. En fonction de cette classification, nous utilisons ensuite un deuxième prompt spécialisée pour générer la réponse proprement dite.
- Classer l’intention de la demande
- Générer une réponse appropriée en fonction de cette intention
Cette approche offre plusieurs avantages. Chaque prompt est plus simple à rédiger et à maintenir. Nous pouvons surveiller et déboguer chaque étape indépendamment. Nous pouvons utiliser différents modèles pour différentes étapes, par exemple un modèle plus rapide et moins coûteux pour la classification des intentions et un modèle plus puissant pour la génération de réponses. Nous pouvons également exécuter des étapes indépendantes en parallèle lorsque cela est possible.
Le principal inconvénient est une latence perçue accrue pour les utilisateurs finaux. Avec plusieurs étapes, les utilisateurs attendent plus longtemps pour voir le résultat final. Cependant, pour les applications complexes, la fiabilité et la maintenabilité accrues l’emportent souvent sur cette préoccupation.
Bonnes pratiques pour rédiger des prompts efficaces
Voici quelques bonnes pratiques pour des prompts efficaces :
- Soyez clair et précis : L’ambiguïté est l’ennemie d’un prompt efficace. Nous devons éliminer toute incertitude quant à ce que nous voulons que le modèle fasse. Si nous voulons que le modèle note des dissertations, nous devons préciser l’échelle de notation. Doit-il utiliser une échelle de 1 à 5 ou de 1 à 10 ? Les notes fractionnaires sont-elles autorisées ? Que doit faire le modèle s’il a des doutes sur une note ?
- Fournissez un contexte suffisant : le contexte aide les modèles à générer des réponses précises et pertinentes. Si nous voulons que le modèle réponde à des questions sur un document, il est essentiel d’inclure ce document dans la consigne. Sans cela, le modèle ne peut s’appuyer que sur ses données d’entraînement, ce qui peut conduire à des informations obsolètes ou incorrectes.
- Préciser le format de sortie : Nous devons indiquer explicitement comment nous voulons que le modèle réponde. Souhaitons-nous une réponse concise ou une explication détaillée ? La sortie doit-elle être au format JSON, sous forme de liste à puces ou de paragraphe ? Le modèle doit-il inclure des préambules ou aller droit au but ?
- Utiliser les exemples de manière stratégique : Les exemples sont des outils puissants pour réduire l’ambiguïté, mais ils ont un coût en termes de tokens et de longueur du contexte. Nous devons fournir des exemples lorsque le format ou le comportement souhaité n’est pas évident à partir des instructions seules. Pour les tâches simples, les exemples ne sont peut-être pas nécessaires.
- Itérer et expérimenter : L’ingénierie des prompts est itérative. Nous rédigeons rarement le prompt parfait dès le premier essai. Nous devons commencer par un prompt de base, le tester, observer les résultats et l’affiner en fonction de ce que nous apprenons.
- Gestion des versions des prompts : Nous devons gérer les versions de nos prompts afin de pouvoir suivre les changements au fil du temps. L’utilisation de données d’évaluation cohérentes nous permet de comparer objectivement différentes variantes de prompts. Nous devons tester les prompts non seulement de manière isolée, mais aussi dans le contexte du système complet afin de nous assurer que les améliorations apportées dans un domaine ne créent pas de problèmes ailleurs.
Pièges courants à éviter
Voici quelques pièges courants à éviter lors de la rédaction de prompts :
- Être trop vague : L’une des erreurs les plus courantes consiste à supposer que le modèle comprend notre intention sans explication explicite. Des prompts vagues telles que « écris quelque chose sur le changement climatique » laissent trop de place à l’interprétation. Souhaitons-nous une explication scientifique, un essai persuasif, un article de presse ou une publication sur les réseaux sociaux ? Quelle longueur ? Quel point de vue ? Le modèle fera ses propres choix, qui pourraient ne pas correspondre à ce que nous voulons réellement.
- Compliquer excessivement les prompts : Si la clarté et les détails sont importants, on peut aller trop loin dans l’autre sens. Des prompts trop complexes, comportant des instructions excessives, trop d’exemples ou une logique alambiquée, peuvent semer la confusion chez le modèle plutôt que de l’aider. On doit viser le prompt le plus simple qui permette d’atteindre notre objectif. Si un prompt « zero-shot » fonctionne bien, il n’est pas nécessaire d’ajouter des exemples. Si trois exemples suffisent, en ajouter cinq n’améliorera peut-être pas les résultats.
- Ignorer le format de sortie : Ne pas spécifier le format de sortie peut causer des problèmes, en particulier lorsque les sorties du modèle alimentent d’autres systèmes. Si nous avons besoin de données structurées mais ne le demandons pas explicitement, le modèle pourrait générer du texte non structuré nécessitant un analyse syntaxique ou un nettoyage supplémentaire. Cela ajoute de la complexité et des points de défaillance potentiels à notre application.
- Tests insuffisants : Une seule sortie réussie ne signifie pas que la prompt est fiable. Nous devons tester les prompts avec diverses entrées, y compris des cas limites et des scénarios inhabituels. Ce qui fonctionne pour les cas typiques peut échouer lorsque les entrées sont légèrement différentes ou inattendues. La constitution d’un petit ensemble de données d’évaluation et la réalisation de tests systématiques aident à identifier les faiblesses avant qu’elles ne deviennent des problèmes en production.