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

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 produire presque tout type de réponse textuelle, qu’il s’agisse de code, d’équations mathématiques, de données structurées au format JSON ou de textes au style naturel.

Voici un exemple simple avec l’API Responses.

Générer 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, le tableau ne contient qu’un seul élément :

[
  {
    "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 partez pas du principe que le texte généré par le modèle se trouve à l’emplacement output[0].content[0].text.

Certains de nos SDK officiels facilitent l’accès au texte en ajoutant aux réponses du modèle une propriété output_text qui regroupe toutes les sorties textuelles dans une seule chaîne. Vous pouvez ainsi récupérer directement le texte généré par le modèle.

Outre le texte brut, le modèle peut renvoyer des données structurées au format JSON grâce à la fonctionnalité de sorties structurées.

Choix du modèle

Lorsque vous générez du contenu avec l’API, le choix du modèle est déterminant. Il correspond au paramètre model dans les exemples de code ci-dessus. Consultez la liste complète des modèles disponibles. Voici quelques critères pour choisir un modèle de génération de texte.

  • Les modèles de raisonnement génèrent une chaîne de raisonnement interne pour analyser le prompt. Ils excellent dans la compréhension de 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 performants. Ils donnent toutefois de meilleurs résultats lorsque vous leur expliquez plus précisément comment accomplir la tâche.
  • Les grands et les petits modèles (mini ou nano) offrent différents compromis entre vitesse, coût et capacité à résoudre des problèmes. Les grands modèles comprennent mieux les prompts et résolvent plus efficacement des problèmes dans des domaines variés. Les petits modèles sont généralement plus rapides et moins coûteux à utiliser.

En cas de doute, gpt-6-astra est un bon choix par défaut pour générer du texte à usage général et affiner vos 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 un contenu conforme à vos exigences.

Comme le contenu généré par un modèle n’est pas déterministe, rédiger un prompt pour obtenir le résultat souhaité demande à la fois de l’intuition et de la méthode. Certaines techniques et bonnes pratiques permettent toutefois d’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. Pour obtenir les meilleurs résultats, vous devrez parfois formuler vos prompts différemment selon que vous utilisez un modèle de raisonnement ou un modèle GPT, par exemple. Même deux versions d’un modèle de la même famille peuvent produire des résultats différents. Lorsque vous développez des applications plus complexes, nous vous recommandons vivement de suivre ces pratiques :

  • Configurez vos applications de production pour qu’elles utilisent des versions précises des modèles (par exemple gpt-4.1-2025-04-14) afin de garantir un comportement stable.
  • Créez des tests et des suites d’évaluation qui mesurent les effets de vos prompts. Vous pourrez ainsi suivre les performances à mesure que vous affinez vos prompts, changez de version de modèle ou passez à une version plus récente.

Voyons maintenant quelques outils et techniques pour construire vos prompts.

Rôles des messages et respect des instructions

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

Le paramètre instructions donne au modèle des consignes générales sur la manière de répondre, notamment le ton à adopter, les objectifs à atteindre et des exemples de réponses correctes. Les instructions fournies de cette manière sont prioritaires sur le prompt transmis dans le paramètre input.

Générer du texte à partir d’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 à transmettre les messages suivants dans le tableau input :

Générer 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);

Le paramètre instructions s’applique uniquement à 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, le contexte ne contient pas les instructions des échanges précédents.

La spécification du modèle d’OpenAI explique comment nos modèles déterminent la priorité des messages en fonction de leur rôle.

developer user assistant
Les messages developer contiennent les instructions du développeur de l’application. Ils sont prioritaires sur les messages user. Les messages user contiennent les instructions de l’utilisateur final. Ils passent après les messages developer. Les messages générés par le modèle ont le rôle assistant.

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

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

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

Gestion des versions de prompts dans le code

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

OpenAI abandonne progressivement les objets de prompt réutilisables dans l’API. À compter du 3 juin 2026, la création de prompts sera moins mise en avant. L’arrêt de v1/prompts est prévu le 30 novembre 2026. Consultez la page des fonctionnalités obsolètes pour connaître le calendrier à jour.

Pour vos nouveaux travaux d’ingénierie de prompts :

  • Regroupez les fonctions de construction des prompts dans un petit module à proximité de la fonctionnalité concernée.
  • Utilisez des arguments de fonction typés ou des schémas pour les valeurs dynamiques, comme les données client, les fichiers ou les options d’une tâche.
  • Transmettez directement les valeurs instructions et input ainsi générées à 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 de prompts avec votre système de déploiement. Pour un déploiement progressif, utilisez des indicateurs de fonctionnalité ou des paramètres de configuration.

Si votre intégration appelle déjà un prompt enregistré à partir de son identifiant ou de sa version, suivez le guide de migration des objets de prompt pour intégrer ce prompt à votre code.

Mise en forme des messages avec Markdown et XML

Lorsque vous rédigez des messages developer et user, associez la mise en forme Markdown et les balises XML pour aider le modèle à distinguer les différentes parties du prompt et des données de contexte.

Les titres et les listes Markdown permettent de délimiter les sections du prompt et d’en indiquer la hiérarchie au modèle. Ils peuvent aussi faciliter la lecture de vos prompts pendant le développement. Les balises XML permettent de marquer le début et la fin d’un contenu, par exemple un document de référence. Les attributs XML permettent également d’associer au contenu du prompt des métadonnées auxquelles vos instructions peuvent faire référence.

En général, un message développeur contient les sections suivantes, dans cet ordre. Le contenu et l’ordre les plus efficaces peuvent toutefois varier selon le modèle utilisé.

  • Identité : Décrivez la fonction de l’assistant, son style de communication et ses objectifs généraux.
  • Instructions : Expliquez au modèle comment produire la réponse attendue. Quelles règles doit-il suivre ? Que doit-il faire et que doit-il toujours éviter ? Ajoutez les sous-sections pertinentes pour votre cas d’usage, par exemple pour expliquer au modèle comment appeler des fonctions personnalisées.
  • Exemples : Fournissez des exemples d’entrées possibles et, pour chacune, la sortie attendue du modèle.
  • Contexte : Donnez au modèle les informations supplémentaires dont il pourrait avoir besoin pour répondre, par exemple des données privées ou propriétaires qui ne figurent pas dans ses données d’entraînement, ou d’autres données que vous jugez particulièrement pertinentes. Placez de préférence ce contenu vers la fin du prompt, car le contexte peut varier d’une requête de génération à l’autre.

L’exemple suivant combine Markdown et balises XML pour construire un message developer organisé en sections et illustré par des exemples.

Message développeur 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éduction des coûts et de la latence grâce à la mise en cache des prompts

Lorsque vous construisez un message, placez autant que possible le contenu que vous comptez réutiliser dans vos requêtes API au début du prompt et parmi les premiers paramètres du corps JSON de la requête envoyée à Chat Completions ou à Responses. Vous profiterez ainsi pleinement des gains de coût et de latence liés à la mise en cache des prompts.

Apprentissage few-shot

L’apprentissage few-shot permet de guider un grand modèle de langage vers une nouvelle tâche en incluant quelques exemples d’entrées et de sorties dans le prompt, sans recourir à l’ajustement fin du modèle. Le modèle déduit implicitement la règle qui relie ces exemples et l’applique au prompt. Choisissez des exemples couvrant un éventail d’entrées possibles et indiquez les sorties attendues.

En général, vous fournissez les exemples dans un message developer de votre requête API. Voici un message developer dont les exemples montrent au modèle comment classer des avis clients selon le sentiment exprimé.

# Identité

Vous êtes un assistant qui classe de courts avis sur des produits en attribuant
à chacun l’une des étiquettes suivantes : Positive, Negative ou Neutral.

# Instructions

* Répondez par un seul mot, sans mise en forme ni commentaire.
* Selon le sentiment exprimé dans l’avis qui vous est soumis, répondez uniquement
  par « Positive », « Negative » ou « Neutral ».

# Exemples

<product_review id="example-1">
J’adore ce casque ! La qualité du son est incroyable !
</product_review>

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

<product_review id="example-2">
L’autonomie est correcte, mais les coussinets font bas de gamme.
</product_review>

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

<product_review id="example-3">
Le service client est catastrophique. Je n’achèterai plus jamais chez eux.
</product_review>

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

Ajout d’informations de contexte pertinentes

Il est souvent utile d’inclure dans le prompt des informations de contexte sur lesquelles le modèle pourra s’appuyer pour répondre. Voici deux raisons courantes de le faire :

  • Donner au modèle accès à des données propriétaires ou à d’autres données absentes de son jeu de données d’entraînement.
  • Limiter les sources de sa réponse aux ressources que vous jugez les plus utiles.

L’ajout d’un contexte pertinent à une requête de génération est parfois appelé génération augmentée par la recherche (RAG). Il existe plusieurs façons d’enrichir le contexte d’un prompt. Vous pouvez par exemple interroger une base de données vectorielle et inclure le texte obtenu dans le prompt, ou utiliser l’outil de recherche de fichiers intégré d’OpenAI pour générer du contenu à partir de documents importés.

Prise en compte de la fenêtre de contexte

Lors d’une requête de génération, le modèle ne peut traiter qu’une quantité limitée de données. Cette limite de mémoire, appelée fenêtre de contexte, se mesure en tokens, des unités qui représentent les données que vous transmettez, qu’il s’agisse de texte ou d’images.

La taille de la fenêtre de contexte varie selon le modèle. Elle va d’une centaine de milliers de tokens à un million pour les modèles GPT-4.1 les plus récents. Consultez la documentation des modèles pour connaître la taille de la fenêtre de contexte de chacun.

Rédaction 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 explicitent la logique à suivre et fournissent les données nécessaires à la tâche. Pour tirer le meilleur parti du dernier modèle, commencez par le guide de rédaction de prompts à jour.

GPT-6 Astra prompting guide

Rédigez des prompts efficaces pour le dernier modèle grâce aux recommandations à jour, aux exemples pratiques et aux notes de migration.

Bonnes pratiques de rédaction de prompts pour le dernier modèle

Pour une présentation complète et à jour, consultez les bonnes pratiques de rédaction de prompts pour le dernier modèle. Les conseils pratiques ci-dessous restent valables.

Rédaction de prompts pour les modèles de raisonnement

La manière de rédiger un prompt diffère selon que vous utilisez un modèle de raisonnement ou un modèle GPT. En général, les modèles de raisonnement obtiennent de meilleurs résultats lorsque vous vous limitez à des consignes générales. Les modèles GPT, eux, tirent parti d’instructions très précises.

Pour vous représenter cette différence, imaginez deux collègues :

  • Un modèle de raisonnement ressemble à un collègue expérimenté. Vous pouvez lui donner un objectif et lui faire confiance pour déterminer comment l’atteindre.
  • Un modèle GPT ressemble à un collègue débutant. Il obtiendra de meilleurs résultats si vous lui donnez des instructions explicites pour produire le résultat attendu.

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 approfondir le sujet avec les ressources suivantes.

Créer un prompt dans le Playground

Utilisez le Playground pour rédiger et affiner vos prompts.

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

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

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

Retrouvez 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. Il propose des exemples de code ainsi que des liens vers des ressources tierces :