Skip to content

Latest commit

 

History

History
267 lines (164 loc) · 31.2 KB

File metadata and controls

267 lines (164 loc) · 31.2 KB

Fondamentaux de l'Ingénierie des Prompts

Introduction

Ce module couvre les concepts essentiels et les techniques pour créer des prompts efficaces dans les modèles d'IA générative. La façon dont vous rédigez votre prompt pour un LLM est également importante. Un prompt soigneusement conçu peut obtenir une meilleure qualité de réponse. Mais que signifient exactement des termes comme prompt et ingénierie des prompts ? Et comment améliorer l'entrée du prompt que j'envoie au LLM ? Ce sont les questions auxquelles nous allons essayer de répondre dans ce chapitre et le suivant.

L'IA générative est capable de créer du nouveau contenu (par exemple, texte, images, audio, code, etc.) en réponse aux demandes des utilisateurs. Elle y parvient en utilisant des Modèles de Langage de Grande Taille comme la série GPT ("Generative Pre-trained Transformer") d'OpenAI, qui sont entraînés à utiliser le langage naturel et le code.

Les utilisateurs peuvent désormais interagir avec ces modèles en utilisant des paradigmes familiers comme le chat, sans avoir besoin d'expertise technique ou de formation. Les modèles sont basés sur des prompts - les utilisateurs envoient une entrée textuelle (prompt) et obtiennent la réponse de l'IA (complétion). Ils peuvent ensuite "discuter avec l'IA" de manière itérative, dans des conversations à plusieurs tours, en affinant leur prompt jusqu'à ce que la réponse corresponde à leurs attentes.

Les "prompts" deviennent maintenant l'interface de programmation principale pour les applications d'IA générative, indiquant aux modèles quoi faire et influençant la qualité des réponses retournées. L'"ingénierie des prompts" est un domaine d'étude en pleine croissance qui se concentre sur la conception et l'optimisation des prompts pour fournir des réponses cohérentes et de qualité à grande échelle.

Objectifs d'apprentissage

Dans cette leçon, nous apprenons ce qu'est l'Ingénierie des Prompts, pourquoi elle est importante, et comment nous pouvons créer des prompts plus efficaces pour un modèle donné et un objectif d'application. Nous comprendrons les concepts de base et les meilleures pratiques pour l'ingénierie des prompts - et nous découvrirons un environnement "bac à sable" interactif Jupyter Notebooks où nous pourrons voir ces concepts appliqués à des exemples réels.

À la fin de cette leçon, nous serons capables de :

  1. Expliquer ce qu'est l'ingénierie des prompts et pourquoi elle est importante.
  2. Décrire les composants d'un prompt et comment ils sont utilisés.
  3. Apprendre les meilleures pratiques et techniques pour l'ingénierie des prompts.
  4. Appliquer les techniques apprises à des exemples réels, en utilisant un point de terminaison OpenAI.

Termes clés

Ingénierie des Prompts : La pratique de concevoir et de raffiner les entrées pour guider les modèles d'IA vers la production de sorties souhaitées.
Tokenisation : Le processus de conversion du texte en unités plus petites, appelées tokens, qu'un modèle peut comprendre et traiter.
LLMs ajustés par instruction : Modèles de Langage de Grande Taille (LLMs) qui ont été ajustés avec des instructions spécifiques pour améliorer la précision et la pertinence de leurs réponses.

Bac à sable d'apprentissage

L'ingénierie des prompts est actuellement plus un art qu'une science. La meilleure façon d'améliorer notre intuition est de pratiquer davantage et d'adopter une approche d'essais et d'erreurs qui combine expertise dans le domaine d'application avec des techniques recommandées et des optimisations spécifiques au modèle.

Le Notebook Jupyter accompagnant cette leçon fournit un environnement de bac à sable où vous pouvez essayer ce que vous apprenez - au fur et à mesure ou dans le cadre du défi de code à la fin. Pour exécuter les exercices, vous aurez besoin de :

  1. Une clé API Azure OpenAI - le point de terminaison du service pour un LLM déployé.
  2. Un environnement Python - dans lequel le Notebook peut être exécuté.
  3. Variables d'environnement locales - complétez les étapes du SETUP maintenant pour vous préparer.

Le notebook est fourni avec des exercices de démarrage - mais vous êtes encouragé à ajouter vos propres sections Markdown (description) et Code (demandes de prompts) pour essayer plus d'exemples ou d'idées - et développer votre intuition pour la conception de prompts.

Guide illustré

Vous souhaitez avoir une vue d'ensemble de ce que couvre cette leçon avant de plonger dedans ? Consultez ce guide illustré, qui vous donne une idée des principaux sujets abordés et des points clés à retenir pour chaque section. La feuille de route de la leçon vous guide de la compréhension des concepts et des défis de base à leur résolution avec des techniques d'ingénierie des prompts et des meilleures pratiques. Notez que la section "Techniques avancées" de ce guide fait référence à du contenu couvert dans le chapitre suivant de ce programme.

Notre Startup

Maintenant, parlons de la façon dont ce sujet est lié à notre mission de startup pour apporter l'innovation de l'IA à l'éducation. Nous voulons créer des applications d'apprentissage personnalisé alimentées par l'IA - alors réfléchissons à la manière dont différents utilisateurs de notre application pourraient "concevoir" des prompts :

  • Les administrateurs pourraient demander à l'IA d'analyser les données du programme pour identifier les lacunes dans la couverture. L'IA peut résumer les résultats ou les visualiser avec du code.
  • Les éducateurs pourraient demander à l'IA de générer un plan de cours pour un public cible et un sujet. L'IA peut construire le plan personnalisé dans un format spécifié.
  • Les étudiants pourraient demander à l'IA de les tutorer dans une matière difficile. L'IA peut maintenant guider les étudiants avec des leçons, des indices et des exemples adaptés à leur niveau.

Ce n'est que la partie émergée de l'iceberg. Consultez Prompts For Education - une bibliothèque de prompts open-source organisée par des experts en éducation - pour avoir une idée plus large des possibilités ! Essayez de lancer certains de ces prompts dans le bac à sable ou en utilisant le OpenAI Playground pour voir ce qui se passe !

Qu'est-ce que l'Ingénierie des Prompts ?

Nous avons commencé cette leçon en définissant l'Ingénierie des Prompts comme le processus de conception et d'optimisation des entrées textuelles (prompts) pour fournir des réponses cohérentes et de qualité (complétions) pour un objectif d'application donné et un modèle. Nous pouvons penser à cela comme un processus en deux étapes :

  • concevoir le prompt initial pour un modèle et un objectif donnés
  • affiner le prompt de manière itérative pour améliorer la qualité de la réponse

C'est nécessairement un processus d'essais et d'erreurs qui nécessite de l'intuition et des efforts de l'utilisateur pour obtenir des résultats optimaux. Alors pourquoi est-ce important ? Pour répondre à cette question, nous devons d'abord comprendre trois concepts :

  • Tokenisation = comment le modèle "voit" le prompt
  • LLMs de base = comment le modèle de base "traite" un prompt
  • LLMs ajustés par instruction = comment le modèle peut maintenant voir les "tâches"

Tokenisation

Un LLM voit les prompts comme une séquence de tokens où différents modèles (ou versions d'un modèle) peuvent tokeniser le même prompt de différentes manières. Étant donné que les LLMs sont entraînés sur des tokens (et non sur du texte brut), la façon dont les prompts sont tokenisés a un impact direct sur la qualité de la réponse générée.

Pour avoir une intuition sur le fonctionnement de la tokenisation, essayez des outils comme le Tokenizer d'OpenAI montré ci-dessous. Copiez votre prompt - et voyez comment il est converti en tokens, en prêtant attention à la façon dont les espaces blancs et les signes de ponctuation sont traités. Notez que cet exemple montre un ancien LLM (GPT-3) - donc l'essayer avec un modèle plus récent peut produire un résultat différent.

Concept : Modèles de Base

Une fois qu'un prompt est tokenisé, la fonction principale du "LLM de base" (ou modèle de base) est de prédire le token dans cette séquence. Étant donné que les LLMs sont entraînés sur d'énormes ensembles de données textuelles, ils ont une bonne compréhension des relations statistiques entre les tokens et peuvent faire cette prédiction avec une certaine confiance. Notez qu'ils ne comprennent pas le sens des mots dans le prompt ou le token ; ils voient juste un modèle qu'ils peuvent "compléter" avec leur prochaine prédiction. Ils peuvent continuer à prédire la séquence jusqu'à ce qu'elle soit terminée par l'intervention de l'utilisateur ou une condition préétablie.

Vous voulez voir comment fonctionne la complétion basée sur les prompts ? Entrez le prompt ci-dessus dans le Chat Playground d'Azure OpenAI avec les paramètres par défaut. Le système est configuré pour traiter les prompts comme des demandes d'informations - vous devriez donc voir une complétion qui satisfait ce contexte.

Mais que se passe-t-il si l'utilisateur souhaite voir quelque chose de spécifique qui répond à certains critères ou objectifs de tâche ? C'est là que les LLMs ajustés par instruction entrent en jeu.

Concept : LLMs Ajustés par Instruction

Un LLM Ajusté par Instruction commence par le modèle de base et l'affine avec des exemples ou des paires d'entrée/sortie (par exemple, des "messages" à plusieurs tours) qui peuvent contenir des instructions claires - et la réponse de l'IA tente de suivre cette instruction.

Cela utilise des techniques comme l'apprentissage par renforcement avec retour humain (RLHF) qui peuvent entraîner le modèle à suivre des instructions et apprendre des retours afin qu'il produise des réponses mieux adaptées aux applications pratiques et plus pertinentes pour les objectifs des utilisateurs.

Essayons-le - revisitez le prompt ci-dessus, mais maintenant changez le message système pour fournir l'instruction suivante comme contexte :

Résumé du contenu fourni pour un élève de deuxième année. Limitez le résultat à un paragraphe avec 3 à 5 puces.

Voyez comment le résultat est maintenant ajusté pour refléter l'objectif et le format souhaités ? Un éducateur peut maintenant utiliser directement cette réponse dans ses diapositives pour cette classe.

Pourquoi avons-nous besoin de l'Ingénierie des Prompts ?

Maintenant que nous savons comment les prompts sont traités par les LLMs, parlons de pourquoi nous avons besoin de l'ingénierie des prompts. La réponse réside dans le fait que les LLMs actuels posent un certain nombre de défis qui rendent les complétions fiables et cohérentes plus difficiles à obtenir sans mettre d'effort dans la construction et l'optimisation des prompts. Par exemple :

  1. Les réponses des modèles sont stochastiques. Le même prompt produira probablement des réponses différentes avec différents modèles ou versions de modèles. Et il peut même produire des résultats différents avec le même modèle à différents moments. Les techniques d'ingénierie des prompts peuvent nous aider à minimiser ces variations en fournissant de meilleures balises.

  2. Les modèles peuvent fabriquer des réponses. Les modèles sont pré-entraînés avec des ensembles de données grands mais finis, ce qui signifie qu'ils n'ont pas connaissance des concepts en dehors de cette portée de formation. En conséquence, ils peuvent produire des complétions qui sont inexactes, imaginaires ou directement contradictoires avec des faits connus. Les techniques d'ingénierie des prompts aident les utilisateurs à identifier et à atténuer ces fabrications, par exemple en demandant à l'IA des citations ou un raisonnement.

  3. Les capacités des modèles varieront. Les modèles plus récents ou les générations de modèles auront des capacités plus riches mais apporteront également des particularités uniques et des compromis en termes de coût et de complexité. L'ingénierie des prompts peut nous aider à développer des meilleures pratiques et des workflows qui abstraient les différences et s'adaptent aux exigences spécifiques des modèles de manière évolutive et transparente.

Voyons cela en action dans le OpenAI ou Azure OpenAI Playground :

  • Utilisez le même prompt avec différents déploiements de LLM (par exemple, OpenAI, Azure OpenAI, Hugging Face) - avez-vous vu les variations ?
  • Utilisez le même prompt à plusieurs reprises avec le même déploiement de LLM (par exemple, le terrain de jeu Azure OpenAI) - comment ces variations diffèrent-elles ?

Exemple de Fabrications

Dans ce cours, nous utilisons le terme "fabrication" pour faire référence au phénomène où les LLMs génèrent parfois des informations factuellement incorrectes en raison de limitations dans leur formation ou d'autres contraintes. Vous avez peut-être aussi entendu cela appelé "hallucinations" dans des articles populaires ou des articles de recherche. Cependant, nous recommandons fortement d'utiliser le terme "fabrication" pour ne pas anthropomorphiser accidentellement le comportement en attribuant un trait humain à un résultat piloté par une machine. Cela renforce également les directives d'IA Responsable d'un point de vue terminologique, en supprimant les termes qui peuvent également être considérés comme offensants ou non inclusifs dans certains contextes.

Vous voulez avoir une idée de la façon dont les fabrications fonctionnent ? Pensez à un prompt qui demande à l'IA de générer du contenu pour un sujet inexistant (pour s'assurer qu'il ne se trouve pas dans l'ensemble de données d'entraînement). Par exemple - j'ai essayé ce prompt :

Prompt : générez un plan de cours sur la Guerre Martienne de 2076.

Une recherche sur le web m'a montré qu'il existait des récits fictifs (par exemple, des séries télévisées ou des livres) sur les guerres martiennes - mais aucune en 2076. Le bon sens nous dit aussi que 2076 est dans le futur et ne peut donc pas être associé à un événement réel.

Alors que se passe-t-il lorsque nous exécutons ce prompt avec différents fournisseurs de LLM ?

Comme prévu, chaque modèle (ou version de modèle) produit des réponses légèrement différentes grâce au comportement stochastique et aux variations des capacités des modèles. Par exemple, un modèle cible un public de 8ème année tandis que l'autre suppose un lycéen. Mais les trois modèles ont généré des réponses qui pourraient convaincre un utilisateur non informé que l'événement était réel.

Les techniques d'ingénierie des prompts comme le métaprompting et la configuration de la température peuvent réduire les fabrications des modèles dans une certaine mesure. Les nouvelles architectures d'ingénierie des prompts intègrent également de nouveaux outils et techniques de manière transparente dans le flux de prompts, pour atténuer ou réduire certains de ces effets.

Étude de Cas : GitHub Copilot

Concluons cette section en ayant une idée de la façon dont l'ingénierie des prompts est utilisée dans des solutions réelles en examinant une étude de cas : GitHub Copilot.

GitHub Copilot est votre "Programmeur Partenaire IA" - il convertit les prompts textuels en complétions de code et est intégré dans votre environnement de développement (par exemple, Visual Studio Code) pour une expérience utilisateur transparente. Comme documenté dans la série de blogs ci-dessous, la première version était basée sur le modèle OpenAI Codex - avec des ingénieurs réalisant rapidement la nécessité d'affiner le modèle et de développer de meilleures techniques d'ingénierie des prompts, pour améliorer la qualité du code. En juillet, ils ont dévoilé un modèle d'IA amélioré qui va au-delà de Codex pour des suggestions encore plus rapides.

Lisez les articles dans l'ordre, pour suivre leur parcours d'apprentissage.

Contenu de soutien

Si nous considérons la construction de prompts comme ayant une instruction (tâche) et un objectif (contenu principal), alors le contenu secondaire est comme un contexte supplémentaire que nous fournissons pour influencer le résultat d'une certaine manière. Cela pourrait être des paramètres de réglage, des instructions de formatage, des taxonomies de sujets, etc., qui peuvent aider le modèle à adapter sa réponse pour correspondre aux objectifs ou attentes de l'utilisateur souhaité.

Par exemple : Étant donné un catalogue de cours avec des métadonnées étendues (nom, description, niveau, balises de métadonnées, instructeur, etc.) sur tous les cours disponibles dans le programme :

  • nous pouvons définir une instruction pour "résumer le catalogue de cours pour l'automne 2023"
  • nous pouvons utiliser le contenu principal pour fournir quelques exemples du résultat souhaité
  • nous pouvons utiliser le contenu secondaire pour identifier les 5 principales "balises" d'intérêt.

Maintenant, le modèle peut fournir un résumé dans le format montré par les quelques exemples - mais si un résultat a plusieurs balises, il peut prioriser les 5 balises identifiées dans le contenu secondaire.


Meilleures pratiques de prompt

Maintenant que nous savons comment les prompts peuvent être construits, nous pouvons commencer à penser à comment les concevoir pour refléter les meilleures pratiques. Nous pouvons penser à cela en deux parties - avoir le bon état d'esprit et appliquer les bonnes techniques.

État d'esprit de l'ingénierie de prompts

L'ingénierie de prompts est un processus d'essais et d'erreurs, donc gardez à l'esprit trois facteurs directeurs larges :

  1. La compréhension du domaine est importante. La précision et la pertinence des réponses sont fonction du domaine dans lequel cette application ou cet utilisateur opère. Appliquez votre intuition et votre expertise du domaine pour personnaliser davantage les techniques. Par exemple, définissez des personnalités spécifiques au domaine dans vos prompts système, ou utilisez des modèles spécifiques au domaine dans vos prompts utilisateur. Fournissez du contenu secondaire qui reflète des contextes spécifiques au domaine, ou utilisez des indices et des exemples spécifiques au domaine pour guider le modèle vers des modèles d'utilisation familiers.

  2. La compréhension du modèle est importante. Nous savons que les modèles sont stochastiques par nature. Mais les implémentations de modèles peuvent également varier en termes de dataset d'entraînement qu'ils utilisent (connaissances pré-entraînées), des capacités qu'ils fournissent (par exemple, via API ou SDK) et du type de contenu pour lequel ils sont optimisés (par exemple, code vs. images vs. texte). Comprenez les forces et les limitations du modèle que vous utilisez, et utilisez ces connaissances pour prioriser les tâches ou construire des modèles personnalisés qui sont optimisés pour les capacités du modèle.

  3. L'itération et la validation sont importantes. Les modèles évoluent rapidement, et les techniques pour l'ingénierie de prompts aussi. En tant qu'expert du domaine, vous pouvez avoir d'autres contextes ou critères pour votre application spécifique, qui peuvent ne pas s'appliquer à la communauté plus large. Utilisez des outils et techniques d'ingénierie de prompts pour "lancer" la construction de prompts, puis itérez et validez les résultats en utilisant votre propre intuition et expertise du domaine. Enregistrez vos idées et créez une base de connaissances (par exemple, bibliothèques de prompts) qui peut être utilisée comme nouvelle base par d'autres, pour des itérations plus rapides à l'avenir.

Meilleures pratiques

Examinons maintenant les meilleures pratiques courantes recommandées par OpenAI et les praticiens de Azure OpenAI.

Quoi Pourquoi
Évaluer les derniers modèles. Les nouvelles générations de modèles sont susceptibles d'avoir des fonctionnalités et une qualité améliorées - mais peuvent également entraîner des coûts plus élevés. Évaluez-les pour leur impact, puis prenez des décisions de migration.
Séparer les instructions et le contexte Vérifiez si votre modèle/fournisseur définit des délimiteurs pour distinguer plus clairement les instructions, le contenu principal et secondaire. Cela peut aider les modèles à assigner plus précisément des poids aux tokens.
Soyez spécifique et clair Donnez plus de détails sur le contexte souhaité, le résultat, la longueur, le format, le style, etc. Cela améliorera à la fois la qualité et la cohérence des réponses. Capturez les recettes dans des modèles réutilisables.
Soyez descriptif, utilisez des exemples Les modèles peuvent mieux répondre à une approche "montrer et raconter". Commencez par une zero-shot approach where you give it an instruction (but no examples) then try few-shot as a refinement, providing a few examples of the desired output. Use analogies.
Use cues to jumpstart completions Nudge it towards a desired outcome by giving it some leading words or phrases that it can use as a starting point for the response.
Double Down Sometimes you may need to repeat yourself to the model. Give instructions before and after your primary content, use an instruction and a cue, etc. Iterate & validate to see what works.
Order Matters The order in which you present information to the model may impact the output, even in the learning examples, thanks to recency bias. Try different options to see what works best.
Give the model an “out” Give the model a fallback completion response it can provide if it cannot complete the task for any reason. This can reduce chances of models generating false or fabricated responses.

As with any best practice, remember that your mileage may vary based on the model, the task and the domain. Use these as a starting point, and iterate to find what works best for you. Constantly re-evaluate your prompt engineering process as new models and tools become available, with a focus on process scalability and response quality.

Assignment

Congratulations! You made it to the end of the lesson! It's time to put some of those concepts and techniques to the test with real examples!

For our assignment, we'll be using a Jupyter Notebook with exercises you can complete interactively. You can also extend the Notebook with your own Markdown and Code cells to explore ideas and techniques on your own.

To get started, fork the repo, then

  • (Recommended) Launch GitHub Codespaces
  • (Alternatively) Clone the repo to your local device and use it with Docker Desktop
  • (Alternatively) Open the Notebook with your preferred Notebook runtime environment.

Next, configure your environment variables

  • Copy the .env.copy file in repo root to .env and fill in the AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_DEPLOYMENT valeurs. Revenez à la section Learning Sandbox pour apprendre comment.

Ensuite, ouvrez le Jupyter Notebook

  • Sélectionnez le noyau de runtime. Si vous utilisez les options 1 ou 2, sélectionnez simplement le noyau Python 3.10.x par défaut fourni par le conteneur de développement.

Vous êtes prêt à exécuter les exercices. Notez qu'il n'y a pas de bonnes ou mauvaises réponses ici - juste explorer les options par essais et erreurs et développer une intuition pour ce qui fonctionne pour un modèle et un domaine d'application donnés.

Pour cette raison, il n'y a pas de segments de solution de code dans cette leçon. Au lieu de cela, le Notebook aura des cellules Markdown intitulées "Ma Solution :" qui montrent un exemple de sortie à titre de référence.

Vérification des connaissances

Lequel des éléments suivants est un bon prompt suivant quelques bonnes pratiques raisonnables ?

  1. Montrez-moi une image de voiture rouge
  2. Montrez-moi une image de voiture rouge de marque Volvo et modèle XC90 garée près d'une falaise avec le soleil couchant
  3. Montrez-moi une image de voiture rouge de marque Volvo et modèle XC90

A : 2, c'est le meilleur prompt car il fournit des détails sur "quoi" et entre dans les spécificités (pas n'importe quelle voiture mais une marque et un modèle spécifiques) et il décrit également l'ensemble du cadre. 3 est le suivant meilleur car il contient également beaucoup de descriptions.

🚀 Défi

Voyez si vous pouvez tirer parti de la technique de "l'indice" avec le prompt : Complétez la phrase "Montrez-moi une image de voiture rouge de marque Volvo et ". Que répond-il, et comment l'amélioreriez-vous ?

Excellent travail ! Continuez votre apprentissage

Vous voulez en savoir plus sur les différents concepts d'ingénierie de prompts ? Allez sur la page d'apprentissage continu pour trouver d'autres excellentes ressources sur ce sujet.

Rendez-vous à la leçon 5 où nous examinerons des techniques de prompts avancées !

Clause de non-responsabilité :
Ce document a été traduit en utilisant le service de traduction AI Co-op Translator. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue maternelle doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.