Améliorez les réponses de ChatGPT ou OpenAI grâce à des promts travaillés

Source : https://platform.openai.com/docs/guides/prompt-engineering Ingénierie rapide Améliorez les résultats grâce à des stratégies d’ingénierie rapides. Ce guide présente des stratégies et des tactiques permettant d’obtenir de meilleurs résultats à partir de modèles linguistiques de grande taille (parfois appelés modèles GPT) comme GPT-4o. Les méthodes décrites ici peuvent parfois être déployées en combinaison pour un meilleur effet.


Source : https://platform.openai.com/docs/guides/prompt-engineering

Ingénierie rapide

Améliorez les résultats grâce à des stratégies d’ingénierie rapides.

Ce guide présente des stratégies et des tactiques permettant d’obtenir de meilleurs résultats à partir de modèles linguistiques de grande taille (parfois appelés modèles GPT) comme GPT-4o. Les méthodes décrites ici peuvent parfois être déployées en combinaison pour un meilleur effet. Nous vous encourageons à expérimenter pour trouver les méthodes qui vous conviennent le mieux.

Vous pouvez également explorer des exemples qui illustrent les capacités de nos modèles :Exemples rapides

Explorez des exemples rapides pour découvrir ce que les modèles GPT peuvent faire

Six stratégies pour obtenir de meilleurs résultats

Rédigez des instructions claires

Ces modèles ne peuvent pas lire dans vos pensées. Si les résultats sont trop longs, demandez des réponses brèves. Si les résultats sont trop simples, demandez une rédaction de niveau expert. Si vous n’aimez pas le format, montrez le format que vous aimeriez voir. Moins le modèle doit deviner ce que vous voulez, plus vous aurez de chances de l’obtenir.

Tactique:

Fournir un texte de référence

Les modèles linguistiques peuvent inventer en toute confiance de fausses réponses, notamment lorsqu’il s’agit de questions sur des sujets ésotériques ou pour des citations et des URL. De la même manière qu’une feuille de notes peut aider un étudiant à mieux réussir un examen, fournir un texte de référence à ces modèles peut aider à répondre avec moins de fabrications.

Tactique:

Diviser les tâches complexes en sous-tâches plus simples

Tout comme il est de bonne pratique en ingénierie logicielle de décomposer un système complexe en un ensemble de composants modulaires, il en va de même pour les tâches soumises à un modèle de langage. Les tâches complexes ont tendance à avoir des taux d’erreur plus élevés que les tâches plus simples. De plus, les tâches complexes peuvent souvent être redéfinies comme un flux de travail de tâches plus simples dans lequel les sorties des tâches précédentes sont utilisées pour construire les entrées des tâches ultérieures.

Tactique:

Donnez au modèle le temps de « réfléchir »

Si on vous demande de multiplier 17 par 28, vous ne le saurez peut-être pas instantanément, mais vous pourrez toujours le résoudre avec le temps. De même, les modèles commettent davantage d’erreurs de raisonnement lorsqu’ils essaient de répondre immédiatement, plutôt que de prendre le temps de trouver une réponse. Demander une « chaîne de pensée » avant de répondre peut aider le modèle à raisonner de manière plus fiable pour trouver les bonnes réponses.

Tactique:

Utiliser des outils externes

Compensez les faiblesses du modèle en lui fournissant les résultats d’autres outils. Par exemple, un système de recherche de texte (parfois appelé RAG ou génération augmentée de recherche) peut indiquer au modèle les documents pertinents. Un moteur d’exécution de code comme Code Interpreter d’OpenAI peut aider le modèle à effectuer des calculs et à exécuter du code. Si une tâche peut être effectuée de manière plus fiable ou plus efficace par un outil plutôt que par un modèle de langage, déchargez-le pour tirer le meilleur parti des deux.

Tactique:

Tester les changements systématiquement

Il est plus facile d’améliorer les performances si vous pouvez les mesurer. Dans certains cas, une modification d’une invite permettra d’obtenir de meilleures performances sur quelques exemples isolés, mais entraînera une baisse des performances globales sur un ensemble d’exemples plus représentatif. Par conséquent, pour être sûr qu’un changement est positif pour les performances, il peut être nécessaire de définir une suite de tests complète (également appelée « évaluation »).

Tactique:

Tactique

Chacune des stratégies énumérées ci-dessus peut être mise en œuvre avec des tactiques spécifiques. Ces tactiques sont destinées à fournir des idées de choses à essayer. Elles ne sont en aucun cas exhaustives et vous devez vous sentir libre d’essayer des idées créatives qui ne sont pas présentées ici.

Stratégie : Rédiger des instructions claires

Tactique : Inclure des détails dans votre requête pour obtenir des réponses plus pertinentes

Pour obtenir une réponse très pertinente, assurez-vous que les demandes fournissent tous les détails ou le contexte importants. Sinon, vous laissez le modèle deviner ce que vous voulez dire.

PireMieux
Comment ajouter des nombres dans Excel ?Comment additionner une ligne de montants en dollars dans Excel ? Je souhaite effectuer cette opération automatiquement pour une feuille entière de lignes, tous les totaux se retrouvant à droite dans une colonne appelée « Total ».
Qui est le président ?Qui était le président du Mexique en 2021 et à quelle fréquence les élections ont-elles lieu ?
Écrivez du code pour calculer la séquence de Fibonacci.Écrivez une fonction TypeScript pour calculer efficacement la séquence de Fibonacci. Commentez généreusement le code pour expliquer à quoi sert chaque partie et pourquoi elle est écrite de cette façon.
Résumez les notes de la réunion.Résumez les notes de la réunion en un seul paragraphe. Rédigez ensuite une liste des intervenants et de chacun de leurs points clés. Enfin, dressez la liste des prochaines étapes ou des mesures suggérées par les intervenants, le cas échéant.

Tactique : Demandez au modèle d’adopter une personnalité

Le message système peut être utilisé pour spécifier la personnalité utilisée par le modèle dans ses réponses.

SYSTÈMELorsque je demande de l’aide pour écrire quelque chose, vous me répondrez avec un document contenant au moins une blague ou un commentaire ludique dans chaque paragraphe.

UTILISATEURJ’ai écrit une lettre de remerciement à mon fournisseur de boulons en acier pour avoir effectué la livraison à temps et dans un délai très court. Cela nous a permis de livrer une commande importante.

Tactique : utilisez des délimiteurs pour indiquer clairement les différentes parties de l’entrée

Les délimiteurs tels que les guillemets triples, les balises XML, les titres de section, etc. peuvent aider à délimiter les sections de texte à traiter différemment.

UTILISATEURRésumez le texte délimité par des guillemets triples avec un haïku. “””insérer le texte ici”””

SYSTÈMEVous recevrez une paire d’articles (délimités par des balises XML) sur le même sujet. Commencez par résumer les arguments de chaque article. Indiquez ensuite lequel d’entre eux constitue le meilleur argument et expliquez pourquoi.

UTILISATEUR<article> insérer le premier article ici </article> <article> insérer le deuxième article ici </article>

SYSTÈMEVous recevrez un résumé de thèse et une suggestion de titre. Le titre de la thèse doit donner au lecteur une bonne idée du sujet de la thèse, mais doit également être accrocheur. Si le titre ne répond pas à ces critères, proposez 5 alternatives.

UTILISATEURRésumé : insérer le résumé ici Titre : insérer le titre ici

Pour des tâches aussi simples que celles-ci, l’utilisation de délimiteurs peut ne pas avoir d’effet sur la qualité du résultat. Cependant, plus une tâche est complexe, plus il est important de lever l’ambiguïté sur les détails de la tâche. Ne faites pas travailler le modèle pour comprendre exactement ce que vous lui demandez.

Tactique : Spécifier les étapes nécessaires pour accomplir une tâche

Certaines tâches sont mieux spécifiées sous forme d’une séquence d’étapes. Le fait d’écrire les étapes de manière explicite peut faciliter leur suivi par le modèle.

SYSTÈMESuivez les instructions étape par étape suivantes pour répondre aux saisies de l’utilisateur. Étape 1 – L’utilisateur vous fournira du texte entre guillemets triples. Résumez ce texte en une phrase avec un préfixe indiquant « Résumé : ». Étape 2 – Traduisez le résumé de l’étape 1 en espagnol, avec un préfixe indiquant « Traduction : ».

UTILISATEUR”””insérer du texte ici”””

Tactique : Donner des exemples

Il est généralement plus efficace de fournir des instructions générales applicables à tous les exemples que de démontrer toutes les permutations d’une tâche par l’exemple, mais dans certains cas, il peut être plus facile de fournir des exemples. Par exemple, si vous souhaitez que le modèle copie un style particulier de réponse aux requêtes des utilisateurs qui est difficile à décrire explicitement. C’est ce qu’on appelle l’invite « à quelques coups ».

SYSTÈMERépondez avec un style cohérent.

UTILISATEURApprends-moi la patience.

ASSISTANTLa rivière qui creuse la vallée la plus profonde coule d’une source modeste ; la plus grande symphonie naît d’une seule note ; la tapisserie la plus complexe commence par un fil solitaire.

UTILISATEURApprends-moi tout sur l’océan.

Tactique : Spécifier la longueur souhaitée de la sortie

Vous pouvez demander au modèle de générer des sorties d’une longueur cible donnée. La longueur de sortie cible peut être spécifiée en termes de nombre de mots, de phrases, de paragraphes, de puces, etc. Notez cependant que demander au modèle de générer un nombre spécifique de mots ne fonctionne pas avec une grande précision. Le modèle peut générer de manière plus fiable des sorties avec un nombre spécifique de paragraphes ou de puces.

UTILISATEURRésumez le texte délimité par des guillemets triples en environ 50 mots. “””insérer le texte ici”””

UTILISATEURRésumez le texte délimité par des guillemets triples en 2 paragraphes. “””insérer le texte ici”””

UTILISATEURRésumez le texte délimité par des guillemets triples en 3 puces. “””insérer le texte ici”””

Stratégie : Fournir un texte de référence

Tactique : Demandez au modèle de répondre en utilisant un texte de référence

Si nous pouvons fournir à un modèle des informations fiables et pertinentes pour la requête actuelle, nous pouvons alors demander au modèle d’utiliser les informations fournies pour composer sa réponse.

SYSTÈMEUtilisez les articles fournis délimités par des guillemets triples pour répondre aux questions. Si la réponse ne se trouve pas dans les articles, écrivez « Je n’ai pas trouvé de réponse ».

UTILISATEUR<insérer des articles, chacun délimité par des guillemets triples> Question : <insérer la question ici>

Étant donné que tous les modèles ont des fenêtres de contexte limitées, nous avons besoin d’un moyen de rechercher dynamiquement des informations pertinentes pour la question posée. Les intégrations peuvent être utilisées pour mettre en œuvre une récupération efficace des connaissances. Consultez la tactique « Utiliser la recherche basée sur les intégrations pour mettre en œuvre une récupération efficace des connaissances » pour plus de détails sur la façon de mettre en œuvre cette méthode.

Tactique : Demandez au modèle de répondre avec des citations d’un texte de référence

Si l’entrée a été complétée par des connaissances pertinentes, il est simple de demander au modèle d’ajouter des citations à ses réponses en référençant des passages des documents fournis. Notez que les citations dans la sortie peuvent ensuite être vérifiées par programmation par correspondance de chaînes dans les documents fournis.

SYSTÈMEVous recevrez un document délimité par des guillemets triples et une question. Votre tâche consiste à répondre à la question en utilisant uniquement le document fourni et à citer le(s) passage(s) du document utilisé(s) pour répondre à la question. Si le document ne contient pas les informations nécessaires pour répondre à cette question, écrivez simplement : « Informations insuffisantes ». Si une réponse à la question est fournie, elle doit être annotée avec une citation. Utilisez le format suivant pour citer les passages pertinents ({“citation”: …}).

UTILISATEUR”””<insérer le document ici>””” Question : <insérer la question ici>

Stratégie : Diviser les tâches complexes en sous-tâches plus simples

Tactique : Utiliser la classification des intentions pour identifier les instructions les plus pertinentes pour une requête utilisateur

Pour les tâches dans lesquelles de nombreux ensembles d’instructions indépendants sont nécessaires pour gérer différents cas, il peut être avantageux de classer d’abord le type de requête et d’utiliser cette classification pour déterminer les instructions nécessaires. Cela peut être réalisé en définissant des catégories fixes et en codant en dur les instructions pertinentes pour la gestion des tâches d’une catégorie donnée. Ce processus peut également être appliqué de manière récursive pour décomposer une tâche en une séquence d’étapes. L’avantage de cette approche est que chaque requête ne contiendra que les instructions nécessaires à l’exécution de l’étape suivante d’une tâche, ce qui peut entraîner des taux d’erreur inférieurs par rapport à l’utilisation d’une seule requête pour exécuter l’ensemble de la tâche. Cela peut également entraîner une réduction des coûts, car les invites plus volumineuses coûtent plus cher à exécuter ( voir les informations sur les tarifs ).

Supposons par exemple que pour une application de service client, les requêtes puissent être utilement classées comme suit :

SYSTÈMEDes requêtes de service client vous seront fournies. Classez chaque requête dans une catégorie principale et une catégorie secondaire. Fournissez votre sortie au format json avec les clés : primaire et secondaire. Catégories principales : Facturation, Assistance technique, Gestion de compte ou Demande générale. Catégories secondaires de facturation : – Se désabonner ou mettre à niveau – Ajouter un mode de paiement – Explication des frais – Contester des frais Catégories secondaires d’assistance technique : – Dépannage – Compatibilité des appareils – Mises à jour logicielles Catégories secondaires de gestion de compte : – Réinitialisation du mot de passe – Mettre à jour les informations personnelles – Fermer le compte – Sécurité du compte Catégories secondaires de demande générale : – Informations sur le produit – Tarification – Commentaires – Parler à un humain

UTILISATEURJe dois faire fonctionner à nouveau mon Internet.

En fonction de la classification de la requête du client, un ensemble d’instructions plus spécifiques peut être fourni à un modèle pour lui permettre de gérer les étapes suivantes. Par exemple, supposons que le client ait besoin d’aide pour « résoudre un problème ».

SYSTÈMEVous recevrez des demandes de service client nécessitant un dépannage dans un contexte d’assistance technique. Aidez l’utilisateur en : – Lui demandant de vérifier que tous les câbles vers/depuis le routeur sont connectés. Notez qu’il est courant que les câbles se détachent au fil du temps. – Si tous les câbles sont connectés et que le problème persiste, demandez-lui quel modèle de routeur il utilise. – Vous allez maintenant lui conseiller comment redémarrer son appareil : — Si le numéro de modèle est MTD-327J, conseillez-lui d’appuyer sur le bouton rouge et de le maintenir enfoncé pendant 5 secondes, puis d’attendre 5 minutes avant de tester la connexion. — Si le numéro de modèle est MTD-327S, conseillez-lui de le débrancher et de le rebrancher, puis d’attendre 5 minutes avant de tester la connexion. – Si le problème du client persiste après avoir redémarré l’appareil et attendu 5 minutes, connectez-le au support informatique en affichant {“Support informatique demandé”}. – Si l’utilisateur commence à poser des questions qui ne sont pas liées à ce sujet, confirmez s’il souhaite mettre fin à la discussion en cours sur le dépannage et classez sa demande selon le schéma suivant : <insérer le schéma de classification principal/secondaire ci-dessus ici>

UTILISATEURJe dois faire fonctionner à nouveau mon Internet.

Notez que le modèle a reçu pour instruction d’émettre des chaînes spéciales pour indiquer quand l’état de la conversation change. Cela nous permet de transformer notre système en une machine à états où l’état détermine quelles instructions sont injectées. En gardant une trace de l’état, des instructions pertinentes à cet état et également, éventuellement, des transitions d’état autorisées à partir de cet état, nous pouvons mettre en place des garde-fous autour de l’expérience utilisateur qui seraient difficiles à réaliser avec une approche moins structurée.

Tactique : Pour les applications de dialogue qui nécessitent de très longues conversations, résumez ou filtrez le dialogue précédent

Étant donné que les modèles ont une longueur de contexte fixe, le dialogue entre un utilisateur et un assistant dans lequel la conversation entière est incluse dans la fenêtre de contexte ne peut pas continuer indéfiniment.

Il existe plusieurs solutions pour contourner ce problème, l’une d’entre elles consistant à résumer les tours précédents de la conversation. Une fois que la taille de l’entrée atteint une longueur seuil prédéterminée, cela peut déclencher une requête qui résume une partie de la conversation et le résumé de la conversation précédente peut être inclus dans le message système. Alternativement, la conversation précédente peut être résumée de manière asynchrone en arrière-plan tout au long de la conversation.

Une solution alternative consiste à sélectionner dynamiquement les parties précédentes de la conversation qui sont les plus pertinentes pour la requête en cours. Voir la tactique « Utiliser la recherche basée sur les intégrations pour mettre en œuvre une récupération efficace des connaissances » .

Tactique : résumer les longs documents par morceaux et construire un résumé complet de manière récursive

Étant donné que les modèles ont une longueur de contexte fixe, ils ne peuvent pas être utilisés pour résumer un texte plus long que la longueur du contexte moins la longueur du résumé généré dans une seule requête.

Pour résumer un document très long tel qu’un livre, nous pouvons utiliser une séquence de requêtes pour résumer chaque section du document. Les résumés de section peuvent être concaténés et résumés pour produire des résumés de résumés. Ce processus peut se dérouler de manière récursive jusqu’à ce qu’un document entier soit résumé. S’il est nécessaire d’utiliser des informations sur les sections précédentes afin de donner un sens aux sections suivantes, une autre astuce qui peut être utile consiste à inclure un résumé courant du texte qui précède un point donné du livre tout en résumant le contenu à ce point. L’efficacité de cette procédure pour résumer des livres a été étudiée dans des recherches antérieures d’OpenAI utilisant des variantes de GPT-3.

Stratégie : Donner aux modèles le temps de « réfléchir »

Tactique : demandez au modèle de trouver sa propre solution avant de se précipiter vers une conclusion

Parfois, nous obtenons de meilleurs résultats lorsque nous demandons explicitement au modèle de raisonner à partir des premiers principes avant de parvenir à une conclusion. Supposons par exemple que nous souhaitons qu’un modèle évalue la solution d’un élève à un problème mathématique. La manière la plus évidente d’y parvenir est de simplement demander au modèle si la solution de l’élève est correcte ou non.

SYSTÈMEDéterminez si la solution de l’élève est correcte ou non.

UTILISATEURÉnoncé du problème : Je construis une installation d’énergie solaire et j’ai besoin d’aide pour calculer les aspects financiers. – Le terrain coûte 100 $/pied carré – Je peux acheter des panneaux solaires pour 250 $/pied carré – J’ai négocié un contrat de maintenance qui me coûtera 100 000 $ par an et 10 $ supplémentaires/pied carré Quel est le coût total de la première année d’exploitation en fonction du nombre de pieds carrés. Solution de l’étudiant : Soit x la taille de l’installation en pieds carrés. 1. Coût du terrain : 100x 2. Coût des panneaux solaires : 250x 3. Coût de maintenance : 100 000 + 100x Coût total : 100x + 250x + 100 000 + 100x = 450x + 100 000

ASSISTANTLa solution de l’étudiant est correcte.

Mais la solution de l’étudiant n’est pas correcte ! Nous pouvons faire en sorte que le modèle s’en aperçoive en l’invitant à générer d’abord sa propre solution.

SYSTÈMECommencez par trouver votre propre solution au problème. Comparez ensuite votre solution à celle de l’élève et évaluez si la solution de l’élève est correcte ou non. Ne décidez pas si la solution de l’élève est correcte avant d’avoir résolu le problème vous-même.

UTILISATEURÉnoncé du problème : Je construis une installation d’énergie solaire et j’ai besoin d’aide pour calculer les aspects financiers. – Le terrain coûte 100 $/pied carré – Je peux acheter des panneaux solaires pour 250 $/pied carré – J’ai négocié un contrat de maintenance qui me coûtera 100 000 $ par an et 10 $ supplémentaires/pied carré Quel est le coût total de la première année d’exploitation en fonction du nombre de pieds carrés. Solution de l’étudiant : Soit x la taille de l’installation en pieds carrés. 1. Coût du terrain : 100x 2. Coût des panneaux solaires : 250x 3. Coût de maintenance : 100 000 + 100x Coût total : 100x + 250x + 100 000 + 100x = 450x + 100 000

ASSISTANTSoit x la taille de l’installation en pieds carrés. 1. Coût du terrain : 100x 2. Coût des panneaux solaires : 250x 3. Coût d’entretien : 100 000 + 10x Coût total : 100x + 250x + 100 000 + 10x = 360x + 100 000 La solution de l’étudiant est incorrecte. Il a fait une erreur dans le calcul des coûts d’entretien, en utilisant 100x au lieu de 10x. Le coût total correct pour la première année d’exploitation est de 360x + 100 000.

Tactique : utiliser un monologue intérieur ou une séquence de requêtes pour masquer le processus de raisonnement du modèle

La tactique précédente démontre qu’il est parfois important pour le modèle de raisonner en détail sur un problème avant de répondre à une question spécifique. Pour certaines applications, le processus de raisonnement qu’un modèle utilise pour arriver à une réponse finale ne serait pas approprié à partager avec l’utilisateur. Par exemple, dans les applications de tutorat, nous pouvons vouloir encourager les étudiants à trouver leurs propres réponses, mais le processus de raisonnement d’un modèle sur la solution de l’étudiant pourrait révéler la réponse à l’étudiant.

Le monologue intérieur est une tactique qui peut être utilisée pour atténuer ce problème. L’idée du monologue intérieur est d’indiquer au modèle de placer les parties de la sortie qui sont censées être cachées à l’utilisateur dans un format structuré qui facilite leur analyse. Ensuite, avant de présenter la sortie à l’utilisateur, la sortie est analysée et seule une partie de la sortie est rendue visible.

SYSTÈMESuivez ces étapes pour répondre aux questions des utilisateurs. Étape 1 – Commencez par trouver votre propre solution au problème. Ne vous fiez pas à la solution de l’élève, car elle peut être incorrecte. Placez tout votre travail pour cette étape entre des guillemets triples (“””). Étape 2 – Comparez votre solution à celle de l’élève et évaluez si la solution de l’élève est correcte ou non. Placez tout votre travail pour cette étape entre des guillemets triples (“””). Étape 3 – Si l’élève a fait une erreur, déterminez quel indice vous pourriez lui donner sans divulguer la réponse. Placez tout votre travail pour cette étape entre des guillemets triples (“””). Étape 4 – Si l’élève a fait une erreur, donnez-lui l’indice de l’étape précédente (en dehors des guillemets triples). Au lieu d’écrire “Étape 4 – …”, écrivez “Indice :”.

UTILISATEURÉnoncé du problème : <insérer l’énoncé du problème> Solution de l’étudiant : <insérer la solution de l’étudiant>

Alternativement, ceci peut être réalisé avec une séquence de requêtes dans laquelle toutes, sauf la dernière, ont leur sortie cachée à l’utilisateur final.

Tout d’abord, nous pouvons demander au modèle de résoudre le problème tout seul. Étant donné que cette requête initiale ne nécessite pas la solution de l’étudiant, elle peut être omise. Cela présente l’avantage supplémentaire qu’il n’y a aucun risque que la solution du modèle soit biaisée par la tentative de solution de l’étudiant.

UTILISATEUR<insérer l’énoncé du problème>

Ensuite, nous pouvons demander au modèle d’utiliser toutes les informations disponibles pour évaluer l’exactitude de la solution de l’élève.

SYSTÈMEComparez votre solution à celle de l’élève et évaluez si la solution de l’élève est correcte ou non.

UTILISATEURÉnoncé du problème : « <insérer l’énoncé du problème> » » Votre solution : « <insérer la solution générée par le modèle> » » Solution de l’élève : « <insérer la solution de l’élève> » »

Enfin, nous pouvons laisser le modèle utiliser sa propre analyse pour construire une réponse dans la peau d’un tuteur serviable.

SYSTÈMEVous êtes professeur de mathématiques. Si l’élève a fait une erreur, proposez-lui un indice qui ne révèle pas la réponse. Si l’élève n’a pas fait d’erreur, proposez-lui simplement un commentaire encourageant.

UTILISATEURÉnoncé du problème : « <insérer l’énoncé du problème> » » Votre solution : « <insérer la solution générée par le modèle> » » Solution de l’étudiant : « <insérer la solution de l’étudiant> » » Analyse : « <insérer l’analyse générée par le modèle de l’étape précédente> » »

Tactique : Demandez au modèle s’il a raté quelque chose lors des passages précédents

Supposons que nous utilisions un modèle pour répertorier les extraits d’une source qui sont pertinents pour une question particulière. Après avoir répertorié chaque extrait, le modèle doit déterminer s’il doit commencer à en écrire un autre ou s’il doit s’arrêter. Si le document source est volumineux, il est courant qu’un modèle s’arrête trop tôt et ne parvienne pas à répertorier tous les extraits pertinents. Dans ce cas, de meilleures performances peuvent souvent être obtenues en demandant au modèle d’effectuer des requêtes de suivi pour trouver les extraits qu’il a manqués lors des passages précédents.

SYSTÈMEVous recevrez un document délimité par des guillemets triples. Votre tâche consiste à sélectionner des extraits qui se rapportent à la question suivante : « Quels changements de paradigme importants se sont produits dans l’histoire de l’intelligence artificielle ». Assurez-vous que les extraits contiennent tout le contexte pertinent nécessaire à leur interprétation ; en d’autres termes, n’extrayez pas de petits extraits qui manquent de contexte important. Fournissez une sortie au format JSON comme suit : [{“excerpt”: “…”}, … {“excerpt”: “…”}]

UTILISATEUR”””<insérer le document ici>”””

ASSISTANT[{“excerpt”: “le modèle écrit un extrait ici”}, … {“excerpt”: “le modèle écrit un autre extrait ici”}]

UTILISATEURY a-t-il des extraits plus pertinents ? Veillez à ne pas répéter les extraits. Assurez-vous également que les extraits contiennent tout le contexte pertinent nécessaire à leur interprétation. En d’autres termes, n’extrayez pas de petits extraits qui manquent de contexte important.

Stratégie : Utiliser des outils externes

Tactique : Utiliser la recherche basée sur les intégrations pour mettre en œuvre une récupération efficace des connaissances

Un modèle peut exploiter des sources d’informations externes si elles sont fournies dans le cadre de ses entrées. Cela peut aider le modèle à générer des réponses plus informées et plus actualisées. Par exemple, si un utilisateur pose une question sur un film spécifique, il peut être utile d’ajouter des informations de haute qualité sur le film (par exemple, les acteurs, le réalisateur, etc.) aux entrées du modèle. Les incorporations peuvent être utilisées pour mettre en œuvre une récupération efficace des connaissances, de sorte que des informations pertinentes puissent être ajoutées aux entrées du modèle de manière dynamique au moment de l’exécution.

Un embedding de texte est un vecteur qui peut mesurer la parenté entre des chaînes de texte. Les chaînes similaires ou pertinentes seront plus proches les unes des autres que les chaînes sans rapport. Ce fait, ainsi que l’existence d’algorithmes de recherche vectorielle rapides, signifie que les embeddings peuvent être utilisés pour mettre en œuvre une récupération efficace des connaissances. En particulier, un corpus de texte peut être divisé en morceaux, et chaque morceau peut être intégré et stocké. Ensuite, une requête donnée peut être intégrée et une recherche vectorielle peut être effectuée pour trouver les morceaux de texte intégrés du corpus qui sont les plus liés à la requête (c’est-à-dire les plus proches les uns des autres dans l’espace d’intégration).

Des exemples d’implémentation sont disponibles dans le livre de recettes OpenAI . Consultez la tactique « Demander au modèle d’utiliser les connaissances récupérées pour répondre aux requêtes » pour obtenir un exemple d’utilisation de la récupération des connaissances afin de minimiser la probabilité qu’un modèle invente des faits incorrects.

Tactique : utiliser l’exécution de code pour effectuer des calculs plus précis ou appeler des API externes

Les modèles de langage ne peuvent pas être utilisés pour effectuer des calculs arithmétiques ou longs avec précision. Dans les cas où cela est nécessaire, un modèle peut être chargé d’écrire et d’exécuter du code au lieu d’effectuer ses propres calculs. En particulier, un modèle peut être chargé de placer le code qui est censé être exécuté dans un format désigné tel que triple backtick. Une fois qu’une sortie est produite, le code peut être extrait et exécuté. Enfin, si nécessaire, la sortie du moteur d’exécution de code (c’est-à-dire l’interpréteur Python) peut être fournie comme entrée au modèle pour la requête suivante.

SYSTÈMEVous pouvez écrire et exécuter du code Python en l’entourant de triples guillemets, par exemple « le code va ici ». Utilisez ceci pour effectuer des calculs.

UTILISATEURTrouvez toutes les racines à valeurs réelles du polynôme suivant : 3*x**5 – 5*x**4 – 3*x**3 – 7*x – 10.

Un autre cas d’utilisation intéressant pour l’exécution de code est l’appel d’API externes. Si un modèle reçoit des instructions sur l’utilisation appropriée d’une API, il peut écrire du code qui l’utilise. Un modèle peut recevoir des instructions sur la façon d’utiliser une API en lui fournissant une documentation et/ou des exemples de code montrant comment utiliser l’API.

SYSTÈMEVous pouvez écrire et exécuter du code Python en l’entourant de triples guillemets inversés. Notez également que vous avez accès au module suivant pour aider les utilisateurs à envoyer des messages à leurs amis : “`python import message message.write(to=”John”, message=”Hey, tu veux qu’on se rencontre après le travail ?”)“`

AVERTISSEMENT : l’exécution de code produit par un modèle n’est pas intrinsèquement sûre et des précautions doivent être prises dans toute application qui cherche à le faire. En particulier, un environnement d’exécution de code sandboxé est nécessaire pour limiter les dommages que pourrait causer un code non fiable.

Tactique : Donner au modèle l’accès à des fonctions spécifiques

L’API Chat Completions permet de transmettre une liste de descriptions de fonctions dans les requêtes. Cela permet aux modèles de générer des arguments de fonction selon les schémas fournis. Les arguments de fonction générés sont renvoyés par l’API au format JSON et peuvent être utilisés pour exécuter des appels de fonction. La sortie fournie par les appels de fonction peut ensuite être réinjectée dans un modèle dans la requête suivante pour fermer la boucle. Il s’agit de la méthode recommandée pour utiliser les modèles OpenAI pour appeler des fonctions externes. Pour en savoir plus, consultez la section sur les appels de fonctions dans notre guide de génération de texte d’introduction et d’autres exemples d’appels de fonctions dans le livre de recettes OpenAI.

Stratégie : tester les changements systématiquement

Il peut parfois être difficile de déterminer si un changement (par exemple une nouvelle instruction ou une nouvelle conception) améliore ou détériore votre système. L’examen de quelques exemples peut donner une idée de ce qui est le mieux, mais avec des échantillons de petite taille, il peut être difficile de faire la distinction entre une véritable amélioration et un hasard. Il se peut que le changement améliore les performances sur certaines entrées, mais qu’il nuise aux performances sur d’autres.

Les procédures d’évaluation (ou « evals ») sont utiles pour optimiser la conception des systèmes. Les bonnes évaluations sont :

  • Représentatif de l’utilisation dans le monde réel (ou au moins diversifié)
  • Contient de nombreux cas de test pour une plus grande puissance statistique (voir le tableau ci-dessous pour les directives)
  • Facile à automatiser ou à répéter
Différence à détecterTaille de l’échantillon nécessaire pour une confiance de 95 %
30%~10
10%~100
3%~1 000
1%~10 000

L’évaluation des résultats peut être effectuée par des ordinateurs, des humains ou une combinaison des deux. Les ordinateurs peuvent automatiser les évaluations avec des critères objectifs (par exemple, des questions avec une seule réponse correcte) ainsi que des critères subjectifs ou flous, dans lesquels les résultats du modèle sont évalués par d’autres requêtes du modèle. OpenAI Evals est un framework logiciel open source qui fournit des outils pour créer des évaluations automatisées.

Les évaluations basées sur des modèles peuvent être utiles lorsqu’il existe une gamme de résultats possibles qui seraient considérés comme d’égale qualité (par exemple pour les questions avec de longues réponses). La frontière entre ce qui peut être évalué de manière réaliste avec une évaluation basée sur un modèle et ce qui nécessite une évaluation humaine est floue et évolue constamment à mesure que les modèles deviennent plus performants. Nous encourageons l’expérimentation pour déterminer dans quelle mesure les évaluations basées sur des modèles peuvent fonctionner pour votre cas d’utilisation.

Tactique : Évaluer les résultats du modèle en se référant aux réponses de référence

Supposons que l’on sache que la réponse correcte à une question doit faire référence à un ensemble spécifique de faits connus. Nous pouvons alors utiliser une requête modèle pour compter le nombre de faits requis inclus dans la réponse.

Par exemple, en utilisant le message système suivant :

SYSTÈMEVous recevrez un texte délimité par des guillemets triples qui est censé être la réponse à une question. Vérifiez si les informations suivantes sont directement contenues dans la réponse : – Neil Armstrong a été la première personne à marcher sur la Lune. – La date à laquelle Neil Armstrong a marché pour la première fois sur la Lune était le 21 juillet 1969. Pour chacun de ces points, procédez comme suit : 1 – Reformulez le point. 2 – Fournissez une citation de la réponse qui est la plus proche de ce point. 3 – Demandez-vous si une personne lisant la citation qui ne connaît pas le sujet pourrait directement en déduire le point. Expliquez pourquoi ou pourquoi pas avant de vous décider. 4 – Écrivez « oui » si la réponse à 3 était oui, sinon écrivez « non ». Enfin, indiquez le nombre de réponses « oui ». Indiquez ce nombre sous la forme {“count”: <insérer le nombre ici>}.

Voici un exemple d’entrée où les deux points sont satisfaits :

SYSTÈME<insérer le message système ci-dessus>

UTILISATEUR”Neil Armstrong est célèbre pour avoir été le premier homme à poser le pied sur la Lune. Cet événement historique a eu lieu le 21 juillet 1969, lors de la mission Apollo 11.”

Voici un exemple d’entrée où un seul point est satisfait :

SYSTÈME<insérer le message système ci-dessus>

UTILISATEUR« Neil Armstrong est entré dans l’histoire en descendant du module lunaire, devenant ainsi la première personne à marcher sur la Lune. »

Voici un exemple d’entrée où aucune n’est satisfaite :

SYSTÈME<insérer le message système ci-dessus>

UTILISATEUR”””À l’été 1969, un voyage grandiose, Apollo 11, audacieux comme la main d’une légende. Armstrong a fait un pas, l’histoire s’est déroulée, “Un petit pas”, a-t-il dit, vers un monde nouveau.”””

Il existe de nombreuses variantes possibles de ce type d’évaluation basée sur un modèle. Considérez la variante suivante qui suit le type de chevauchement entre la réponse candidate et la réponse de référence, et qui vérifie également si la réponse candidate contredit une partie de la réponse de référence.

SYSTÈMEUtilisez les étapes suivantes pour répondre aux entrées de l’utilisateur. Répétez complètement chaque étape avant de continuer. Par exemple, « Étape 1 : Raisonnez… ». Étape 1 : Raisonnez étape par étape pour savoir si les informations de la réponse soumise par rapport à la réponse de l’expert sont : disjointes, égales, un sous-ensemble, un sur-ensemble ou se chevauchant (c’est-à-dire une certaine intersection mais pas de sous-ensemble/sur-ensemble). Étape 2 : Raisonnez étape par étape pour savoir si la réponse soumise contredit un aspect de la réponse de l’expert. Étape 3 : Générez un objet JSON structuré comme : {“type_of_overlap”: “disjoint” or “equal” or “subset” or “superset” or “overlapping”, “contradiction”: true or false}

Voici un exemple de réponse avec une réponse de qualité inférieure qui ne contredit néanmoins pas la réponse de l’expert :

SYSTÈME<insérer le message système ci-dessus>

UTILISATEURQuestion : « « Pour quel événement Neil Armstrong est-il le plus célèbre et à quelle date s’est-il produit ? Supposons que ce soit en heure UTC. » Réponse envoyée : « « N’a-t-il pas marché sur la Lune ou quelque chose comme ça ? » Réponse d’expert : « « Neil Armstrong est surtout connu pour avoir été la première personne à marcher sur la Lune. Cet événement historique a eu lieu le 21 juillet 1969. »

Voici un exemple de saisie avec une réponse qui contredit directement la réponse de l’expert :

SYSTÈME<insérer le message système ci-dessus>

UTILISATEURQuestion : « « Pour quel événement Neil Armstrong est-il le plus célèbre et à quelle date s’est-il produit ? Supposons que ce soit en heure UTC. » Réponse envoyée : « « Le 21 juillet 1969, Neil Armstrong est devenu la deuxième personne à marcher sur la Lune, après Buzz Aldrin. » Réponse d’expert : « « Neil Armstrong est surtout connu pour avoir été la première personne à marcher sur la Lune. Cet événement historique s’est produit le 21 juillet 1969. »

Voici un exemple de saisie avec une réponse correcte qui fournit également un peu plus de détails que nécessaire :

SYSTÈME<insérer le message système ci-dessus>

UTILISATEURQuestion : « « Pour quel événement Neil Armstrong est-il le plus célèbre et à quelle date s’est-il produit ? Supposons que ce soit en heure UTC. » Réponse envoyée : « « Le 21 juillet 1969 vers 02 h 56 UTC, Neil Armstrong est devenu le premier homme à poser le pied sur la surface lunaire, marquant ainsi un exploit monumental dans l’histoire de l’humanité. » Réponse d’expert : « « Neil Armstrong est surtout connu pour avoir été la première personne à marcher sur la Lune. Cet événement historique s’est produit le 21 juillet 1969. »

Autres ressources

Pour plus d’inspiration, visitez le livre de recettes OpenAI , qui contient des exemples de code et également des liens vers des ressources tierces telles que :


Leave a Reply

Your email address will not be published. Required fields are marked *