Le Prompt Engineering : Comment parler avec les IA

Le Prompt Engineering : Comment parler avec les IA

22 novembre 2023 2 By Judicael P.

Il est difficile de rencontrer quelqu’un qui n’a pas entendu parler de GPT et d’autres modèles similaires cette année. Ces Grands Modèles de Langage (LLMs) marquent un tournant révolutionnaire dans les domaines du machine learning et de l’intelligence artificielle. Un domaine qui est resté obscur pour la plupart de son histoire et qui est maintenant une partie intégrante de la vie quotidienne d’un vaste segment de la population mondiale, grâce à des outils comme ChatGPT.

En tant que chercheur dédié à ce domaine depuis plus de quatre ans, j’ai énormément utilisé ces outils, particulièrement cette année. Ce parcours a fortement approfondi ma compréhension des LLMs et l’art du prompt engineering. Par conséquent, cet article sera un guide sur le prompt engineering, explorant l’éventail de techniques utilisé pour contrôler les LLMs.

Qu’est-ce que les prompts et le Prompt Engineering ?

Le Prompt Engineering c’est le processus de création de prompt pour des modèles pré-entraînés comme GPT, BERT et d’autres; un prompt décris une requête que l’on fait à ces modèles. Ce processus vise à orienter les modèles afin de générer un comportement spécifique que nous recherchons.

Un Prompt Engineering réussi repose donc sur la définition méticuleuse du prompt avec des exemples appropriés, un contexte pertinent et des directives claires. Cela exige une compréhension profonde des mécanismes sous-jacents du modèle et de la nature du problème en question. Cette connaissance est cruciale pour garantir que les exemples intégrés dans le prompt sont aussi représentatifs et variés que possible, reflétant étroitement la distribution réelle des paires entrée-sortie qui caractérisent le problème.

Considérez une tâche simple comme la traduction d’un texte de l’anglais vers le français. La réaliser par à l’aide de Prompt Engineering est remarquablement simple. Il nous faut un modèle pré-entraîné, tel que GPT-4, et un prompt bien élaboré. Ce prompt doit 1) décrire la tâche 2) fournir quelques phrases exemples avec leurs traductions 3) inclure la phrase spécifique nécessitant la traduction, comme démontré dans l’image ci-dessous. C’est tout ! GPT-4, déjà formé sur un énorme corpus de données, comprend intrinsèquement le concept de traduction. Il a simplement besoin du bon prompt pour appliquer ses compétences acquises.

Exemple de prompt

Zero, one et few shot prompts

Les prompts peuvent être classés de différentes manières. Prenons, par exemple, les prompts de type zéro, un et plusieurs shot, qui correspondent au nombre d’exemples fournis au modèle pour l’exécution de la tâche. Avec les prompts zéro shot, le modèle ne reçoit que la description de la tâche et le éléments utiles pour la résoudre. Par exemple, dans l’image de gauche, nous lui demandons de traduire ‘cheese’ en Français. Ce type de prompts démontre déjà une performance impressionnante, comme en témoigne cet article.

Malgré leur efficacité, j’évite généralement des prompts à zéro exemple pour plusieurs raisons. Premièrement, l’ajout de quelques exemples peut considérablement améliorer les performances, et il n’est pas nécessaire d’en avoir beaucoup, comme le souligne un autre article. Plus crucialement, en incorporant quelques exemples, vous clarifiez non seulement la tâche pour le modèle, mais illustrez également le format de réponse souhaité. Dans la traduction en zero-shot, le modèle pourrait répondre avec : « Bien sûr, voici la traduction de votre texte… ». Cependant, avec une approche à quelques exemples, il comprendre mieux qu’un texte suivi de « => » indique que le contenu suivant devrait directement être la traduction. Cette nuance est utile, surtout lorsqu’on cherche à contrôler précisément la sortie du modèle pour des applications commerciales.

Prompts dynamiques


En utilisant des outils comme langchain, nous pouvons aussi créer des prompts dynamiques. Dans l’exemple mentionné précédemment, cela signifie que ‘cheese’ devient une variable, modifiable en n’importe quel mot que nous souhaitons traduire. Ce concept apparemment simple ouvre la voie à des système complexes, où des parties du prompt sont soit retirées soit ajoutées en réponse à l’interaction de l’utilisateur.

Par exemple, un prompt dynamique pour un chatbot pourrait incorporer des éléments de la conversation en cours avec un utilisateur. Cette approche améliore la capacité du bot à comprendre et à réagir de manière plus appropriée au contexte de la discussion. De même, un prompt initialement conçu pour la génération de texte peut être dynamiquement adapté pour réviser un texte donné, en s’assurant qu’il s’aligne sur le contenu précédemment généré. Cette flexibilité permet des interactions plus nuancées et conscientes du contexte, enrichissant considérablement l’expérience utilisateur et simplifiant le développement.

Enchaînement de prompt

Les prompts peuvent être utilisés de manière séquentielle; une technique connue sous le nom de prompt chaining. Dans cette méthode, un prompt utilisé pour répondre à une requête utilisateur pourrait intégrer un résumé de la requête précédente dans cette requête en tant que variable. Ce résumé lui-même pourrait être le résultat d’un autre prompt. Cette approche en couches permet des réponses plus complexe et conscientes du contexte, car chaque prompt se construit sur la sortie du précédent.

Les prompt continus

Cette approche plus sophistiquée utilise les fondamentaux des LLMs. Les prompts se composent de mots, et ces mots sont traités par les Grands Modèles de Langage (LLMs) à travers des word embeddings, qui sont essentiellement des représentations numériques des mots. Par conséquent, plutôt que de s’arrêter aux design purement textuel du prompt, nous pouvons employer un algorithme d’optimisation comme la Descente de Gradient Stochastique afin d’optimiser la representation numérique d’un prompt. Cette méthode affine essentiellement l’entrée, au lieu de fine-tuner le modèle lui-même. Par exemple dans cet article, les auteurs améliorent la performance du modèle en concaténant un prompt continu fine-tuné avec un prompt textuel standard.

Only-shot prompt?

Cette méthode, bien qu’elle n’ait pas de nom officiel, découle des résultats d’un article qui soutient que la descriptions de la tâche et les directives dans un prompts sont largement inutiles. Cet article montre que les prompts peuvent contenir des informations importantes, non pertinentes ou même contradictoires, sans avoir d’impact significatif sur les résultats; à condition qu’il y ait suffisamment d’exemples de haute qualité. C’est une leçon que j’ai apprise par l’expérience, avant de découvrir cet article. Je créais des prompts complexes, avec bien plus de directives que d’exemples. Cependant, à un moment, j’ai testé avec des prompts ou ils y avaient seulement des exemples, en omettant entièrement les directives et la définition de la tache, et j’ai observé aucune différence notable. Essentiellement, mes instructions détaillées étaient superflues ; le modèle privilégiait les exemples. Cela peut s’expliquer par le fait que les exemples sont plus isomorphes à la sortie finale à générer. Le mécanisme d’attention du modèle se concentre donc davantage sur les exemples que sur tout autre aspect du prompt.

Les prompts réflectifs

Les prompts réflectifs (CoT) impliquent de structurer les exemples non pas comme de simples transformations « X -> Y », mais comme « X -> Réfléchir sur X -> Y ». Ce format guide le modèle à s’engager dans un processus de réflexion sur X avant d’arriver à la réponse finale Y. Si vous êtes curieux des nuances de cette approche, il y a un article sur le sujet.

Cependant, il est crucial de se rappeler que la plupart des Grands Modèles de Langage (LLMs) modernes sont autorégressifs. Cela signifie que bien que la structure « X -> Réfléchir sur X -> Y » soit efficace, la structure « X -> Y -> Expliquer pourquoi Y est la réponse » l’est moins. Dans le dernier cas, le modèle a déjà déterminé Y et va ensuite concocter une justification pour son choix, ce qui peut conduire à un raisonnement erroné ou même comique. Reconnaître la nature autorégressive des LLMs est essentiel pour un prompt engineering efficace.

Des recherches supplémentaires ont élargi le concept des prompts réflectifs. Des stratégies plus sophistiquées existent tel que l’autocohérence, qui génère plusieurs réflexions et sélectionne la meilleure (article ici), ainsi que l’approche Arbre de Pensées qui élargit la reflexion pour accommoder une pensée non linéaire, comme exploré dans plusieurs articles (voir 1 et 2). Ces avancées soulignent la complexité et le potentiel futur dans le domain du Prompt Engineering.

Et plus encore

Le monde des techniques de prompting évolue rapidement, ce qui rend difficile de rester à jour. Bien qu’il soit impossible de couvrir chaque nouveau développement dans cet article, voici un aperçu rapide d’autres techniques notables :

  1. Self-ask : Cette méthode forme le modèle à se poser des questions de suivi sur les détails spécifiques d’un problème, améliorant sa capacité à répondre à la question originale plus précisément.
  2. Meta-Prompting : Ici, le modèle s’engage dans un dialogue avec lui-même, critiquant son propre processus de pensée, dans le but de produire un résultat plus cohérent.
  3. Least to Most : Cette approche enseigne au modèle à déconstruire un problème complexe en sous-problèmes plus petits, facilitant un processus de recherche de solution plus efficace.
  4. Persona/Role Prompting : Dans cette technique, le modèle reçoit pour instruction d’assumer un rôle ou une personnalité spécifique, modifiant ainsi ses réponses en conséquence.

À travers cet article, j’espère vous avoir présenté certaines des techniques d’ingénierie de prompt les plus innovantes et les moins connues. La créativité et l’ingéniosité dans les recherches actuelles indiquent que nous ne faisons que commencer à découvrir le plein potentiel de ces modèles et des prompts qu’on utilise pour les contrôler.