top of page
ENDKOO

Guide Officiel d'OpenAI sur le prompt engineering de chatGPT

Découvrez le guide officiel d'OpenAI

Ingénierie rapide (Prompt Engineering)

Ce guide partage des stratégies et des tactiques pour obtenir de meilleurs résultats avec les grands modèles de langage (parfois appelés modèles GPT) comme GPT-4. Les méthodes décrites ici peuvent parfois être déployées en combinaison pour un plus grand effet. Nous encourageons l’expérimentation pour trouver les méthodes qui vous conviennent le mieux.

Certains des exemples présentés ici ne fonctionnent actuellement qu'avec notre modèle le plus performant, gpt-4. En général, si vous constatez qu'un modèle échoue dans une tâche et qu'un modèle plus performant est disponible, cela vaut souvent la peine de réessayer avec le modèle le plus performant.

Vous pouvez également explorer des exemples d'invites qui montrent ce dont nos modèles sont capables :

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

Écrivez des instructions claires

Ces modèles ne peuvent pas lire dans vos pensées. Si les sorties sont trop longues, 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 avez 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, en particulier lorsqu'on leur pose des 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 élève à mieux réussir un test, fournir un texte de référence à ces modèles peut aider à répondre avec moins de fabrications.

Tactique:


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

Tout comme il est de bonne pratique en génie logiciel 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. En outre, les tâches complexes peuvent souvent être redéfinies comme un flux de tâches plus simples dans lequel les résultats des tâches antérieures sont utilisés 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 font davantage d’erreurs de raisonnement lorsqu’ils tentent de répondre immédiatement, plutôt que de prendre le temps d’élaborer une réponse. Demander une « chaîne de réflexion » avant une réponse peut aider le modèle à raisonner de manière plus fiable vers des réponses correctes.

Tactique:


Utiliser des outils externes

Compensez les faiblesses du modèle en lui fournissant les sorties d’autres outils. Par exemple, un système de récupération de texte (parfois appelé RAG ou génération augmentée de récupération) peut indiquer au modèle les documents pertinents. Un moteur d'exécution de code tel que 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-la pour tirer le meilleur parti des deux.

Tactique:


Tester systématiquement les modifications

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 de moins bonnes performances globales sur un ensemble d'exemples plus représentatifs. Par conséquent, pour être sûr qu'un changement est net positif pour les performances, il peut être nécessaire de définir une suite de tests complète (également connue sous le nom d'« évaluation »).

Tactique:


Tactique

Chacune des stratégies répertoriées ci-dessus peut être instanciée avec des tactiques spécifiques. Ces tactiques visent à fournir des idées de choses à essayer. Ils ne sont en aucun cas exhaustifs et vous devriez vous sentir libre d’essayer des idées créatives qui ne sont pas représentées ici.

Stratégie : rédigez des instructions claires

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

Afin d'obtenir une réponse très pertinente, assurez-vous que les demandes fournissent des détails ou un contexte importants. Sinon, vous laissez au modèle le soin de deviner ce que vous voulez dire.



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

SYSTÈME

Lorsque je demande de l'aide pour écrire quelque chose, vous répondez avec un document contenant au moins une blague ou un commentaire ludique dans chaque paragraphe.

UTILISATEUR

Écrivez une note de remerciement à mon fournisseur de boulons en acier pour avoir reçu la livraison à temps et dans un bref délai. Cela nous a permis de livrer une commande importante.

Ouvrir dans l'aire de jeux

Tactique : utilisez des délimiteurs pour indiquer clairement des parties distinctes 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.

UTILISATEUR

Résumez le texte délimité par des guillemets triples avec un haïku. """insérer le texte ici"""

Ouvrir dans l'aire de jeux

SYSTÈME

Vous recevrez deux articles (délimités par des balises XML) sur le même sujet. Résumez d’abord les arguments de chaque article. Indiquez ensuite lequel d’entre eux présente un meilleur argument et expliquez pourquoi.

UTILISATEUR

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

Ouvrir dans l'aire de jeux

SYSTÈME

Vous recevrez un résumé de thèse et un titre suggéré pour celui-ci. 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.

UTILISATEUR

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

Ouvrir dans l'aire de jeux

Pour des tâches simples comme celles-ci, l’utilisation de délimiteurs peut ne pas faire de différence dans la qualité du résultat. Cependant, plus une tâche est complexe, plus il est important d’en clarifier les détails. Ne faites pas fonctionner le modèle pour comprendre exactement ce que vous leur demandez.



Tactique : spécifier les étapes requises pour accomplir une tâche

Il est préférable de spécifier certaines tâches sous forme de séquence d’étapes. Écrire explicitement les étapes peut permettre au modèle de les suivre plus facilement.

SYSTÈME

Utilisez les instructions étape par étape suivantes pour répondre aux entrées 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 le texte ici"""

Ouvrir dans l'aire de jeux



Tactique : fournir des exemples

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

SYSTÈME

Répondez dans un style cohérent.

UTILISATEUR

Apprends-moi la patience.

ASSISTANT

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

UTILISATEUR

Apprenez-moi l'océan.

Ouvrir dans l'aire de jeux

Tactique : spécifiez la longueur souhaitée de la sortie

Vous pouvez demander au modèle de produire des sorties d'une longueur cible donnée. La longueur de sortie ciblée 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 résultats avec un nombre spécifique de paragraphes ou de puces.

UTILISATEUR

Résumez le texte délimité par des guillemets triples en 50 mots environ. """insérer le texte ici"""

Ouvrir dans l'aire de jeux

UTILISATEUR

Résumez le texte délimité par des guillemets triples en 2 paragraphes. """insérer le texte ici"""

Ouvrir dans l'aire de jeux

UTILISATEUR

Résumez le texte délimité par des guillemets triples en 3 puces. """insérer le texte ici"""

Ouvrir dans l'aire de jeux



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 pertinentes pour la requête actuelle, nous pouvons alors demander au modèle d'utiliser les informations fournies pour composer sa réponse.

SYSTÈME

Utilisez les articles fournis délimités par des guillemets triples pour répondre aux questions. Si la réponse ne peut pas être trouvée 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>

Ouvrir dans l'aire de jeux

Étant donné que tous les modèles ont des fenêtres contextuelles limitées, nous avons besoin d'un moyen de rechercher dynamiquement des informations pertinentes par rapport à la question posée. Les intégrations peuvent être utilisées pour mettre en œuvre une récupération efficace des connaissances. Voir 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 cela.



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

Si les informations fournies ont été complétées par des connaissances pertinentes, il est simple de demander au modèle d'ajouter des citations à ses réponses en faisant référence à des passages de documents fournis. Notez que les citations dans la sortie peuvent ensuite être vérifiées par programme par correspondance de chaînes dans les documents fournis.

SYSTÈME

Vous 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é 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 d’une citation. Utilisez le format suivant pour citer les passages pertinents ({"citation": …}).

UTILISATEUR

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

Ouvrir dans l'aire de jeux



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

Tactique : utiliser la classification d'intention 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 traiter différents cas, il peut être avantageux de commencer par classer le type de requête et d'utiliser cette classification pour déterminer quelles instructions sont nécessaires. Ceci peut être réalisé en définissant des catégories fixes et des instructions de codage en dur pertinentes pour le traitement des tâches dans 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 contiendra uniquement les instructions nécessaires pour effectuer 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 effectuer l'ensemble de la tâche. Cela peut également entraîner une baisse 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ÈME

Vous recevrez des requêtes du service client. 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, support technique, gestion de compte ou demande générale. Catégories secondaires de facturation : - Désabonnement ou mise à niveau - Ajouter un mode de paiement - Explication des frais - Contester des frais Catégories secondaires du support 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 des demandes de renseignements générales : - Informations sur le produit - Tarification - Commentaires - Parler à un humain

UTILISATEUR

J'ai besoin que mon Internet fonctionne à nouveau.

Ouvrir dans l'aire de jeux

Sur la base de la classification de la requête client, un ensemble d'instructions plus spécifiques peut être fourni à un modèle pour qu'il puisse gérer les étapes suivantes. Par exemple, supposons que le client ait besoin d'aide pour le « dépannage ».

SYSTÈME

Vous recevrez des demandes de service client qui nécessitent un dépannage dans un contexte de support technique. Aidez l'utilisateur en : - Demandez-lui 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 avec le temps. - Si tous les câbles sont connectés et que le problème persiste, demandez-leur quel modèle de routeur ils utilisent - Vous leur expliquerez maintenant comment redémarrer leur appareil : -- Si le numéro de modèle est MTD-327J, conseillez-leur d'appuyer sur le bouton rouge et maintenez-le pendant 5 secondes, puis attendez 5 minutes avant de tester la connexion. -- Si le numéro de modèle est MTD-327S, conseillez-leur 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 au chat en cours sur le dépannage et classez sa demande selon le schéma suivant : <insérer le schéma de classification primaire/secondaire ci-dessus ici>

UTILISATEUR

J'ai besoin que mon Internet fonctionne à nouveau.

Ouvrir dans l'aire de jeux

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 dans laquelle l'état détermine quelles instructions sont injectées. En gardant une trace de l'état, des instructions pertinentes dans cet état et, é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, ce qui serait difficile à 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

Les modèles ayant une longueur de contexte fixe, le dialogue entre un utilisateur et un assistant dans lequel l'intégralité de la conversation est incluse dans la fenêtre contextuelle ne peut pas se poursuivre indéfiniment.

Il existe différentes solutions à ce problème, l'une d'elles consiste à 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 pourrait déclencher une requête résumant une partie de la conversation et le résumé de la conversation précédente pourrait être inclus dans le message système. Alternativement, une conversation antérieure pourrait ê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 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 ultérieures, une autre astuce qui peut être utile consiste à inclure un résumé du texte qui précède un point donné du livre tout en résumant le contenu à ce stade. L'efficacité de cette procédure de synthèse de livres a été étudiée dans des recherches antérieures menées par OpenAI utilisant des variantes de GPT-3.

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

Tactique : demandez au modèle d'élaborer sa propre solution avant de tirer une conclusion précipitée.

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 souhaitions un modèle pour évaluer la solution d'un élève à un problème mathématique. La façon la plus évidente d'aborder ce problème consiste simplement à demander au modèle si la solution de l'élève est correcte ou non.

SYSTÈME

Dé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 établir les finances. - Le terrain coûte 100 $/pied carré - Je peux acheter des panneaux solaires pour 250 $/pied carré - J'ai négocié un contrat d'entretien qui me coûtera 100 000 $ par an et 10 $/pied carré supplémentaires Quel est le coût total du première année d'exploitation en fonction du nombre de pieds carrés. Solution de l'élève : Soit x la taille de l'installation en pieds carrés. 1. Coût du terrain : 100x 2. Coût du panneau solaire : 250x 3. Coût de maintenance : 100 000 + 100x Coût total : 100x + 250x + 100 000 + 100x = 450x + 100 000

ASSISTANT

La solution de l'élève est correcte.

Ouvrir dans l'aire de jeux

Mais la solution de l’étudiant n’est en réalité pas correcte ! Nous pouvons faire en sorte que le modèle le remarque en l'invitant à générer d'abord sa propre solution.

SYSTÈME

Trouvez d’abord 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 tant que vous n'avez pas 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 établir les finances. - Le terrain coûte 100 $/pied carré - Je peux acheter des panneaux solaires pour 250 $/pied carré - J'ai négocié un contrat d'entretien qui me coûtera 100 000 $ par an et 10 $/pied carré supplémentaires Quel est le coût total du première année d'exploitation en fonction du nombre de pieds carrés. Solution de l'élève : Soit x la taille de l'installation en pieds carrés. 1. Coût du terrain : 100x 2. Coût du panneau solaire : 250x 3. Coût de maintenance : 100 000 + 100x Coût total : 100x + 250x + 100 000 + 100x = 450x + 100 000

ASSISTANT

Soit x la taille de l'installation en pieds carrés. 1. Coût du terrain : 100x 2. Coût du panneau solaire : 250x 3. Coût d'entretien : 100 000 + 10x Coût total : 100x + 250x + 100 000 + 10x = 360x + 100 000 La solution de l'élève est incorrecte. Ils ont commis une erreur dans le calcul du coût de maintenance, 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.

Ouvrir dans l'aire de jeux

Tactique : utiliser un monologue interne 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 que le modèle raisonne en détail sur un problème avant de répondre à une question spécifique. Pour certaines applications, il serait inapproprié de partager avec l’utilisateur le processus de raisonnement utilisé par un modèle pour arriver à une réponse finale. 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 interne est de demander au modèle de placer les parties de la sortie 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ÈME

Suivez ces étapes pour répondre aux requêtes des utilisateurs. Étape 1 – Trouvez d’abord votre propre solution au problème. Ne vous fiez pas à la solution de l'élève car elle pourrait être incorrecte. Mettez tout votre travail pour cette étape entre 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. Mettez tout votre travail pour cette étape entre guillemets triples ("" "). Étape 3 - Si l'élève a fait une erreur, déterminez quel indice vous pourriez lui donner sans révéler la réponse. Joignez tout votre travail pour cette étape entre guillemets triples ("""). Étape 4 - Si l'élève a fait une erreur, fournissez à l'élève 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>

Ouvrir dans l'aire de jeux

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

Premièrement, nous pouvons demander au modèle de résoudre le problème par lui-même. Puisque cette requête initiale ne nécessite pas la solution de l’étudiant, elle peut être omise. Cela offre l'avantage supplémentaire qu'il n'y a aucune chance que la solution du modèle soit biaisée par la solution tentée par l'étudiant.

UTILISATEUR

<insérer l'énoncé du problème>

Ouvrir dans l'aire de jeux

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ÈME

Comparez 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>"""

Ouvrir dans l'aire de jeux

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

SYSTÈME

Vous êtes professeur de mathématiques. Si l’élève a fait une erreur, proposez-lui un indice d’une manière qui ne révèle pas la réponse. Si l’élève n’a pas commis 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'élève : """<insérer la solution de l'élève>""" Analyse : """<insérer analyse générée par le modèle à partir de l'étape précédente>"""

Ouvrir dans l'aire de jeux

Tactique : demandez au modèle s'il a manqué quelque chose lors des passes précédentes

Supposons que nous utilisions un modèle pour répertorier les extraits d’une source 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 invitant le modèle à effectuer des requêtes de suivi pour rechercher les extraits manqués lors des passes précédentes.

SYSTÈME

Vous 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 la 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"}]

UTILISATEUR

Existe-t-il des extraits plus pertinents ? Faites attention à ne pas répéter des 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.

Ouvrir dans l'aire de jeux

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 son apport. Cela peut aider le modèle à générer des réponses plus éclairées et à jour. 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 acteurs, réalisateur, etc.) aux entrées du modèle. Les intégrations peuvent être utilisées pour mettre en œuvre une récupération efficace des connaissances, afin que les informations pertinentes puissent être ajoutées dynamiquement à l'entrée du modèle au moment de l'exécution.

Une intégration de texte est un vecteur qui peut mesurer la relation entre les chaînes de texte. Les chaînes similaires ou pertinentes seront plus rapprochées que les chaînes non liées. Ce fait, associé à l’existence d’algorithmes de recherche vectorielle rapides, signifie que les intégrations peuvent être utilisées 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émentations peuvent être trouvés dans le OpenAI Cookbook . Voir la tactique « Demander au modèle d'utiliser les connaissances récupérées pour répondre aux requêtes » pour un exemple de la façon d'utiliser la récupération de connaissances pour 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

On ne peut pas compter sur les modèles de langage pour effectuer seuls des calculs arithmétiques ou longs avec précision. Dans les cas où cela est nécessaire, un modèle peut être invité à écrire et à exécuter du code au lieu d'effectuer ses propres calculs. En particulier, un modèle peut être invité à placer le code destiné à être exécuté dans un format désigné tel qu'un triple backtick. Une fois la sortie 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 du modèle pour la requête suivante.

SYSTÈME

Vous pouvez écrire et exécuter du code Python en le plaçant entre trois backticks, par exemple ```le code va ici```. Utilisez-le pour effectuer des calculs.

UTILISATEUR

Trouvez toutes les racines à valeur réelle du polynôme suivant : 3*x**5 - 5*x**4 - 3*x**3 - 7*x - 10.

Ouvrir dans l'aire de jeux

Un autre bon cas d’utilisation pour l’exécution de code consiste à appeler des API externes. Si un modèle est informé de l’utilisation appropriée d’une API, il peut écrire du code qui l’utilise. Un modèle peut apprendre à utiliser une API en lui fournissant de la documentation et/ou des exemples de code montrant comment utiliser l'API.

SYSTÈME

Vous pouvez écrire et exécuter du code Python en le plaçant entre trois backticks. 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 retrouve après le travail ?)`` `

Ouvrir dans l'aire de jeux

AVERTISSEMENT : l'exécution du code produit par un modèle n'est pas intrinsèquement sûre et des précautions doivent être prises dans toute application cherchant à le faire. En particulier, un environnement d’exécution de code en bac à sable 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 boucler la boucle. Il s'agit de la manière recommandée d'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 d'introduction à la génération de texte et d'autres exemples d'appels de fonctions dans le livre de recettes OpenAI.

Stratégie : tester systématiquement les modifications

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 indiquer 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 ou une chance aléatoire. Peut-être que le changement améliore les performances sur certaines entrées, mais nuit 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ésentant d'une utilisation réelle (ou du moins diversifiée)

  • Contient de nombreux cas de test pour une plus grande puissance statistique (voir le tableau ci-dessous pour les lignes directrices)

  • Facile à automatiser ou à répéter

L'évaluation des résultats peut être effectuée par des ordinateurs, des humains ou une combinaison de ceux-ci. Les ordinateurs peuvent automatiser les évaluations avec des critères objectifs (par exemple, des questions avec une seule bonne réponse) ainsi qu'avec certains critères subjectifs ou flous, dans lesquels les sorties du modèle sont évaluées 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 un modèle 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 à réponses longues). 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 référence aux réponses de référence

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

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

SYSTÈME

Vous recevrez un texte délimité par des guillemets triples 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, effectuez les étapes suivantes : 1 - Reformulez le point. 2 - Fournissez une citation de la réponse la plus proche de ce point. 3 - Déterminez si quelqu'un qui lit la citation et ne connaît pas le sujet pourrait déduire directement ce point. Expliquez pourquoi ou pourquoi pas avant de vous décider. 4 - Écrivez « oui » si la réponse à la question 3 est oui, sinon écrivez « non ». Enfin, comptez le nombre de réponses « oui ». Fournissez ce nombre sous la forme {"count": <insert count here>}.

Ouvrir dans l'aire de jeux

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 humain à poser le pied sur la Lune. Cet événement historique a eu lieu le 21 juillet 1969, lors de la mission Apollo 11."""

Ouvrir dans l'aire de jeux

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."""

Ouvrir dans l'aire de jeux

Voici un exemple d'entrée où aucun n'est satisfait :

SYSTÈME

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

UTILISATEUR

"""Au cours de l'été 69, un grand voyage, 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, pour un monde nouveau. """

Ouvrir dans l'aire de jeux

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

SYSTÈME

Utilisez les étapes suivantes pour répondre aux entrées de l’utilisateur. Reformulez entièrement chaque étape avant de continuer. c'est-à-dire "Étape 1 : Raison...". Étape 1 : Déterminez étape par étape si les informations contenues dans la réponse soumise par rapport à la réponse de l'expert sont : disjointes, égales, un sous-ensemble, un sur-ensemble ou se chevauchent (c'est-à-dire une intersection mais pas un sous-ensemble/sur-ensemble). Étape 2 : Raisonnez étape par étape pour savoir si la réponse soumise contredit un aspect quelconque de la réponse de l'expert. Étape 3 : Produisez un objet JSON structuré comme : {"type_of_overlap": "disjoint" ou "equal" ou "subset" ou "superset" ou "overlapping", "contradiction": true ou false}

Ouvrir dans l'aire de jeux

Voici un exemple de saisie 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>

UTILISATEUR

Question : """Pour quel événement Neil Armstrong est-il le plus célèbre et à quelle date s'est-il produit ? Supposons l'heure UTC.""" Réponse soumise : """N'a-t-il pas marché sur la lune ou quelque chose du genre ?""" 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."""

Ouvrir dans l'aire de jeux

Voici un exemple d'entrée avec une réponse qui contredit directement la réponse de l'expert :

SYSTÈME

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

UTILISATEUR

Question : """Pour quel événement Neil Armstrong est-il le plus célèbre et à quelle date s'est-il produit ? Supposons l'heure UTC.""" Réponse soumise : """Le 21 juillet 1969, Neil Armstrong est devenu la deuxième personne à marcher dessus. la lune, à la suite de Buzz Aldrin.

Ouvrir dans l'aire de jeux

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>

UTILISATEUR

Question : """Pour quel événement Neil Armstrong est-il le plus célèbre et à quelle date s'est-il produit ? Supposons l'heure UTC.""" Réponse soumise : """À environ 02:56 UTC le 21 juillet 1969, Neil Armstrong est devenu le premier humain à poser le pied sur la surface lunaire, marquant une réalisation monumentale dans l'histoire de l'humanité. 1969."""

Ouvrir dans l'aire de jeux



Autres ressources

Pour plus d'inspiration, visitez le OpenAI Cookbook , qui contient des exemples de code ainsi que des liens vers des ressources tierces telles que :


Comments


bottom of page