For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale

Ingénierie de prompts

Améliorez vos résultats grâce aux stratégies d’ingénierie de prompts.

Avec l’API OpenAI, vous pouvez utiliser un grand modèle de langage pour générer du texte à partir d’un prompt, comme vous le feriez avec ChatGPT. Les modèles peuvent générer presque tous les types de réponses textuelles : du code, des équations mathématiques, des données JSON structurées ou encore des textes semblables à ceux qu’un humain écrirait.

Voici un exemple simple utilisant l’API Responses.

Générez du texte à partir d’un prompt simple
import OpenAI from "openai";
const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  input: "Write a one-sentence bedtime story about a unicorn.",
});

console.log(response.output_text);

La propriété output de la réponse contient un tableau des contenus générés par le modèle. Dans cet exemple simple, il ne contient qu’un seul élément, qui se présente ainsi :

[
  {
    "id": "msg_67b73f697ba4819183a15cc17d011509",
    "type": "message",
    "role": "assistant",
    "content": [
      {
        "type": "output_text",
        "text": "Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.",
        "annotations": []
      }
    ]
  }
]

Le tableau output contient souvent plusieurs éléments ! Il peut contenir des appels d’outils, des données sur les tokens de raisonnement générés par les modèles de raisonnement et d’autres éléments. Ne supposez pas que le texte généré par le modèle se trouve à l’emplacement output[0].content[0].text.

Certains de nos SDK officiels proposent une propriété output_text dans les réponses du modèle pour en faciliter l’utilisation. Elle regroupe toutes les sorties textuelles du modèle dans une seule chaîne de caractères et peut ainsi offrir un moyen plus direct d’accéder au texte généré.

En plus du texte brut, vous pouvez demander au modèle de renvoyer des données structurées au format JSON grâce à la fonctionnalité Sorties structurées.

Choisir un modèle

Lorsque vous générez du contenu avec l’API, le choix du modèle est essentiel : il correspond au paramètre model dans les exemples de code ci-dessus. Vous trouverez ici la liste complète des modèles disponibles. Voici quelques facteurs à prendre en compte pour choisir un modèle de génération de texte.

  • Les modèles de raisonnement génèrent un raisonnement détaillé interne (« chain-of-thought ») pour analyser le prompt d’entrée et excellent dans la compréhension des tâches complexes et la planification en plusieurs étapes. Ils sont aussi généralement plus lents et plus coûteux à utiliser que les modèles GPT.
  • Les modèles GPT sont rapides, économiques et très intelligents, mais donnent de meilleurs résultats avec des instructions plus explicites sur la manière d’accomplir les tâches.
  • Les grands et petits modèles (mini ou nano) offrent différents compromis entre vitesse, coût et intelligence. Les grands modèles comprennent mieux les prompts et résolvent plus efficacement les problèmes dans divers domaines, tandis que les petits modèles sont généralement plus rapides et moins coûteux à utiliser.

En cas de doute, gpt-6-astra constitue un bon choix par défaut pour la génération de texte à usage général et l’amélioration itérative des prompts.

Ingénierie de prompts

L’ingénierie de prompts consiste à rédiger des instructions efficaces pour qu’un modèle génère de façon régulière du contenu répondant à vos exigences.

Le contenu généré par un modèle n’étant pas déterministe, la rédaction de prompts permettant d’obtenir le résultat souhaité tient à la fois de l’art et de la science. Vous pouvez néanmoins appliquer des techniques et des bonnes pratiques pour obtenir régulièrement de bons résultats.

Certaines techniques d’ingénierie de prompts, comme l’utilisation des rôles de message, fonctionnent avec tous les modèles. Toutefois, différents types de modèles, par exemple les modèles de raisonnement et les modèles GPT, peuvent nécessiter des prompts différents pour donner les meilleurs résultats. Même des versions figées de modèles d’une même famille peuvent produire des résultats différents. À mesure que vous développez des applications plus complexes, nous vous recommandons donc vivement de suivre ces pratiques :

  • Associez vos applications de production à des versions figées précises des modèles (par exemple gpt-4.1-2025-04-14) pour garantir un comportement cohérent
  • Créez des tests et des suites d’évaluation qui mesurent le comportement des prompts afin de suivre les performances au fil des itérations ou lorsque vous changez de version de modèle ou passez à une version plus récente

Examinons maintenant quelques outils et techniques à votre disposition pour construire des prompts.

Rôles des messages et respect des instructions

Vous pouvez fournir au modèle des instructions avec différents niveaux d’autorité à l’aide du paramètre d’API instructions ou des rôles de message.

Le paramètre instructions fournit au modèle des instructions générales sur le comportement à adopter pour générer une réponse, notamment le ton, les objectifs et des exemples de réponses correctes. Toute instruction fournie de cette manière est prioritaire sur un prompt transmis dans le paramètre input.

Générez du texte avec des instructions
import OpenAI from "openai";
const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "low" },
  instructions: "Talk like a pirate.",
  input: "Are semicolons optional in JavaScript?",
});

console.log(response.output_text);

L’exemple ci-dessus revient à peu près à utiliser les messages d’entrée suivants dans le tableau input :

Générez du texte avec des messages de rôles différents
import OpenAI from "openai";
const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "low" },
  input: [
    {
      role: "developer",
      content: "Talk like a pirate.",
    },
    {
      role: "user",
      content: "Are semicolons optional in JavaScript?",
    },
  ],
});

console.log(response.output_text);

Notez que le paramètre instructions ne s’applique qu’à la requête de génération de réponse en cours. Si vous gérez l’état de la conversation avec le paramètre previous_response_id, les instructions instructions utilisées lors des tours précédents ne seront pas présentes dans le contexte.

La spécification du modèle d’OpenAI décrit comment nos modèles attribuent différents niveaux de priorité aux messages selon leur rôle.

developeruserassistant
Les messages developer sont des instructions fournies par le développeur de l’application. Ils sont prioritaires sur les messages user.Les messages user sont des instructions fournies par un utilisateur final. Leur priorité est inférieure à celle des messages developer.Les messages générés par le modèle ont le rôle assistant.

Une conversation en plusieurs tours peut comprendre plusieurs messages de ces types, ainsi que d’autres types de contenu fournis par vous et par le modèle. Pour en savoir plus, consultez la documentation sur la gestion de l’état de la conversation.

Vous pouvez comparer les messages developer et user à une fonction et à ses arguments dans un langage de programmation.

  • Les messages developer fournissent les règles et la logique métier du système, comme une définition de fonction.
  • Les messages user fournissent les données d’entrée et la configuration auxquelles s’appliquent les instructions du message developer, comme les arguments d’une fonction.

Versionnez les prompts dans le code

Stockez les prompts de production dans le code de votre application au lieu de créer des objets prompt réutilisables. En gérant les prompts dans le code, vous pouvez utiliser des entrées typées, la revue de code, des tests et votre processus de déploiement habituel pour modifier le comportement du modèle.

OpenAI rend obsolètes les objets prompt réutilisables dans l’API. La création de prompts sera moins mise en avant à partir du 3 juin 2026, et l’arrêt de v1/prompts est prévu pour le 30 novembre 2026. Consultez la page des dépréciations pour connaître le calendrier à jour.

Pour tout nouveau travail d’ingénierie de prompts :

  • Regroupez les fonctions de construction des prompts dans un petit module à proximité de la fonctionnalité qu’elles prennent en charge.
  • Utilisez des arguments de fonction typés ou des schémas pour les valeurs dynamiques, telles que les données client, les fichiers ou les options des tâches.
  • Transmettez les valeurs générées pour instructions et input directement à l’API Responses.
  • Ajoutez des jeux de données de test représentatifs, des tests et des contrôles d’évaluation avant de modifier les prompts de production.
  • Déployez les modifications des prompts via votre système de déploiement. Utilisez des indicateurs de fonctionnalité ou la configuration si vous avez besoin d’un déploiement progressif.

Si votre intégration appelle déjà un prompt enregistré à l’aide d’un identifiant ou d’une version de prompt, suivez le guide de migration des objets prompt pour transférer ce prompt dans le code.

Mise en forme des messages avec Markdown et XML

Lorsque vous rédigez des messages developer et user, vous pouvez aider le modèle à comprendre les délimitations logiques de votre prompt et des données de contexte en combinant la mise en forme Markdown et les balises XML.

Les titres et les listes Markdown permettent de distinguer les sections d’un prompt et d’indiquer leur hiérarchie au modèle. Ils peuvent aussi rendre vos prompts plus lisibles pendant le développement. Les balises XML permettent de délimiter le début et la fin d’un contenu, comme un document complémentaire utilisé comme référence. Les attributs XML peuvent également servir à définir des métadonnées sur le contenu du prompt, auxquelles vos instructions peuvent faire référence.

En général, un message developer contient les sections suivantes, habituellement dans cet ordre (le contenu et l’ordre optimaux peuvent toutefois varier selon le modèle utilisé) :

  • Identité : Décrivez la fonction, le style de communication et les objectifs généraux de l’assistant.
  • Instructions : Indiquez au modèle comment générer la réponse souhaitée. Quelles règles doit-il suivre ? Que doit-il faire et que ne doit-il jamais faire ? Cette section peut comporter plusieurs sous-sections adaptées à votre cas d’usage, par exemple pour expliquer comment le modèle doit appeler des fonctions personnalisées.
  • Exemples : Fournissez des exemples d’entrées possibles, accompagnés de la sortie attendue du modèle.
  • Contexte : Fournissez au modèle toute information supplémentaire dont il pourrait avoir besoin pour générer une réponse, comme des données privées ou propriétaires absentes de ses données d’entraînement, ou toute autre donnée que vous savez particulièrement pertinente. Il est généralement préférable de placer ce contenu vers la fin du prompt, car le contexte peut varier d’une requête de génération à l’autre.

Voici un exemple d’utilisation de Markdown et de balises XML pour construire un message developer avec des sections distinctes et des exemples à l’appui.

Un message developer pour la génération de code
# Identity

You are coding assistant that helps enforce the use of snake case
variables in JavaScript code, and writing code that will run in
Internet Explorer version 6.

# Instructions

* When defining variables, use snake case names (e.g. my_variable)
  instead of camel case names (e.g. myVariable).
* To support old browsers, declare variables using the older
  "var" keyword.
* Do not give responses with Markdown formatting, just return
  the code as requested.

# Examples

<user_query>
How do I declare a string variable for a first name?
</user_query>

<assistant_response>
var first_name = "Anna";
</assistant_response>

Réduisez les coûts et la latence grâce à la mise en cache des prompts

Lorsque vous construisez un message, essayez de placer le contenu que vous prévoyez de réutiliser dans vos requêtes API au début du prompt, et parmi les premiers paramètres API que vous transmettez dans le corps JSON de la requête à Chat Completions ou Responses. Vous maximisez ainsi les économies et les gains de latence liés à la mise en cache des prompts.

Apprentissage few-shot

L’apprentissage few-shot permet d’orienter un grand modèle de langage vers une nouvelle tâche en incluant quelques exemples d’entrées et de sorties dans le prompt, plutôt qu’en procédant à l’affinage du modèle. Le modèle déduit implicitement le schéma de ces exemples et l’applique à un prompt. Lorsque vous fournissez des exemples, essayez de présenter des entrées possibles variées, accompagnées des sorties souhaitées.

En général, vous fournissez les exemples dans un message developer de votre requête API. Voici un message developer contenant des exemples qui montrent au modèle comment classer des avis sur le service client comme positifs ou négatifs.

# Identity

You are a helpful assistant that labels short product reviews as
Positive, Negative, or Neutral.

# Instructions

* Only output a single word in your response with no additional formatting
  or commentary.
* Your response should only be one of the words "Positive", "Negative", or
  "Neutral" depending on the sentiment of the product review you are given.

# Examples

<product_review id="example-1">
I absolutely love this headphones — sound quality is amazing!
</product_review>

<assistant_response id="example-1">
Positive
</assistant_response>

<product_review id="example-2">
Battery life is okay, but the ear pads feel cheap.
</product_review>

<assistant_response id="example-2">
Neutral
</assistant_response>

<product_review id="example-3">
Terrible customer service, I'll never buy from them again.
</product_review>

<assistant_response id="example-3">
Negative
</assistant_response>

Incluez des informations de contexte pertinentes

Il est souvent utile d’inclure dans votre prompt des informations de contexte supplémentaires que le modèle peut utiliser pour générer une réponse. Voici quelques raisons courantes de le faire :

  • Pour donner au modèle accès à des données propriétaires ou à toute autre donnée absente du jeu de données utilisé pour son entraînement.
  • Pour limiter les sources sur lesquelles le modèle fonde sa réponse à un ensemble précis de ressources que vous jugez les plus utiles.

La technique qui consiste à ajouter du contexte pertinent à la requête de génération du modèle est parfois appelée génération augmentée par récupération (RAG). Vous pouvez enrichir le contexte du prompt de différentes façons, par exemple en interrogeant une base de données vectorielle et en y intégrant le texte obtenu, ou en utilisant l’outil de recherche de fichiers intégré d’OpenAI pour générer du contenu à partir de documents importés.

Tenez compte de la fenêtre de contexte

Les modèles ne peuvent traiter qu’une quantité limitée de données dans le contexte pris en compte lors d’une requête de génération. Cette limite de mémoire est appelée fenêtre de contexte et s’exprime en tokens, des fragments des données que vous transmettez, qu’il s’agisse de texte ou d’images.

La taille de la fenêtre de contexte varie selon les modèles, d’un peu plus de 100 000 tokens jusqu’à un million pour les modèles GPT-4.1 plus récents. Consultez la documentation des modèles pour connaître la taille exacte de la fenêtre de contexte de chacun.

Conception de prompts pour les modèles actuels

Les modèles GPT comme gpt-6-astra donnent de meilleurs résultats lorsque le prompt contient des instructions précises qui indiquent explicitement la logique et les données nécessaires pour accomplir la tâche. Pour tirer le meilleur parti du dernier modèle, commencez par le guide actuel de conception de prompts.

GPT-6 Astra prompting guide

Tirez le meilleur parti des prompts pour le dernier modèle grâce à des recommandations à jour, des exemples pratiques et des notes de migration.

Bonnes pratiques de conception de prompts pour le dernier modèle

Pour des recommandations complètes et à jour, consultez les bonnes pratiques de conception de prompts pour le dernier modèle. Les rappels pratiques ci-dessous restent valables.

Conception de prompts pour les modèles de raisonnement

La conception de prompts pour un modèle de raisonnement diffère sur certains points de celle destinée à un modèle GPT. En général, les modèles de raisonnement donnent de meilleurs résultats lorsque les tâches sont accompagnées uniquement de consignes générales. À l’inverse, les modèles GPT bénéficient d’instructions très précises.

Voici une façon de comprendre la différence entre les modèles de raisonnement et les modèles GPT.

  • Un modèle de raisonnement est comparable à un collègue expérimenté. Vous pouvez lui donner un objectif à atteindre et lui faire confiance pour régler les détails.
  • Un modèle GPT est comparable à un collègue débutant. Il sera plus efficace si vous lui donnez des instructions explicites pour produire un résultat précis.

Pour en savoir plus sur les bonnes pratiques d’utilisation des modèles de raisonnement, consultez ce guide.

Prochaines étapes

Maintenant que vous connaissez les bases des entrées et sorties textuelles, vous pouvez poursuivre avec l’une de ces ressources.

Créez un prompt dans le Playground

Utilisez le Playground pour élaborer des prompts et les améliorer au fil des itérations.

Générez des données JSON avec les sorties structurées

Assurez-vous que les données JSON produites par un modèle respectent un schéma JSON.

Référence complète de l’API

Consultez toutes les options de génération de texte dans la référence de l’API.

Autres ressources

Pour trouver d’autres idées, consultez l’OpenAI Cookbook, qui contient des exemples de code ainsi que des liens vers des ressources tierces, notamment :