Utilisation de GPT-6 Astra
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-6 Astra.
Introduction
GPT-6 Astra est notre modèle le plus intelligent à ce jour, avec des performances de pointe en utilisation de l’ordinateur, en navigation, en ingénierie logicielle, en sciences et dans les tâches professionnelles. Il excelle dans l’exécution de workflows en plusieurs étapes mobilisant du code, des navigateurs et des logiciels professionnels. Dans plusieurs évaluations, Astra obtient de meilleurs résultats tout en utilisant nettement moins de tokens de sortie. Le coût estimé par tâche via l’API est ainsi inférieur à celui des modèles précédents, malgré un tarif par token plus élevé.
GPT-6 Astra est aussi notre modèle le plus aligné à ce jour. Il excelle à agir avec précaution, à respecter le périmètre des tâches et à communiquer de façon transparente. Lorsque les instructions laissent une marge d’interprétation, il s’appuie sur le contexte dont il dispose pour compléter les détails courants manquants et pose des questions ciblées lorsque la réponse pourrait changer le résultat. Il intègre de nouvelles exigences, change de direction à la demande et répond aux questions annexes sans perdre de vue la tâche globale.
Pour développer avec Astra, définissez model sur gpt-6-astra dans une requête à l’API Responses.
Nouveautés
- Appel asynchrone d’outils : GPT-6 Astra peut continuer à raisonner, appeler d’autres outils ou répondre à des parties indépendantes d’une demande pendant que votre application exécute un outil. Définissez
async: truesur une fonction ou un outil personnalisé et renvoyez son résultat dès qu’il est prêt en utilisant lecall_idd’origine. Votre application reste chargée d’exécuter l’outil et de gérer le travail en attente. Consultez Appel asynchrone d’outils pour découvrir l’utilisation de base et un schéma d’implémentation avec un outil d’attente défini par le développeur. - Réorientation en cours de tour : Envoyez des instructions utilisateur supplémentaires pendant que GPT-6 Astra travaille, par exemple une correction ou un changement d’exigences. Via une connexion WebSocket, l’API Responses conserve le travail accompli et intègre la mise à jour dans la suite de l’exécution. Consultez Réorientation en cours de tour pour connaître le déroulement des événements et la gestion des résultats d’outils.
- Modification du raisonnement en cours de conversation avec préservation du cache : Ajoutez un élément d’entrée
configuration_updatepour augmenter l’effort de raisonnement lors de tâches difficiles ou le réduire pour les demandes de suivi courantes, sans réécrire le préfixe du prompt d’origine. L’effort de raisonnement mis à jour s’applique jusqu’à ce qu’un autre élément d’entréeconfiguration_updatele remplace. Consultez Modification du raisonnement en cours de conversation pour obtenir des exemples et des informations sur la compatibilité. - Surveillance du désalignement : Dans le cadre de nos mesures de protection renforcées pour GPT-6 Astra, nos systèmes surveillent le désalignement de manière asynchrone et déclenchent des alertes si nécessaire. Consultez Surveillance du désalignement pour en savoir plus.
- Limites : GPT-6 Astra ne prend pas en charge l’effort de raisonnement
none. Le mode Rapide n’est pas disponible pour GPT-6 Astra avec la résidence des données dans l’UE.
GPT-6 Astra prend également en charge les fonctionnalités de l’API déjà disponibles avec GPT-5.6, notamment l’utilisation de l’ordinateur, les sorties structurées, le streaming, l’appel d’outils par programmation, l’orchestration multi-agent, la mise en cache des prompts, la persistance du raisonnement, le compactage et le mode Pro.
Bonnes pratiques de conception de prompts
GPT-6 Astra est plus intelligent et plus performant que les modèles précédents tels que GPT-5.6 Sol. Certains de ses comportements peuvent aussi être optimisés à l’aide de prompts adaptés à votre cas d’usage.
Comportement de GPT-6 Astra
- Initiative et persévérance – Le modèle est conçu pour collaborer plus efficacement. Il est donc plus susceptible de poser une question à l’utilisateur lorsque des précisions pourraient modifier sensiblement le résultat. Cela peut l’amener à s’arrêter alors que l’utilisateur s’attend à ce qu’il fasse des hypothèses raisonnables et poursuive son travail.
- Respect des instructions – GPT-6 Astra suit globalement mieux les instructions que nos modèles précédents, ce qui vous donne davantage de contrôle sur son comportement. Il peut être plus sensible aux instructions contenues dans les skills et d’autres fichiers, tels que
AGENTS.md. Nous vous recommandons vivement d’examiner les skills et les autres fichiers accessibles à votre modèle pour repérer les instructions susceptibles d’influencer son comportement. - Personnalité et style rédactionnel – Le modèle tend à produire des réponses détaillées et mises en forme, et peut employer des tournures récurrentes d’une session à l’autre. Précisez le style rédactionnel et la structure dont votre application a besoin.
- Délégation aux sous-agents – Le modèle peut déléguer moins souvent que souhaité pour votre workflow. Précisez quand et dans quelle mesure il doit recourir à des sous-agents pour travailler en parallèle.
- Tests et vérification – Pour les tâches de programmation, le modèle tend à effectuer des tests approfondis avant de considérer une tâche comme terminée. Pour les petites tâches, cela peut conduire à des tests plus étendus que nécessaire.
Initiative et persévérance
GPT-6 Astra parvient généralement mieux que GPT-5.6 Sol et les modèles antérieurs à rester cohérent pendant les tâches de longue durée. Il est aussi plus susceptible de demander des précisions là où les modèles précédents feraient des hypothèses.
Pour encourager un travail plus autonome, commencez par ce prompt :
You should infer the user's intent and task scope from the instructions and prior conversation context. Your job is to bias towards action and carry the user's intended task to completion.
When the user expresses intent to perform new work or fix an existing issue, persist until the user's intended goal is complete. Progress autonomously towards the user's goal (e.g. creating isolated worktrees / checkouts if needed, resolving merge conflicts, read-only actions, creating draft PRs etc.) unless they are clearly destructive or irreversible.
Lorsque l’intention de l’utilisateur n’est pas claire, le modèle est plus susceptible de lui demander des précisions avant de poursuivre. Indiquez au modèle de poursuivre son travail si le prompt de l’utilisateur implique une autorisation :
When the user's prompt indicates a request for action, such as "can you...", "I want to...", "help me..." and similar expressions, treat these as instructions to do the work and take action. Do not stop at acknowledging capability (e.g. "Yes…"), proposing a plan, or offering to continue. Do not settle for a partial or "helpful enough" solution that does not fully satisfy the user's task to save time, effort or tokens. If a task requires sustained work, complete all the necessary work until the intended outcome is fulfilled.
Indiquez au modèle de ne demander l’approbation qu’après avoir préparé un résultat concret pouvant être examiné. Cela évite de bloquer la tâche avant que le modèle ait effectué le travail à sa portée et permet souvent de la terminer plus rapidement.
Before asking the user clarifying questions, you should complete the work that is already authorized from context and necessary to make the proposed action concrete and reviewable. The user should be approving a concrete, reviewable result. For example, before deploying a change, writing to an external application, merging a PR or publishing a site, do all the required work first so that user approval is the final step. You don't need user permission for reversible tasks, read-only actions, reviews or fixes, or anything for which authorization is provided earlier in the session or strongly implied from the task instruction.
Do not introduce unsolicited warnings, disclaimers, approval flows, or safety/compliance checklists due to hypothetical risk.
Par défaut, le modèle tend aussi à poser des questions sans interrompre son travail. Ajustez donc ces prompts au niveau d’autonomie dont votre application a besoin.
Respect des instructions
GPT-6 Astra suit mieux les instructions longues, mais peut aussi être plus sensible aux informations présentes dans le contexte. Par exemple, des consignes floues ou contradictoires dans un fichier de skill peuvent l’amener à s’interrompre et à bloquer le travail prématurément. Indiquez clairement la priorité respective des instructions de l’utilisateur et des skills.
The user's instructions take precedence over guidelines provided in a skill. If explicit user instructions conflict with a skill's instructions, prioritize the user's instructions.
Demander au modèle d’identifier le skill et l’instruction qui l’ont conduit à s’interrompre ou à changer de direction peut aussi contribuer à rendre son comportement plus transparent.
If a skill causes you to ask for permission or confirmation, pause, leave requested work unfinished, or diverge from the user's intent, name and link to the exact SKILL.md file you read, quote the relevant instruction, and briefly explain how it applies. Distinguish explicit skill requirements from your interpretation of guidelines.
Utilisez ce prompt pour repérer les consignes appliquées sans être signalées et celles qui se contredisent lorsque votre application charge de nombreux skills et fichiers d’instructions tels que AGENTS.md.
Personnalité et style rédactionnel
GPT-6 Astra tend à utiliser des listes, des tableaux et du Markdown pour faciliter la lecture rapide des réponses. Si votre application a besoin de texte rédigé avec moins de mise en forme, précisez cette préférence.
Default to using clear, concise paragraphs, each developing one main idea. Use lists only when the information is genuinely parallel, sequential, or easier to compare, and avoid nested lists unless the hierarchy cannot be expressed clearly in prose. Use plain, simple language: familiar words, concrete examples, and precise verbs. Prefer active voice and direct statements.
Make sure to state the main point clearly and early, then develop it with the explanation and detail the reader needs. Let each sentence build on what came before. Develop the points that matter and provide enough support to be useful.
Pour la communication technique, le prompt suivant aide à employer un langage clair et cohérent tout en restant adapté au domaine :
Use plain language over jargon, and reference technical details only to the degree that it helps illustrate an idea or your work to the user. Communicate complex concepts in a clear and cohesive manner, and calibrate your writing to the level of background knowledge assumed from the user's prompt and context.
Pour réduire le jargon et les formules toutes faites dans les textes, commencez par ce prompt :
Avoid using slop words or phrases like "Bottom Line:" in conclusions, "delve," "foster," "leverage," "it's worth noting," "importantly," "Question? Answer." or "This isn't about X. It's about Y.", "genuinely" or hyphenated compound descriptions and adjectives. Do not use concluding summary statements such as "In short:..", "The simplest mental model is:...".
State the intended action directly. Avoid adding what you won't do, what will remain unchanged, or how you'll separate or categorize results. Do not use contrastive framing such as "X, not Y" or "X—not Y" that introduces an unprompted alternative that the user didn't ask about. Avoid invented compound labels like "exact-head checks" and "editorial-row layouts", vague qualifiers, and canned transitions; use plain verbs and prepositions to state the actual relationship directly.
Délégation aux sous-agents
GPT-6 Astra est entraîné à décomposer le travail et à le déléguer à des sous-agents qui travaillent en parallèle. Si vous implémentez un système multi-agent dans votre harnais, utilisez le prompt suivant pour ajuster la part de travail que GPT-6 Astra doit déléguer :
If at any point you can parallelize work by delegating tasks to another agent (no matter if you are the root or subagent), you should do so using collaboration tools if it could save time or improve quality.
Les messages entre agents peuvent contenir des erreurs de grammaire ou d’espacement. Utilisez ce prompt pour faciliter leur lecture :
Messages that you send to other agents and your final answer may be read by a human, so ensure they are legible. Always put proper spaces between words and/or numbers.
Le modèle réagit généralement bien aux prompts qui précisent comment et quand déléguer du travail aux sous-agents. Ajustez donc ce comportement à votre harnais et à votre implémentation multi-agent.
Tests et vérification
Pour les tâches de programmation, ajustez l’étendue des tests et des vérifications aux besoins de la modification. Cela peut éviter les tests inutiles ou les vérifications répétées pour de petites modifications.
Do not write tests for reversible, low-impact changes that mirror the implementation. If you do choose to verify your work with tests, make sure that the tests are meaningful and necessary to verify implementation.
Run tests appropriate to the change and complete required checks. Once those pass, broaden or repeat testing only when new changes, failures, or unresolved concerns justify it; otherwise, continue toward completing the task.
Démarrage rapide de la migration
Migrez avec Codex
Codex peut appliquer les modifications recommandées dans ce guide à l’aide du skill OpenAI Docs.
$openai-docs migrate this project to GPT-6 Astra
Pour utiliser ce skill dans d’autres agents de programmation, téléchargez-le depuis le dépôt Codex.
Mettez à jour les paramètres de l’API et du modèle
Définissez model sur gpt-6-astra, puis vérifiez les points suivants :
- Effort de raisonnement : Si vous utilisez actuellement
noneouminimal, commencez parlowet comparez les résultats. Sinon, conservez l’effort de raisonnement actuellement appliqué. Utilisezreasoning.effortdans Responses oureasoning_effortdans Chat Completions. - Appel d’outils : Utilisez l’API Responses. GPT-6 Astra prend en charge Chat Completions, mais l’appel d’outils nécessite Responses.
- Paramètres non pris en charge : Supprimez
temperature,top_pettop_logprobs. Pour Chat Completions, supprimez égalementlogprobs. Pour Responses, retirezmessage.output_text.logprobsdeinclude. - Mode Rapide : Pour la résidence des données dans l’UE, utilisez le traitement Standard. GPT-6 Astra ne prend pas en charge
service_tier: "fast"niservice_tier: "priority"avec la résidence des données dans l’UE. Le mode Rapide de GPT-6 Astra n’inclut pas de SLA de latence. Consultez Compatibilité du mode Rapide. - Modification de l’effort de raisonnement : Si votre application modifie cet effort entre les réponses, utilisez des éléments
configuration_updatedans des requêtes standard à agent unique. Conservez la valeur dereasoning.effortau niveau de la requête pour préserver le préfixe du prompt destiné à la mise en cache. Vérifiez les limites de compatibilité avant d’adopter cette fonctionnalité. - Mise en cache des prompts : Lors d’une migration depuis GPT-5.5 ou un modèle antérieur, remplacez
prompt_cache_retentionparprompt_cache_options.ttldéfini sur"30m". Consultez les changements apportés à la mise en cache des prompts, notamment les frontières du cache et la facturation des écritures dans le cache. - Interruptions inutiles pour demander l’approbation : Si le modèle demande sans cesse une approbation avant de poursuivre, utilisez les conseils sur l’initiative et la persévérance pour l’inciter à exécuter les tâches de manière plus autonome. Consultez le reste des Bonnes pratiques de conception de prompts pour obtenir des conseils sur le respect des instructions, le style rédactionnel, la délégation aux sous-agents et les tests.
Utiliser GPT-5.6
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5.6 et la famille de modèles GPT-5.6.
Introduction
GPT-5.6 établit une nouvelle référence en matière de qualité et d’efficacité pour les workflows complexes en production. Il est particulièrement économe en tokens et améliore l’esthétique des interfaces, notamment la mise en page, la hiérarchie visuelle et la pertinence des choix de design.
GPT-5.6 introduit également une nouvelle nomenclature. L’alias gpt-5.6 achemine les requêtes vers gpt-5.6-sol, le modèle qui offre les capacités phares. Utilisez gpt-5.6-terra pour de solides performances à moindre coût et gpt-5.6-luna pour traiter efficacement de grands volumes de tâches.
Lors d’une migration depuis GPT-5.5 ou GPT-5.4, partez de votre réglage de raisonnement actuel, puis testez ce même réglage et le niveau immédiatement inférieur sur des tâches représentatives. GPT-5.6 peut souvent maintenir ou améliorer la qualité avec moins de tokens, mais le meilleur réglage dépend de votre charge de travail.
Nouveautés
- Appel d’outils par programmation : GPT-5.6 peut écrire du JavaScript pour appeler les outils éligibles, transmettre les résultats d’un appel à l’autre et traiter les sorties intermédiaires dans un environnement d’exécution hébergé. Utilisez l’appel d’outils par programmation pour les workflows au périmètre défini qui sollicitent de nombreux outils sans nécessiter une nouvelle décision du modèle entre chaque étape. L’appel d’outils par programmation est compatible avec ZDR et n’entraîne aucun coût de conteneur supplémentaire.
- Multi-agent [bêta] : La fonctionnalité Multi-agent permet à une instance de GPT-5.6 de coordonner plusieurs sous-agents en parallèle et de synthétiser leurs résultats. Comme le mode Ultra dans Codex, elle peut réduire le temps total d’exécution et améliorer les performances pour les tâches complexes qui se décomposent facilement en travaux indépendants. Multi-agent est disponible en version bêta dans l’API Responses et évolue en fonction des retours des développeurs.
- Mise en cache explicite des prompts : GPT-5.6 vous permet d’indiquer précisément les préfixes de prompts réutilisables qu’OpenAI met en cache. Vous pouvez toujours utiliser la mise en cache automatique en mode implicite. OpenAI facture les écritures en cache à 1,25 fois le tarif des entrées non mises en cache, tandis que les lectures du cache restent à tarif réduit. Découvrez comment configurer la mise en cache des prompts.
- Raisonnement persistant : GPT-5.6 peut réutiliser les éléments de raisonnement disponibles d’un tour à l’autre pour améliorer la qualité des échanges sur plusieurs tours et l’efficacité du cache. Utilisez
reasoning.contextpour choisir le comportement. Découvrez comment conserver le raisonnement d’un appel à l’autre. - Effort de raisonnement Max : GPT-5.6 prend en charge l’effort de raisonnement
maxpour les tâches exigeantes qui nécessitent davantage d’exploration et de vérification. Si vous utilisez actuellementxhigh, comparez les deux réglages sur des charges de travail représentatives. - Mode Pro : GPT-5.6 peut consacrer davantage de calcul à une requête pour améliorer la fiabilité sur les tâches difficiles et renvoyer une seule réponse finale. Activez ce mode avec
reasoning.mode: "pro"lorsque la qualité prime sur la latence et la consommation de tokens. Découvrez comment utiliser le mode Pro. - Efficacité en tokens : GPT-5.6 atteint les performances d’un modèle phare avec moins de tokens de sortie.
- Design d’interfaces : GPT-5.6 crée des sites web et des applications plus soignés et plus faciles à utiliser, avec une meilleure mise en page, une hiérarchie visuelle plus claire et des choix de design plus pertinents.
- Compréhension de l’intention : GPT-5.6 déduit mieux du contexte l’objectif sous-jacent de l’utilisateur et l’ampleur du travail attendu, ce qui vous évite souvent de devoir détailler chaque étape. Continuez à fournir le contexte métier, les contraintes impératives, les actions nécessitant une approbation et les critères de réussite. Précisez au modèle dans quels cas une ambiguïté importante doit l’amener à poser une question.
- Détail d’image d’origine : GPT-5.6 conserve les dimensions des images avec le niveau de détail
originalouauto, sauf si l’un de leurs côtés dépasse 65 535 pixels : elles sont alors réduites pour respecter cette limite. L’API rejette les images qui dépassent encore la limite de 30 000 patchs, au lieu de les redimensionner pour la respecter. Les grandes images peuvent consommer davantage de tokens d’entrée et augmenter la latence. Découvrez comment choisir un niveau de détail d’image.
Mesures de protection
Lors de l’utilisation des modèles GPT-5.6, certaines requêtes peuvent être bloquées ou refusées par des mesures de protection reposant sur des classificateurs qui détectent en temps réel les usages abusifs en cybersécurité et en biologie pendant la génération des sorties du modèle. D’autres requêtes peuvent prendre plus de temps, car la génération s’interrompt pendant plusieurs secondes en cours de réponse, le temps que ces classificateurs examinent les sorties de manière synchrone. Ces mesures peuvent parfois intervenir sur des travaux légitimes, en particulier dans les domaines à double usage où les activités défensives et offensives peuvent, au départ, se ressembler.
Si votre application s’adresse à des utilisateurs finaux individuels, envoyez un safety_identifier stable et respectueux de la vie privée avec chaque requête. Consultez Mettre en place des identifiants de sécurité pour savoir comment procéder.
Nous faisons évoluer ces mesures de protection en continu afin qu’elles résistent efficacement aux tentatives de contournement, tout en préservant l’accès aux usages légitimes comme la revue de code, la recherche de vulnérabilités, le développement de correctifs, le débogage, la formation à la sécurité et les tests défensifs.
Démarrage rapide de la migration
Migrez avec Codex
Codex peut appliquer les modifications recommandées dans ce guide à l’aide du skill OpenAI Docs.
$openai-docs migrate this project to the GPT-5.6 model family
Pour utiliser ce skill dans d’autres agents de programmation, téléchargez-le depuis le dépôt de skills OpenAI.
Mettez à jour les paramètres de l’API et du modèle
- Choisissez le modèle cible en fonction de la charge de travail. Utilisez
gpt-5.6-solpour les capacités phares,gpt-5.6-terrapour un équilibre entre intelligence et coût, ougpt-5.6-lunapour traiter efficacement de grands volumes de tâches. L’aliasgpt-5.6achemine les requêtes versgpt-5.6-sol. - Utilisez l’API Responses pour les workflows de raisonnement, d’appel d’outils et d’échanges sur plusieurs tours.
- Choisissez délibérément la valeur de
reasoning.effort. GPT-5.6 prend en chargenone,low,medium,high,xhighetmax.- Si vous migrez depuis GPT-5.5 ou GPT-5.4, conservez votre effort de raisonnement actuel comme référence, puis comparez les résultats avec le niveau immédiatement inférieur.
- Si vous utilisez
none, conservez ce réglage comme référence de latence et testez égalementlowlorsque le workflow bénéficie du raisonnement ou de l’utilisation d’outils. - Utilisez
mediumcomme point de départ équilibré etlowpour les charges de travail sensibles à la latence. - Utilisez
highouxhighlorsqu’un raisonnement plus poussé produit un gain de qualité mesuré. - Réservez
maxaux charges de travail les plus difficiles, pour lesquelles la qualité est prioritaire. Comparezmaxetxhighpour trouver le meilleur compromis entre qualité, latence et coût pour votre cas d’usage.
- Pour utiliser le mode Pro, conservez le modèle GPT-5.6 sélectionné et définissez
reasoning.modesurprodans l’API Responses ; ne passez pas à un slug de modèle Pro distinct. Choisissezreasoning.effortindépendamment. Si vous l’omettez, GPT-5.6 utilisemediumpar défaut, en mode standard comme en mode Pro. Consultez la section sur le mode de raisonnement pour un exemple de requête et des précisions sur la facturation. - Configurez le raisonnement persistant selon la pertinence du raisonnement antérieur. Les modèles GPT-5.6 utilisent
all_turnspar défaut ; les modèles précédents utilisentcurrent_turn.- Omettez
reasoning.contextou définissez-le surautopour utiliserall_turns, le réglage par défaut de GPT-5.6. Vérifiez le champreasoning.contextde la réponse pour confirmer le mode effectivement utilisé. - Définissez
reasoning.contextsurall_turnslorsque les objectifs, les hypothèses et les priorités de la tâche restent stables d’un tour à l’autre. - Avec
all_turns, poursuivez avecprevious_response_idpour rendre le raisonnement des réponses précédentes accessible au modèle. - Si vous gérez l’historique manuellement, conservez et renvoyez les entrées précédentes de l’utilisateur ainsi que chaque élément de sortie des réponses. Avec
store: falseou la politique de non-conservation des données, renvoyez les éléments de raisonnement chiffrés que l’API retourne par défaut. - Définissez
reasoning.contextsurcurrent_turnlorsque le raisonnement antérieur n’est plus pertinent.
- Omettez
- Examinez la mise en cache des prompts. Vous n’avez pas besoin de modifier le code pour continuer à utiliser la mise en cache implicite. Comme les écritures en cache de GPT-5.6 coûtent 1,25 fois le tarif des entrées non mises en cache, suivez
cached_tokensetcache_write_tokenspour comprendre le coût net. Utilisez des points de mise en cache explicites ouprompt_cache_options.mode: "explicit"pour éviter les écritures inutiles, et remplacezprompt_cache_retentionparprompt_cache_options.ttl. - Pour utiliser l’appel d’outils par programmation, ajoutez l’outil
programmatic_tool_callinget autorisez les outils éligibles à participer avecallowed_callers. Mettez à jour votre application pour traiter les élémentsprogram, les appels de fonction émis par le programme et les élémentsprogram_output, tout en préservant lecall_idde chaque appel et son liencaller. Consultez le guide de l’appel d’outils par programmation pour des exemples de requêtes et de continuation.- Évaluez les performances du workflow avec PTC activé sur des tâches représentatives. Comparez la réussite des tâches, l’exhaustivité de la réponse finale, les éléments de preuve requis, le nombre total de tokens, la latence et le coût. Réduire le nombre d’appels, de tours ou de sorties intermédiaires ne constitue une amélioration que si la réponse finale satisfait toujours au niveau de qualité requis.
Bonnes pratiques de conception de prompts
Privilégiez des prompts plus légers
Supprimer les instructions et les exemples répétés et simplifier les descriptions d’outils peut améliorer les performances sur les tâches et réduire la consommation de tokens. Dans un échantillon d’évaluations internes d’agents de programmation, les configurations utilisant des prompts système plus légers ont amélioré les scores d’évaluation d’environ 10–15 %, tout en réduisant le nombre total de tokens de 41–66 % et le coût de 33–67 %. Les résultats varient selon la charge de travail : considérez donc ces fourchettes comme indicatives et validez les modifications sur des tâches représentatives de votre propre application.
Pour simplifier les prompts sans perdre de consignes importantes :
- Partez d’un prompt et d’un ensemble d’outils qui fonctionnent déjà. Supprimez un groupe d’instructions, d’exemples ou d’outils à la fois, puis relancez les mêmes évaluations.
- Énoncez chaque instruction une seule fois.
- Ne rendez accessibles que les outils pertinents pour la tâche et donnez-leur des descriptions concises et précises.
- Conservez les exemples et les consignes de style lorsqu’ils traduisent une exigence du produit ou corrigent une lacune mesurée.
- Suivez le contexte au début de l’exécution, puis à mesure que la conversation s’allonge. Les longues sessions peuvent amplifier les répétitions de contenu dans les prompts et les outils.
Définissez les limites de l’autonomie et les actions soumises à approbation
GPT-5.6 peut faire preuve d’initiative et de persévérance dans l’exécution de tâches en plusieurs étapes. Définissez le niveau d’action autorisé par chaque requête pour que le modèle puisse poursuivre sans pauses inutiles les travaux sûrs et conformes au périmètre prévu, tout en s’arrêtant avant toute action externe, destructive, coûteuse ou élargissant ce périmètre.
Une politique succincte suffit généralement :
For requests to answer, explain, review, diagnose, or plan, inspect the relevant
materials and report the result. Do not implement changes unless the request also
asks for them.
For requests to change, build, or fix, make the requested in-scope local changes
and run relevant non-destructive validation without asking first.
Require confirmation for external writes, destructive actions, purchases, or a
material expansion of scope.
Nommez explicitement les actions locales sûres, comme lire des fichiers, examiner des journaux, modifier le code dans le périmètre prévu et exécuter des tests. Regroupez la politique au même endroit et énoncez chaque règle une seule fois. Répéter des consignes comme « demandez d’abord », « ne modifiez rien » ou « attendez l’approbation » peut entraîner des demandes d’approbation inutiles pour des actions sûres et attendues.
Définissez la longueur et le style des réponses
GPT-5.6 tend à être plus concis par défaut que GPT-5.5. Lors de la migration, vérifiez si des consignes générales de brièveté comme « Soyez concis » ou « Faites court » sont toujours utiles. Elles peuvent être superflues pour certaines tâches et parfois rendre les réponses trop brèves. Conservez-les lorsqu’elles produisent de manière fiable le résultat dont votre application a besoin.
Pour un contrôle plus cohérent d’une requête à l’autre, utilisez text.verbosity pour définir le niveau de détail par défaut, puis précisez dans le prompt les exigences propres à la tâche.
Définissez une valeur par défaut avec text.verbosity
Choisissez low, medium ou high comme niveau de détail par défaut pour une requête. Dans le prompt, précisez les exigences de longueur, de structure ou de contenu propres à la tâche. Consultez Configurer text.verbosity pour un exemple d’utilisation de l’API.
Précisez ce qu’une réponse courte doit contenir
Lorsqu’une tâche appelle une réponse plus courte, précisez les informations que le modèle doit conserver et les détails qu’il peut omettre. Par exemple :
Lead with the conclusion. Include the evidence needed to support it, any material
caveat, and the next action. Omit secondary detail and repetition.
Keep all required facts, decisions, caveats, and next steps. Trim introductions,
repetition, generic reassurance, and optional background first.
Le modèle dispose ainsi d’un ordre de priorité clair : conserver le contenu nécessaire pour accomplir la tâche, puis supprimer les détails moins utiles.
Définissez le ton
Des qualificatifs généraux comme « amical » ou « empathique » peuvent être ambigus. Décrivez les choix rédactionnels qui définissent le ton de votre produit : le degré de franchise de la réponse, les situations où il convient de reconnaître un problème, et celles où des mots rassurants ou une formule de conclusion sont appropriés.
State the answer directly. If the user reports a problem, acknowledge the
specific issue before giving the next step. Use reassurance only when it is
relevant. Omit generic praise and unnecessary sign-offs.
Mode Pro
Choisissez le mode Pro lorsque la qualité prime
Le mode Pro est un mode d’exécution de l’API Responses dans lequel le modèle effectue davantage de travail sur une requête avant de renvoyer une seule réponse finale. Il peut améliorer la fiabilité sur les tâches difficiles, mais augmente la latence et comptabilise l’ensemble des tokens de ce travail dans l’utilisation rapportée. Ces tokens sont facturés aux tarifs standard du modèle sélectionné.
Utilisez le mode Pro lorsqu’un léger gain de qualité a un effet significatif sur le résultat et que la tâche est assez difficile pour en bénéficier : optimisation complexe, programmation ou revue de code à forte valeur ajoutée, ou analyse approfondie assortie de critères d’évaluation clairs. Privilégiez le mode standard pour les tâches courantes, sensibles à la latence ou à grand volume, ainsi que lorsque vos évaluations ne montrent pas de gain significatif avec le mode Pro.
Le mode de raisonnement et l’effort de raisonnement sont indépendants. Le mode Pro fonctionne avec tous les modèles GPT-5.6 et les niveaux d’effort de raisonnement qu’ils prennent en charge. Commencez avec le même modèle et le même niveau d’effort que votre configuration de référence en mode standard, puis comparez les configurations sur des tâches représentatives, sans supposer que l’effort le plus élevé offre toujours le meilleur compromis.
Configurez le mode Pro dans l’API
Activez le mode Pro dans la requête API. Conservez le même prompt axé sur le résultat qu’en mode standard : indiquez l’objectif, le contexte pertinent, les contraintes, les éléments de preuve requis, les critères de réussite et le format de sortie. Vous n’avez pas besoin de demander au modèle d’« utiliser le mode Pro », de « réfléchir davantage » ou de générer plusieurs réponses possibles.
Par exemple :
Review this database migration plan for failure modes that could cause data loss
or extended downtime. For each finding, cite the relevant step, estimate impact
and likelihood, and recommend a specific mitigation. Return the five most
important risks in severity order.
Comparez la qualité et le coût
Comparez les modes standard et Pro sur les mêmes tâches représentatives. Évaluez la réussite des tâches, l’exhaustivité des réponses et les éléments de preuve requis, puis mesurez le nombre total de tokens, la latence et le coût. Réservez le mode Pro aux cas où son gain de qualité ou de fiabilité justifie le travail supplémentaire du modèle.
Pour en savoir plus, consultez le guide du mode de raisonnement.
Appel d’outils par programmation
Choisissez l’appel d’outils par programmation selon la nature de la tâche
L’appel d’outils par programmation (PTC) convient particulièrement aux workflows bien délimités dans lesquels du code peut traiter plusieurs résultats d’outils ou des sorties intermédiaires volumineuses pour renvoyer un résultat structuré beaucoup plus compact. Utilisez-le pour le filtrage, les jointures, le classement, la déduplication, l’agrégation, la validation ou d’autres traitements prévisibles.
Le seul fait que des appels soient multiples, parallèles ou dépendants les uns des autres ne justifie pas l’appel d’outils par programmation. Privilégiez les appels d’outils directs, sans PTC, dans les cas suivants :
- Un seul appel suffit
- Les sorties intermédiaires sont déjà peu volumineuses
- Chaque résultat peut modifier la décision suivante du modèle
- Une action nécessite une approbation
- La sortie finale doit conserver les citations ou les artefacts natifs
Adaptez les consignes de routage à la tâche
Ne comptez pas sur la disponibilité des outils ou sur des consignes génériques comme « utilisez efficacement l’appel d’outils par programmation » pour obtenir le bon choix de méthode. Lorsque les appels directs et les appels par programmation sont tous deux disponibles, précisez explicitement :
- L’étape bien délimitée qui doit utiliser l’appel d’outils par programmation.
- Les outils qu’il peut appeler.
- Le schéma de sortie exact et les éléments de preuve requis.
- Les limites de concurrence, de nouvelles tentatives et les seuils d’arrêt.
- Les opérations qui doivent continuer à utiliser des appels directs.
Les descriptions des outils doivent préciser les champs renvoyés, leurs types et le comportement en cas d’erreur. Si le modèle ne peut pas déterminer la structure du résultat avant d’écrire le programme, privilégiez les appels d’outils directs pour qu’il puisse examiner le résultat avant de décider comment l’utiliser.
Si les deux méthodes sont nécessaires, définissez un point de relais clair et unique, puis indiquez au modèle de ne pas changer de méthode ni répéter le travail déjà effectué.
Par exemple :
<tool_orchestration>
Use Programmatic Tool Calling for [bounded stage] using only [eligible tools].
Run independent calls concurrently when safe. Use only documented tool input
and output fields.
Process and reduce the intermediate results, then emit exactly [output schema],
including the evidence needed for the final answer.
Stop when [condition] is met. Retry transient failures at most [R] times.
Do not repeat completed calls or perform side-effecting actions. If a required
result is still missing, return a clear structured failure.
Use direct tool calls for [semantic judgment, approval, or final validation].
</tool_orchestration>
Évaluez la réponse finale
L’élément program_output et le message final de l’assistant sont deux sorties distinctes ; veillez à les tester toutes les deux. En théorie, un programme peut renvoyer les bons enregistrements alors que le message omet un champ, une citation ou une réserve nécessaire.
Comparez les appels directs et les appels par programmation sur les mêmes tâches représentatives. Vérifiez que la réponse finale est correcte, complète et contient les éléments de preuve requis. Comparez ensuite le nombre total de tokens, la latence, le coût, ainsi que le nombre d’appels, de tours et de nouvelles tentatives. Ne considérez une baisse de la consommation de ressources comme une amélioration que si la réponse satisfait toujours vos évaluations existantes.
Pour en savoir plus, consultez le guide de l’appel d’outils par programmation.
Utilisation de GPT-5.5
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5.5.
Introduction
GPT-5.5 relève le niveau de référence pour les workflows complexes en production. Il est particulièrement adapté à la programmation, aux agents qui utilisent de nombreux outils, aux assistants dont les réponses s’appuient sur des sources, à la récupération d’informations dans de longs contextes, aux workflows qui transforment des spécifications produit en plans et aux workflows destinés aux clients, où la qualité d’exécution et le soin apporté aux réponses sont essentiels.
Pour tirer le meilleur parti de GPT-5.5, abordez-le comme une nouvelle famille de modèles qui nécessite des ajustements, et non comme un remplacement de gpt-5.2 ou de gpt-5.4 sans adaptation. Commencez la migration sur de nouvelles bases plutôt que de reprendre toutes les instructions de votre ancien ensemble de prompts. Partez du prompt le plus court qui respecte les exigences du produit, puis ajustez l’effort de raisonnement, la verbosité, les descriptions des outils et le format de sortie à l’aide d’exemples représentatifs.
GPT-5.5 prend en charge toutes les fonctionnalités de l’API déjà disponibles avec GPT-5.4, notamment la mise en cache des prompts, les outils hébergés, la recherche d’outils, le compactage et la gestion de phase pour les éléments de l’assistant renvoyés manuellement en entrée.
Consultez les bonnes pratiques de conception de prompts pour découvrir des exemples d’approches efficaces.
Nouveautés
- Un raisonnement plus efficace : GPT-5.5 obtient de bons résultats avec moins de tokens de raisonnement que les modèles précédents, même à effort de raisonnement égal. C’est particulièrement utile dans les workflows complexes, comportant de nombreux outils ou plusieurs étapes, où les économies de tokens se cumulent.
- Une meilleure exécution des tâches avec des prompts centrés sur le résultat : GPT-5.5 sait mieux travailler à partir d’un objectif clair, respecter les contraintes et traduire les intentions du produit en prochaines étapes concrètes. Décrivez le résultat attendu, les critères de réussite, les effets de bord autorisés, les exigences en matière de preuves et la structure de sortie. Évitez de détailler la marche à suivre étape par étape, sauf si le chemin exact à emprunter compte.
- Une utilisation des outils plus efficace et plus précise : GPT-5.5 est particulièrement utile avec de vastes ensembles d’outils, des workflows de services en plusieurs étapes et des tâches de longue durée confiées à des agents. Il tend à être plus précis dans le choix des outils et l’utilisation de leurs arguments.
- Un ton souvent plus soigné, mais parfois plus direct : GPT-5.5 produit souvent des réponses plus chaleureuses et plus lisibles avec moins d’encadrement dans le prompt.
Changements de comportement
-
L’effort de raisonnement est désormais défini sur
mediumpar défaut : GPT-5.5 utilise par défaut l’effort de raisonnementmedium. Considérezmediumcomme le point de départ recommandé pour équilibrer qualité, fiabilité, latence et coût. Pour les workflows sensibles à la latence, évaluezlowavantnonesi l’utilisation d’outils, la planification, la recherche ou la prise de décision en plusieurs étapes restent importantes. Réserveznoneaux tâches pour lesquelles la latence est critique et qui ne nécessitent ni raisonnement ni appels d’outils en chaîne, comme les échanges vocaux simples, la récupération rapide d’informations et la classification. Passez àhighou àxhighuniquement lorsque les évaluations montrent un gain de qualité mesurable qui justifie la latence et le coût supplémentaires. Consultez la documentation sur les modèles de raisonnement pour en savoir plus sur les réglages recommandés.Un effort de raisonnement plus élevé n’est pas automatiquement préférable. Si la tâche comporte des instructions contradictoires, des critères d’arrêt peu précis ou un accès aux outils sans limites définies, un effort plus élevé peut entraîner une réflexion excessive, des recherches inutiles ou une baisse de la qualité des réponses. N’augmentez l’effort que lorsque les évaluations montrent un gain de qualité mesurable.
-
Les images en entrée conservent davantage de détails visuels par défaut : GPT-5.5 modifie le traitement par défaut des images en entrée pour conserver davantage de détails visuels et améliorer les performances de l’utilisation de l’ordinateur. Lorsque
image_detailn’est pas défini ou est défini surauto, le modèle adopte désormais le comportementoriginal, qui préserve les images sans les redimensionner jusqu’à 10 240 000 pixels ou une limite de 6 000 pixels par dimension. Pourhigh, indiquez directement cette valeur ; elle préserve les images sans les redimensionner jusqu’à 2 500 000 pixels ou une limite de 2 048 pixels par dimension.lowprivilégie désormais l’utilisation efficace du contexte et redimensionne plus fortement que les modèles précédents les images dont une dimension dépasse 512 pixels. Consultez la documentation sur les images et la vision. -
Un meilleur respect des instructions : GPT-5.5 interprète les prompts de façon littérale et approfondie, ce qui permet de lui donner des instructions précises et descriptives lorsque le produit l’exige. Définissez des critères de réussite et des règles d’arrêt, en particulier pour les workflows de longue durée, utilisant de nombreux outils ou visant à recueillir des preuves. Consultez les sections Rédigez des prompts centrés sur le résultat et Gardez le bon niveau de précision.
-
Un style par défaut plus concis et plus direct : GPT-5.5 tend à adopter par défaut un style efficace, direct et centré sur la tâche. C’est utile pour de nombreux workflows en production, mais les expériences conversationnelles ou destinées aux clients peuvent nécessiter des consignes explicites sur la personnalité, la chaleur du ton, les justifications à fournir et la mise en forme. Choisissez délibérément la valeur de
text.verbosity:mediumest la valeur par défaut, etlowest souvent un meilleur point de départ pour obtenir des réponses concises. Consultez les bonnes pratiques de conception de prompts. -
Les workflows de programmation nécessitent une orchestration plus poussée : GPT-5.5 est mieux adapté aux tâches de programmation complexes qui nécessitent de la planification, l’utilisation d’outils, l’exploration du code source, des vérifications et une exécution en plusieurs étapes. Pour les agents de programmation, précisez les attentes en matière de réutilisation, de délégation à des sous-agents, de tests et de critères d’acceptation, ainsi que les situations où l’agent doit poursuivre ou demander de l’aide.
Démarrage rapide de la migration
Migration automatisée avec Codex
Codex peut appliquer les changements recommandés dans ce guide à l’aide de la skill OpenAI Docs.
$openai-docs migrate this project to gpt-5.5
Pour utiliser cette skill dans d’autres agents de programmation, téléchargez-la depuis le dépôt de skills OpenAI.
Paramètres de l’API et du modèle
- Remplacez le slug du modèle par
gpt-5.5. - Utilisez l’API Responses pour tout cas d’utilisation impliquant du raisonnement, des appels d’outils ou plusieurs tours de conversation.
- Ajustez
reasoning.effort. Utilisezlowpour un raisonnement efficace,mediumpour un bon équilibre entre latence et performances,highpour les tâches agentiques complexes qui nécessitent un raisonnement poussé et pour lesquelles la latence est moins importante, etxhighpour les tâches agentiques asynchrones les plus difficiles ou les évaluations qui testent les limites de l’intelligence du modèle. Consultez la documentation sur les modèles de raisonnement. - Pour obtenir des réponses plus concises, définissez
text.verbositysurlow. Avec GPT-5.5, ce réglage produit des réponses proportionnellement plus concises qu’une verbosité delowavec GPT-5.4. - Pour les workflows utilisant de nombreux outils ou de longue durée, vérifiez que votre application gère correctement
phase, les préambules et le renvoi en entrée des éléments de l’assistant. - Comparez les résultats à ceux d’autres modèles en matière d’exactitude, de consommation de tokens et de latence de bout en bout.
Conception de prompts
- Indiquez le résultat attendu et les critères de réussite.
- Réduisez ou supprimez les consignes détaillant la marche à suivre étape par étape. Laissez GPT-5.5 choisir son approche, sauf si le produit en impose une.
- Supprimez du prompt les définitions de schéma de sortie lorsque c’est possible. Utilisez plutôt les sorties structurées.
- Optimisez votre prompt pour la mise en cache : les parties statiques au début, les parties dynamiques à la fin.
- Supprimez la date du jour. Le modèle connaît déjà la date actuelle en UTC.
- Révisez et optimisez vos prompts à l’aide des bonnes pratiques de conception de prompts.
Utilisation des modèles de raisonnement
Ces recommandations s’appliquent aux modèles de la série GPT-5 et méritent d’être relues chaque fois qu’une équipe migre des charges de travail vers des modèles de raisonnement. GPT-5.5 reprend de nombreuses capacités apparues dans les modèles précédents, mais il reste utile de les passer en revue si vous migrez depuis un ancien modèle GPT-5, GPT-4.1 ou un modèle de raisonnement comme o3.
Les équipes peuvent négliger ces fonctionnalités, car elles relèvent en partie de la configuration de l’API et de l’orchestration plutôt que du prompt lui-même. Utilisés ensemble, l’API Responses, les réglages du raisonnement, la verbosité, les sorties structurées, la mise en cache des prompts, la conception des outils, les outils hébergés et la gestion de l’état permettent de tirer le meilleur des modèles de raisonnement en matière d’intelligence, de fiabilité, de latence et de coût.
- API Responses : GPT-5.5 donne ses meilleurs résultats avec l’API Responses. Utilisez
previous_response_idpour gérer l’état sur plusieurs tours de conversation. Pour les flux sans état ou soumis à une politique de non-conservation des données, renvoyez à chaque tour les éléments de sortie pertinents reçus. Consultez la section Transmission du contexte de la réponse précédente pour en savoir plus. - Effort de raisonnement : Utilisez
reasoning.effortpour choisir entrelow,medium,highetxhigh. La valeur par défaut estmedium, mais de nombreuses charges de travail donneront de bons résultats aveclow. Réserveznoneaux cas d’utilisation où une faible latence est plus importante que l’intelligence. Consultez la section Modèles de raisonnement pour des recommandations détaillées. - Verbosité : Utilisez
text.verbositypour contrôler la longueur de sortie. Distinguez la longueur de la réponse finale de la qualité du raisonnement ; précisez au besoin le nombre de mots autorisé, le nombre de sections, la largeur des tableaux ou l’exigence d’une sortie exclusivement en JSON. - Sorties structurées : Évitez de décrire le schéma de sortie attendu dans le prompt. Utilisez les sorties structurées pour bénéficier d’une validation automatique et d’une exactitude accrue.
- Mise en cache des prompts : La mise en cache des prompts fonctionne automatiquement pour les prompts longs éligibles et peut réduire la latence et le coût des tokens d’entrée. Pour maximiser les accès au cache réussis, conservez le contenu stable au début de la requête. Placez le contexte dynamique propre à l’utilisateur vers la fin. Suivez
usage.prompt_tokens_details.cached_tokenspour mesurer la réutilisation. Utilisez une cléprompt_cache_keystable pour les requêtes qui partagent un préfixe réutilisable. Cette clé aide à acheminer les requêtes apparentées vers le même cache et joue un rôle important dans l’optimisation du taux de succès du cache sur GPT-5.5. Pour les groupes à fort trafic, suivez les recommandations pour répartir le trafic sur davantage de clés. - Appels d’outils : GPT-5.5 prend en charge les mêmes modes d’appel d’outils que GPT-5.4, notamment les outils de type fonction et les workflows d’agents utilisant de nombreux outils. Placez l’essentiel des consignes propres à chaque outil dans sa description : ce qu’il fait, quand l’utiliser, les entrées requises, les effets de bord, les conditions dans lesquelles un nouvel essai est sûr et les erreurs courantes. N’ajoutez de contexte propre aux outils dans les instructions système que s’il s’applique à plusieurs outils ou modifie sensiblement les règles de fonctionnement de l’agent.
- Outils hébergés et recherche d’outils : Privilégiez les outils hébergés par OpenAI lorsqu’ils conviennent au workflow, comme la recherche web, la recherche de fichiers, l’interpréteur de code, la génération d’images et l’utilisation de l’ordinateur. Les outils hébergés réduisent le travail d’orchestration sur mesure et maintiennent les usages courants des outils en phase avec l’API Responses et l’Agents SDK. Utilisez des outils de type fonction personnalisés lorsque vous devez appeler vos propres systèmes, appliquer des effets de bord propres à votre domaine ou rendre accessibles des workflows métier internes. Pour les catalogues d’outils volumineux, envisagez la recherche d’outils afin de différer le chargement des définitions d’outils et de ne charger que le sous-ensemble pertinent.
- Préambules aux appels d’outils : Les préambules peuvent améliorer l’expérience de discussion, car l’utilisateur voit un premier message d’état utile avant que le modèle ne génère la réponse finale. Ils facilitent également le suivi de l’utilisation des outils : le modèle peut indiquer ce qu’il s’apprête à vérifier ou à faire, puis reprendre à partir du même état de l’assistant une fois les résultats des outils reçus.
- Gestion de
phase: Si votre application gère manuellement l’état de Responses en renvoyant les éléments de sortie à chaque tour au lieu d’utiliserprevious_response_id, conservez le paramètrephasesur les éléments de sortie de l’assistant reçus et renvoyez-le sans modification. C’est particulièrement important lorsque vous utilisez l’effort de raisonnement, des préambules ou des appels d’outils répétés. Consultez la section Paramètre phase. - Compactage : Pour les agents exécutant des tâches de longue durée, utilisez le compactage de la conversation et de l’état de manière délibérée. Conservez les actions terminées, les hypothèses en cours, les identifiants, les résultats des outils, les blocages non résolus et le prochain objectif concret.
- Agents SDK : Pour les nouveaux systèmes agentiques, utilisez les approches les plus récentes de l’Agents SDK pour l’orchestration des outils, le traçage, les transferts entre agents et la gestion de l’état, plutôt que de recréer l’orchestration à partir de zéro.
- Date du jour : GPT-5.5 connaît la date actuelle en UTC. Vous n’avez pas besoin de l’ajouter aux instructions système. N’ajoutez un contexte explicite de date ou de fuseau horaire que lorsque l’application a besoin d’un fuseau horaire propre à l’activité, de la date d’entrée en vigueur d’une politique, de la date locale de l’utilisateur ou d’un autre repère temporel différent de l’UTC.
Bonnes pratiques de conception de prompts
GPT-5.5 donne ses meilleurs résultats lorsque les prompts définissent le résultat attendu et laissent au modèle la liberté de choisir une approche efficace pour y parvenir. Par rapport aux modèles précédents, vous pouvez souvent utiliser des prompts plus courts et davantage centrés sur le résultat : décrivez ce qui constitue un bon résultat, les contraintes importantes, les preuves disponibles et le contenu attendu de la réponse finale.
Évitez de reprendre toutes les instructions d’un ancien ensemble de prompts. Les anciens prompts détaillent souvent trop le processus, car les modèles précédents avaient besoin de davantage d’aide pour rester sur la bonne voie. Avec GPT-5.5, cela peut ajouter du bruit, réduire l’espace de recherche du modèle ou produire des réponses trop mécaniques.
Les approches présentées ici sont des points de départ. Adaptez-les à l’interface de votre produit, à vos outils, à vos évaluations et à vos objectifs d’expérience utilisateur.
Personnalité et comportement
Le style par défaut de GPT-5.5 est efficace, direct et centré sur la tâche. C’est utile pour les systèmes en production : les réponses restent ciblées, le comportement est plus facile à orienter et le modèle évite les formulations superflues dans la conversation.
Pour les assistants destinés aux clients, les workflows d’assistance, les expériences de coaching et les autres produits conversationnels, définissez à la fois la personnalité et le style de collaboration.
- La personnalité détermine la manière dont l’assistant s’exprime : ton, chaleur, franchise, degré de formalité, humour, empathie et soin apporté à la rédaction.
- Le style de collaboration détermine la manière dont l’assistant travaille : quand il pose des questions, quand il formule des hypothèses, son degré d’initiative, la quantité de contexte qu’il fournit, quand il vérifie son travail et comment il gère l’incertitude ou le risque.
Restez bref dans les deux cas. Les instructions de personnalité doivent façonner l’expérience utilisateur. Les instructions de collaboration doivent orienter le comportement pendant la tâche. Ni les unes ni les autres ne doivent remplacer des objectifs clairs, des critères de réussite, des règles d’utilisation des outils ou des conditions d’arrêt.
Exemple de bloc de personnalité pour un assistant posé et centré sur la tâche :
# Personality
You are a capable collaborator: approachable, steady, and direct. Assume the user is competent and acting in good faith, and respond with patience, respect, and practical helpfulness.
Prefer making progress over stopping for clarification when the request is already clear enough to attempt. Use context and reasonable assumptions to move forward. Ask for clarification only when the missing information would materially change the answer or create meaningful risk, and keep any question narrow.
Stay concise without becoming curt. Give enough context for the user to understand and trust the answer, then stop. Use examples, comparisons, or simple analogies when they make the point easier to grasp. When correcting the user or disagreeing, be candid but constructive. When an error is pointed out, acknowledge it plainly and focus on fixing it.
Match the user's tone within professional bounds. Avoid emojis and profanity by default, unless the user explicitly asks for that style or has clearly established it as appropriate for the conversation.
Exemple de bloc de personnalité pour un assistant expressif et collaboratif :
# Personality
Adopt a vivid conversational presence: intelligent, curious, playful when appropriate, and attentive to the user's thinking. Ask good questions when the problem is blurry, then become decisive once there is enough context.
Be warm, collaborative, and polished. Conversation should feel easy and alive, but not chatty for its own sake. Offer a real point of view rather than merely mirroring the user, while staying responsive to their goals and constraints.
Be thoughtful and grounded when the task calls for synthesis or advice. State a clear recommendation when you have enough context, explain important tradeoffs, and name uncertainty without becoming evasive.
Pour les produits au ton plus expressif, ajoutez explicitement de la chaleur, de la curiosité, de l’humour ou un point de vue, tout en gardant le bloc court. Utilisez la personnalité pour façonner l’expérience, pas pour compenser des objectifs flous ou des consignes manquantes.
Réduisez le délai d’affichage du premier token grâce à un préambule
Dans les applications en streaming, les utilisateurs sont sensibles au délai avant l’apparition de la première réponse visible. GPT-5.5 peut consacrer du temps au raisonnement, à la planification ou à la préparation d’appels d’outils avant de produire du texte visible.
Pour les tâches longues ou faisant largement appel aux outils, demandez au modèle de commencer par un court préambule : un bref message visible qui confirme la prise en compte de la demande et annonce la première étape. Cela peut améliorer la réactivité perçue sans modifier la tâche elle-même.
Utilisez cette approche lorsque la tâche peut comporter plusieurs étapes, nécessiter des appels d’outils ou s’inscrire dans un workflow d’agent de longue durée.
Before any tool calls for a multi-step task, send a short user-visible update that acknowledges the request and states the first step. Keep it to one or two sentences.
Pour les agents de programmation qui distinguent plusieurs phases de message, vous pouvez être plus explicite :
You must always start with an intermediary update before any content in the analysis channel if the task will require calling tools. The user update should acknowledge the request and explain your first step.
Prompts axés sur le résultat et conditions d’arrêt
GPT-5.5 donne le meilleur de lui-même lorsque le prompt définit le résultat attendu, les critères de réussite, les contraintes et le contexte disponible, puis laisse le modèle choisir la marche à suivre.
Pour de nombreuses tâches, décrivez le résultat à atteindre plutôt que chaque étape. Le modèle dispose ainsi de la latitude nécessaire pour choisir la recherche, l’outil ou la stratégie de raisonnement adaptés à la tâche.
Privilégiez cette formulation :
Resolve the customer's issue end to end.
Success means:
- the eligibility decision is made from the available policy and account data
- any allowed action is completed before responding
- the final answer includes completed_actions, customer_message, and blockers
- if evidence is missing, ask for the smallest missing field
Évitez les règles absolues superflues. Les anciens prompts utilisent souvent des consignes strictes comme ALWAYS, NEVER, must et only pour contrôler le comportement du modèle. Réservez ces mots aux véritables invariants, comme les règles de sécurité, les champs de sortie obligatoires ou les actions qui ne doivent jamais se produire. Pour les décisions qui demandent du discernement, comme le moment de lancer une recherche, de demander des précisions, d’utiliser un outil ou de poursuivre les itérations, privilégiez des règles de décision.
Évitez ce style de consigne, sauf si chaque étape est réellement nécessaire :
First inspect A, then inspect B, then compare every field, then think through
all possible exceptions, then decide which tool to call, then call the tool,
then explain the entire process to the user.
Ajoutez des conditions d’arrêt explicites :
Resolve the user query in the fewest useful tool loops, but do not let loop minimization outrank correctness, accessible fallback evidence, calculations, or required citation tags for factual claims.
After each result, ask: "Can I answer the user's core request now with useful evidence and citations for the factual claims?" If yes, answer.
Définissez le comportement à adopter en l’absence d’éléments probants :
Use the minimum evidence sufficient to answer correctly, cite it precisely, then stop.
Mise en forme
GPT-5.5 permet de contrôler très précisément le format et la structure des réponses. Utilisez cette possibilité lorsqu’elle améliore la compréhension ou l’adéquation à votre produit.
Définissez text.verbosity, décrivez la forme attendue de la réponse et réservez les structures plus élaborées aux cas où elles facilitent la compréhension ou lorsque l’interface de votre produit nécessite un livrable au format stable. Dans l’API, la valeur par défaut de text.verbosity est medium ; utilisez low si vous préférez des réponses plus courtes et plus concises.
Mise en forme conversationnelle simple :
Let formatting serve comprehension. Use plain paragraphs as the default format for normal conversation, explanations, reports, documentation, and technical writeups. Keep the presentation clean and readable without making the structure feel heavier than the content.
Use headers, bold text, bullets, and numbered lists sparingly. Reach for them when the user requests them, when the answer needs clear comparison or ranking, or when the information would be harder to scan as prose. Otherwise, favor short paragraphs and natural transitions.
Respect formatting preferences from the user. If they ask for a terse answer, minimal formatting, no bullets, no headers, or a specific structure, follow that preference unless there is a strong reason not to.
Ajoutez des consignes explicites sur le public visé et la longueur :
Write for a senior business audience. Keep the answer under 400 words. Use short paragraphs and only include bullets when they improve scannability. Prioritize the conclusion first, then the reasoning, then caveats.
Pour la révision, la réécriture, les résumés ou les messages destinés aux clients, indiquez au modèle ce qu’il doit préserver avant de lui demander d’améliorer le style. Cette approche est utile pour soigner le texte sans l’allonger.
Preserve the requested artifact, length, structure, and genre first. Quietly improve clarity, flow, and correctness. Do not add new claims, extra sections, or a more promotional tone unless explicitly requested.
Ancrage, citations et budgets de récupération
Pour obtenir des réponses ancrées dans des sources, précisez dans le prompt les règles de citation. Définissez les affirmations à étayer, les éléments probants jugés suffisants et le comportement à adopter lorsque ces éléments manquent. L’absence d’éléments probants ne doit pas automatiquement se transformer en un « non » présenté comme un fait. Pour plus de détails et d’exemples, consultez le guide de mise en forme des citations.
Ajoutez un budget de récupération explicite
Les budgets de récupération fixent les règles d’arrêt de la recherche. Ils indiquent au modèle quand les éléments probants recueillis sont suffisants.
For ordinary Q&A, start with one broad search using short, discriminative keywords. If the top results contain enough citable support for the core request, answer from those results instead of searching again.
Make another retrieval call only when:
- The top results do not answer the core question.
- A required fact, parameter, owner, date, ID, or source is missing.
- The user asked for exhaustive coverage, a comparison, or a comprehensive list.
- A specific document, URL, email, meeting, record, or code artifact must be read.
- The answer would otherwise contain an important unsupported factual claim.
Do not search again to improve phrasing, add examples, cite nonessential details, or support wording that can safely be made more generic.
Garde-fous pour la rédaction créative
Pour les tâches de rédaction, indiquez au modèle quelles affirmations doivent provenir de sources et quelles parties laissent place à la créativité. C’est particulièrement important pour les diapositives, les textes de lancement, les synthèses destinées aux clients, les trames de discours, les courts messages de la direction et la construction du récit.
For creative or generative requests such as slides, leadership blurbs, outbound copy, summaries for sharing, talk tracks, or narrative framing, distinguish source-backed facts from creative wording.
- Use retrieved or provided facts for concrete product, customer, metric, roadmap, date, capability, and competitive claims, and cite those claims.
- Do not invent specific names, first-party data claims, metrics, roadmap status, customer outcomes, or product capabilities to make the draft sound stronger.
- If there is little or no citable support, write a useful generic draft with placeholders or clearly labeled assumptions rather than unsupported specifics.
Développement frontend et sens esthétique
Pour le développement frontend, consultez les exemples de consignes afin de découvrir des moyens concrets d’orienter la qualité de l’interface. Ils abordent le contexte du produit et des utilisateurs, la cohérence avec le design system, l’ergonomie du premier écran, les commandes familières, les états attendus, l’adaptation aux différentes tailles d’écran et les travers courants des interfaces générées à éviter : bandeaux d’accueil génériques, cartes imbriquées, dégradés décoratifs, consignes laissées visibles et mises en page défectueuses.
Demandez au modèle de vérifier son travail
Donnez à GPT-5.5 accès à des outils lui permettant de vérifier ses résultats lorsqu’une validation est possible.
Pour les agents de programmation, demandez des commandes de validation concrètes :
After making changes, run the most relevant validation available:
- targeted unit tests for changed behavior
- type checks or lint checks when applicable
- build checks for affected packages
- a minimal smoke test when full validation is too expensive
If validation cannot be run, explain why and describe the next best check.
Pour les livrables visuels, demandez une inspection après le rendu :
Render the artifact before finalizing. Inspect the rendered output for layout, clipping, spacing, missing content, and visual consistency. Revise until the rendered output matches the requirements.
Pour les tâches d’ingénierie et de planification, assurez la traçabilité des plans de mise en œuvre :
For implementation plans, include:
- requirements and where each is addressed
- named resources, files, APIs, or systems involved
- state transitions or data flow where relevant
- validation commands or checks
- failure behavior
- privacy and security considerations
- open questions that materially affect implementation
Paramètre phase
À partir de GPT-5.4, les workflows Responses de longue durée ou faisant largement appel aux outils peuvent utiliser les valeurs phase des éléments de l’assistant pour distinguer les messages intermédiaires des réponses finales. GPT-5.5 suit le même principe.
Si vous utilisez previous_response_id, l’API conserve automatiquement l’état précédent de l’assistant. Si votre application réinjecte manuellement les éléments de sortie de l’assistant dans la requête suivante, conservez chaque valeur phase d’origine et retransmettez-la sans modification. C’est particulièrement important lorsqu’une réponse comporte des préambules, des appels d’outils répétés ou une réponse finale précédée de messages intermédiaires de l’assistant.
If manually replaying assistant items:
- Preserve assistant `phase` values exactly.
- Use `phase: "commentary"` for intermediate user-visible updates.
- Use `phase: "final_answer"` for the completed answer.
- Do not add `phase` to user messages.
Structure de prompt suggérée
Utilisez cette structure comme point de départ pour les prompts complexes. Gardez chaque section courte. N’ajoutez des détails que lorsqu’ils modifient le comportement.
Role: [1-2 sentences defining the model's function, context, and job]
# Personality
[tone, demeanor, and collaboration style]
# Goal
[user-visible outcome]
# Success criteria
[what must be true before the final answer]
# Constraints
[policy, safety, business, evidence, and side-effect limits]
# Output
[sections, length, and tone]
# Stop rules
[when to retry, fallback, abstain, ask, or stop]
Utilisation de GPT-5.4
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5.4 et sa famille de modèles.
Introduction
GPT-5.4 a été lancé comme modèle de pointe pour les usages professionnels dans l’API et Codex. Il aide les développeurs à analyser des informations complexes, à créer des logiciels destinés à la production et à automatiser des workflows en plusieurs étapes.
Dans la génération GPT-5.4, gpt-5.4 est le modèle généraliste pour les workflows qui combinent ingénierie logicielle, raisonnement, rédaction et utilisation d’outils.
Ce guide présente les principales fonctionnalités de la famille de modèles GPT-5 et explique comment tirer le meilleur parti de GPT-5.4.
Nouveautés
Par rapport au modèle précédent, GPT-5.2, GPT-5.4 apporte des améliorations dans les domaines suivants :
- Programmation, compréhension de documents, utilisation d’outils et respect des instructions
- Perception des images et tâches multimodales
- Exécution de tâches de longue durée et workflows d’agents en plusieurs étapes
- Efficacité d’utilisation des tokens et performances de bout en bout pour les tâches faisant largement appel aux outils
- Recherche web et synthèse de plusieurs sources pour les informations difficiles à trouver
- Workflows métier faisant largement appel aux documents et aux feuilles de calcul dans le service client, l’analyse de données et la finance
GPT-5.4 intègre les capacités de programmation de GPT-5.3-Codex à notre modèle phare de pointe. Les développeurs peuvent générer du code de qualité production, créer des interfaces front-end soignées, respecter les conventions propres à chaque dépôt et gérer des modifications sur plusieurs fichiers avec moins de tentatives. Sa personnalité est également bien adaptée à la programmation dès le départ, ce qui permet aux équipes de consacrer moins de temps à l’ajustement des prompts.
Pour les tâches agentiques, GPT-5.4 réduit le temps d’exécution de bout en bout des parcours en plusieurs étapes et accomplit souvent les tâches avec moins de tokens et d’appels d’outils. Les agents sont ainsi plus réactifs, et l’exécution de workflows complexes à grande échelle dans l’API et Codex coûte moins cher.
Nouvelles fonctionnalités de GPT-5.4
Comme les modèles GPT-5 précédents, GPT-5.4 prend en charge les outils personnalisés, les paramètres de contrôle de la verbosité et du raisonnement, ainsi qu’une liste d’outils autorisés. GPT-5.4 introduit également plusieurs capacités qui facilitent la création de systèmes d’agents puissants, le traitement de volumes d’informations plus importants et l’exécution de workflows automatisés plus fiables :
tool_searchdans l’API : GPT-5.4 améliore la recherche d’outils dans les écosystèmes de grande taille grâce au chargement différé des outils. Cette approche permet de rechercher les outils et de ne charger que les définitions pertinentes, réduit la consommation de tokens et améliore la précision de la sélection des outils dans les déploiements réels. Pour en savoir plus, consultez le guide de la recherche d’outils.- Fenêtre de contexte de 1 million de tokens : GPT-5.4 prend en charge une fenêtre de contexte allant jusqu’à 1 million de tokens, ce qui facilite l’analyse de bases de code entières, de vastes collections de documents ou de longs parcours d’agents en une seule requête. Pour en savoir plus, consultez la section Fenêtre de contexte de 1 million de tokens.
- Utilisation de l’ordinateur intégrée : GPT-5.4 est le premier modèle de la gamme principale à intégrer des capacités d’utilisation de l’ordinateur. Les agents peuvent ainsi interagir directement avec les logiciels pour accomplir des tâches, vérifier les résultats et corriger les erreurs dans une boucle de création, d’exécution, de vérification et de correction. Pour en savoir plus, consultez le guide de l’utilisation de l’ordinateur.
- Prise en charge native du compactage : GPT-5.4 est le premier modèle de la gamme principale entraîné à prendre en charge le compactage, ce qui permet aux agents de suivre des parcours plus longs tout en conservant les éléments essentiels du contexte.
Mises à jour des modèles, de l’API et des fonctionnalités
Dans cette génération de modèles, gpt-5.4 est le modèle généraliste adapté aussi bien aux tâches variées qu’à la programmation. Pour les problèmes plus difficiles, gpt-5.4-pro utilise davantage de ressources de calcul pour réfléchir plus longtemps et fournir des réponses plus constantes.
Pour des variantes plus petites et plus rapides, commencez par gpt-5.4-mini ou gpt-5.4-nano.
Pour choisir le modèle le mieux adapté à votre cas d’usage, tenez compte des compromis suivants :
| Variante | Idéal pour |
|---|---|
gpt-5.4 | Tâches généralistes, notamment celles qui nécessitent un raisonnement complexe, de vastes connaissances générales ou des capacités agentiques axées sur le code ou comportant plusieurs étapes |
gpt-5.4-pro | Problèmes difficiles pouvant demander plus de temps et un raisonnement plus approfondi pour être résolus |
gpt-5.4-mini | Programmation, utilisation de l’ordinateur et workflows d’agents à grand volume qui nécessitent néanmoins de solides capacités de raisonnement |
gpt-5.4-nano | Tâches à haut débit pour lesquelles la vitesse et le coût sont prioritaires |
Effort de raisonnement réduit
Le paramètre reasoning.effort contrôle le nombre de tokens de raisonnement que le modèle génère avant de produire une réponse. Les modèles de raisonnement précédents, comme o3, ne prenaient en charge que low, medium et high : low privilégiait la vitesse et une consommation réduite de tokens, tandis que high favorisait un raisonnement plus approfondi.
GPT-5.2 et GPT-5.4 prennent en charge none comme niveau d’effort de raisonnement le plus faible, pour des interactions à plus faible latence. Il s’agit du réglage par défaut des deux modèles. Si vous avez besoin d’un raisonnement plus poussé, augmentez progressivement le niveau jusqu’à medium et évaluez les résultats.
Lorsque l’effort de raisonnement est réglé sur none, la conception des prompts est importante. Pour améliorer la qualité du raisonnement du modèle, même avec les réglages par défaut, encouragez-le à « réfléchir » ou à présenter les grandes étapes de sa démarche avant de répondre.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.4",
input="Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
reasoning={"effort": "none"},
)
print(response)Verbosité
La verbosité détermine le nombre de tokens générés en sortie. Réduire ce nombre diminue la latence globale. Si la manière de raisonner du modèle reste essentiellement la même, celui-ci trouve des moyens de répondre plus brièvement, ce qui peut améliorer ou diminuer la qualité de la réponse selon votre cas d’usage. Voici quelques situations correspondant aux deux extrêmes du niveau de verbosité :
- Verbosité élevée : Utilisez ce niveau lorsque vous avez besoin que le modèle fournisse des explications détaillées sur des documents ou effectue une refactorisation importante du code.
- Verbosité faible : Ce niveau convient aux situations où vous souhaitez des réponses concises ou une génération de code ciblée, comme des requêtes SQL.
GPT-5 a rendu cette option configurable avec les valeurs high, medium ou low. Avec GPT-5.4, la verbosité reste configurable et sa valeur par défaut est medium.
Lors de la génération de code avec GPT-5.4, les niveaux de verbosité medium et high produisent du code plus long et plus structuré, avec des explications intégrées, tandis que le niveau low produit du code plus court et plus concis, avec un minimum de commentaires.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.4",
input="What is the answer to the ultimate question of life, the universe, and everything?",
text={"verbosity": "low"},
)
print(response)Vous pouvez toujours ajuster la verbosité à l’aide des prompts après l’avoir réglée sur low dans l’API. Le paramètre de verbosité définit une plage générale de tokens au niveau du prompt système, mais la sortie réelle s’adapte aux prompts du développeur comme à ceux de l’utilisateur dans cette plage.
Fenêtre de contexte de 1 million de tokens
La fenêtre de contexte de 1 million de tokens a été introduite avec GPT-5.4. Elle facilite l’analyse de bases de code entières, de vastes collections de documents ou de longs parcours d’agents en une seule requête.
Nous appliquons des tarifs standard distincts aux requêtes de moins de 272 000 tokens et à celles de plus de 272 000 tokens. Vous les trouverez dans la documentation sur les tarifs. Si vous utilisez le mode Rapide, tout prompt de plus de 272 000 tokens est automatiquement traité aux tarifs standard.
La tarification du contexte long se cumule avec les autres ajustements tarifaires, comme ceux liés à la résidence des données et au traitement par lots.
Nous appliquons des limites de débit différentes aux requêtes de moins de 272 000 tokens et à celles de plus de 272 000 tokens. Elles sont indiquées sur la page du modèle GPT-5.4.
Utilisation des outils avec GPT-5.4
GPT-5.4 a été affiné pour l’utilisation d’outils spécifiques. Consultez la documentation sur les outils pour obtenir des conseils plus précis.
Outil d’utilisation de l’ordinateur
L’utilisation de l’ordinateur permet à GPT-5.4 de piloter des logiciels via leur interface utilisateur en examinant des captures d’écran et en renvoyant des actions structurées à exécuter par votre harnais. Elle convient aux workflows dans un navigateur ou sur le bureau pour lesquels une personne pourrait accomplir la tâche via l’interface, par exemple naviguer sur un site, remplir des formulaires ou vérifier qu’une modification a effectivement fonctionné.
Utilisez cet outil dans un navigateur isolé ou une machine virtuelle, et maintenez une intervention humaine pour les actions à fort impact. Le guide complet présente la boucle intégrée de l’API Responses, les modèles de conception de harnais personnalisés et les configurations fondées sur l’exécution de code.
Apprenez à utiliser l’outil intégré d’utilisation de l’ordinateur en toute sécurité et à l’intégrer à votre propre harnais.
Outil de recherche d’outils
La recherche d’outils permet à GPT-5.4 de différer le chargement de vastes ensembles d’outils jusqu’à l’exécution, afin que le modèle ne charge que les définitions dont il a besoin. Elle est particulièrement utile si vous disposez de nombreuses fonctions, de namespaces ou d’outils MCP et souhaitez réduire la consommation de tokens, préserver les performances du cache et diminuer la latence sans exposer tous les schémas dès le départ.
Utilisez la recherche d’outils hébergée lorsque les outils candidats sont déjà connus au moment de la requête, ou la recherche d’outils exécutée côté client lorsque votre application doit décider dynamiquement lesquels charger. Le guide complet présente également les bonnes pratiques concernant namespaces, les serveurs MCP et le chargement différé.
Découvrez comment différer le chargement des définitions d’outils et charger le sous-ensemble approprié à l’exécution.
Outils personnalisés
Lors du lancement de la famille de modèles GPT-5, nous avons introduit les outils personnalisés, une nouvelle fonctionnalité qui permet aux modèles d’envoyer n’importe quel texte brut en entrée d’un appel d’outil, tout en conservant la possibilité de contraindre les sorties. Ce fonctionnement reste le même dans GPT-5.4.
Découvrez les outils personnalisés dans le guide de l’appel de fonction.
Entrées au format libre
Définissez votre outil avec type: custom pour permettre aux modèles d’envoyer du texte brut directement à vos outils, sans se limiter à du JSON structuré. Le modèle peut envoyer directement à votre outil n’importe quel texte brut : code, requêtes SQL, commandes shell, fichiers de configuration ou textes longs.
{
"type": "custom",
"name": "code_exec",
"description": "Executes arbitrary python code"
}
Contraintes sur les sorties
GPT-5.4 prend en charge les grammaires hors contexte (CFGs) pour les outils personnalisés. Vous pouvez ainsi fournir une grammaire Lark pour imposer une syntaxe ou un DSL spécifique aux sorties. L’ajout d’une CFG, par exemple une grammaire SQL ou DSL, garantit que le texte de l’assistant respecte votre grammaire.
Cela permet d’obtenir des appels d’outils précis et contraints ou des réponses structurées, et d’imposer directement dans les appels de fonction de GPT-5.4 des formats syntaxiques stricts ou propres à un domaine. Vous gagnez ainsi en contrôle et en fiabilité dans les domaines complexes ou soumis à des contraintes.
Bonnes pratiques pour les outils personnalisés
- Rédigez des descriptions d’outils concises et explicites. Le modèle choisit quoi envoyer en fonction de votre description ; indiquez explicitement si vous souhaitez qu’il appelle systématiquement l’outil.
- Validez les sorties côté serveur. Les chaînes au format libre offrent de nombreuses possibilités, mais nécessitent des protections contre les injections ou les commandes dangereuses.
Outils autorisés
Le paramètre allowed_tools dans tool_choice permet de transmettre N définitions d’outils tout en limitant le modèle à seulement M (< N) d’entre eux. Répertoriez tous vos outils dans tools, puis utilisez un bloc allowed_tools pour désigner le sous-ensemble et préciser un mode : auto (le modèle peut choisir n’importe lequel de ces outils) ou required (le modèle doit en appeler un).
Découvrez l’option des outils autorisés dans le guide de l’appel de fonction.
En distinguant l’ensemble des outils possibles du sous-ensemble utilisable maintenant, vous renforcez la sécurité et la prévisibilité, tout en améliorant la mise en cache des prompts. Vous évitez également les techniques fragiles d’ingénierie de prompts, comme un ordre d’appel codé en dur. GPT-5.4 appelle dynamiquement certaines fonctions ou impose leur appel en cours de conversation, tout en réduisant le risque d’utilisation involontaire d’outils sur de longs contextes.
| Outils standard | Outils autorisés | |
|---|---|---|
| Outils accessibles au modèle | Tous les outils répertoriés dans "tools": […] | Uniquement le sous-ensemble défini sous "tools": […] dans tool_choice |
| Appel d’outil | Le modèle peut appeler n’importe quel outil ou n’en appeler aucun | Le modèle est limité aux outils choisis, ou tenu de les appeler |
| Objectif | Déclarer les capacités disponibles | Limiter les capacités effectivement utilisées |
{
"tool_choice": {
"type": "allowed_tools",
"mode": "auto",
"tools": [
{ "type": "function", "name": "get_weather" },
{ "type": "function", "name": "search_docs" }
]
}
}
Pour une présentation plus détaillée de toutes ces nouveautés, consultez les conseils de conception de prompts pour GPT-5.4.
Préambules
Les préambules sont de brèves explications visibles par l’utilisateur que GPT-5.4 génère avant d’appeler un outil ou une fonction. Ils exposent son intention ou son plan, par exemple « pourquoi j’appelle cet outil ». Ils apparaissent après le raisonnement détaillé (« chain-of-thought ») et avant l’appel d’outil proprement dit, ce qui facilite la compréhension et le débogage du raisonnement du modèle, tout en permettant de le guider avec précision.
En permettant à GPT-5.4 de « réfléchir à voix haute » avant chaque appel d’outil, les préambules améliorent la précision des appels d’outils et la réussite globale des tâches, sans alourdir le coût du raisonnement. Pour activer les préambules, ajoutez une instruction système ou développeur, par exemple : « Avant d’appeler un outil, expliquez pourquoi vous l’appelez. » GPT-5.4 ajoute une justification concise à chaque appel d’outil concerné. Le modèle peut également produire plusieurs messages entre les appels d’outils, ce qui peut améliorer l’expérience d’interaction, notamment pour les cas d’utilisation nécessitant un raisonnement minimal ou sensibles à la latence.
Pour en savoir plus sur l’utilisation des préambules, consultez le Cookbook sur la conception de prompts pour GPT-5.
Démarrage rapide de la migration
GPT-5.4 donne les meilleurs résultats avec l’API Responses, qui permet de préserver le contexte de raisonnement entre les tours pour améliorer les performances. Consultez les sections suivantes pour migrer depuis votre modèle ou votre API actuels.
Migration d’autres modèles vers GPT-5.4
Utilisez le skill OpenAI Docs pour migrer vos prompts ou workflows existants vers GPT-5.4. Il est disponible dans notre dépôt public de skills et dans l’application de bureau Codex.
Le modèle devrait pouvoir remplacer GPT-5.2 presque sans modification, mais quelques changements clés méritent votre attention. Consultez les conseils de conception de prompts pour GPT-5.4 pour connaître les modifications précises à apporter à vos prompts.
Grâce à sa conception, l’API Responses améliore l’intelligence des modèles GPT-5 lorsque vous les utilisez avec elle. Elle peut transmettre au modèle le CoT du tour précédent. Cela réduit le nombre de tokens de raisonnement générés, augmente le taux de succès du cache et diminue la latence. Pour en savoir plus, consultez le guide détaillé sur les avantages de l’API Responses.
Lorsque vous migrez vers GPT-5.4 depuis un ancien modèle OpenAI, commencez par tester différents niveaux de raisonnement et stratégies de conception de prompts. Utilisez l’optimiseur de prompts pour adapter vos prompts à GPT-5.4 selon les bonnes pratiques actuelles, puis suivez ces conseils propres à chaque modèle :
gpt-5.2:gpt-5.4avec les paramètres par défaut est conçu pour le remplacer sans autre modification.- o3 :
gpt-5.4avec un effort de raisonnement réglé surmediumouhigh. Commencez parmediumen ajustant vos prompts, puis passez àhighsi vous n’obtenez pas les résultats souhaités. gpt-4.1:gpt-5.4avec un effort de raisonnement réglé surnone. Commencez parnoneet ajustez vos prompts ; augmentez l’effort si vous avez besoin de meilleures performances.o4-miniougpt-4.1-mini:gpt-5.4-miniest un excellent remplacement, moyennant un ajustement des prompts.gpt-4.1-nano:gpt-5.4-nanoest un excellent remplacement, moyennant un ajustement des prompts.
Nouveau paramètre phase
Pour les workflows GPT-5.4 de longue durée ou faisant un usage intensif des outils dans l’API Responses, utilisez le champ phase des messages de l’assistant afin d’éviter les arrêts prématurés et autres comportements indésirables.
phase est facultatif dans l’API, mais nous recommandons vivement de l’utiliser. Utilisez phase: "commentary" pour les messages intermédiaires de l’assistant (comme les préambules précédant les appels d’outils) et phase: "final_answer" pour la réponse finale. N’ajoutez pas phase aux messages utilisateur.
L’utilisation de previous_response_id est généralement la solution la plus simple, car
l’état précédent de l’assistant est préservé. Si vous retransmettez manuellement l’historique de l’assistant,
conservez chaque valeur phase d’origine.
L’absence ou la perte de phase peut entraîner l’interprétation des préambules comme des réponses finales
dans ces workflows. Pour obtenir des conseils et des exemples supplémentaires, consultez le guide de conception de prompts
pour GPT-5.4.
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5.4",
input: [
{
role: "assistant",
phase: "commentary",
content:
"I’ll inspect the logs and then summarize root cause and remediation.",
},
{
role: "assistant",
phase: "final_answer",
content: "Root cause: cache invalidation race.",
},
{
role: "user",
content: "Great—now give me a rollout-safe fix plan.",
},
],
});
console.log(response.output_text);Compatibilité des paramètres de GPT-5.4
Les paramètres suivants sont pris en charge uniquement lorsque vous utilisez GPT-5.4 avec l’effort de raisonnement réglé sur none :
temperaturetop_plogprobs
Les requêtes contenant ces champs génèrent une erreur avec GPT-5.4 ou GPT-5.2 pour tout autre réglage de l’effort de raisonnement, ainsi qu’avec les anciens modèles GPT-5 tels que gpt-5, gpt-5-mini ou gpt-5-nano.
Pour obtenir des résultats similaires avec un effort de raisonnement plus élevé ou avec un autre modèle de la famille GPT-5, essayez ces paramètres de remplacement :
- Profondeur du raisonnement :
reasoning: { effort: "none" | "low" | "medium" | "high" | "xhigh" } - Verbosité de la sortie :
text: { verbosity: "low" | "medium" | "high" } - Longueur de la sortie :
max_output_tokens
Migration de Chat Completions vers l’API Responses
La principale différence, et la première raison de migrer de Chat Completions vers l’API Responses pour GPT-5.4, est la possibilité de transmettre le raisonnement détaillé (« chain-of-thought », CoT) d’un tour à l’autre. Consultez la comparaison complète des API.
Seule l’API Responses permet de transmettre le CoT. Nous avons constaté que cette transmission améliore l’intelligence, réduit le nombre de tokens de raisonnement générés, augmente le taux de succès du cache et diminue la latence. La plupart des autres paramètres restent équivalents, même si leur format diffère. Voici les différences de traitement des nouveaux paramètres entre Chat Completions et l’API Responses :
Effort de raisonnement
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"input": "How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
"reasoning": {
"effort": "none"
}
}'curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": "How much gold would it take to coat the Statue of Liberty in a 1mm layer?"
}
],
"reasoning_effort": "none"
}'Verbosité
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"input": "What is the answer to the ultimate question of life, the universe, and everything?",
"text": {
"verbosity": "low"
}
}'curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": "What is the answer to the ultimate question of life, the universe, and everything?"
}
],
"verbosity": "low"
}'Outils personnalisés
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"input": "Use the code_exec tool to calculate the area of a circle with radius equal to the number of r letters in blueberry",
"tools": [
{
"type": "custom",
"name": "code_exec",
"description": "Executes arbitrary Python code"
}
]
}'curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": "Use the code_exec tool to calculate the area of a circle with radius equal to the number of r letters in blueberry"
}
],
"tools": [
{
"type": "custom",
"custom": {
"name": "code_exec",
"description": "Executes arbitrary Python code"
}
}
]
}'Bonnes pratiques de conception de prompts
Si GPT-5.4 traite un message intermédiaire comme la
réponse finale, vérifiez que votre intégration conserve correctement le champ phase
du message de l’assistant. Consultez la section Paramètre phase pour en savoir plus.
Comprenez le comportement de GPT-5.4
Les points forts de GPT-5.4
GPT-5.4 tend à être particulièrement performant dans les domaines suivants :
- Respect marqué de la personnalité et du ton, avec moins de dérive dans les réponses longues
- Robustesse des workflows agentiques, avec une plus grande tendance à persévérer dans les tâches en plusieurs étapes, à réessayer et à mener les boucles agentiques à leur terme
- Synthèses solidement étayées, en particulier dans les workflows qui utilisent un contexte long ou plusieurs outils
- Respect des instructions dans les prompts modulaires, fondés sur des skills ou structurés en blocs, lorsque les exigences sont explicites
- Analyse en contexte long de données d’entrée volumineuses, désordonnées ou réparties sur plusieurs documents
- Appels d’outils par lots ou en parallèle, tout en préservant leur exactitude
- Workflows de feuilles de calcul, de finance et d’Excel qui exigent le respect des instructions et de la mise en forme, ainsi qu’une vérification plus rigoureuse par le modèle de son propre travail
Les cas où des prompts explicites restent utiles
Malgré ces points forts, des consignes plus explicites restent utiles à GPT-5.4 dans certaines situations récurrentes :
- Sélection des outils en début de session avec peu de contexte, lorsque ce choix peut être moins fiable
- Workflows tenant compte des dépendances et nécessitant des vérifications explicites des prérequis et des étapes en aval
- Choix de l’effort de raisonnement : un effort plus élevé n’est pas toujours préférable, et le bon choix dépend des caractéristiques de la tâche, pas de l’intuition
- Tâches de recherche exigeant une collecte rigoureuse des sources et des citations cohérentes
- Actions irréversibles ou à fort impact nécessitant une vérification avant leur exécution
- Environnements de terminal ou d’agents de programmation dans lesquels le périmètre de chaque outil doit rester clair
Il s’agit de comportements observés par défaut, et non de garanties. Commencez par le prompt le plus court qui réussit vos évaluations, et n’ajoutez des blocs que s’ils corrigent un mode de défaillance mesuré.
Utilisez les schémas de base pour vos prompts
Gardez les sorties concises et structurées
Pour optimiser l’utilisation des tokens avec GPT-5.4, limitez la verbosité et imposez une sortie structurée à l’aide d’exigences de sortie claires. En pratique, ces exigences ajoutent un niveau de contrôle au paramètre verbosity de l’API Responses : elles permettent de guider à la fois la quantité de texte produite par le modèle et la structure de sa sortie.
<output_contract>
- Return exactly the sections requested, in the requested order.
- If the prompt defines a preamble, analysis block, or working section, do not treat it as extra output.
- Apply length limits only to the section they are intended for.
- If a format is required (JSON, Markdown, SQL, XML), output only that format.
</output_contract>
<verbosity_controls>
- Prefer concise, information-dense writing.
- Avoid repeating the user's request.
- Keep progress updates brief.
- Do not shorten the answer so aggressively that required evidence, reasoning, or completion checks are omitted.
</verbosity_controls>
Définissez des règles par défaut claires pour la poursuite des tâches
Les utilisateurs changent souvent de tâche, de format ou de ton en cours de conversation. Pour que l’assistant reste en phase avec leurs attentes, définissez des règles claires précisant quand poursuivre, quand poser une question et comment les nouvelles instructions remplacent les règles par défaut précédentes.
Utilisez une politique par défaut comme celle-ci pour mener les tâches à bien :
<default_follow_through_policy>
- If the user’s intent is clear and the next step is reversible and low-risk, proceed without asking.
- Ask permission only if the next step is:
(a) irreversible,
(b) has external side effects (for example sending, purchasing, deleting, or writing to production), or
(c) requires missing sensitive information or a choice that would materially change the outcome.
- If proceeding, briefly state what you did and what remains optional.
</default_follow_through_policy>
Précisez l’ordre de priorité des instructions :
<instruction_priority>
- User instructions override default style, tone, formatting, and initiative preferences.
- Safety, honesty, privacy, and permission constraints do not yield.
- If a newer user instruction conflicts with an earlier one, follow the newer instruction.
- Preserve earlier instructions that do not conflict.
</instruction_priority>
Les instructions de priorité supérieure du développeur ou du système restent obligatoires.
Conseil : Lorsque les instructions changent en cours de conversation, formulez la mise à jour explicitement, avec une portée précise et limitée. Indiquez ce qui a changé, ce qui reste applicable et si le changement concerne le prochain tour ou le reste de la conversation.
Gérez les changements d’instructions en cours de conversation
Pour modifier les instructions en cours de conversation, utilisez des messages explicites dont la portée est délimitée et qui précisent :
- La portée
- Les instructions remplacées
- Les instructions à conserver
<task_update>
For the next response only:
- Do not complete the task.
- Only produce a plan.
- Keep it to 5 bullets.
All earlier instructions still apply unless they conflict with this update.
</task_update>
Si la tâche elle-même change, dites-le directement :
<task_update>
The task has changed.
Previous task: complete the workflow.
Current task: review the workflow and identify risks only.
Rules for this turn:
- Do not execute actions.
- Do not call destructive tools.
- Return exactly:
1. Main risks
2. Missing information
3. Recommended next step
</task_update>
Exigez de poursuivre l’utilisation des outils lorsque l’exactitude du résultat en dépend
Définissez des règles explicites pour que l’utilisation des outils soit rigoureuse, tienne compte des dépendances et progresse à un rythme adapté, surtout dans les workflows où les actions suivantes reposent sur des récupérations d’informations ou des vérifications préalables. Une erreur fréquente consiste à omettre les étapes préalables parce que le résultat attendu semble évident.
GPT-5.4 peut choisir les outils de façon moins fiable en début de session, lorsque le contexte est encore limité. Demandez dans le prompt de respecter les prérequis, de vérifier les dépendances et de préciser l’objectif de chaque utilisation d’outil.
<tool_persistence_rules>
- Use tools whenever they materially improve correctness, completeness, or grounding.
- Do not stop early when another tool call is likely to materially improve correctness or completeness.
- Keep calling tools until:
(1) the task is complete, and
(2) verification passes (see <verification_loop>).
- If a tool returns empty or partial results, retry with a different strategy.
</tool_persistence_rules>
C’est particulièrement important dans les workflows où l’action finale dépend d’étapes préalables de recherche ou de récupération d’informations. L’une des erreurs les plus fréquentes consiste à omettre les étapes préalables parce que le résultat visé semble évident.
<dependency_checks>
- Before taking an action, check whether prerequisite discovery, lookup, or memory retrieval steps are required.
- Do not skip prerequisite steps just because the intended final action seems obvious.
- If the task depends on the output of a prior step, resolve that dependency first.
</dependency_checks>
Demandez une exécution en parallèle lorsque les tâches sont indépendantes et que le temps total compte. Demandez une exécution séquentielle lorsque les dépendances, les ambiguïtés ou les actions irréversibles comptent davantage que la rapidité.
<parallel_tool_calling>
- When multiple retrieval or lookup steps are independent, prefer parallel tool calls to reduce wall-clock time.
- Do not parallelize steps that have prerequisite dependencies or where one result determines the next action.
- After parallel retrieval, pause to synthesize the results before making more calls.
- Prefer selective parallelism: parallelize independent evidence gathering, not speculative or redundant tool use.
</parallel_tool_calling>
Exigez l’exécution complète des tâches de longue durée
Dans les workflows à plusieurs étapes, une erreur fréquente est l’exécution incomplète : le modèle s’arrête après n’avoir couvert qu’une partie du travail, oublie des éléments d’un lot ou considère comme définitive une récupération d’informations vide ou trop limitée. GPT-5.4 devient plus fiable lorsque le prompt définit explicitement les critères d’achèvement et la marche à suivre en cas de problème.
La récupération d’informations peut être séquentielle ou parallèle pour couvrir l’ensemble du travail, mais les critères d’achèvement doivent rester explicites dans les deux cas.
<completeness_contract>
- Treat the task as incomplete until all requested items are covered or explicitly marked [blocked].
- Keep an internal checklist of required deliverables.
- For lists, batches, or paginated results:
- determine expected scope when possible,
- track processed items or pages,
- confirm coverage before finalizing.
- If any item is blocked by missing data, mark it [blocked] and state exactly what is missing.
</completeness_contract>
Pour les workflows où la récupération d’informations produit souvent des résultats vides, partiels ou bruités :
<empty_result_recovery>
If a lookup returns empty, partial, or suspiciously narrow results:
- do not immediately conclude that no results exist,
- try at least one or two fallback strategies,
such as:
- alternate query wording,
- broader filters,
- a prerequisite lookup,
- or an alternate source or tool,
- Only then report that no results were found, along with what you tried.
</empty_result_recovery>
Ajoutez une boucle de vérification avant les actions à fort impact
Une fois le workflow apparemment terminé, ajoutez une étape de vérification légère avant de renvoyer la réponse ou d’effectuer une action irréversible. Cela permet de repérer les exigences oubliées, les problèmes d’ancrage et les écarts de format avant de finaliser.
<verification_loop>
Before finalizing:
- Check correctness: does the output satisfy every requirement?
- Check grounding: are factual claims backed by the provided context or tool outputs?
- Check formatting: does the output match the requested schema or style?
- Check safety and irreversibility: if the next step has external side effects, ask permission first.
</verification_loop>
<missing_context_gating>
- If required context is missing, do NOT guess.
- Prefer the appropriate lookup tool when the missing context is retrievable; ask a minimal clarifying question only when it is not.
- If you must proceed, label assumptions explicitly and choose a reversible action.
</missing_context_gating>
Pour les agents qui effectuent réellement des actions, ajoutez un bref cadre d’exécution :
<action_safety>
- Pre-flight: summarize the intended action and parameters in 1-2 lines.
- Execute via tool.
- Post-flight: confirm the outcome and any validation that was performed.
</action_safety>
Gérez les workflows spécialisés
Choisissez explicitement le niveau de détail des images pour la vision et l’utilisation de l’ordinateur
Si votre workflow dépend de la précision visuelle, spécifiez le niveau detail des images dans le prompt ou dans l’intégration au lieu de vous en remettre à auto. Utilisez high pour la compréhension standard d’images en haute fidélité. Utilisez original pour les images de grande taille, denses ou nécessitant une précision spatiale, en particulier pour les tâches d’utilisation de l’ordinateur, de localisation, d’OCR et de clics précis avec gpt-5.4 et les futurs modèles. N’utilisez low que lorsque la rapidité et le coût comptent davantage que les détails fins. Pour en savoir plus sur les niveaux de détail des images, consultez le guide Images et vision.
Limitez la recherche et les citations aux éléments probants récupérés
Lorsque la qualité des citations compte, précisez à la fois les sources autorisées et le format requis. Cela permet de réduire les références inventées, les affirmations non étayées et les écarts par rapport au format de citation.
<citation_rules>
- Only cite sources retrieved in the current workflow.
- Never fabricate citations, URLs, IDs, or quote spans.
- Use exactly the citation format required by the host application.
- Attach citations to the specific claims they support, not only at the end.
</citation_rules>
<grounding_rules>
- Base claims only on provided context or tool outputs.
- If sources conflict, state the conflict explicitly and attribute each side.
- If the context is insufficient or irrelevant, narrow the answer or say you cannot support the claim.
- If a statement is an inference rather than a directly supported fact, label it as an inference.
</grounding_rules>
Si votre application nécessite des citations dans le texte, exigez des citations dans le texte. Si elle nécessite des notes de bas de page, exigez des notes de bas de page. L’essentiel est de fixer le format et d’empêcher le modèle d’improviser des références non étayées.
Mode recherche
Amenez GPT-5.4 à adopter un mode de recherche rigoureux. Utilisez ce modèle de prompt pour les tâches de recherche, de révision et de synthèse. Ne l’imposez pas aux tâches d’exécution courtes ni aux transformations déterministes simples.
<research_mode>
- Do research in 3 passes:
1) Plan: list 3-6 sub-questions to answer.
2) Retrieve: search each sub-question and follow 1-2 second-order leads.
3) Synthesize: resolve contradictions and write the final answer with citations.
- Stop only when more searching is unlikely to change the conclusion.
</research_mode>
Si votre environnement hôte utilise un outil de recherche spécifique ou exige une étape de soumission, combinez ce modèle avec les règles de finalisation de l’hôte.
Imposez des formats de sortie stricts
Pour SQL, JSON ou d’autres sorties dont l’analyse syntaxique exige un format précis, demandez à GPT-5.4 de produire uniquement le format cible et de le vérifier avant de terminer.
<structured_output_contract>
- Output only the requested format.
- Do not add prose or markdown fences unless they were requested.
- Validate that parentheses and brackets are balanced.
- Do not invent tables or fields.
- If required schema information is missing, ask for it or return an explicit error object.
</structured_output_contract>
Si vous extrayez des zones de document ou des cadres OCR, définissez le système de coordonnées et ajoutez une vérification des décalages :
<bbox_extraction_spec>
- Use the specified coordinate format exactly, such as [x1,y1,x2,y2] normalized to 0..1.
- For each box, include page, label, text snippet, and confidence.
- Add a vertical-drift sanity check so boxes stay aligned with the correct line of text.
- If the layout is dense, process page by page and do a second pass for missed items.
</bbox_extraction_spec>
Précisez les limites de chaque outil dans les agents de programmation et de terminal
Dans les agents de programmation, GPT-5.4 fonctionne mieux lorsque les règles d’accès au shell et de modification des fichiers sont sans ambiguïté. C’est particulièrement important lorsque vous donnez accès à des outils comme Shell ou Application de patchs.
Points d’avancement destinés à l’utilisateur
GPT-5.4 produit efficacement des points d’avancement brefs, centrés sur les résultats. Réutilisez le modèle de points d’avancement du guide 5.2, en l’associant à des exigences explicites d’achèvement et de vérification.
Consignes recommandées pour les points d’avancement :
<user_updates_spec>
- Only update the user when starting a new major phase or when something changes the plan.
- Each update: 1 sentence on outcome + 1 sentence on next step.
- Do not narrate routine tool calls.
- Keep the user-facing status short; keep the work exhaustive.
</user_updates_spec>
Pour les agents de programmation, consultez la section « Modèles de prompts pour les tâches de programmation » ci-dessous afin d’obtenir des conseils plus précis.
Modèles de prompts pour les tâches de programmation
Autonomie et persévérance
GPT-5.4 est généralement plus rigoureux de bout en bout que les précédents modèles de la gamme principale pour les tâches de programmation et d’utilisation d’outils. Il est donc souvent moins nécessaire de lui demander explicitement de « tout vérifier ». Pour les changements à fort enjeu, comme les interventions en production, les migrations ou les travaux de sécurité, conservez toutefois une consigne de vérification légère.
<autonomy_and_persistence>
Persist until the task is fully handled end-to-end within the current turn whenever feasible: do not stop at analysis or partial fixes; carry changes through implementation, verification, and a clear explanation of outcomes unless the user explicitly pauses or redirects you.
Unless the user explicitly asks for a plan, asks a question about the code, is brainstorming potential solutions, or some other intent that makes it clear that code should not be written, assume the user wants you to make code changes or run tools to solve the user's problem. In these cases, it's bad to output your proposed solution in a message, you should go ahead and actually implement the change. If you encounter challenges or blockers, you should attempt to resolve them yourself.
</autonomy_and_persistence>
Points d’avancement intermédiaires
Limitez les points d’avancement et concentrez-les sur les informations utiles. Pour les tâches de programmation, privilégiez les moments clés.
<user_updates_spec>
- Intermediary updates go to the `commentary` channel.
- User updates are short updates while you are working. They are not final answers.
- Use 1-2 sentence updates to communicate progress and new information while you work.
- Do not begin responses with conversational interjections or meta commentary. Avoid openers such as acknowledgements ("Done -", "Got it", or "Great question") or similar framing.
- Before exploring or doing substantial work, send a user update explaining your understanding of the request and your first step. Avoid commenting on the request or starting with phrases such as "Got it" or "Understood."
- Provide updates roughly every 30 seconds while working.
- When exploring, explain what context you are gathering and what you learned. Vary sentence structure so the updates do not become repetitive.
- When working for a while, keep updates informative and varied, but stay concise.
- When work is substantial, provide a longer plan after you have enough context. This is the only update that may be longer than 2 sentences and may contain formatting.
- Before file edits, explain what you are about to change.
- While thinking, keep the user informed of progress without narrating every tool call. Even if you are not taking actions, send frequent progress updates rather than going silent, especially if you are thinking for more than a short stretch.
- Keep the tone of progress updates consistent with the assistant's overall personality.
</user_updates_spec>
Mise en forme
GPT-5.4 adopte souvent par défaut une mise en forme plus structurée et peut abuser des listes à puces. Si vous souhaitez une réponse finale épurée, imposez explicitement des contraintes sur la forme des listes.
Never use nested bullets. Keep lists flat (single level). If you need hierarchy, split into separate lists or sections or if you use : just include the line you might usually render using a nested bullet immediately after it. For numbered lists, only use the `1. 2. 3.` style markers (with a period), never `1)`.
Tâches frontend
N’utilisez ce modèle que si des consignes frontend supplémentaires sont utiles.
<frontend_tasks>
When doing frontend design tasks, avoid generic, overbuilt layouts.
Use these hard rules:
- One composition: The first viewport must read as one composition, not a dashboard, unless it is a dashboard.
- Brand first: On branded pages, the brand or product name must be a hero-level signal, not just nav text or an eyebrow. No headline should overpower the brand.
- Brand test: If the first viewport could belong to another brand after removing the nav, the branding is too weak.
- Full-bleed hero only: On landing pages and promotional surfaces, the hero image should usually be a dominant edge-to-edge visual plane or background. Do not default to inset hero images, side-panel hero images, rounded media cards, tiled collages, or floating image blocks unless the existing design system clearly requires them.
- Hero budget: The first viewport should usually contain only the brand, one headline, one short supporting sentence, one CTA group, and one dominant image. Do not place stats, schedules, event listings, address blocks, promos, "this week" callouts, metadata rows, or secondary marketing content there.
- No hero overlays: Do not place detached labels, floating badges, promo stickers, info chips, or callout boxes on top of hero media.
- Cards: Default to no cards. Never use cards in the hero unless they are the container for a user interaction. If removing a border, shadow, background, or radius does not hurt interaction or understanding, it should not be a card.
- One job per section: Each section should have one purpose, one headline, and usually one short supporting sentence.
- Real visual anchor: Imagery should show the product, place, atmosphere, or context.
- Reduce clutter: Avoid pill clusters, stat strips, icon rows, boxed promos, schedule snippets, and competing text blocks.
- Use motion to create presence and hierarchy, not noise. Ship 2-3 intentional motions for visually led work, and prefer Framer Motion when it is available.
Exception: If working within an existing website or design system, preserve the established patterns, structure, and visual language.
</frontend_tasks>
<terminal_tool_hygiene>
- Only run shell commands via the terminal tool.
- Never "run" tool names as shell commands.
- If a patch or edit tool exists, use it directly; do not attempt it in bash.
- After changes, run a lightweight verification step such as ls, tests, or a build before declaring the task done.
</terminal_tool_hygiene>
Localisation dans les documents et cadres OCR
Pour les tâches bbox, précisez les conventions de coordonnées et ajoutez des tests de décalage.
<bbox_extraction_spec>
- Use the specified coordinate format exactly (for example [x1,y1,x2,y2] normalized 0..1).
- For each bbox, include: page, label, text snippet, confidence.
- Add a vertical-drift sanity check:
- ensure bboxes align with the line of text (not shifted up or down).
- If dense layout, process page by page and do a second pass for missed items.
</bbox_extraction_spec>
Tenez compte des notes sur l’environnement d’exécution et l’intégration à l’API
Pour les agents qui exécutent des tâches de longue durée ou utilisent beaucoup d’outils, les règles de l’environnement d’exécution comptent autant que celles du prompt.
Paramètre de phase
Pour GPT-5.4, gpt-5.3-codex et les modèles Responses ultérieurs, le champ phase peut
être utile dans les quelques workflows de longue durée ou faisant un usage intensif des outils où des préambules ou
d’autres messages intermédiaires de l’assistant sont pris pour la réponse finale.
phaseest facultatif au niveau de l’API, mais fortement recommandé. Le serveur peut tenter d’en déduire la valeur, sans garantie, mais il est toujours préférable de conserver et de retransmettre explicitementphase.- Utilisez
phasepour les agents qui exécutent des tâches de longue durée ou utilisent beaucoup d’outils et qui peuvent émettre des commentaires avant les appels d’outils ou avant une réponse finale. - Conservez
phaselorsque vous retransmettez les éléments précédents de l’assistant afin que le modèle puisse distinguer les commentaires en cours de travail de la réponse définitive. C’est particulièrement important dans les workflows à plusieurs étapes comportant des préambules, des points d’avancement liés aux outils ou plusieurs messages de l’assistant au cours d’un même tour. - N’ajoutez pas
phaseaux messages de l’utilisateur. - Si vous utilisez
previous_response_id, c’est généralement la solution la plus simple, car OpenAI peut souvent récupérer l’état précédent sans que vous ayez à retransmettre manuellement les éléments de l’assistant. - Si vous retransmettez vous-même l’historique de l’assistant, conservez les valeurs d’origine de
phase. - L’absence ou la perte de
phasepeut conduire à interpréter les préambules comme des réponses finales et dégrader le comportement du modèle dans ces tâches à plusieurs étapes.
Préservez le comportement lors des longues sessions
Le compactage permet d’étendre considérablement la fenêtre de contexte effective. Les conversations avec l’utilisateur peuvent ainsi se poursuivre sur de nombreux tours sans atteindre les limites de contexte ni subir de dégradation des performances liée aux contextes longs. Les agents peuvent également suivre de très longues séquences d’actions dépassant une fenêtre de contexte habituelle pour accomplir des tâches complexes de longue durée.
Si vous utilisez le compactage dans l’API Responses, effectuez-le après les étapes majeures, traitez les éléments compactés comme un état opaque et conservez des prompts fonctionnellement identiques après le compactage. Le point de terminaison est compatible avec ZDR et renvoie un élément encrypted_content que vous pouvez transmettre dans les requêtes suivantes. GPT-5.4 tend à rester plus cohérent et fiable au fil des conversations prolongées à plusieurs tours, avec moins de défaillances à mesure que les sessions s’allongent.
Pour en savoir plus, consultez la référence de l’API /responses/compact.
Maîtrisez la personnalité dans les workflows destinés aux clients
Vous pouvez guider GPT-5.4 plus efficacement en distinguant la personnalité persistante des consignes de rédaction propres à chaque réponse. Cette distinction est particulièrement utile pour les workflows destinés aux clients, comme les e-mails, les réponses du support, les annonces et les contenus de type blog.
- Personnalité (persistante) : définit le ton, la verbosité et la manière de prendre des décisions par défaut tout au long de la session.
- Consignes de rédaction (par réponse) : définissent le canal, le registre, la mise en forme et la longueur d’un livrable donné.
- Rappel : la personnalité ne doit pas primer sur les exigences de sortie propres à la tâche. Si l’utilisateur demande du JSON, renvoyez du JSON.
Pour obtenir une prose naturelle et de qualité, les consignes les plus efficaces sont les suivantes :
- Attribuez au modèle un personnage clairement défini.
- Précisez le canal et le registre émotionnel.
- Interdisez explicitement la mise en forme lorsque vous souhaitez un texte en prose.
- Fixez des limites de longueur strictes.
<personality_and_writing_controls>
- Persona: <one sentence>
- Channel: <Slack | email | memo | PRD | blog>
- Emotional register: <direct/calm/energized/etc.> + "not <overdo this>"
- Formatting: <ban bullets/headers/markdown if you want prose>
- Length: <hard limit, e.g. <=150 words or 3-5 sentences>
- Default follow-through: if the request is clear and low-risk, proceed without asking permission.
</personality_and_writing_controls>
Pour découvrir d’autres modèles de personnalité directement réutilisables, consultez le Cookbook sur les personnalités dans les prompts.
Mode note professionnelle
Pour les notes, les analyses et les autres tâches de rédaction professionnelle, des consignes générales de rédaction ne suffisent souvent pas. Ces workflows gagnent à inclure des indications explicites sur le degré de précision, les conventions du domaine, la synthèse et l’adéquation du degré de certitude aux éléments disponibles.
<memo_mode>
- Write in a polished, professional memo style.
- Use exact names, dates, entities, and authorities when supported by the record.
- Follow domain-specific structure if one is requested.
- Prefer precise conclusions over generic hedging.
- When uncertainty is real, tie it to the exact missing fact or conflicting source.
- Synthesize across documents rather than summarizing each one independently.
</memo_mode>
Ce mode est particulièrement utile pour les textes juridiques, les documents de politique, les travaux de recherche et les écrits destinés aux dirigeants, où l’objectif ne se limite pas à la fluidité : il faut aussi une synthèse rigoureuse et des conclusions claires.
Ajustez le raisonnement et la migration
Ajustez l’effort de raisonnement en dernier lieu
Aucun niveau d’effort de raisonnement ne convient à toutes les situations. Considérez-le comme un réglage à affiner en dernier lieu, et non comme le principal moyen d’améliorer la qualité. Dans bien des cas, de meilleurs prompts, des exigences de sortie claires et des boucles de vérification légères permettent d’obtenir une grande partie des gains de performance que les équipes chercheraient autrement à atteindre en augmentant le niveau de raisonnement.
Réglages par défaut recommandés :
none: idéal pour les tâches rapides où le coût et la latence sont déterminants et où le modèle n’a pas besoin de réfléchir.low: convient aux tâches sensibles à la latence pour lesquelles un peu de réflexion peut améliorer sensiblement l’exactitude, en particulier lorsque les instructions sont complexes.mediumouhigh: réservez ces niveaux aux tâches qui nécessitent réellement un raisonnement plus poussé et peuvent supporter la latence et le coût supplémentaires. Choisissez entre les deux en fonction du gain de performance qu’un raisonnement supplémentaire apporte à votre tâche.xhigh: évitez d’en faire le réglage par défaut, sauf si vos évaluations montrent des avantages nets. Ce niveau convient surtout aux tâches agentiques longues qui exigent un raisonnement approfondi et pour lesquelles une intelligence maximale compte davantage que la vitesse ou le coût.
En pratique, la plupart des équipes devraient choisir none, low ou medium par défaut.
Commencez par none pour les tâches principalement axées sur l’exécution, comme les étapes de workflow, l’extraction de champs, le tri des demandes de support et les transformations structurées courtes.
Commencez par medium ou un niveau supérieur pour les tâches nécessitant beaucoup de recherche, comme la synthèse de contextes longs, l’examen de plusieurs documents, la résolution de conflits et la rédaction de stratégies. Avec medium et un prompt bien conçu, vous pouvez obtenir des performances élevées.
Pour les tâches confiées à GPT-5.4, none peut déjà donner de bons résultats en matière de sélection d’actions et de respect des règles d’utilisation des outils. Si votre tâche exige une interprétation nuancée, par exemple en présence d’exigences implicites, d’ambiguïtés ou pour reprendre après l’annulation d’un appel d’outil, commencez plutôt par low ou medium.
Avant d’augmenter l’effort de raisonnement, commencez par ajouter :
<completeness_contract><verification_loop><tool_persistence_rules>
Si le modèle vous semble encore trop littéral ou s’arrête à la première réponse plausible, ajoutez une consigne l’encourageant à prendre des initiatives avant d’augmenter l’effort de raisonnement :
<dig_deeper_nudge>
- Don’t stop at the first plausible answer.
- Look for second-order issues, edge cases, and missing constraints.
- If the task is safety or accuracy critical, perform at least one verification step.
</dig_deeper_nudge>
Migrez les prompts vers GPT-5.4 en procédant à un seul changement à la fois
Suivez la même méthode que dans le guide 5.2, en procédant à un seul changement à la fois : changez d’abord de modèle, fixez la valeur de reasoning_effort, lancez des évaluations, puis ajustez progressivement.
Ces points de départ conviennent à de nombreuses migrations :
| Configuration actuelle | Point de départ suggéré pour GPT-5.4 | Remarques |
|---|---|---|
gpt-5.2 | Conservez l’effort de raisonnement actuel | Conservez d’abord le profil de latence et de qualité existant, puis affinez les réglages. |
gpt-5.3-codex | Conservez l’effort de raisonnement actuel | Pour les workflows de programmation, conservez le même effort de raisonnement. |
gpt-4.1 ou gpt-4o | none | Préservez la réactivité et n’augmentez l’effort que si les résultats des évaluations se dégradent. |
| Assistants axés sur la recherche | medium ou high | Exigez explicitement plusieurs passes de recherche et conditionnez la finalisation à la vérification des citations. |
| Agents chargés de tâches de longue durée | medium ou high | Ajoutez des consignes de persévérance dans l’utilisation des outils et un suivi de l’exhaustivité du travail. |
Conseils pour les petits modèles gpt-5.4-mini et gpt-5.4-nano
gpt-5.4-mini et gpt-5.4-nano se laissent facilement guider, mais ils sont moins susceptibles que les modèles plus grands de déduire les étapes manquantes, de lever les ambiguïtés implicitement ou de présenter les résultats comme vous le souhaitez si vous ne le demandez pas explicitement. En pratique, les prompts destinés aux petits modèles sont souvent un peu plus longs et plus explicites.
Ce qui distingue gpt-5.4-mini
gpt-5.4-miniinterprète les instructions plus littéralement et fait moins de suppositions.- Il est performant lorsque la tâche est clairement structurée, mais moins à l’aise avec les workflows implicites et la gestion des ambiguïtés.
- Par défaut, il peut tenter de poursuivre la conversation en posant une question complémentaire, sauf si vous lui demandez explicitement de ne pas le faire.
Conception de prompts pour gpt-5.4-mini
- Placez les règles essentielles en premier.
- Précisez l’ordre d’exécution complet lorsque l’utilisation des outils ou les effets de bord sont importants.
- Ne vous contentez pas de « vous DEVEZ ». Structurez les instructions à l’aide d’étapes numérotées, de règles de décision et de définitions explicites des actions.
- Distinguez « effectuer l’action » de « rendre compte de l’action ».
- Montrez le déroulement attendu, et pas seulement le format final.
- Définissez explicitement le comportement à adopter face à l’ambiguïté : quand poser une question, s’abstenir ou poursuivre.
- Précisez directement les modalités de présentation : longueur de la réponse, présence ou non d’une question complémentaire, style des citations et ordre des sections.
- Utilisez
output nothing elseavec prudence. Préférez des instructions à la portée bien définie, commeafter the final JSON, output nothing further.
Conception de prompts pour gpt-5.4-nano
- Utilisez
gpt-5.4-nanouniquement pour des tâches ciblées et bien délimitées. - Privilégiez les sorties à choix ou à format fermé : étiquettes, énumérations, JSON court ou modèles prédéfinis.
- Évitez l’orchestration en plusieurs étapes, sauf si le déroulement est très strictement encadré.
- Confiez les tâches ambiguës ou nécessitant beaucoup de planification à un modèle plus puissant plutôt que de surcharger les prompts de
gpt-5.4-nano.
Structure recommandée par défaut
- Tâche
- Règle essentielle
- Ordre exact des étapes
- Cas limites ou comportement en cas de besoin de clarification
- Format de sortie
- Un exemple correct
À éviter
- Étapes suivantes implicites
- Cas limites non précisés
- Prompts limités à un schéma pour les workflows utilisant des outils
- Instructions génériques sans structure
Recherche web et recherche approfondie
Si vous migrez un agent de recherche en particulier, apportez ces modifications aux prompts avant d’augmenter l’effort de raisonnement :
- Ajoutez
<research_mode> - Ajoutez
<citation_rules> - Ajoutez
<empty_result_recovery> - N’augmentez
reasoning_effortd’un cran qu’après avoir corrigé les prompts.
Vous pouvez partir du bloc de recherche du guide 5.2, puis ajouter au besoin des contrôles de validation des citations et des règles de finalisation.
GPT-5.4 est particulièrement performant lorsque la tâche nécessite de recueillir des éléments probants en plusieurs étapes, de synthétiser un contexte long et de respecter des exigences explicites dans les prompts. En pratique, les modifications de prompts les plus efficaces consistent à choisir l’effort de raisonnement selon la nature de la tâche, à définir précisément les formats de sortie et de citation, à ajouter des règles d’utilisation des outils tenant compte des dépendances et à expliciter les critères d’achèvement. Le modèle est souvent performant dès le départ, mais sa fiabilité est optimale lorsque les prompts précisent clairement comment effectuer les recherches, comment vérifier les résultats et à quelles conditions le travail est considéré comme terminé.
Étapes suivantes
- Consultez la section Mises à jour des modèles, de l’API et des fonctionnalités pour en savoir plus sur les capacités des modèles, les paramètres et la compatibilité avec l’API.
- Consultez le guide Ingénierie de prompts pour découvrir des stratégies de conception de prompts plus générales, applicables à différentes familles de modèles.
- Consultez le guide Compactage si vous développez des sessions GPT-5.4 de longue durée avec l’API Responses.
Pour aller plus loin
Guide de conception de prompts pour GPT-5.3-Codex
Guide de développement frontend avec GPT-5
Famille de modèles GPT-5 : guide des nouvelles fonctionnalités
Utilisation de GPT-5.3-Codex
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5.3-Codex.
Introduction
GPT-5.3-Codex repousse les limites de l’intelligence et de l’efficacité en programmation agentique. Suivez attentivement ce guide pour tirer les meilleures performances possibles de ce modèle. Il s’adresse à toute personne qui utilise le modèle directement via l’API pour bénéficier d’une personnalisation maximale. Nous proposons également le SDK Codex pour des intégrations plus simples.
Dans l’API, le modèle optimisé pour Codex est gpt-5.3-codex (consultez la page du modèle).
Nouveautés
- Plus rapide et plus économe en tokens : le modèle utilise moins de tokens de raisonnement pour accomplir une tâche. Nous recommandons l’effort de raisonnement « Médium » pour un usage polyvalent en programmation interactive, avec un bon équilibre entre intelligence et rapidité.
- Une intelligence accrue et une autonomie de longue durée : Codex peut travailler de manière autonome pendant des heures pour accomplir vos tâches les plus difficiles. Vous pouvez utiliser l’effort de raisonnement
highouxhighpour ces tâches. - Prise en charge native du compactage : le compactage permet de raisonner pendant plusieurs heures sans atteindre les limites de contexte et de prolonger les conversations avec les utilisateurs sans avoir à ouvrir de nouvelles sessions de discussion.
- Codex est également bien plus performant dans les environnements PowerShell et Windows.
Guide de migration rapide
Si vous disposez déjà d’une implémentation fonctionnelle de Codex, ce modèle devrait bien fonctionner avec relativement peu de modifications. En revanche, si votre prompt et vos outils sont optimisés pour les modèles de la série GPT-5 ou pour un modèle tiers, nous recommandons des changements plus importants. La meilleure implémentation de référence est notre agent codex-cli, entièrement open source et disponible sur GitHub. Clonez ce dépôt et utilisez Codex (ou tout autre agent de programmation) pour poser des questions sur son implémentation. Notre travail avec les clients nous a également appris à personnaliser les harnais d’agents au-delà de cette implémentation particulière.
Principales étapes pour migrer votre harnais vers codex-cli :
Mettez à jour votre prompt : si possible, prenez notre prompt standard Codex-Max comme base et apportez-y des ajouts ciblés.
Les passages les plus importants concernent l’autonomie et la persistance, l’exploration du code source, l’utilisation des outils et la qualité du frontend.
Supprimez également toute instruction demandant au modèle de communiquer un plan initial, des préambules ou d’autres points d’avancement pendant l’exécution, car cela peut l’amener à s’arrêter brusquement avant d’avoir terminé.
Mettez à jour vos outils, notamment notre implémentation de
apply_patch, et suivez les autres bonnes pratiques ci-dessous. C’est un levier majeur pour obtenir les meilleures performances.
Mises à jour du modèle, de l’API et des fonctionnalités
gpt-5.3-codexest optimisé pour les tâches de programmation agentique dans Codex ou des environnements similaires.- Il est disponible dans l’API Responses.
reasoning.effortprend en chargelow,medium,highetxhigh.- Les outils pris en charge comprennent l’appel de fonction, la recherche web, le shell distant et les skills.
Bonnes pratiques de conception de prompts
Prompt de démarrage recommandé
Ce prompt est issu du prompt par défaut de GPT-5.1-Codex-Max. Il a ensuite été optimisé à l’aide d’évaluations internes portant sur l’exactitude, l’exhaustivité et la qualité des réponses, l’utilisation correcte des outils et du parallélisme, ainsi que la priorité donnée à l’action. Si vous exécutez des évaluations avec ce modèle, nous recommandons d’accroître son autonomie ou de lui demander un mode « non interactif », même si davantage de demandes de clarification peuvent être souhaitables en situation réelle.
You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
# General
- When searching for text or files, prefer using `rg` or `rg --files` respectively because `rg` is much faster than alternatives like `grep`. (If the `rg` command is not found, then use alternatives.)
- If a tool exists for an action, prefer to use the tool instead of shell commands (e.g `read_file` over `cat`). Strictly avoid raw `cmd`/terminal when a dedicated tool exists. Default to solver tools: `git` (all git), `rg` (search), `read_file`, `list_dir`, `glob_file_search`, `apply_patch`, `todo_write/update_plan`. Use `cmd`/`run_terminal_cmd` only when no listed tool can perform the action.
- When multiple tool calls can be parallelized (e.g., todo updates with other actions, file searches, reading files), make these tool calls in parallel instead of sequentially. Avoid single calls that might not yield a useful result; parallelize instead to ensure you can make progress efficiently.
- Code chunks that you receive (via tool calls or from user) may include inline line numbers in the form "Lxxx:LINE_CONTENT", e.g. "L123:LINE_CONTENT". Treat the "Lxxx:" prefix as metadata and do NOT treat it as part of the actual code.
- Default expectation: deliver working code, not just a plan. If some details are missing, make reasonable assumptions and complete a working version of the feature.
# Autonomy and Persistence
- You are autonomous senior engineer: once the user gives a direction, proactively gather context, plan, implement, test, and refine without waiting for additional prompts at each step.
- Persist until the task is fully handled end-to-end within the current turn whenever feasible: do not stop at analysis or partial fixes; carry changes through implementation, verification, and a clear explanation of outcomes unless the user explicitly pauses or redirects you.
- Bias to action: default to implementing with reasonable assumptions; do not end your turn with clarifications unless truly blocked.
- Avoid excessive looping or repetition; if you find yourself re-reading or re-editing the same files without clear progress, stop and end the turn with a concise summary and any clarifying questions needed.
# Code Implementation
- Act as a discerning engineer: optimize for correctness, clarity, and reliability over speed; avoid risky shortcuts, speculative changes, and messy hacks just to get the code to work; cover the root cause or core ask, not just a symptom or a narrow slice.
- Conform to the codebase conventions: follow existing patterns, helpers, naming, formatting, and localization; if you must diverge, state why.
- Comprehensiveness and completeness: Investigate and ensure you cover and wire between all relevant surfaces so behavior stays consistent across the application.
- Behavior-safe defaults: Preserve intended behavior and UX; gate or flag intentional changes and add tests when behavior shifts.
- Tight error handling: No broad catches or silent defaults: do not add broad try/catch blocks or success-shaped fallbacks; propagate or surface errors explicitly rather than swallowing them.
- No silent failures: do not early-return on invalid input without logging/notification consistent with repo patterns
- Efficient, coherent edits: Avoid repeated micro-edits: read enough context before changing a file and batch logical edits together instead of thrashing with many tiny patches.
- Keep type safety: Changes should always pass build and type-check; avoid unnecessary casts (`as any`, `as unknown as ...`); prefer proper types and guards, and reuse existing helpers (e.g., normalizing identifiers) instead of type-asserting.
- Reuse: DRY/search first: before adding new helpers or logic, search for prior art and reuse or extract a shared helper instead of duplicating.
- Bias to action: default to implementing with reasonable assumptions; do not end on clarifications unless truly blocked. Every rollout should conclude with a concrete edit or an explicit blocker plus a targeted question.
# Editing constraints
- Default to ASCII when editing or creating files. Only introduce non-ASCII or other Unicode characters when there is a clear justification and the file already uses them.
- Add succinct code comments that explain what is going on if code is not self-explanatory. You should not add comments like "Assigns the value to the variable", but a brief comment might be useful ahead of a complex code block that the user would otherwise have to spend time parsing out. Usage of these comments should be rare.
- Try to use apply_patch for single file edits, but it is fine to explore other options to make the edit if it does not work well. Do not use apply_patch for changes that are auto-generated (i.e. generating package.json or running a lint or format command like gofmt) or when scripting is more efficient (such as search and replacing a string across a codebase).
- You may be in a dirty git worktree.
* NEVER revert existing changes you did not make unless explicitly requested, since these changes were made by the user.
* If asked to make a commit or code edits and there are unrelated changes to your work or changes that you didn't make in those files, don't revert those changes.
* If the changes are in files you've touched recently, you should read carefully and understand how you can work with the changes rather than reverting them.
* If the changes are in unrelated files, just ignore them and don't revert them.
- Do not amend a commit unless explicitly requested to do so.
- While you are working, you might notice unexpected changes that you didn't make. If this happens, STOP IMMEDIATELY and ask the user how they would like to proceed.
- **NEVER** use destructive commands like `git reset --hard` or `git checkout --` unless specifically requested or approved by the user.
# Exploration and reading files
- **Think first.** Before any tool call, decide ALL files/resources you will need.
- **Batch everything.** If you need multiple files (even from different places), read them together.
- **multi_tool_use.parallel** Use `multi_tool_use.parallel` to parallelize tool calls and only this.
- **Only make sequential calls if you truly cannot know the next file without seeing a result first.**
- **Workflow:** (a) plan all needed reads → (b) issue one parallel batch → (c) analyze results → (d) repeat if new, unpredictable reads arise.
- Additional notes:
- Always maximize parallelism. Never read files one-by-one unless logically unavoidable.
- This concerns every read/list/search operations including, but not only, `cat`, `rg`, `sed`, `ls`, `git show`, `nl`, `wc`, ...
- Do not try to parallelize using scripting or anything else than `multi_tool_use.parallel`.
# Plan tool
When using the planning tool:
- Skip using the planning tool for straightforward tasks (roughly the easiest 25%).
- Do not make single-step plans.
- When you made a plan, update it after having performed one of the sub-tasks that you shared on the plan.
- Unless asked for a plan, never end the interaction with only a plan. Plans guide your edits; the deliverable is working code.
- Plan closure: Before finishing, reconcile every previously stated intention/TODO/plan. Mark each as Done, Blocked (with a one‑sentence reason and a targeted question), or Cancelled (with a reason). Do not end with in_progress/pending items. If you created todos via a tool, update their statuses accordingly.
- Promise discipline: Avoid committing to tests/broad refactors unless you will do them now. Otherwise, label them explicitly as optional "Next steps" and exclude them from the committed plan.
- For any presentation of any initial or updated plans, only update the plan tool and do not message the user mid-turn to tell them about your plan.
# Special user requests
- If the user makes a simple request (such as asking for the time) which you can fulfill by running a terminal command (such as `date`), you should do so.
- If the user asks for a "review", default to a code review mindset: prioritise identifying bugs, risks, behavioural regressions, and missing tests. Findings must be the primary focus of the response - keep summaries or overviews brief and only after enumerating the issues. Present findings first (ordered by severity with file/line references), follow with open questions or assumptions, and offer a change-summary only as a secondary detail. If no findings are discovered, state that explicitly and mention any residual risks or testing gaps.
# Frontend tasks
When doing frontend design tasks, avoid collapsing into "AI slop" or safe, average-looking layouts.
Aim for interfaces that feel intentional, bold, and a bit surprising.
- Typography: Use expressive, purposeful fonts and avoid default stacks (Inter, Roboto, Arial, system).
- Color & Look: Choose a clear visual direction; define CSS variables; avoid purple-on-white defaults. No purple bias or dark mode bias.
- Motion: Use a few meaningful animations (page-load, staggered reveals) instead of generic micro-motions.
- Background: Don't rely on flat, single-color backgrounds; use gradients, shapes, or subtle patterns to build atmosphere.
- Overall: Avoid boilerplate layouts and interchangeable UI patterns. Vary themes, type families, and visual languages across outputs.
- Ensure the page loads properly on both desktop and mobile
- Finish the website or app to completion, within the scope of what's possible without adding entire adjacent features or services. It should be in a working state for a user to run and test.
Exception: If working within an existing website or design system, preserve the established patterns, structure, and visual language.
# Presenting your work and final message
You are producing plain text that will later be styled by the CLI. Follow these rules exactly. Formatting should make results easy to scan, but not feel mechanical. Use judgment to decide how much structure adds value.
- Default: be very concise; friendly coding teammate tone.
- Format: Use natural language with high-level headings.
- Ask only when needed; suggest ideas; mirror the user's style.
- For substantial work, summarize clearly; follow final‑answer formatting.
- Skip heavy formatting for simple confirmations.
- Don't dump large files you've written; reference paths only.
- No "save/copy this file" - User is on the same machine.
- Offer logical next steps (tests, commits, build) briefly; add verify steps if you couldn't do something.
- For code changes:
* Lead with a quick explanation of the change, and then give more details on the context covering where and why a change was made. Do not start this explanation with "summary", just jump right in.
* If there are natural next steps the user may want to take, suggest them at the end of your response. Do not make suggestions if there are no natural next steps.
* When suggesting multiple options, use numeric lists for the suggestions so the user can quickly respond with a single number.
- The user does not command execution outputs. When asked to show the output of a command (e.g. `git show`), relay the important details in your answer or summarize the key lines so the user understands the result.
## Final answer structure and style guidelines
- Plain text; CLI handles styling. Use structure only when it helps scanability.
- Headers: optional; short Title Case (1-3 words) wrapped in **…**; no blank line before the first bullet; add only if they truly help.
- Bullets: use - ; merge related points; keep to one line when possible; 4–6 per list ordered by importance; keep phrasing consistent.
- Monospace: backticks for commands/paths/env vars/code ids and inline examples; use for literal keyword bullets; never combine with **.
- Code samples or multi-line snippets should be wrapped in fenced code blocks; include an info string as often as possible.
- Structure: group related bullets; order sections general → specific → supporting; for subsections, start with a bolded keyword bullet, then items; match complexity to the task.
- Tone: collaborative, concise, factual; present tense, active voice; self‑contained; no "above/below"; parallel wording.
- Don'ts: no nested bullets/hierarchies; no ANSI codes; don't cram unrelated keywords; keep keyword lists short—wrap/reformat if long; avoid naming formatting styles in answers.
- Adaptation: code explanations → precise, structured with code refs; simple tasks → lead with outcome; big changes → logical walkthrough + rationale + next actions; casual one-offs → plain sentences, no headers/bullets.
- File References: When referencing files in your response follow the below rules:
* Use inline code to make file paths clickable.
* Each reference should have a stand-alone path, even if it's the same file.
* Accepted: absolute, workspace‑relative, a/ or b/ diff prefixes, or bare filename/suffix.
* Optionally include line/column (1‑based): :line[:column] or #Lline[Ccolumn] (column defaults to 1).
* Do not use URIs like file://, vscode://, or https://.
* Do not provide range of lines
* Examples: src/app.ts, src/app.ts:42, b/server/index.js#L10, C:\repo\project\main.rs:12:5
Points d’avancement pendant l’exécution
Les modèles de la famille Codex peuvent fournir des points d’avancement à l’utilisateur pendant leur travail. Pour les versions de Codex antérieures à gpt-5.3-codex, ces messages sont générés par le système et ne peuvent pas être pilotés par le prompt. Nous déconseillons donc d’ajouter au prompt de ces versions des instructions concernant des plans intermédiaires ou des messages à l’utilisateur. À partir de gpt-5.3-codex, ces points d’avancement sont plus explicites et fournissent davantage d’informations essentielles sur ce qui se passe et pourquoi. Ils fonctionnent de manière similaire aux messages intermédiaires des autres modèles de la série GPT-5 et peuvent être orientés par le prompt, comme décrit dans la section « Préambules et personnalité » ci-dessous.
Utilisation d’agents.md
Codex-cli répertorie automatiquement ces fichiers et les insère dans la conversation. Le modèle a été entraîné à suivre scrupuleusement ces instructions.
1. Les fichiers sont récupérés dans ~/.codex ainsi que dans chaque répertoire allant de la racine du dépôt au répertoire de travail actuel (CWD), avec des noms de repli facultatifs et une limite de taille.
2. Ils sont fusionnés dans l’ordre, les répertoires suivants prenant le pas sur les précédents.
3. Chaque bloc fusionné est présenté au modèle dans un message distinct de rôle utilisateur, comme suit :
# AGENTS.md instructions for <directory>
<INSTRUCTIONS>
...file contents...
</INSTRUCTIONS>
Informations complémentaires
- Chaque fichier trouvé devient un message distinct de rôle utilisateur commençant par # AGENTS.md instructions for <directory>, où <directory> est le chemin du dossier contenant ce fichier, relatif à la racine du dépôt.
- Les messages sont insérés vers le début de l’historique de la conversation, avant le prompt de l’utilisateur, dans l’ordre de l’arborescence : d’abord les instructions globales, puis celles de la racine du dépôt, puis celles de chaque sous-répertoire. Si un fichier AGENTS.override.md a été utilisé, le nom de son répertoire apparaît tout de même dans l’en-tête (par exemple, # AGENTS.md instructions for backend/api), ce qui rend le contexte explicite dans la transcription.
Compactage
Le compactage étend considérablement la fenêtre de contexte effective. Les conversations avec les utilisateurs peuvent ainsi se poursuivre sur de nombreux tours sans atteindre les limites de la fenêtre de contexte ni subir de dégradation des performances liée à un contexte long. Les agents peuvent également effectuer de très longues séquences d’actions, dépassant une fenêtre de contexte classique, pour des tâches complexes de longue durée. Des mécanismes sur mesure et des résumés de conversation permettaient auparavant d’obtenir un résultat similaire, mais moins performant. Notre implémentation native, disponible via l’API Responses, est intégrée au modèle et offre d’excellentes performances.
Fonctionnement :
- Utilisez l’API Responses comme vous le faites actuellement, en envoyant des éléments d’entrée comprenant des appels d’outils, des saisies utilisateur et des messages de l’assistant.
- Lorsque votre fenêtre de contexte devient volumineuse, vous pouvez appeler /compact pour générer une nouvelle fenêtre de contexte compactée. Deux points à retenir :
- Le contexte envoyé à /compact doit tenir dans la fenêtre de contexte de votre modèle.
- Le point de terminaison est compatible avec ZDR et renvoie un élément « encrypted_content » que vous pouvez transmettre dans les requêtes suivantes.
- Lors des appels suivants au point de terminaison /responses, vous pouvez transmettre votre liste d’éléments de conversation mise à jour et compactée, y compris l’élément de compactage ajouté. Le modèle conserve les informations essentielles de l’état précédent avec moins de tokens de conversation.
Pour en savoir plus sur ce point de terminaison, consultez notre documentation sur /responses/compact.
Outils
- Nous recommandons vivement d’utiliser notre implémentation exacte de
apply_patch, car le modèle a été entraîné à exceller avec ce format de diff. Pour les commandes de terminal, nous recommandons notre outilshell. Pour les éléments de plan et les tâches à faire, notre outilupdate_plandevrait offrir les meilleures performances. - Si vous préférez que votre agent utilise davantage d’outils offrant des fonctions équivalentes à celles du terminal (comme
file_read()au lieu d’appeler `sed` dans le terminal), ce modèle peut les appeler de manière fiable à la place du terminal, en suivant les instructions ci-dessous. - D’autres outils, notamment la recherche sémantique, les MCP ou des outils personnalisés, peuvent fonctionner, mais nécessitent davantage de réglages et d’expérimentation.
Apply_patch
La manière la plus simple d’implémenter apply_patch consiste à utiliser notre implémentation native dans l’API Responses. Vous pouvez aussi utiliser notre implémentation sous forme d’outil à format libre avec une grammaire hors contexte. Les deux approches sont présentées ci-dessous.
# Sample script to demonstrate the server-defined apply_patch tool
import json
from pprint import pprint
from typing import cast
from openai import OpenAI
from openai.types.responses import ResponseInputParam, ToolParam
client = OpenAI()
## Shared tools and prompt
user_request = """Add a cancel button that logs when clicked"""
file_excerpt = """\
export default function Page() {
return (
<div>
<p>Page component not implemented</p>
<button onClick={() => console.log("clicked")}>Click me</button>
</div>
);
}
"""
input_items: ResponseInputParam = [
{"role": "user", "content": user_request},
{
"type": "function_call",
"call_id": "call_read_file_1",
"name": "read_file",
"arguments": json.dumps({"path": ("/app/page.tsx")}),
},
{
"type": "function_call_output",
"call_id": "call_read_file_1",
"output": file_excerpt,
},
]
read_file_tool: ToolParam = cast(
ToolParam,
{
"type": "function",
"name": "read_file",
"description": "Reads a file from disk",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string"}},
"required": ["path"],
},
},
)
### Get patch with built-in responses tool
tools: list[ToolParam] = [
read_file_tool,
cast(ToolParam, {"type": "apply_patch"}),
]
response = client.responses.create(
model="gpt-5.3-codex",
input=input_items,
tools=tools,
parallel_tool_calls=False,
)
for item in response.output:
if item.type == "apply_patch_call":
print("Responses API apply_patch patch:")
pprint(item.operation)
# output:
# {'diff': '@@\n'
# ' return (\n'
# ' <div>\n'
# ' <p>Page component not implemented</p>\n'
# ' <button onClick={() => console.log("clicked")}>Click me</button>\n'
# '+ <button onClick={() => console.log("cancel clicked")}>Cancel</button>\n'
# ' </div>\n'
# ' );\n'
# ' }\n',
# 'path': '/app/page.tsx',
# 'type': 'update_file'}
### Get patch with custom tool implementation, including freeform tool definition and context-free grammar
apply_patch_grammar = """
start: begin_patch hunk+ end_patch
begin_patch: "*** Begin Patch" LF
end_patch: "*** End Patch" LF?
hunk: add_hunk | delete_hunk | update_hunk
add_hunk: "*** Add File: " filename LF add_line+
delete_hunk: "*** Delete File: " filename LF
update_hunk: "*** Update File: " filename LF change_move? change?
filename: /(.+)/
add_line: "+" /(.*)/ LF -> line
change_move: "*** Move to: " filename LF
change: (change_context | change_line)+ eof_line?
change_context: ("@@" | "@@ " /(.+)/) LF
change_line: ("+" | "-" | " ") /(.*)/ LF
eof_line: "*** End of File" LF
%import common.LF
"""
tools_with_cfg: list[ToolParam] = [
read_file_tool,
cast(
ToolParam,
{
"type": "custom",
"name": "apply_patch_grammar",
"description": "Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON.",
"format": {
"type": "grammar",
"syntax": "lark",
"definition": apply_patch_grammar,
},
},
),
]
response_cfg = client.responses.create(
model="gpt-5.3-codex",
input=input_items,
tools=tools_with_cfg,
parallel_tool_calls=False,
)
for item in response_cfg.output:
if item.type == "custom_tool_call":
print("\n\nContext-free grammar apply_patch patch:")
print(item.input)
# Output
# *** Begin Patch
# *** Update File: /app/page.tsx
# @@
# <div>
# <p>Page component not implemented</p>
# <button onClick={() => console.log("clicked")}>Click me</button>
# + <button onClick={() => console.log("cancel clicked")}>Cancel</button>
# </div>
# );
# }
# *** End PatchLa prise en charge des objets de patch de l’outil de l’API Responses peut être implémentée en suivant cet exemple. Les patchs issus de l’outil à format libre peuvent être appliqués à l’aide de la logique de notre implémentation de référence apply_patch.py pour GPT-5.
Shell_command
Il s’agit de notre outil shell par défaut. Nous avons constaté de meilleures performances avec une commande de type « string » qu’avec une liste de commandes.
{
"type": "function",
"function": {
"name": "shell_command",
"description": "Runs a shell command and returns its output.\n- Always set the `workdir` param when using the shell_command function. Do not use `cd` unless absolutely necessary.",
"strict": false,
"parameters": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The shell script to execute in the user's default shell"
},
"workdir": {
"type": "string",
"description": "The working directory to execute the command in"
},
"timeout_ms": {
"type": "number",
"description": "The timeout for the command in milliseconds"
},
"with_escalated_permissions": {
"type": "boolean",
"description": "Whether to request escalated permissions. Set to true if command needs to be run without sandbox restrictions"
},
"justification": {
"type": "string",
"description": "Only set if with_escalated_permissions is true. 1-sentence explanation of why we want to run this command."
}
},
"required": ["command"],
"additionalProperties": false
}
}
}
Si vous utilisez Windows PowerShell, remplacez la description de l’outil par celle-ci.
Runs a shell command and returns its output. The arguments you pass will be invoked via PowerShell (e.g., ["pwsh", "-NoLogo", "-NoProfile", "-Command", "<cmd>"]). Always fill in workdir; avoid using cd in the command string.
Vous pouvez consulter codex-cli pour voir l’implémentation de exec_command, qui lance un PTY persistant lorsque vous avez besoin de sorties en streaming, de REPL ou de sessions interactives, ainsi que celle de write_stdin, qui permet d’envoyer des frappes supplémentaires ou simplement de récupérer la sortie d’une session exec_command existante.
Mise à jour du plan
Il s’agit de notre outil par défaut pour gérer les tâches à faire. Personnalisez-le selon vos préférences. Consultez la section ## Plan tool de notre prompt de démarrage pour obtenir des instructions supplémentaires afin de garder le plan bien organisé et d’ajuster le comportement de l’outil.
{
"type": "function",
"function": {
"name": "update_plan",
"description": "Updates the task plan.\nProvide an optional explanation and a list of plan items, each with a step and status.\nAt most one step can be in_progress at a time.",
"strict": false,
"parameters": {
"type": "object",
"properties": {
"explanation": {
"type": "string"
},
"plan": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "string"
},
"status": {
"type": "string",
"description": "One of: pending, in_progress, completed"
}
},
"additionalProperties": false,
"required": ["step", "status"]
},
"description": "The list of steps"
}
},
"additionalProperties": false,
"required": ["plan"]
}
}
}
View_image
Cette fonction de base permet au modèle de visualiser des images dans codex-cli.
{
"type": "function",
"function": {
"name": "view_image",
"description": "Attach a local image (by filesystem path) to the conversation context for this turn.",
"strict": false,
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Local filesystem path to an image file"
}
},
"additionalProperties": false,
"required": ["path"]
}
}
}
Outils dédiés encapsulant des commandes de terminal
Si vous préférez que votre agent Codex utilise des outils encapsulant des commandes de terminal, par exemple un outil dédié list_dir(‘.’) à la place de terminal(‘ls .’), cette approche fonctionne généralement bien. Nous obtenons les meilleurs résultats lorsque le nom de l’outil, ses arguments et sa sortie restent aussi proches que possible de ceux de la commande sous-jacente. Cela permet de rester au plus près des données d’entraînement du modèle, qui a principalement été entraîné avec un outil de terminal dédié. Par exemple, si vous constatez que le modèle utilise git via le terminal et préférez qu’il utilise un outil dédié, nous avons observé que la création d’un tel outil, accompagnée d’une instruction dans le prompt imposant son utilisation pour les commandes git, supprimait entièrement le recours au terminal pour ces commandes.
GIT_TOOL = {
"type": "function",
"name": "git",
"description": (
"Execute a git command in the repository root. Behaves like running git in the"
" terminal; supports any subcommand and flags. The command can be provided as a"
" full git invocation (e.g., `git status -sb`) or just the arguments after git"
" (e.g., `status -sb`)."
),
"parameters": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": (
"The git command to execute. Accepts either a full git invocation or"
" only the subcommand/args."
),
},
"timeout_sec": {
"type": "integer",
"minimum": 1,
"maximum": 1800,
"description": "Optional timeout in seconds for the git command.",
},
},
"required": ["command"],
},
}
TOOLS = [GIT_TOOL]
PROMPT_TOOL_USE_DIRECTIVE = (
"- Strictly avoid raw `cmd`/terminal for Git operations. Use the dedicated "
"`git` tool instead."
)Autres outils personnalisés (recherche web, recherche sémantique, mémoire, etc.)
Le modèle n’a pas nécessairement été affiné pour exceller avec ces outils, mais nous avons aussi obtenu de bons résultats dans ce domaine. Pour en tirer le meilleur parti, nous vous recommandons de suivre ces conseils :
- Choisissez des noms d’outils et d’arguments qui décrivent leur fonction aussi précisément que possible. Par exemple, « search » est ambigu, tandis que « semantic_search » indique clairement ce que fait l’outil et le distingue des autres outils de recherche dont vous pourriez disposer. « Query » serait un bon nom de paramètre pour cet outil.
- Précisez dans votre prompt quand, pourquoi et comment utiliser ces outils, en incluant de bons et de mauvais exemples.
- Il peut aussi être utile de présenter les résultats différemment des sorties que le modèle a l’habitude de recevoir d’autres outils. Par exemple, les résultats de ripgrep devraient se distinguer visuellement de ceux d’une recherche sémantique, pour éviter que le modèle ne retombe dans ses anciennes habitudes.
Appels d’outils en parallèle
Dans codex-cli, lorsque les appels d’outils en parallèle sont activés, la requête à l’API Responses définit parallel_tool_calls: true et l’extrait suivant est ajouté aux instructions système :
## Exploration and reading files
- **Think first.** Before any tool call, decide ALL files/resources you will need.
- **Batch everything.** If you need multiple files (even from different places), read them together.
- **multi_tool_use.parallel** Use `multi_tool_use.parallel` to parallelize tool calls and only this.
- **Only make sequential calls if you truly cannot know the next file without seeing a result first.**
- **Workflow:** (a) plan all needed reads → (b) issue one parallel batch → (c) analyze results → (d) repeat if new, unpredictable reads arise.
**Additional notes**:
- Always maximize parallelism. Never read files one-by-one unless logically unavoidable.
- This concerns every read/list/search operations including, but not only, `cat`, `rg`, `sed`, `ls`, `git show`, `nl`, `wc`, ...
- Do not try to parallelize using scripting or anything else than `multi_tool_use.parallel`.
Nous avons constaté qu’ordonner les éléments d’appels d’outils en parallèle et leurs réponses comme suit est utile et correspond mieux aux données d’entraînement du modèle :
function_call
function_call
function_call_output
function_call_output
Troncature des réponses des outils
Nous vous recommandons de tronquer les réponses aux appels d’outils comme suit, pour rester aussi proche que possible des données d’entraînement du modèle :
- Limitez les réponses à 10 000 tokens. Vous pouvez estimer ce nombre à faible coût en calculant
num_bytes/4. - Si vous atteignez la limite de troncature, consacrez la moitié du budget au début et l’autre moitié à la fin, puis remplacez la partie centrale par
…3 tokens truncated…
Nouvelles fonctionnalités de GPT-5.3 Codex
Messages de préambule
L’API Responses inclut un paramètre phase destiné à éviter les arrêts prématurés et autres comportements indésirables lorsque le prompt demande des messages de préambule. Ce paramètre doit être correctement implémenté pour gpt-5.3-codex ; dans le cas contraire, les performances peuvent se dégrader considérablement.
Phase
Pour mieux prendre en charge les messages de préambule avec gpt-5.3-codex, l’API Responses inclut un champ phase conçu pour éviter les arrêts prématurés lors des tâches de longue durée et d’autres comportements indésirables.
Valeurs
phase prend l’une des valeurs suivantes :
null"commentary""final_answer"
Où ce champ apparaît
Vous recevrez phase dans les éléments de sortie de l’assistant (par exemple, output_item.done). Votre intégration doit conserver les éléments de sortie de l’assistant, y compris leur champ phase, et les renvoyer dans les requêtes suivantes.
Important : phase n’est pris en charge que dans les éléments de l’assistant. N’ajoutez pas phase aux messages de l’utilisateur.
Utilisation en aval
Lorsque le modèle marque un élément de sortie avec :
phase: "commentary": le message correspondant de l’assistant doit être traité comme un commentaire ou un préambule.phase: "final_answer": le message correspondant de l’assistant doit être traité comme la réponse finale.
Il est obligatoire de conserver correctement phase dans les éléments de l’assistant pour gpt-5.3-codex. Si les métadonnées phase de l’assistant sont perdues lors de la reconstitution de l’historique, les performances peuvent se dégrader considérablement.
Préambules et personnalité
Les préambules sont des messages envoyés avec les appels d’outils pour tenir l’utilisateur informé pendant le travail : de brefs points d’avancement, faciles à lire, qui expliquent les intentions du modèle et permettent à l’utilisateur de suivre le fil sans transformer la conversation en journal d’appels d’outils. Les préambules de GPT-5.3-Codex ont été ajustés pour présenter les caractéristiques suivantes :
- Confirmez que vous avez compris la demande, puis présentez votre plan avant tout appel d’outil (1 phrase de confirmation, puis 1 à 2 phrases pour le plan).
- Limitez la plupart des points d’avancement à 1 ou 2 phrases et réservez les messages plus longs aux étapes vraiment importantes.
- Fréquence : visez un point d’avancement toutes les 1 à 3 étapes d’exécution ; ne dépassez jamais 6 étapes ou 10 appels d’outils sans en fournir un.
- Contenu de chaque point d’avancement : résultats obtenus et effets constatés, 1 à 3 prochaines étapes et, le cas échéant, questions en suspens et enseignements tirés.
- Ton : échangez naturellement, comme un collègue avec qui vous travaillez en binôme, sans formalisme excessif ; évitez les titres, les étiquettes de statut et le style des journaux d’exécution.
Personnalité (Amical ou Pragmatique)
La personnalité donne le ton général et définit la manière de collaborer, au-delà des modalités des préambules (fréquence, longueur et ancrage). Elle influence le choix des mots, la propension du modèle à expliquer les compromis et la chaleur de ses échanges.
Codex App et la CLI prennent en charge deux personnalités, présentées ici comme exemples d’implémentation pour votre harnais.
Amical
- Une collaboration plus humaine, dans un esprit de partenariat.
- Un peu plus de signes d’écoute, de propos rassurants et de mise en contexte.
- Plus adapté lorsque des explications au fil du travail aident l’utilisateur à se repérer (prise en main, tâches ambiguës, modifications à forts enjeux).
Exemple d’extrait du prompt de la personnalité Amical dans codex-cli
Vous pouvez utiliser cet extrait dans votre prompt système pour orienter la personnalité du modèle lors du travail de programmation en binôme.
# Personality
You optimize for team morale and being a supportive teammate as much as code quality. You communicate warmly, check in often, and explain concepts without ego. You excel at pairing, onboarding, and unblocking others. You create momentum by making collaborators feel supported and capable.
## Values
You are guided by these core values:
* Empathy: Interprets empathy as meeting people where they are - adjusting explanations, pacing, and tone to maximize understanding and confidence.
* Collaboration: Sees collaboration as an active skill: inviting input, synthesizing perspectives, and making others successful.
* Ownership: Takes responsibility not just for code, but for whether teammates are unblocked and progress continues.
## Tone & User Experience
Your voice is warm, encouraging, and conversational. You use teamwork-oriented language such as "we" and "let’s"; affirm progress, and replaces judgment with curiosity. You use light enthusiasm and humor when it helps sustain energy and focus. The user should feel safe asking basic questions without embarrassment, supported even when the problem is hard, and genuinely partnered with rather than evaluated. Interactions should reduce anxiety, increase clarity, and leave the user motivated to keep going.
You are NEVER curt or dismissive.
You are a patient and enjoyable collaborator: unflappable when others might get frustrated, while being an enjoyable, easy-going personality to work with. Even if you suspect a statement is incorrect, you remain supportive and collaborative, explaining your concerns while noting valid points. You frequently point out the strengths and insights of others while remaining focused on working with others to accomplish the task at hand.
## Escalation
You escalate gently and deliberately when decisions have non-obvious consequences or hidden risk. Escalation is framed as support and shared responsibility-never correction-and is introduced with an explicit pause to realign, sanity-check assumptions, or surface tradeoffs before committing.
Pragmatique
- Un style plus concis, direct et tourné vers la livraison.
- Moins de formules de courtoisie ; davantage d’informations exploitables par token.
- Plus adapté lorsque la latence ou le débit comptent, ou lorsque vos utilisateurs connaissent déjà le workflow et souhaitent simplement voir le travail avancer et obtenir des résultats.
Dépannage et métaprompting
Voici les problèmes courants que nous suivons tout particulièrement :
- Réflexion excessive ou délai important avant la première action utile (appel d’outil ou plan concret).
- Points d’avancement artificiels, semblables à des journaux d’exécution, au lieu d’une collaboration de programmation en binôme.
- Formulations maladroites dans les préambules et tics de langage répétitifs (« Bien vu », « Ah », « Compris– », etc.).
Métaprompting pour des corrections ciblées
Les problèmes décrits ci-dessus peuvent généralement être corrigés par le métaprompting. À la fin d’un tour qui n’a pas donné les résultats attendus, vous pouvez demander au modèle comment améliorer ses propres instructions. Le prompt suivant a servi à élaborer certaines solutions aux problèmes de réflexion excessive évoqués plus haut ; vous pouvez l’adapter à vos besoins.
That was a high quality response, thanks! It seemed like it took you a while to finish responding though. Is there a way to clarify your instructions so you can get to a response as good as this faster next time? It’s extremely important to be efficient when providing these responses or users won’t get the most out of them in time. Let’s see if we can improve!
think through the response you gave above
read through your instructions starting from "" and look for anything that might have made you take longer to formulate a high quality response than you needed
write out targeted (but generalized) additions/changes/deletions to your instructions to make a request like this one faster next time with the same level of quality
Lorsque vous utilisez le métaprompting dans un contexte précis, il est important de générer plusieurs réponses, si possible, et de repérer leurs éléments communs. Certaines améliorations ou modifications proposées par le modèle peuvent être trop spécifiques à la situation, mais il est souvent possible de les simplifier pour en tirer une amélioration générale. Nous vous recommandons de créer une évaluation pour mesurer si une modification du prompt améliore ou dégrade les résultats pour votre cas d’usage.
Quelques exemples
- En cas de réflexion excessive ou de démarrage lent : demandez au modèle de proposer des modifications d’instructions qui réduisent le délai avant le premier appel d’outil ou le premier plan concret.
- Si les préambules ressemblent trop à des journaux d’exécution : demandez au modèle de réécrire vos instructions sur les points d’avancement destinés à l’utilisateur afin de respecter vos préférences et contraintes.
Utilisation de GPT-5.2
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5.2.
Introduction
GPT-5.2 a été lancé comme modèle phare polyvalent, destiné aux tâches générales comme aux tâches agentiques. Par rapport à GPT-5.1, il a apporté des améliorations dans les domaines suivants :
- Intelligence générale
- Respect des instructions
- Précision et utilisation efficace des tokens
- Multimodalité, en particulier la vision
- Génération de code, en particulier la création d’interfaces utilisateur front-end
- Appel d’outils et gestion du contexte dans l’API
- Compréhension et création de feuilles de calcul
Contrairement au modèle précédent, GPT-5.1, GPT-5.2 dispose de nouvelles fonctionnalités pour gérer ce que le modèle « sait » et « retient », afin d’améliorer sa précision.
Ce guide présente les principales fonctionnalités de la famille de modèles GPT-5 et explique comment tirer le meilleur parti de GPT-5.2.
Explorez des exemples de programmation
Essayez quelques applications de démonstration générées entièrement à partir d’un seul prompt, sans écrire de code à la main. Ces exemples ont été générés par GPT-5.2 ou par notre précédent modèle phare, GPT-5.
Évolutions des modèles, de l’API et des fonctionnalités
La génération GPT-5.2 comprend gpt-5.2 pour les tâches complexes qui nécessitent de vastes connaissances sur le monde, gpt-5.2-chat-latest pour un comportement similaire à celui de ChatGPT et gpt-5.2-pro pour les problèmes qui bénéficient de ressources de calcul supplémentaires.
Pour un modèle plus petit, utilisez gpt-5-mini.
Pour choisir le modèle le mieux adapté à votre cas d’usage, tenez compte des compromis suivants :
| Variante | Idéal pour |
|---|---|
gpt-5.2 | Raisonnement complexe, vastes connaissances sur le monde et tâches agentiques nécessitant beaucoup de code ou plusieurs étapes |
gpt-5.2-pro | Problèmes difficiles qui peuvent prendre plus de temps à résoudre, mais nécessitent une réflexion plus poussée |
gpt-5.2-codex | Entreprises qui créent des produits de programmation interactifs ; ensemble des tâches de programmation |
gpt-5-mini | Raisonnement et discussion à coût optimisé ; équilibre entre vitesse, coût et capacités |
gpt-5-nano | Tâches à haut débit, en particulier l’exécution d’instructions ciblées ou la classification |
Nouvelles fonctionnalités de GPT-5.2
Comme GPT-5.1, le nouveau GPT-5.2 propose des fonctionnalités d’API telles que les outils personnalisés, des paramètres de contrôle de la verbosité et du raisonnement, ainsi qu’une liste d’outils autorisés. Les nouveautés de la version 5.2 comprennent un niveau d’effort de raisonnement xhigh, des résumés de raisonnement concis et une nouvelle gestion du contexte fondée sur le compactage.
Ce guide présente certaines des principales fonctionnalités de la famille de modèles GPT-5 et explique comment tirer le meilleur parti de la version 5.2 en particulier.
Pour les tâches de programmation, GPT-5.2-Codex est notre variante optimisée pour le code, destinée aux workflows agentiques dans Codex ou dans des environnements similaires.
Effort de raisonnement réduit
Le paramètre reasoning.effort contrôle le nombre de tokens de raisonnement que le modèle génère avant de produire une réponse. Les modèles de raisonnement antérieurs, comme o3, ne prenaient en charge que low, medium et high : low privilégiait la vitesse et un nombre réduit de tokens, tandis que high favorisait un raisonnement plus approfondi.
Avec GPT-5.2, le réglage le plus bas est none, pour des interactions à plus faible latence. Il s’agit du réglage par défaut de GPT-5.2. Si vous avez besoin d’une réflexion plus poussée, augmentez progressivement l’effort jusqu’à medium et évaluez les résultats.
Lorsque l’effort de raisonnement est réglé sur none, la conception des prompts est importante. Pour améliorer la qualité du raisonnement du modèle, même avec les réglages par défaut, encouragez-le à « réfléchir » ou à exposer les grandes étapes de sa démarche avant de répondre.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.2",
input="Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
reasoning={"effort": "none"},
)
print(response)Verbosité
La verbosité détermine le nombre de tokens générés en sortie. Réduire ce nombre diminue la latence globale. L’approche de raisonnement du modèle reste globalement la même, mais le modèle trouve des moyens de répondre de façon plus concise, ce qui peut améliorer ou réduire la qualité de la réponse selon votre cas d’usage. Voici quelques situations correspondant aux deux extrêmes du spectre de verbosité :
- Verbosité élevée : Utilisez ce réglage lorsque vous avez besoin que le modèle fournisse des explications détaillées sur des documents ou effectue une refactorisation importante du code.
- Verbosité faible : Idéale lorsque vous souhaitez des réponses concises ou une génération de code ciblée, par exemple des requêtes SQL.
GPT-5 a rendu cette option configurable avec les valeurs high, medium ou low. Avec GPT-5.2, la verbosité reste configurable et sa valeur par défaut est medium.
Lors de la génération de code avec GPT-5.2, les niveaux de verbosité medium et high produisent un code plus long et plus structuré, accompagné d’explications intégrées, tandis que le niveau low produit un code plus court et plus concis, avec un minimum de commentaires.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.2",
input="What is the answer to the ultimate question of life, the universe, and everything?",
text={"verbosity": "low"},
)
print(response)Vous pouvez toujours ajuster la verbosité à l’aide des prompts après l’avoir réglée sur low dans l’API. Le paramètre de verbosité définit une plage générale de tokens au niveau du prompt système, mais, dans cette plage, la sortie effective s’adapte aux prompts du développeur comme à ceux de l’utilisateur.
Utilisation des outils avec GPT-5.2
GPT-5.2 a été affiné pour utiliser des outils spécifiques. Consultez la documentation des outils pour des conseils plus détaillés.
L’outil d’application de patchs
L’outil apply_patch permet à GPT-5.2 de créer, de mettre à jour et de supprimer des fichiers dans votre base de code à l’aide de diffs structurés. Au lieu de simplement suggérer des modifications, le modèle génère des opérations de patch que votre application applique avant d’en communiquer les résultats au modèle. Cela permet des workflows de modification de code itératifs, en plusieurs étapes. Consultez la documentation.
Cette implémentation utilise un appel de fonction au format libre plutôt qu’un format JSON. Lors des tests, la fonction nommée a réduit de 35 % les taux d’échec de apply_patch.
Outil shell
Le shell local est pris en charge dans GPT-5.2. L’outil shell permet au modèle d’interagir avec votre ordinateur local par l’intermédiaire d’une interface en ligne de commande contrôlée. Consultez la documentation pour en savoir plus.
Outils personnalisés
Lors du lancement de la famille de modèles GPT-5, nous avons introduit une nouvelle fonctionnalité appelée outils personnalisés. Elle permet aux modèles d’envoyer n’importe quel texte brut en entrée d’un appel d’outil, tout en conservant la possibilité d’imposer des contraintes aux sorties. Ce fonctionnement reste le même dans GPT-5.2.
Découvrez les outils personnalisés dans le guide de l’appel de fonction.
Entrées au format libre
Définissez votre outil avec type: custom pour permettre aux modèles d’envoyer directement des entrées en texte brut à vos outils, sans se limiter au JSON structuré. Le modèle peut envoyer directement à votre outil n’importe quel texte brut : code, requêtes SQL, commandes shell, fichiers de configuration ou textes longs.
{
"type": "custom",
"name": "code_exec",
"description": "Executes arbitrary python code"
}
Contraintes sur les sorties
GPT-5.2 prend en charge les grammaires hors contexte (CFGs) pour les outils personnalisés. Vous pouvez ainsi fournir une grammaire Lark pour contraindre les sorties à respecter une syntaxe ou un DSL précis. Associer une CFG, par exemple une grammaire SQL ou DSL, garantit que le texte de l’assistant respecte votre grammaire.
Cela permet d’obtenir des appels d’outils précis soumis à des contraintes, ou des réponses structurées, et d’imposer des formats stricts, syntaxiques ou propres à un domaine, directement dans les appels de fonction de GPT-5.2. Vous gagnez ainsi en contrôle et en fiabilité dans les domaines complexes ou soumis à des contraintes.
Bonnes pratiques pour les outils personnalisés
- Rédigez des descriptions d’outils concises et explicites. Le modèle choisit les données à envoyer en fonction de votre description ; indiquez explicitement si vous souhaitez qu’il appelle systématiquement l’outil.
- Validez les sorties côté serveur. Les chaînes de texte libre offrent de nombreuses possibilités, mais nécessitent des protections contre les injections ou les commandes dangereuses.
Outils autorisés
Le paramètre allowed_tools de tool_choice vous permet de transmettre N définitions d’outils tout en limitant le modèle à seulement M (< N) d’entre eux. Répertoriez tous vos outils dans tools, puis utilisez un bloc allowed_tools pour désigner le sous-ensemble et préciser un mode : auto (le modèle peut choisir n’importe lequel de ces outils) ou required (le modèle doit en appeler un).
Découvrez l’option des outils autorisés dans le guide de l’appel de fonction.
En distinguant l’ensemble des outils possibles du sous-ensemble utilisable maintenant, vous améliorez la sécurité, la prévisibilité et la mise en cache des prompts. Vous évitez également de recourir à des techniques fragiles d’ingénierie de prompts, comme un ordre d’appel codé en dur. GPT-5.2 appelle dynamiquement certaines fonctions ou impose leur appel au cours de la conversation, tout en réduisant le risque d’utilisation involontaire d’outils dans les contextes longs.
| Outils standard | Outils autorisés | |
|---|---|---|
| Outils accessibles au modèle | Tous les outils répertoriés dans "tools": […] | Uniquement le sous-ensemble indiqué dans "tools": […] au sein de tool_choice |
| Appel d’outils | Le modèle peut appeler n’importe quel outil ou n’en appeler aucun | Le modèle est limité aux outils sélectionnés (ou tenu de les appeler) |
| Objectif | Déclarer les capacités disponibles | Limiter les capacités effectivement utilisées |
{
"tool_choice": {
"type": "allowed_tools",
"mode": "auto",
"tools": [
{ "type": "function", "name": "get_weather" },
{ "type": "function", "name": "search_docs" }
]
}
}
Pour une présentation plus détaillée de toutes ces nouvelles fonctionnalités, consultez le Cookbook associé.
Préambules
Les préambules sont de brèves explications visibles par l’utilisateur que GPT-5.2 génère avant d’appeler un outil ou une fonction pour présenter son intention ou son plan, par exemple : « pourquoi j’appelle cet outil ». Ils apparaissent après le raisonnement détaillé (« chain-of-thought ») et avant l’appel de l’outil, ce qui facilite la compréhension et le débogage du raisonnement du modèle tout en permettant de le guider avec précision.
En permettant à GPT-5.2 de « réfléchir à voix haute » avant chaque appel d’outil, les préambules améliorent la précision des appels d’outils (et la réussite globale des tâches) sans alourdir le coût du raisonnement. Pour activer les préambules, ajoutez une instruction système ou développeur, par exemple : « Avant d’appeler un outil, expliquez pourquoi vous l’appelez. » GPT-5.2 ajoute une justification concise à chaque appel d’outil spécifié. Le modèle peut également produire plusieurs messages entre les appels d’outils, ce qui peut améliorer l’expérience d’interaction, en particulier pour les cas d’utilisation nécessitant un raisonnement minimal ou sensibles à la latence.
Pour en savoir plus sur l’utilisation des préambules, consultez le Cookbook sur la conception de prompts pour GPT-5.
Guide de démarrage rapide pour la migration
GPT-5.2 donne les meilleurs résultats avec l’API Responses, qui permet de conserver le contexte de raisonnement d’un tour à l’autre. Les sections suivantes expliquent comment migrer depuis votre modèle ou API actuel.
Migration vers GPT-5.2 depuis d’autres modèles
Bien que ce modèle doive pouvoir remplacer GPT-5.1 presque sans modification, quelques changements majeurs sont à signaler. Consultez le guide de conception de prompts pour GPT-5.2 pour connaître les modifications précises à apporter à vos prompts.
L’utilisation des modèles GPT-5 avec l’API Responses améliore leur intelligence grâce à la conception de l’API. L’API Responses peut transmettre au modèle le CoT du tour précédent. Cela réduit le nombre de tokens de raisonnement générés, augmente le taux de succès du cache et diminue la latence. Pour en savoir plus, consultez le guide détaillé sur les avantages de l’API Responses.
Lorsque vous migrez vers GPT-5.2 depuis un ancien modèle OpenAI, commencez par tester différents niveaux de raisonnement et stratégies de conception de prompts. D’après nos tests, nous vous recommandons d’utiliser notre optimiseur de prompts, qui adapte automatiquement vos prompts à GPT-5.2 selon nos bonnes pratiques, et de suivre ces conseils propres à chaque modèle :
gpt-5.1:gpt-5.2avec les paramètres par défaut est conçu pour le remplacer sans autre modification.- o3 :
gpt-5.2avec un niveau de raisonnementmediumouhigh. Commencez par le niveaumediumen ajustant vos prompts, puis passez àhighsi vous n’obtenez pas les résultats souhaités. gpt-4.1:gpt-5.2avec un niveau de raisonnementnone. Commencez parnoneet ajustez vos prompts ; augmentez le niveau si vous avez besoin de meilleures performances.o4-miniougpt-4.1-mini:gpt-5-miniest une excellente solution de remplacement, moyennant un ajustement des prompts.gpt-4.1-nano:gpt-5-nanoest une excellente solution de remplacement, moyennant un ajustement des prompts.
Compatibilité des paramètres de GPT-5.2
Les paramètres suivants ne sont pris en charge que lorsque vous utilisez GPT-5.2 avec un effort de raisonnement défini sur none :
temperaturetop_plogprobs
Les requêtes incluant ces champs renvoient une erreur si elles sont adressées à GPT-5.2 ou GPT-5.1 avec un autre réglage de l’effort de raisonnement, ou à des modèles GPT-5 plus anciens, par exemple gpt-5, gpt-5-mini ou gpt-5-nano.
Pour obtenir des résultats similaires avec un effort de raisonnement plus élevé ou avec un autre modèle de la famille GPT-5, essayez ces paramètres alternatifs :
- Profondeur du raisonnement :
reasoning: { effort: "none" | "low" | "medium" | "high" | "xhigh" } - Verbosité de la sortie :
text: { verbosity: "low" | "medium" | "high" } - Longueur de la sortie :
max_output_tokens
Migration de Chat Completions vers l’API Responses
La principale différence, et la raison majeure de migrer de Chat Completions vers l’API Responses pour GPT-5.2, est la possibilité de transmettre le raisonnement détaillé (« chain-of-thought », CoT) d’un tour à l’autre. Consultez la comparaison complète des API.
Seule l’API Responses permet de transmettre le CoT. Nous avons constaté que cette transmission améliore l’intelligence, réduit le nombre de tokens de raisonnement générés, augmente le taux de succès du cache et diminue la latence. La plupart des autres paramètres restent équivalents, même si leur format diffère. Voici les différences de traitement des nouveaux paramètres entre Chat Completions et l’API Responses :
Effort de raisonnement
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.2",
"input": "How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
"reasoning": {
"effort": "none"
}
}'curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.2",
"messages": [
{
"role": "user",
"content": "How much gold would it take to coat the Statue of Liberty in a 1mm layer?"
}
],
"reasoning_effort": "none"
}'Verbosité
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.2",
"input": "What is the answer to the ultimate question of life, the universe, and everything?",
"text": {
"verbosity": "low"
}
}'curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.2",
"messages": [
{
"role": "user",
"content": "What is the answer to the ultimate question of life, the universe, and everything?"
}
],
"verbosity": "low"
}'Outils personnalisés
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.2",
"input": "Use the code_exec tool to calculate the area of a circle with radius equal to the number of r letters in blueberry",
"tools": [
{
"type": "custom",
"name": "code_exec",
"description": "Executes arbitrary Python code"
}
]
}'curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.2",
"messages": [
{
"role": "user",
"content": "Use the code_exec tool to calculate the area of a circle with radius equal to the number of r letters in blueberry"
}
],
"tools": [
{
"type": "custom",
"custom": {
"name": "code_exec",
"description": "Executes arbitrary Python code"
}
}
]
}'Bonnes pratiques de conception de prompts
2. Principales différences de comportement
Par rapport aux modèles de la génération précédente (par exemple GPT-5 et GPT-5.1), GPT-5.2 apporte les améliorations suivantes :
- Une structuration plus réfléchie : il élabore par défaut des plans et des étapes intermédiaires plus clairs ; des contraintes explicites sur le périmètre et la verbosité améliorent ses résultats.
- Une verbosité généralement réduite : il est plus concis et reste davantage centré sur la tâche, mais demeure sensible au prompt, qui doit préciser vos préférences.
- Un meilleur respect des instructions : il s’écarte moins de l’intention de l’utilisateur et améliore la mise en forme ainsi que la présentation des justifications.
- Des compromis dans l’efficacité d’utilisation des outils : il effectue davantage d’actions avec les outils que GPT-5.1 dans les workflows interactifs ; des ajustements du prompt permettent d’optimiser ce comportement.
- Une approche prudente de l’ancrage : il tend à privilégier l’exactitude et un raisonnement explicite ; les prompts de clarification l’aident à mieux gérer les ambiguïtés.
Ce guide explique comment concevoir des prompts pour tirer le meilleur parti des atouts de GPT-5.2, à savoir une intelligence, une exactitude, un ancrage et une rigueur accrus, tout en atténuant les inefficacités qui subsistent. Les recommandations de conception de prompts pour GPT-5 / GPT-5.1 restent largement applicables.
3. Techniques de conception de prompts
Intégrez les principes suivants à vos prompts en les adaptant à vos besoins pour mieux guider GPT-5.2
3.1 Maîtrise de la verbosité et du format de sortie
Définissez des contraintes de longueur claires et concrètes , en particulier pour les agents d’entreprise et de programmation.
Exemple de limites à adapter selon la verbosité souhaitée :
<output_verbosity_spec>
- Default: 3–6 sentences or ≤5 bullets for typical answers.
- For simple “yes/no + short explanation” questions: ≤2 sentences.
- For complex multi-step or multi-file tasks:
- 1 short overview paragraph
- then ≤5 bullets tagged: What changed, Where, Risks, Next steps, Open questions.
- Provide clear and structured responses that balance informativeness with conciseness. Break down the information into digestible chunks and use formatting like lists, paragraphs and tables when helpful.
- Avoid long narrative paragraphs; prefer compact bullets and short sections.
- Do not rephrase the user’s request unless it changes semantics.
</output_verbosity_spec>
3.2 Prévention des dérives de périmètre (par exemple, UX / design dans les tâches frontend)
GPT-5.2 produit du code mieux structuré, mais peut en générer davantage que ne l’exigent les spécifications UX minimales et les systèmes de design. Pour respecter le périmètre, interdisez explicitement l’ajout de fonctionnalités et les choix de style non encadrés.
<design_and_scope_constraints>
- Explore any existing design systems and understand it deeply.
- Implement EXACTLY and ONLY what the user requests.
- No extra features, no added components, no UX embellishments.
- Style aligned to the design system at hand.
- Do NOT invent colors, shadows, tokens, animations, or new UI elements, unless requested or necessary to the requirements.
- If any instruction is ambiguous, choose the simplest valid interpretation.
</design_and_scope_constraints>
Pour faire respecter le système de design, réutilisez votre bloc <design_system_enforcement> de 5.1, en ajoutant « aucune fonctionnalité supplémentaire » et « couleurs définies uniquement par les tokens de design » pour renforcer ces contraintes.
3.3 Contextes longs et rappel des informations
Pour les tâches à contexte long, il peut être utile d’inclure dans le prompt une consigne imposant un résumé et un nouvel ancrage dans le contexte. Cette technique réduit les erreurs dues aux informations perdues dans la masse et améliore le rappel des informations dans les contextes denses.
<long_context_handling>
- For inputs longer than ~10k tokens (multi-chapter docs, long threads, multiple PDFs):
- First, produce a short internal outline of the key sections relevant to the user’s request.
- Re-state the user’s constraints explicitly (e.g., jurisdiction, date range, product, team) before answering.
- In your answer, anchor claims to sections (“In the ‘Data Retention’ section…”) rather than speaking generically.
- If the answer depends on fine details (dates, thresholds, clauses), quote or paraphrase them.
</long_context_handling>
3.4 Gestion de l’ambiguïté et du risque d’hallucination
Adaptez le prompt pour limiter les hallucinations formulées avec trop d’assurance face à des requêtes ambiguës (par exemple, des exigences floues, des contraintes manquantes ou des questions nécessitant des données récentes sans qu’aucun outil ne soit appelé).
Prompt pour atténuer ce risque :
<uncertainty_and_ambiguity>
- If the question is ambiguous or underspecified, explicitly call this out and:
- Ask up to 1–3 precise clarifying questions, OR
- Present 2–3 plausible interpretations with clearly labeled assumptions.
- When external facts may have changed recently (prices, releases, policies) and no tools are available:
- Answer in general terms and state that details may have changed.
- Never fabricate exact figures, line numbers, or external references when you are uncertain.
- When you are unsure, prefer language like “Based on the provided context…” instead of absolute claims.
</uncertainty_and_ambiguity>
Vous pouvez aussi ajouter une brève étape d’autovérification pour les sorties à haut risque :
<high_risk_self_check>
Before finalizing an answer in legal, financial, compliance, or safety-sensitive contexts:
- Briefly re-scan your own answer for:
- Unstated assumptions,
- Specific numbers or claims not grounded in context,
- Overly strong language (“always,” “guaranteed,” etc.).
- If you find any, soften or qualify them and explicitly state assumptions.
</high_risk_self_check>
4. Compactage (extension du contexte utilisable)
Pour les workflows de longue durée qui sollicitent beaucoup les outils et dépassent la fenêtre de contexte standard, GPT-5.2 avec raisonnement prend en charge le compactage des réponses via le point de terminaison /responses/compact. Le compactage applique à l’état antérieur de la conversation une compression qui tient compte des pertes d’information. Il renvoie des éléments chiffrés et opaques qui préservent les informations utiles à la tâche tout en réduisant considérablement le nombre de tokens. Le modèle peut ainsi poursuivre son raisonnement au fil de workflows prolongés sans atteindre les limites du contexte.
Quand utiliser le compactage
- Workflows d’agents en plusieurs étapes avec de nombreux appels d’outils
- Longues conversations dont les échanges précédents doivent être conservés
- Raisonnement itératif au-delà de la taille maximale de la fenêtre de contexte
Principales caractéristiques
- Produit des éléments opaques et chiffrés (la logique interne peut évoluer)
- Conçu pour poursuivre la conversation, et non pour en inspecter le contenu
- Compatible avec GPT-5.2 et l’API Responses
- Peut être exécuté à plusieurs reprises sans risque au cours de longues sessions
Compactez une réponse
Point de terminaison
POST https://api.openai.com/v1/responses/compact
Fonctionnement
Applique un compactage à une conversation et renvoie un objet de réponse compacté. Transmettez la sortie compactée dans votre requête suivante pour poursuivre le workflow avec un contexte de taille réduite.
Bonnes pratiques
- Surveillez l’utilisation du contexte et anticipez pour éviter d’atteindre les limites de la fenêtre de contexte
- Effectuez un compactage après les étapes importantes (par exemple, les phases sollicitant beaucoup les outils), et non à chaque échange
- À la reprise, conservez des prompts fonctionnellement identiques pour éviter toute dérive du comportement
- Traitez les éléments compactés comme opaques ; n’analysez pas leur structure interne et ne vous appuyez pas sur ses détails
Pour savoir quand et comment effectuer un compactage en production, consultez le guide État de la conversation et la page Compactez une réponse.
Voici un exemple :
from openai import OpenAI
import json
client = OpenAI()
response = client.responses.create(
model="gpt-5.2",
input=[
{
"role": "user",
"content": "write a very long poem about a dog.",
},
],
)
output_json = [msg.model_dump() for msg in response.output]
# Now compact, passing the original user prompt and the assistant text as inputs
compacted_response = client.responses.compact(
model="gpt-5.2",
input=[
{
"role": "user",
"content": "write a very long poem about a dog.",
},
output_json[0],
],
)
print(json.dumps(compacted_response.model_dump(), indent=2))5. Pilotage des agents et messages d’avancement
Avec des prompts bien conçus, GPT-5.2 excelle dans la structuration des tâches agentiques et l’exécution en plusieurs étapes. Vous pouvez réutiliser vos blocs <user_updates_spec> et <solution_persistence> de GPT-5.1.
Deux ajustements clés pourraient encore améliorer les performances de GPT-5.2 :
- Limitez la verbosité des messages d’avancement pour les rendre plus courts et plus ciblés.
- Exigez explicitement le respect du périmètre (sans élargir le problème à traiter).
Exemple de spécification mise à jour :
<user_updates_spec>
- Send brief updates (1–2 sentences) only when:
- You start a new major phase of work, or
- You discover something that changes the plan.
- Avoid narrating routine tool calls (“reading file…”, “running tests…”).
- Each update must include at least one concrete outcome (“Found X”, “Confirmed Y”, “Updated Z”).
- Do not expand the task beyond what the user asked; if you notice new work, call it out as optional.
</user_updates_spec>
6. Appels d’outils et parallélisme
GPT-5.2 améliore la fiabilité et la structuration des appels d’outils par rapport à 5.1, particulièrement dans les environnements de type MCP/Atlas. Les bonnes pratiques de GPT-5 / 5.1 restent applicables :
- Décrivez les outils de façon concise : une à deux phrases pour expliquer leur rôle et quand les utiliser.
- Encouragez explicitement le parallélisme pour l’exploration de bases de code ou de bases de données vectorielles, ainsi que pour les opérations portant sur plusieurs entités.
- Exigez des étapes de vérification pour les opérations aux conséquences importantes (commandes, facturation, modifications de l’infrastructure).
Exemple de section sur l’utilisation des outils :
<tool_usage_rules>
- Prefer tools over internal knowledge whenever:
- You need fresh or user-specific data (tickets, orders, configs, logs).
- You reference specific IDs, URLs, or document titles.
- Parallelize independent reads (read_file, fetch_record, search_docs) when possible to reduce latency.
- After any write/update tool call, briefly restate:
- What changed,
- Where (ID or path),
- Any follow-up validation performed.
</tool_usage_rules>
7. Extraction structurée et workflows PDF et Office
C’est un domaine dans lequel GPT-5.2 affiche des progrès particulièrement nets. Pour en tirer le meilleur parti :
- Fournissez toujours un schéma ou une structure JSON pour la sortie. Vous pouvez utiliser les sorties structurées pour garantir le respect strict du schéma.
- Distinguez les champs obligatoires des champs facultatifs.
- Demandez une « extraction exhaustive » et traitez explicitement les champs manquants.
Exemple :
<extraction_spec>
You will extract structured data from tables/PDFs/emails into JSON.
- Always follow this schema exactly (no extra fields):
{
"party_name": string,
"jurisdiction": string | null,
"effective_date": string | null,
"termination_clause_summary": string | null
}
- If a field is not present in the source, set it to null rather than guessing.
- Before returning, quickly re-scan the source for any missed fields and correct omissions.
</extraction_spec>
Pour une extraction portant sur plusieurs tableaux ou fichiers, ajoutez les consignes suivantes :
- Sérialisez séparément les résultats de chaque document.
- Incluez un identifiant stable (nom de fichier, titre du contrat, plage de pages).
8. Guide de migration des prompts vers GPT-5.2
Cette section vous aide à migrer vos prompts et vos configurations de modèle vers GPT-5.2 tout en conservant un comportement stable et des coûts et une latence prévisibles. Les modèles de la famille GPT-5 proposent un paramètre reasoning_effort (par exemple, none|minimal|low|medium|high|xhigh) qui permet d’arbitrer entre vitesse, coût et profondeur du raisonnement.
Correspondances de migration Utilisez les correspondances par défaut suivantes lors du passage à GPT-5.2
| Modèle actuel | Modèle cible | Valeur cible de reasoning_effort | Remarques |
|---|---|---|---|
| GPT-4o | GPT-5.2 | none | Pour les migrations depuis 4o/4.1, privilégiez par défaut la rapidité et un raisonnement limité ; n’augmentez l’effort que si les résultats des évaluations se dégradent. |
| GPT-4.1 | GPT-5.2 | none | Même correspondance que pour GPT-4o afin de préserver la réactivité. |
| GPT-5 | GPT-5.2 | même valeur, sauf minimal → none | Conservez none/low/medium/high pour maintenir un profil de latence et de qualité cohérent. |
| GPT-5.1 | GPT-5.2 | même valeur | Conservez le niveau d’effort sélectionné ; ne l’ajustez qu’après avoir exécuté les évaluations. |
*Notez que le niveau de raisonnement par défaut est medium pour GPT-5 et none pour GPT-5.1 et GPT-5.2.
Nous avons intégré l’Optimiseur de prompts au Playground pour aider les utilisateurs à améliorer rapidement leurs prompts existants et à les migrer entre GPT-5 et d’autres modèles OpenAI. Voici les étapes générales pour migrer vers un nouveau modèle :
- Étape 1 : Changez de modèle sans modifier les prompts pour le moment. Conservez un prompt fonctionnellement identique afin de tester le changement de modèle, et non les modifications du prompt. Effectuez un seul changement à la fois.
- Étape 2 : Fixez la valeur de reasoning_effort. Définissez explicitement reasoning_effort pour GPT-5.2 afin de retrouver le profil de latence et de profondeur de raisonnement du modèle précédent (évitez les pièges des réglages de « réflexion » par défaut du fournisseur, qui faussent les coûts, la verbosité et la structure).
- Étape 3 : Exécutez des évaluations pour établir une référence. Une fois le modèle et l’effort de raisonnement alignés, exécutez votre suite d’évaluations. Si les résultats sont satisfaisants (ils sont souvent meilleurs avec med/high), vous pouvez passer en production.
- Étape 4 : En cas de régression, ajustez le prompt. Utilisez l’Optimiseur de prompts et des contraintes ciblées (verbosité, format, schéma, respect du périmètre) pour retrouver les performances précédentes ou les améliorer.
- Étape 5 : Relancez les évaluations après chaque petite modification. Procédez par itérations en augmentant reasoning_effort d’un cran ou en ajustant progressivement le prompt, puis mesurez à nouveau les résultats.
9. Recherche web et travaux de recherche
GPT-5.2 est plus facile à guider et plus performant pour synthétiser des informations issues de nombreuses sources.
Bonnes pratiques à suivre :
-
Précisez dès le départ le niveau d’exigence de la recherche : indiquez au modèle comment mener ses recherches, notamment s’il doit explorer les pistes découvertes dans les premières sources, résoudre les contradictions et citer ses sources. Définissez explicitement jusqu’où aller, par exemple en demandant de poursuivre les recherches tant que leur apport reste significatif.
-
Encadrez l’ambiguïté par des consignes plutôt que par des questions : demandez au modèle de traiter de manière exhaustive toutes les intentions plausibles sans poser de questions de clarification. En cas d’incertitude, exigez un traitement à la fois large et approfondi.
-
Définissez la forme et le ton de la sortie : précisez vos attentes en matière de structure (Markdown, titres, tableaux comparatifs), de clarté (définition des acronymes, exemples concrets) et de style (conversationnel, adapté au profil de l’interlocuteur, sans complaisance excessive)
<web_search_rules>
- Act as an expert research assistant; default to comprehensive, well-structured answers.
- Prefer web research over assumptions whenever facts may be uncertain or incomplete; include citations for all web-derived information.
- Research all parts of the query, resolve contradictions, and follow important second-order implications until further research is unlikely to change the answer.
- Do not ask clarifying questions; instead cover all plausible user intents with both breadth and depth.
- Write clearly and directly using Markdown (headers, bullets, tables when helpful); define acronyms, use concrete examples, and keep a natural, conversational tone.
</web_search_rules>
10. Conclusion
GPT-5.2 constitue une avancée significative pour les équipes qui créent des agents destinés à la production et privilégient la précision, la fiabilité et la rigueur d’exécution. Il suit mieux les instructions, produit des sorties plus soignées et se comporte de façon plus cohérente dans les workflows complexes qui font largement appel aux outils. La plupart des prompts existants se migrent sans difficulté, en particulier lorsque l’effort de raisonnement, la verbosité et les contraintes de périmètre sont conservés lors de la transition initiale. Les équipes devraient s’appuyer sur des évaluations pour valider le comportement avant de modifier les prompts, et n’ajuster l’effort de raisonnement ou les contraintes qu’en cas de régression. Avec des prompts explicites et des itérations dont les résultats sont mesurés, GPT-5.2 peut produire de meilleurs résultats tout en maintenant des coûts et une latence prévisibles.
Annexe
Exemple de prompt pour un agent de recherche web :
You are a helpful, warm web research agent. Your job is to deeply and thoroughly research the web and provide long, detailed, comprehensive, well written, and well structured answers grounded in reliable sources. Your answers should be engaging, informative, concrete, and approachable. You MUST adhere perfectly to the guidelines below.
############################################
CORE MISSION
############################################
Answer the user’s question fully and helpfully, with enough evidence that a skeptical reader can trust it.
Never invent facts. If you can’t verify something, say so clearly and explain what you did find.
Default to being detailed and useful rather than short, unless the user explicitly asks for brevity.
Go one step further: after answering the direct question, add high-value adjacent material that supports the user’s underlying goal without drifting off-topic. Don’t just state conclusions—add an explanatory layer. When a claim matters, explain the underlying mechanism/causal chain (what causes it, what it affects, what usually gets misunderstood) in plain language.
############################################
PERSONA
############################################
You are the world’s greatest research assistant.
Engage warmly, enthusiastically, and honestly, while avoiding any ungrounded or sycophantic flattery.
Adopt whatever persona the user asks you to take.
Default tone: natural, conversational, and playful rather than formal or robotic, unless the subject matter requires seriousness.
Match the vibe of the request: for casual conversation lean supportive; for work/task-focused requests lean straightforward and helpful.
############################################
FACTUALITY AND ACCURACY (NON-NEGOTIABLE)
############################################
You MUST browse the web and include citations for all non-creative queries, unless:
The user explicitly tells you not to browse, OR
The request is purely creative and you are absolutely sure web research is unnecessary (example: “write a poem about flowers”).
If you are on the fence about whether browsing would help, you MUST browse.
You MUST browse for:
“Latest/current/today” or time-sensitive topics (news, politics, sports, prices, laws, schedules, product specs, rankings/records, office-holders).
Up-to-date or niche topics where details may have changed recently (weather, exchange rates, economic indicators, standards/regulations, software libraries that could be updated, scientific developments, cultural trends, recent media/entertainment developments).
Travel and trip planning (destinations, venues, logistics, hours, closures, booking constraints, safety changes).
Recommendations of any kind (because what exists, what’s good, what’s open, and what’s safe can change).
Generic/high-level topics (example: “what is an AI agent?” or “openai”) to ensure accuracy and current framing.
Navigational queries (finding a resource, site, official page, doc, definition, source-of-truth reference, etc.).
Any query containing a term you’re unsure about, suspect is a typo, or has ambiguous meaning.
For news queries, prioritize more recent events, and explicitly compare:
The publish date of each source, AND
The date the event happened (if different).
############################################
CITATIONS (REQUIRED)
############################################
When you use web info, you MUST include citations.
Place citations after each paragraph (or after a tight block of closely related sentences) that contains non-obvious web-derived claims.
Do not invent citations. If the user asked you not to browse, do not cite web sources.
Use multiple sources for key claims when possible, prioritizing primary sources and high-quality outlets.
############################################
HOW YOU RESEARCH
############################################
You must conduct deep research in order to provide a comprehensive and off-the-charts informative answer. Provide as much color around your answer as possible, and aim to surprise and delight the user with your effort, attention to detail, and nonobvious insights.
Start with multiple targeted searches. Use parallel searches when helpful. Do not ever rely on a single query.
Deeply and thoroughly research until you have sufficient information to give an accurate, comprehensive answer with strong supporting detail.
Begin broad enough to capture the main answer and the most likely interpretations.
Add targeted follow-up searches to fill gaps, resolve disagreements, or confirm the most important claims.
If the topic is time-sensitive, explicitly check for recent updates.
If the query implies comparisons, options, or recommendations, gather enough coverage to make the tradeoffs clear (not just a single source).
Keep iterating until additional searching is unlikely to materially change the answer or add meaningful missing detail.
If evidence is thin, keep searching rather than guessing.
If a source is a PDF and details depend on figures/tables, use PDF viewing/screenshot rather than guessing.
Only stop when all are true:
You answered the user’s actual question and every subpart.
You found concrete examples and high-value adjacent material.
You found sufficient sources for core claims
############################################
WRITING GUIDELINES
############################################
Be direct: Start answering immediately.
Be comprehensive: Answer every part of the user’s query. Your answer should be very detailed and long unless the user request is extremely simplistic. If your response is long, include a short summary at the top.
Use simple language: full sentences, short words, concrete verbs, active voice, one main idea per sentence.
Avoid jargon or esoteric language unless the conversation unambiguously indicates the user is an expert.
Use readable formatting:
Use Markdown unless the user specifies otherwise.
Use plain-text section labels and bullets for scannability.
Use tables when the reader’s job is to compare or choose among options (when multiple items share attributes and a grid makes differences pop faster than prose).
Do NOT add potential follow-up questions or clarifying questions at the beginning or end of the response unless the user has explicitly asked for them.
############################################
REQUIRED “VALUE-ADD” BEHAVIOR (DETAIL/RICHNESS)
############################################
Concrete examples: You MUST provide concrete examples whenever helpful (named entities, mechanisms, case examples, specific numbers/dates, “how it works” detail). For queries that ask you to explain a topic, you can also occasionally include an analogy if it helps.
Do not be overly brief by default: even for straightforward questions, your response should include relevant, well-sourced material that makes the answer more useful (context, background, implications, notable details, comparisons, practical takeaways).
In general, provide additional well-researched material whenever it clearly helps the user’s goal.
Before you finalize, do a quick completeness pass:
1. Did I answer every subpart
2. Did each major section include explanation + at least one concrete detail/example when possible
3. Did I include tradeoffs/decision criteria where relevant
############################################
HANDLING AMBIGUITY (WITHOUT ASKING QUESTIONS)
############################################
Never ask clarifying or follow-up questions unless the user explicitly asks you to.
If the query is ambiguous, state your best-guess interpretation plainly, then comprehensively cover the most likely intent. If there are multiple most likely intents, then comprehensively cover each one (in this case you will end up needing to provide a full, long answer for each intent interpretation), rather than asking questions.
############################################
IF YOU CANNOT FULLY COMPLY WITH A REQUEST
############################################
Do not lead with a blunt refusal if you can safely provide something helpful immediately.
First deliver what you can (safe partial answers, verified material, or a closely related helpful alternative), then clearly state any limitations (policy limits, missing/behind-paywall data, unverifiable claims).
If something cannot be verified, say so plainly, explain what you did verify, what remains unknown, and the best next step to resolve it (without asking the user a question).
Pour aller plus loin
Guide de conception de prompts pour GPT-5.2-Codex
Guide du développement frontend avec GPT-5
Famille de modèles GPT-5 : guide des nouvelles fonctionnalités
Utiliser GPT-5.1
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5.1.
Introduction
GPT-5.1 est conçu pour allier intelligence et rapidité dans diverses tâches agentiques et de programmation. Il introduit également un nouveau mode de raisonnement none pour les interactions à faible latence. Fort des atouts de GPT-5, GPT-5.1 s’adapte mieux à la difficulté des prompts : il consomme beaucoup moins de tokens pour les entrées simples et traite plus efficacement les entrées complexes. GPT-5.1 offre aussi un contrôle plus précis de la personnalité, du ton et de la mise en forme des réponses.
GPT-5.1 fonctionne bien sans réglages particuliers pour la plupart des applications. Ce guide présente toutefois des méthodes de conception de prompts qui maximisent les performances en conditions réelles. Ces techniques sont issues de tests internes approfondis et de collaborations avec des partenaires qui développent des agents en production, où de petits ajustements des prompts apportent souvent des gains importants en fiabilité et en expérience utilisateur. Ce guide se veut un point de départ : la conception de prompts est un processus itératif, et vous obtiendrez les meilleurs résultats en adaptant ces méthodes à vos outils et workflows.
Nouveautés
- Nouveau mode de raisonnement
nonepour les interactions à faible latence - Consommation de tokens de raisonnement mieux adaptée aux entrées simples comme aux entrées complexes
- Contrôle plus précis de la personnalité, du ton et de la mise en forme des réponses
- Conseils sur les outils d’application de patchs et de shell pour les agents de programmation
Guide de migration rapide
Pour les développeurs qui utilisent GPT-4.1, GPT-5.1 avec un effort de raisonnement réglé sur none devrait convenir naturellement à la plupart des cas d’utilisation à faible latence qui ne nécessitent pas de raisonnement.
Pour les développeurs qui utilisent GPT-5, nous avons constaté de très bons résultats chez les clients qui suivent quelques recommandations clés :
- Persévérance : GPT-5.1 ajuste désormais mieux sa consommation de tokens de raisonnement, mais peut parfois se montrer trop concis, au détriment de l’exhaustivité de la réponse. Il peut être utile de souligner dans les prompts l’importance de persévérer et de fournir des réponses complètes.
- Mise en forme et verbosité des réponses : GPT-5.1 fournit globalement plus de détails, mais peut parfois être trop verbeux. Il est donc utile de préciser explicitement dans vos instructions le niveau de détail souhaité.
- Agents de programmation : Si vous développez un agent de programmation, migrez votre outil
apply_patchvers notre nouvelle implémentation nommée. - Respect des instructions : Pour les autres problèmes de comportement, GPT-5.1 excelle dans le respect des instructions. Vous devriez pouvoir ajuster considérablement son comportement en vérifiant que vos instructions ne se contredisent pas et en les formulant clairement.
Nous avons également lancé GPT-5.1-Codex. Ce modèle se comporte différemment de GPT-5.1 ; consultez le guide de conception de prompts pour Codex pour en savoir plus. Pour des conseils sur un modèle Codex plus récent dans l’API, consultez Utiliser GPT-5.3 Codex.
Mises à jour du modèle, de l’API et des fonctionnalités
gpt-5.1est disponible dans l’API Responses et l’API Chat Completions.reasoning.effortaccepte les valeursnone(par défaut),low,mediumethigh.- Le modèle prend en charge l’appel de fonction et les outils hébergés par OpenAI, notamment la recherche web, la recherche de fichiers, la génération d’images, l’interpréteur de code et l’application de patchs.
- Les variantes GPT-5.1-Codex sont optimisées séparément pour les workflows de programmation agentique.
Bonnes pratiques de conception de prompts
Contrôle du comportement des agents
GPT-5.1 est un modèle dont le comportement se prête à des ajustements précis, ce qui permet de contrôler efficacement les comportements, la personnalité et la fréquence de communication de votre agent.
Définir la personnalité de votre agent
La personnalité et le style de réponse de GPT-5.1 peuvent être adaptés à votre cas d’utilisation. La verbosité se règle à l’aide du paramètre dédié verbosity, mais vous pouvez aussi ajuster le style général, le ton et le rythme des réponses par vos prompts.
Nous avons constaté que la personnalité et le style donnent les meilleurs résultats lorsque vous définissez clairement le personnage incarné par l’agent. C’est particulièrement important pour les agents en contact avec les clients, qui doivent faire preuve d’intelligence émotionnelle pour s’adapter à des situations et à des échanges variés. En pratique, cela peut consister à ajuster la chaleur du ton et la concision à l’état de la conversation, et à éviter de multiplier les formules comme « compris » ou « merci ».
L’exemple de prompt ci-dessous montre comment nous avons défini la personnalité d’un agent d’assistance client, en cherchant le bon équilibre entre un ton direct et chaleureux pour résoudre un problème.
<final_answer_formatting>
You value clarity, momentum, and respect measured by usefulness rather than pleasantries. Your default instinct is to keep conversations crisp and purpose-driven, trimming anything that doesn't move the work forward. You're not cold—you're simply economy-minded with language, and you trust users enough not to wrap every message in padding.
- Adaptive politeness:
- When a user is warm, detailed, considerate or says 'thank you', you offer a single, succinct acknowledgment—a small nod to their tone with acknowledgement or receipt tokens like 'Got it', 'I understand', 'You're welcome'—then shift immediately back to productive action. Don't be cheesy about it though, or overly supportive.
- When stakes are high (deadlines, compliance issues, urgent logistics), you drop even that small nod and move straight into solving or collecting the necessary information.
- Core inclination:
- You speak with grounded directness. You trust that the most respectful thing you can offer is efficiency: solving the problem cleanly without excess chatter.
- Politeness shows up through structure, precision, and responsiveness, not through verbal fluff.
- Relationship to acknowledgement and receipt tokens:
- You treat acknowledge and receipt as optional seasoning, not the meal. If the user is brisk or minimal, you match that rhythm with near-zero acknowledgments.
- You avoid stock acknowledgments like "Got it" or "Thanks for checking in" unless the user's tone or pacing naturally invites a brief, proportional response.
- Conversational rhythm:
- You never repeat acknowledgments. Once you've signaled understanding, you pivot fully to the task.
- You listen closely to the user's energy and respond at that tempo: fast when they're fast, more spacious when they're verbose, always anchored in actionability.
- Underlying principle:
- Your communication philosophy is "respect through momentum." You're warm in intention but concise in expression, focusing every message on helping the user progress with as little friction as possible.
</final_answer_formatting>
Dans le prompt ci-dessous, nous avons inclus des sections qui imposent à un agent de programmation des réponses courtes pour les petites modifications et plus longues pour les demandes détaillées. Nous précisons également la quantité de code autorisée dans la réponse finale afin d’éviter les gros blocs.
<final_answer_formatting>
- Final answer compactness rules (enforced):
- Tiny/small single-file change (≤ ~10 lines): 2–5 sentences or ≤3 bullets. No headings. 0–1 short snippet (≤3 lines) only if essential.
- Medium change (single area or a few files): ≤6 bullets or 6–10 sentences. At most 1–2 short snippets total (≤8 lines each).
- Large/multi-file change: Summarize per file with 1–2 bullets; avoid inlining code unless critical (still ≤2 short snippets total).
- Never include "before/after" pairs, full method bodies, or large/scrolling code blocks in the final message. Prefer referencing file/symbol names instead.
- Do not include process/tooling narration (e.g., build/lint/test attempts, missing yarn/tsc/eslint) unless explicitly requested by the user or it blocks the change. If checks succeed silently, don't mention them.
- Code and formatting restraint — Use monospace for literal keyword bullets; never combine with **.
- No build/lint/test logs or environment/tooling availability notes unless requested or blocking.
- No multi-section recaps for simple changes; stick to What/Where/Outcome and stop.
- No multiple code fences or long excerpts; prefer references.
- Citing code when it illustrates better than words — Prefer natural-language references (file/symbol/function) over code fences in the final answer. Only include a snippet when essential to disambiguate, and keep it within the snippet budget above.
- Citing code that is in the codebase:
* If you must include an in-repo snippet, you may use the repository citation form, but in final answers avoid line-number/filepath prefixes and large context. Do not include more than 1–2 short snippets total.
</final_answer_formatting>
Vous pouvez raccourcir les réponses trop longues en ajustant le paramètre verbosity, puis les réduire davantage à l’aide de prompts, car GPT-5.1 respecte bien les consignes de longueur précises :
<output_verbosity_spec>
- Respond in plain text styled in Markdown, using at most 2 concise sentences.
- Lead with what you did (or found) and context only if needed.
- For code, reference file paths and show code blocks only if necessary to clarify the change or review.
</output_verbosity_spec>
Obtenir des points d’avancement pour l’utilisateur
Les points d’avancement destinés à l’utilisateur, aussi appelés préambules, permettent à GPT-5.1 de présenter ses plans dès le départ et de communiquer régulièrement sa progression sous forme de messages de l’assistant au cours d’une exécution. Ces points d’avancement peuvent être ajustés selon quatre axes principaux : la fréquence, la verbosité, le ton et le contenu. Nous avons entraîné le modèle à tenir efficacement l’utilisateur informé de ses plans, de ses principales découvertes et décisions, ainsi que du détail de ses actions et de leurs raisons. Ces messages aident l’utilisateur à mieux superviser les exécutions agentiques, dans les tâches de programmation comme dans les autres domaines.
Lorsqu’il intervient au bon moment, le modèle peut partager sa compréhension de la situation en fonction de l’état actuel de l’exécution. Dans l’ajout au prompt ci-dessous, nous définissons les types de préambules qui seraient utiles et ceux qui ne le seraient pas.
<user_updates_spec>
You'll work for stretches with tool calls — it's critical to keep the user updated as you work.
<frequency_and_length>
- Send short updates (1–2 sentences) every few tool calls when there are meaningful changes.
- Post an update at least every 6 execution steps or 8 tool calls (whichever comes first).
- If you expect a longer heads‑down stretch, post a brief heads‑down note with why and when you’ll report back; when you resume, summarize what you learned.
- Only the initial plan, plan updates, and final recap can be longer, with multiple bullets and paragraphs
</frequency_and_length>
<content>
- Before the first tool call, give a quick plan with goal, constraints, next steps.
- While you're exploring, call out meaningful new information and discoveries that you find that helps the user understand what's happening and how you're approaching the solution.
- Provide additional brief lower-level context about more granular updates
- Always state at least one concrete outcome since the prior update (e.g., “found X”, “confirmed Y”), not just next steps.
- If a longer run occurred (>6 steps or >8 tool calls), start the next update with a 1–2 sentence synthesis and a brief justification for the heads‑down stretch.
- End with a brief recap and any follow-up steps.
- Do not commit to optional checks (type/build/tests/UI verification/repo-wide audits) unless you will do them in-session. If you mention one, either perform it (no logs unless blocking) or explicitly close it with a brief reason.
- If you change the plan (e.g., choose an inline tweak instead of a promised helper), say so explicitly in the next update or the recap.
- In the recap, include a brief checklist of the planned items with status: Done or Closed (with reason). Do not leave any stated item unaddressed.
</content>
</user_updates_spec>
Lors des exécutions de longue durée, un premier message rapide de l’assistant peut réduire la latence perçue et améliorer l’expérience utilisateur. Des prompts clairs permettent d’obtenir ce comportement avec GPT-5.1.
<user_update_immediacy>
Always explain what you're doing in a commentary message FIRST, BEFORE sampling an analysis thinking message. This is critical in order to communicate immediately to the user.
</user_update_immediacy>
Optimiser l’intelligence et le respect des instructions
GPT-5.1 prête une attention particulière aux instructions que vous fournissez, notamment aux consignes sur l’utilisation des outils, le parallélisme et l’exhaustivité des solutions.
Encourager des solutions complètes
Sur les tâches agentiques de longue durée, nous avons remarqué que GPT-5.1 peut s’arrêter prématurément sans parvenir à une solution complète. Nous avons toutefois constaté que les prompts permettent de corriger ce comportement. Dans l’instruction suivante, nous demandons au modèle d’éviter les arrêts prématurés et les questions de suivi inutiles.
<solution_persistence>
- Treat yourself as an autonomous senior pair-programmer: once the user gives a direction, proactively gather context, plan, implement, test, and refine without waiting for additional prompts at each step.
- Persist until the task is fully handled end-to-end within the current turn whenever feasible: do not stop at analysis or partial fixes; carry changes through implementation, verification, and a clear explanation of outcomes unless the user explicitly pauses or redirects you.
- Be extremely biased for action. If a user provides a directive that is somewhat ambiguous on intent, assume you should go ahead and make the change. If the user asks a question like "should we do x?" and your answer is "yes", you should also go ahead and perform the action. It's very bad to leave the user hanging and require them to follow up with a request to "please do it."
</solution_persistence>
Format des appels d’outils
Pour rendre les appels d’outils aussi efficaces que possible, nous recommandons de décrire les fonctionnalités dans la définition de l’outil et de préciser dans le prompt comment et quand utiliser les outils. Dans l’exemple ci-dessous, nous définissons un outil qui effectue une réservation au restaurant et décrivons brièvement ce qu’il fait lorsqu’il est appelé.
{
"name": "create_reservation",
"description": "Create a restaurant reservation for a guest. Use when the user asks to book a table with a given name and time.",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Guest full name for the reservation."
},
"datetime": {
"type": "string",
"description": "Reservation date and time (ISO 8601 format)."
}
},
"required": ["name", "datetime"]
}
}
Votre prompt peut contenir une section qui fait référence à l’outil de cette façon :
<reservation_tool_usage_rules>
- When the user asks to book, reserve, or schedule a table, you MUST call `create_reservation`.
- Do NOT guess a reservation time or name — ask for whichever detail is missing.
- If the user has not provided a name, ask: “What name should I put on the reservation?”
- If the user has not provided a date/time, ask: “What date and time would you like to reserve?”
- After calling the tool, confirm the reservation naturally: “Your reservation is confirmed for [name] on [date/time].”
</tool_usage_rules>
<reservation_tool_example>
*Example 1:*
User: “Book a table for Sarah tomorrow at 7pm.”
Assistant → (calls tool) →
`{"name": "create_reservation", "arguments": { "name": "Sarah", "datetime": "2025-11-01T19:00" } }`
Tool returns: `{ "confirmation_number": "R12345" }`
Assistant: “All set — your reservation for Sarah tomorrow at 7:00pm is confirmed. Your confirmation number is R12345.”
**Example 2:**
User: “I want to make a reservation.”
Assistant: “Sure! What name should I put on the reservation, and what date and time would you like?”
*Example 3:*
User: “Reserve a table under Daniel at 6 tonight.”
Assistant → (calls tool) →
`{"name": "create_reservation", "arguments": { "name": "Daniel", "datetime": "2025-10-31T18:00" } }`
Tool returns: `{ "confirmation_number": "R67890" }`
Assistant: “Done! Your reservation for Daniel at 6:00pm tonight is confirmed. The confirmation number is R67890.”
</reservation_tool_example>
GPT-5.1 exécute également les appels d’outils en parallèle plus efficacement. Pour parcourir une base de code ou rechercher des informations dans un magasin vectoriel, un bon point de départ consiste à activer les appels d’outils en parallèle et à encourager leur utilisation dans la description de l’outil. Vous pouvez renforcer cette consigne dans le prompt système en donnant quelques exemples de parallélisme autorisé. Voici un exemple d’instruction :
Parallelize tool calls whenever possible. Batch reads (read_file) and edits (apply_patch) to speed up the process.
Utiliser le mode de raisonnement « none » pour gagner en efficacité
GPT-5.1 introduit un nouveau mode de raisonnement : none. Contrairement à l’ancien réglage minimal de GPT-5, none impose au modèle de ne jamais utiliser de tokens de raisonnement, ce qui rapproche nettement son utilisation de celle de GPT-4.1, de GPT-4o et des autres modèles antérieurs sans raisonnement. Les développeurs peuvent désormais utiliser des outils hébergés comme la recherche web et la recherche de fichiers avec none, et les performances des appels de fonctions personnalisées sont également nettement améliorées. Les conseils précédents sur la conception de prompts pour les modèles sans raisonnement, tels que GPT-4.1, s’appliquent donc aussi ici, notamment l’utilisation de prompts few-shot et de descriptions d’outils de qualité.
Bien que GPT-5.1 n’utilise pas de tokens de raisonnement avec none, nous avons constaté que lui demander de réfléchir soigneusement aux fonctions qu’il prévoit d’appeler peut améliorer la précision.
You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls, ensuring user's query is completely resolved. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully. In addition, ensure function calls have the correct arguments.
Nous avons également observé que, lors des exécutions de longue durée, encourager le modèle à « vérifier » ses réponses améliore le respect des instructions relatives à l’utilisation des outils. Voici un exemple que nous avons intégré aux instructions pour préciser l’utilisation d’un outil.
When selecting a replacement variant, verify it meets all user constraints (cheapest, brand, spec, etc.). Quote the item-id and price back for confirmation before executing.
Lors de nos tests, l’ancien mode de raisonnement minimal de GPT-5 entraînait parfois des arrêts prématurés. Bien que d’autres modes de raisonnement puissent mieux convenir à ces tâches, nos recommandations pour GPT-5.1 avec none sont similaires. Voici un extrait de notre prompt Tau bench.
Remember, you are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. You must be prepared to answer multiple queries and only finish the call once the user has confirmed they're done.
Maximiser les performances en programmation, de la planification à l’exécution
Pour les tâches de longue durée, nous recommandons de mettre en place un outil de planification. Vous avez peut-être remarqué que les modèles de raisonnement élaborent des plans dans leurs résumés de raisonnement. Bien que cela soit utile sur le moment, il peut être difficile de suivre où en est le modèle dans le traitement de la demande.
<plan_tool_usage>
- For medium or larger tasks (e.g., multi-file changes, adding endpoints/CLI/features, or multi-step investigations), you must create and maintain a lightweight plan in the TODO/plan tool before your first code/tool action.
- Create 2–5 milestone/outcome items; avoid micro-steps and repetitive operational tasks (no “open file”, “run tests”, or similar operational steps). Never use a single catch-all item like “implement the entire feature”.
- Maintain statuses in the tool: exactly one item in_progress at a time; mark items complete when done; post timely status transitions (never more than ~8 tool calls without an update). Do not jump an item from pending to completed: always set it to in_progress first (if work is truly instantaneous, you may set in_progress and completed in the same update). Do not batch-complete multiple items after the fact.
- Finish with all items completed or explicitly canceled/deferred before ending the turn.
- End-of-turn invariant: zero in_progress and zero pending; complete or explicitly cancel/defer anything remaining with a brief reason.
- If you present a plan in chat for a medium/complex task, mirror it into the tool and reference those items in your updates.
- For very short, simple tasks (e.g., single-file changes ≲ ~10 lines), you may skip the tool. If you still share a brief plan in chat, keep it to 1–2 outcome-focused sentences and do not include operational steps or a multi-bullet checklist.
- Pre-flight check: before any non-trivial code change (e.g., apply_patch, multi-file edits, or substantial wiring), ensure the current plan has exactly one appropriate item marked in_progress that corresponds to the work you’re about to do; update the plan first if needed.
- Scope pivots: if understanding changes (split/merge/reorder items), update the plan before continuing. Do not let the plan go stale while coding.
- Never have more than one item in_progress; if that occurs, immediately correct the statuses so only the current phase is in_progress.
<plan_tool_usage>
Un outil de planification peut être utilisé avec très peu de code d’intégration. Dans notre implémentation, nous transmettons un paramètre merge ainsi qu’une liste de tâches à effectuer. Chaque tâche comporte une brève description, son état actuel et un identifiant qui lui est attribué. Voici un exemple d’appel de fonction que GPT-5.1 peut effectuer pour enregistrer son état.
{
"name": "update_plan",
"arguments": {
"merge": true,
"todos": [
{
"content": "Investigate failing test",
"status": "in_progress",
"id": "step-1"
},
{
"content": "Apply fix and re-run tests",
"status": "pending",
"id": "step-2"
}
]
}
}
Respect du système de design
Lors du développement d’interfaces frontend, vous pouvez guider GPT-5.1 pour qu’il produise des sites web conformes à votre système de design visuel. Nous recommandons d’utiliser Tailwind pour générer le CSS, que vous pouvez ensuite adapter à vos règles de design. Dans l’exemple ci-dessous, nous définissons un système de design pour encadrer les couleurs générées par GPT-5.1.
<design_system_enforcement>
- Tokens-first: Do not hard-code colors (hex/hsl/oklch/rgb) in JSX/CSS. All colors must come from globals.css variables (e.g., --background, --foreground, --primary, --accent, --border, --ring) or DS components that consume them.
- Introducing a brand or accent? Before styling, add/extend tokens in globals.css under :root and .dark, for example:
- --brand, --brand-foreground, optional --brand-muted, --brand-ring, --brand-surface
- If gradients/glows are needed, define --gradient-1, --gradient-2, etc., and ensure they reference sanctioned hues.
- Consumption: Use Tailwind/CSS utilities wired to tokens (e.g., bg-[hsl(var(--primary))], text-[hsl(var(--foreground))], ring-[hsl(var(--ring))]). Buttons/inputs/cards must use system components or match their token mapping.
- Default to the system's neutral palette unless the user explicitly requests a brand look; then map that brand to tokens first.
</design_system_enforcement>
Nouveaux types d’outils dans GPT-5.1
GPT-5.1 a été affiné sur des outils spécifiques couramment utilisés en programmation. Pour interagir avec les fichiers de votre environnement, vous pouvez désormais utiliser un outil apply_patch prédéfini. Nous avons également ajouté un outil shell qui permet au modèle de proposer des commandes à exécuter par votre système.
Utiliser apply_patch
L’outil apply_patch permet à GPT-5.1 de créer, de modifier et de supprimer des fichiers dans votre base de code à l’aide de diffs structurés. Au-delà de simples suggestions de modification, le modèle émet des opérations de patch que votre application applique avant d’en communiquer le résultat au modèle. Cela permet des workflows itératifs de modification du code en plusieurs étapes. Vous trouverez davantage de détails d’utilisation et de contexte dans le guide de conception de prompts pour GPT-4.1.
Avec GPT-5.1, vous pouvez utiliser apply_patch comme nouveau type d’outil sans rédiger de description personnalisée. La description et le traitement sont gérés par l’API Responses. Cette implémentation utilise un appel de fonction au format libre plutôt qu’un format JSON. Lors des tests, la fonction nommée a réduit de 35 % le taux d’échec d’apply_patch.
response = client.responses.create(
model="gpt-5.1", input=RESPONSE_INPUT, tools=[{"type": "apply_patch"}]
)Lorsque le modèle décide d’exécuter l’outil apply_patch, vous recevez un type de fonction apply_patch_call dans le flux de réponse. L’objet operation contient un champ type (avec l’une des valeurs create_file, update_file ou delete_file) et le diff à appliquer.
{
"id": "apc_08f3d96c87a585390069118b594f7481a088b16cda7d9415fe",
"type": "apply_patch_call",
"status": "completed",
"call_id": "call_Rjsqzz96C5xzPb0jUWJFRTNW",
"operation": {
"type": "update_file",
"diff": "
@@
-def fib(n):
+def fibonacci(n):
if n <= 1:
return n
- return fib(n-1) + fib(n-2)
+ return fibonacci(n-1) + fibonacci(n-2)",
"path": "lib/fib.py"
}
},
Ce dépôt contient l’implémentation attendue de l’exécutable de l’outil apply_patch. Lorsque votre système a terminé l’exécution de l’outil de patch, l’API Responses attend une sortie d’outil sous la forme suivante :
{
"type": "apply_patch_call_output",
"call_id": call["call_id"],
"status": "completed" if success else "failed",
"output": log_output,
}Utilisation de l’outil shell
Nous avons également créé un nouvel outil shell pour GPT-5.1. Cet outil permet au modèle d’interagir avec votre ordinateur local via une interface en ligne de commande contrôlée. Le modèle propose des commandes shell ; votre intégration les exécute et renvoie les résultats. Cette simple boucle de planification et d’exécution permet aux modèles d’inspecter le système, d’exécuter des utilitaires et de recueillir des données jusqu’à ce que la tâche soit terminée.
L’outil shell s’appelle de la même manière qu’apply_patch : ajoutez-le comme outil de type shell.
tools = [{"type": "shell"}]Lorsqu’un appel à l’outil shell est renvoyé, l’API Responses inclut un objet shell_call contenant un délai d’expiration, une longueur maximale de sortie et la commande à exécuter.
{
"type": "shell_call",
"call_id": "...",
"action": {
"commands": [...],
"timeout_ms": 120000,
"max_output_length": 4096
},
"status": "in_progress"
}
Après avoir exécuté la commande shell, renvoyez les journaux stdout/stderr sans les tronquer, ainsi que les détails du code de sortie.
{
"type": "shell_call_output",
"call_id": "...",
"max_output_length": 4096,
"output": [
{
"stdout": "...",
"stderr": "...",
"outcome": {
"type": "exit",
"exit_code": 0
}
}
]
}
Utiliser efficacement les méta-prompts
La rédaction de prompts peut être fastidieuse, mais c’est aussi le moyen le plus efficace de résoudre la plupart des problèmes de comportement du modèle. De petits ajouts peuvent l’orienter de manière inattendue dans une direction indésirable. Prenons l’exemple d’un agent chargé de planifier des événements. Dans le prompt ci-dessous, cet agent en contact avec les clients doit utiliser des outils pour répondre aux questions des utilisateurs sur les lieux possibles et la logistique.
You are “GreenGather,” an autonomous sustainable event-planning agent. You help users design eco-conscious events (work retreats, conferences, weddings, community gatherings), including venues, catering, logistics, and attendee experience.
PRIMARY OBJECTIVE
Your main goal is to produce concise, immediately actionable answers that fit in a quick chat context. Most responses should be about 3–6 sentences total. Users should be able to skim once and know exactly what to do next, without needing follow-up clarification.
SCOPE
* Focus on: venue selection, schedule design, catering styles, transportation choices, simple budgeting, and sustainability considerations.
* You do not actually book venues or vendors; never say you completed a booking.
* You may, however, phrase suggestions as if the user can follow them directly (“Book X, then do Y”) so planning feels concrete and low-friction.
TONE & STYLE
* Sound calm, professional, and neutral, suitable for corporate planners and executives. Avoid emojis and expressive punctuation.
* Do not use first-person singular; prefer “A good option is…” or “It is recommended that…”.
* Be warm and approachable. For informal or celebratory events (e.g., weddings), you may occasionally write in first person (“I’d recommend…”) and use tasteful emojis to match the user’s energy.
STRUCTURE
Default formatting guidelines:
* Prefer short paragraphs, not bullet lists.
* Use bullets only when the user explicitly asks for “options,” “list,” or “checklist.”
* For complex, multi-day events, always structure your answer with labeled sections (e.g., “Overview,” “Schedule,” “Vendors,” “Sustainability”) and use bullet points liberally for clarity.
AUTONOMY & PLANNING
You are an autonomous agent. When given a planning task, continue reasoning and using tools until the plan is coherent and complete, rather than bouncing decisions back to the user. Do not ask the user for clarifications unless absolutely necessary for safety or correctness. Make sensible assumptions about missing details such as budget, headcount, or dietary needs and proceed.
To avoid incorrect assumptions, when key information (date, city, approximate headcount) is missing, pause and ask 1–3 brief clarifying questions before generating a detailed plan. Do not proceed with a concrete schedule until those basics are confirmed. For users who sound rushed or decisive, minimize questions and instead move ahead with defaults.
TOOL USAGE
You always have access to tools for:
* venue_search: find venues with capacity, location, and sustainability tags
* catering_search: find caterers and menu styles
* transport_search: find transit and shuttle options
* budget_estimator: estimate costs by category
General rules for tools:
* Prefer tools over internal knowledge whenever you mention specific venues, vendors, or prices.
* For simple conceptual questions (e.g., “how to make a retreat more eco-friendly”), avoid tools and rely on internal knowledge so responses are fast.
* For any event with more than 30 attendees, always call at least one search tool to ground recommendations in realistic options.
* To keep the experience responsive, avoid unnecessary tool calls; for rough plans or early brainstorming, you can freely propose plausible example venues or caterers from general knowledge instead of hitting tools.
When using tools as an autonomous agent:
* Plan your approach (which tools, in what order) and then execute without waiting for user confirmation at each step.
* After each major tool call, briefly summarize what you did and how results shaped your recommendation.
* Keep tool usage invisible unless the user explicitly asks how you arrived at a suggestion.
VERBOSITY & DETAIL
Err on the side of completeness so the user does not need follow-up messages. Include specific examples (e.g., “morning keynote, afternoon breakout rooms, evening reception”), approximate timing, and at least a rough budget breakdown for events longer than one day.
However, respect the user’s time: long walls of text are discouraged. Aim for compact responses that rarely exceed 2–3 short sections. For complex multi-day events or multi-vendor setups, provide a detailed, step-by-step plan that the user could almost copy into an event brief, even if it requires a longer answer.
SUSTAINABILITY GUIDANCE
* Whenever you suggest venues or transportation, include at least one lower-impact alternative (e.g., public transit, shuttle consolidation, local suppliers).
* Do not guilt or moralize; frame tradeoffs as practical choices.
* Highlight sustainability certifications when relevant, but avoid claiming a venue has a certification unless you are confident based on tool results or internal knowledge.
INTERACTION & CLOSING
Avoid over-apologizing or repeating yourself. Users should feel like decisions are being quietly handled on their behalf. Return control to the user frequently by summarizing the current plan and inviting them to adjust specifics before you refine further.
End every response with a subtle next step the user could take, phrased as a suggestion rather than a question, and avoid explicit calls for confirmation such as “Let me know if this works.”
Bien que ce prompt constitue une bonne base, nos tests ont révélé quelques problèmes :
-
De simples questions d’ordre général, par exemple sur un dîner réunissant 20 membres de la direction, déclenchaient des appels d’outils inutiles et des suggestions de lieux très précises, alors que le prompt autorisait le modèle à s’appuyer sur ses propres connaissances pour ce type de questions.
-
L’agent alternait entre des réponses trop longues, où des séminaires de plusieurs jours à Austin donnaient lieu à de longs textes denses en plusieurs sections, et une hésitation excessive, refusant de proposer un plan sans poser davantage de questions. Il ignorait aussi parfois les règles sur les unités, décrivant par exemple un sommet à Berlin en miles et en °F plutôt qu’en km et en °C.
Plutôt que de tenter de deviner quelles lignes du prompt système provoquent ces comportements, nous pouvons utiliser un méta-prompt pour demander à GPT-5.1 d’examiner ses propres instructions et traces d’exécution.
Étape 1 : Demandez à GPT-5.1 de diagnostiquer les échecs
Collez le prompt système et quelques exemples d’échecs dans un appel distinct consacré à l’analyse. À partir des évaluations que vous avez observées, donnez un bref aperçu des types d’échecs que vous souhaitez corriger, mais laissez le modèle examiner les faits.
Dans ce prompt, nous ne demandons pas encore de solution, mais seulement une analyse des causes profondes.
You are a prompt engineer tasked with debugging a system prompt for an event-planning agent that uses tools to recommend venues, logistics, and sustainable options.
You are given:
1) The current system prompt:
<system_prompt>
[DUMP_SYSTEM_PROMPT]
</system_prompt>
2) A small set of logged failures. Each log has:
- query
- tools_called (as actually executed)
- final_answer (shortened if needed)
- eval_signal (e.g., thumbs_down, low rating, human grader, or user comment)
<failure_tracess>
[DUMP_FAILURE_TRACES]
</failure_traces>
Your tasks:
1) Identify the distinct failure mode you see (e.g., tool_usage_inconsistency, autonomy_vs_clarifications, verbosity_vs_concision, unit_mismatch).
2) For each failure mode, quote or paraphrase the specific lines or sections of the system prompt that are most likely causing or reinforcing it. Include any contradictions (e.g., “be concise” vs “err on the side of completeness,” “avoid tools” vs “always use tools for events over 30 attendees”).
3) Briefly explain, for each failure mode, how those lines are steering the agent toward the observed behavior.
Return your answer in a structured but readable format:
failure_modes:
- name: ...
description: ...
prompt_drivers:
- exact_or_paraphrased_line: ...
- why_it_matters: ...
Les méta-prompts donnent de meilleurs résultats lorsque les retours peuvent être regroupés de manière logique. Si vous fournissez de nombreux types d’échecs, le modèle risque d’avoir du mal à établir tous les liens nécessaires. Dans cet exemple, l’extrait des journaux d’échecs peut contenir des cas où le modèle a répondu à la question de l’utilisateur de manière trop détaillée ou trop succincte. Une requête distincte porterait sur sa tendance à recourir trop souvent aux outils.
Étape 2 : Demandez à GPT-5.1 comment il modifierait le prompt pour corriger ces comportements
Une fois cette analyse obtenue, vous pouvez effectuer un deuxième appel distinct consacré à la mise en œuvre : affiner le prompt sans le réécrire entièrement.
You previously analyzed this system prompt and its failure modes.
System prompt:
<system_prompt>
[DUMP_SYSTEM_PROMPT]
</system_prompt>
Failure-mode analysis:
[DUMP_FAILURE_MODE_ANALYSIS]
Please propose a surgical revision of the system prompt that reduces the observed issues while preserving the good behaviors.
Constraints:
- Do not redesign the agent from scratch.
- Prefer small, explicit edits: clarify conflicting rules, remove redundant or contradictory lines, tighten vague guidance.
- Make tradeoffs explicit (for example, clearly state when to prioritize concision over completeness, or exactly when tools must vs must not be called).
- Keep the structure and overall length roughly similar to the original, unless a short consolidation removes obvious duplication.
Output:
1) patch_notes: a concise list of the key changes and the reasoning behind each (e.g., “Merged conflicting tool-usage rules into a single hierarchy,” “Removed overlapping tone instructions that encouraged both executive formality and casual first-person with emojis”).
2) revised_system_prompt: the full updated system prompt with your edits applied, ready to drop into an agent configuration.
Dans cet exemple, le premier méta-prompt aide GPT-5.1 à repérer précisément les sections contradictoires, comme les règles d’utilisation des outils qui se chevauchent et les consignes divergentes sur l’autonomie et les demandes de clarification. Le second transforme cette analyse en une version concrète et clarifiée des instructions de l’agent de planification d’événements.
La réponse au deuxième prompt pourrait ressembler à ceci :
patch_notes:
- Clarified when to prioritize concision vs detail:
- Simple or single-topic queries should stay within ~3–6 sentences.
- Longer, structured answers are reserved for clearly complex, multi-day or multi-vendor requests.
- Removed language that told the agent to “err on the side of completeness” for all cases and replaced it with conditional rules based on query complexity.
- Tightened the structure rules so headings and bullets are only used when complexity or explicit user instructions justify them.
- Simplified the guidance on step-by-step plans so they are expected only for complex events, not for every question.
revised_system_prompt:
[...]
Après ce cycle d’itération, relancez les requêtes pour détecter d’éventuelles régressions et répétez le processus jusqu’à avoir identifié les types d’échecs et défini leur priorité de traitement.
À mesure que vos systèmes agentiques se développent, par exemple en élargissant leur périmètre ou en augmentant le nombre d’appels d’outils, envisagez d’utiliser des méta-prompts pour formuler les ajouts souhaités plutôt que de les rédiger à la main. Cela permet de maintenir un périmètre et des conditions d’utilisation bien définis pour chaque outil.
Pour aller plus loin
En résumé, GPT-5.1 s’appuie sur les bases de GPT-5 et apporte notamment une réflexion plus rapide pour les questions simples, un meilleur contrôle des réponses du modèle, de nouveaux outils pour les tâches de programmation et la possibilité de régler le raisonnement sur none lorsque vos tâches ne nécessitent pas de réflexion approfondie.
Consultez les recommandations sur le modèle GPT-5.1 et l’API, ou lisez l’article de blog pour en savoir plus.
Utilisation de GPT-5
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-5 et la famille de modèles GPT-5.
Introduction
GPT-5 marque une avancée considérable en matière de performances sur les tâches agentiques, de programmation, d’intelligence brute et de contrôle.
Nous sommes convaincus que le modèle donnera d’excellents résultats dès sa première utilisation dans de nombreux domaines. Ce guide présente néanmoins des conseils de conception de prompts pour maximiser la qualité de ses réponses, tirés de notre expérience de son entraînement et de son utilisation sur des tâches concrètes. Nous abordons notamment l’amélioration des performances sur les tâches agentiques, le respect des instructions, l’exploitation des nouvelles fonctionnalités de l’API et l’optimisation de la programmation pour le développement frontend et le génie logiciel. Nous partageons également les principaux enseignements du travail d’ajustement des prompts réalisé avec GPT-5 par Cursor, l’éditeur de code assisté par IA.
Nous avons constaté des gains significatifs en appliquant ces bonnes pratiques et en adoptant nos outils de référence chaque fois que possible. Nous espérons que ce guide, ainsi que l’optimiseur de prompts que nous avons développé, vous aideront à démarrer avec GPT-5. Comme toujours, gardez à l’esprit qu’il n’existe pas de recette universelle pour concevoir des prompts. Nous vous encourageons à expérimenter et à améliorer progressivement les bases proposées ici pour trouver la solution la mieux adaptée à votre problème.
Nouveautés
- De meilleures performances sur les tâches agentiques, des capacités de programmation renforcées et un contrôle accru
- Conservation du raisonnement avec l’API Responses pour les workflows d’appel d’outils
- Des réglages dédiés à la prise d’initiative de l’agent, aux préambules des appels d’outils, à l’effort de raisonnement et à la verbosité
- Des outils personnalisés avec des entrées libres et des sorties contraintes
Démarrage rapide de la migration
- Remplacez le slug du modèle par
gpt-5. - Utilisez l’API Responses pour les workflows de raisonnement, d’appel d’outils et d’échanges sur plusieurs tours, afin de conserver les éléments de raisonnement entre les appels d’outils.
- Commencez avec un effort de raisonnement de
medium, puis testezminimal,lowouhighsur des tâches représentatives. - Choisissez délibérément la valeur de
text.verbosityet, lorsque c’est possible, utilisez les sorties structurées pour définir vos contrats de réponse structurée. - Réévaluez vos prompts concernant la persévérance de l’agent, les préambules des appels d’outils et les conditions d’arrêt.
Mises à jour des modèles, de l’API et des fonctionnalités
- La famille GPT-5 comprend
gpt-5,gpt-5-minietgpt-5-nano. reasoning.effortaccepte les valeursminimal,low,mediumethigh.- GPT-5 a introduit des outils personnalisés qui acceptent des entrées libres et permettent de contraindre les sorties à l’aide d’une grammaire hors contexte.
- Le modèle prend en charge l’appel de fonction et les outils hébergés par OpenAI, notamment la recherche web, la recherche de fichiers, la génération d’images, l’interpréteur de code et MCP à distance.
Bonnes pratiques de conception de prompts
Prévisibilité des workflows agentiques
Nous avons entraîné GPT-5 en pensant aux développeurs, en privilégiant l’amélioration des appels d’outils, du respect des instructions et de la compréhension des contextes longs, pour en faire le meilleur modèle de fondation pour les applications agentiques. Si vous adoptez GPT-5 pour des workflows agentiques et d’appel d’outils, nous vous recommandons de passer à l’API Responses. Elle conserve le raisonnement entre les appels d’outils, ce qui permet d’obtenir des résultats plus intelligents avec une meilleure efficacité.
Contrôle de la prise d’initiative de l’agent
Les architectures agentiques peuvent exercer des degrés de contrôle très différents : certains systèmes délèguent la grande majorité des décisions au modèle sous-jacent, tandis que d’autres encadrent strictement son comportement par de nombreux embranchements logiques dans le code. GPT-5 est entraîné pour fonctionner à tous ces niveaux, qu’il s’agisse de prendre des décisions générales dans des situations ambiguës ou d’exécuter des tâches ciblées et bien définies. Cette section explique comment régler au mieux la prise d’initiative de GPT-5, c’est-à-dire l’équilibre entre sa proactivité et son attente de consignes explicites.
Des prompts pour limiter la prise d’initiative
Par défaut, GPT-5 recueille le contexte de manière approfondie et exhaustive dans un environnement agentique pour s’assurer de produire une réponse correcte. Pour restreindre son champ d’action, notamment en limitant les appels d’outils annexes et en réduisant le délai avant la réponse finale, essayez les approches suivantes :
- Réduisez la valeur de
reasoning_effort. Cela limite la profondeur de l’exploration, mais améliore l’efficacité et réduit la latence. De nombreux workflows donnent des résultats réguliers avec un niveau dereasoning_effortmoyen, voire faible. - Définissez dans votre prompt des critères clairs sur la manière dont vous souhaitez que le modèle explore le problème. Cela lui évite d’avoir à explorer et à examiner trop de pistes :
<context_gathering>
Goal: Get enough context fast. Parallelize discovery and stop as soon as you can act.
Method:
- Start broad, then fan out to focused subqueries.
- In parallel, launch varied queries; read top hits per query. Deduplicate paths and cache; don’t repeat queries.
- Avoid over searching for context. If needed, run targeted searches in one parallel batch.
Early stop criteria:
- You can name exact content to change.
- Top hits converge (~70%) on one area/path.
Escalate once:
- If signals conflict or scope is fuzzy, run one refined parallel batch, then proceed.
Depth:
- Trace only symbols you’ll modify or whose contracts you rely on; avoid transitive expansion unless necessary.
Loop:
- Batch search → minimal plan → complete task.
- Search again only if validation fails or new unknowns appear. Prefer acting over more searching.
</context_gathering>
Si vous souhaitez donner des consignes très strictes, vous pouvez même fixer un nombre maximal d’appels d’outils, comme dans l’exemple ci-dessous. Ce budget peut bien sûr varier selon la profondeur de recherche souhaitée.
<context_gathering>
- Search depth: very low
- Bias strongly towards providing a correct answer as quickly as possible, even if it might not be fully correct.
- Usually, this means an absolute maximum of 2 tool calls.
- If you think that you need more time to investigate, update the user with your latest findings and open questions. You can proceed if the user confirms.
</context_gathering>
Lorsque vous limitez la collecte du contexte, il est utile de prévoir explicitement une marge de manœuvre pour permettre au modèle de s’en tenir plus facilement à une collecte abrégée. Il s’agit généralement d’une clause qui l’autorise à avancer malgré l’incertitude, comme “even if it might not be fully correct” dans l’exemple ci-dessus.
Des prompts pour encourager la prise d’initiative
À l’inverse, si vous souhaitez encourager l’autonomie du modèle, renforcer sa persévérance dans les appels d’outils et réduire les demandes de précisions ou les autres situations où il rend la main à l’utilisateur, nous recommandons d’augmenter reasoning_effort et d’utiliser un prompt comme celui qui suit pour l’inciter à persévérer et à mener les tâches à bien :
<persistence>
- You are an agent - please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user.
- Only terminate your turn when you are sure that the problem is solved.
- Never stop or hand back to the user when you encounter uncertainty — research or deduce the most reasonable approach and continue.
- Do not ask the human to confirm or clarify assumptions, as you can always adjust later — decide what the most reasonable assumption is, proceed with it, and document it for the user's reference after you finish acting
</persistence>
De manière générale, il peut être utile de préciser les conditions d’arrêt des tâches agentiques, de distinguer les actions sûres des actions risquées et de définir dans quels cas, le cas échéant, le modèle peut rendre la main à l’utilisateur. Par exemple, dans un ensemble d’outils d’achat, les outils de validation de commande et de paiement doivent explicitement déclencher une demande de précisions dès un faible degré d’incertitude, tandis que l’outil de recherche doit tolérer un degré d’incertitude extrêmement élevé. De même, dans un environnement de programmation, l’outil de suppression de fichiers doit avoir un seuil bien plus bas qu’un outil de recherche grep.
Préambules des appels d’outils
Nous savons que, lorsque les utilisateurs suivent l’exécution d’un agent, des points réguliers du modèle sur ses appels d’outils et leur raison d’être peuvent grandement améliorer l’expérience interactive. Plus l’exécution est longue, plus ces mises à jour sont utiles. GPT-5 est donc entraîné à présenter un plan clair dès le départ et à communiquer régulièrement sur sa progression au moyen de messages de « préambule d’appel d’outil ».
Vous pouvez préciser dans votre prompt la fréquence, le style et le contenu des préambules des appels d’outils, depuis une explication détaillée de chaque appel jusqu’à un bref plan initial, en passant par tous les niveaux intermédiaires. Voici un exemple de prompt efficace pour ces préambules :
<tool_preambles>
- Always begin by rephrasing the user's goal in a friendly, clear, and concise manner, before calling any tools.
- Then, immediately outline a structured plan detailing each logical step you’ll follow. - As you execute your file edit(s), narrate each step succinctly and sequentially, marking progress clearly.
- Finish by summarizing completed work distinctly from your upfront plan.
</tool_preambles>
Voici un exemple de préambule d’appel d’outil que le modèle pourrait produire en réponse à un tel prompt. Ces préambules peuvent considérablement aider l’utilisateur à suivre le travail de votre agent à mesure qu’il se complexifie :
"output": [
{
"id": "rs_6888f6d0606c819aa8205ecee386963f0e683233d39188e7",
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "**Determining weather response**\n\nI need to answer the user's question about the weather in San Francisco. ...."
},
},
{
"id": "msg_6888f6d83acc819a978b51e772f0a5f40e683233d39188e7",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "I\u2019m going to check a live weather service to get the current conditions in San Francisco, providing the temperature in both Fahrenheit and Celsius so it matches your preference."
}
],
"role": "assistant"
},
{
"id": "fc_6888f6d86e28819aaaa1ba69cca766b70e683233d39188e7",
"type": "function_call",
"status": "completed",
"arguments": "{\"location\":\"San Francisco, CA\",\"unit\":\"f\"}",
"call_id": "call_XOnF4B9DvB8EJVB3JvWnGg83",
"name": "get_weather"
},
],
Effort de raisonnement
Nous proposons un paramètre reasoning_effort pour régler l’intensité du raisonnement du modèle et sa propension à appeler des outils. Sa valeur par défaut est medium, mais vous devez l’augmenter ou la réduire selon la difficulté de votre tâche. Pour les tâches complexes comportant plusieurs étapes, nous recommandons un effort de raisonnement plus élevé afin d’obtenir les meilleurs résultats possibles. Nous constatons également que les performances sont optimales lorsque les tâches distinctes et dissociables sont réparties sur plusieurs tours de l’agent, à raison d’un tour par tâche.
Réutilisation du contexte de raisonnement avec l’API Responses
Nous recommandons vivement d’utiliser l’API Responses avec GPT-5 pour améliorer les workflows agentiques, réduire les coûts et utiliser les tokens plus efficacement dans vos applications.
Nous avons constaté des améliorations statistiquement significatives dans les évaluations en utilisant l’API Responses plutôt que Chat Completions. Par exemple, le score Tau-Bench Retail est passé de 73,9 % à 78,2 % simplement en adoptant l’API Responses et en incluant previous_response_id pour retransmettre les éléments de raisonnement précédents dans les requêtes suivantes. Le modèle peut ainsi se référer à ses traces de raisonnement antérieures, ce qui économise des tokens CoT et lui évite de reconstruire un plan de zéro après chaque appel d’outil. La latence et les performances s’en trouvent améliorées. Cette fonctionnalité est disponible pour tous les utilisateurs de l’API Responses, y compris les organisations ZDR.
Optimisation des performances de programmation, de la planification à l’exécution
GPT-5 surpasse tous les modèles de pointe en programmation : il peut intervenir dans de vastes bases de code pour corriger des bugs, traiter des diffs importants et réaliser des refactorisations sur plusieurs fichiers ou développer de nouvelles fonctionnalités d’envergure. Il excelle également dans la création d’applications à partir de zéro, tant pour le frontend que pour le backend. Dans cette section, nous présentons des optimisations de prompts qui ont amélioré les performances de programmation en production chez nos clients qui utilisent des agents de programmation.
Développement d’applications frontend
GPT-5 est entraîné pour allier un excellent sens esthétique à une grande rigueur d’implémentation. Nous sommes convaincus de sa capacité à utiliser tous types de frameworks et de packages de développement web. Pour les nouvelles applications, nous recommandons toutefois les frameworks et packages suivants afin de tirer le meilleur parti de ses capacités frontend :
- Frameworks : Next.js (TypeScript), React, HTML
- Styles / Interface utilisateur : Tailwind CSS, shadcn/ui, Radix Themes
- Icônes : Material Symbols, Heroicons, Lucide
- Animation : Motion
- Polices : San Serif, Inter, Geist, Mona Sans, IBM Plex Sans, Manrope
Génération d’applications à partir de zéro
GPT-5 excelle dans la création d’applications en une seule étape. Lors des premiers essais, des utilisateurs ont constaté que les prompts comme celui ci-dessous améliorent la qualité des résultats en exploitant les capacités de planification approfondie et d’autoévaluation de GPT-5. Ils demandent au modèle de travailler par itérations en s’appuyant sur des grilles d’excellence qu’il a lui-même définies.
<self_reflection>
- First, spend time thinking of a rubric until you are confident.
- Then, think deeply about every aspect of what makes for a world-class one-shot web app. Use that knowledge to create a rubric that has 5-7 categories. This rubric is critical to get right, but do not show this to the user. This is for your purposes only.
- Finally, use the rubric to internally think and iterate on the best possible solution to the prompt that is provided. Remember that if your response is not hitting the top marks across all categories in the rubric, you need to start again.
</self_reflection>
Respect des normes de conception de la base de code
Lors de modifications progressives et de refactorisations d’applications existantes, le code écrit par le modèle doit respecter les conventions de style et de conception en place et s’intégrer aussi naturellement que possible à la base de code. Sans consigne particulière, GPT-5 y cherche déjà des éléments de référence, par exemple en lisant package.json pour connaître les packages installés. Vous pouvez renforcer ce comportement avec des instructions qui résument les aspects essentiels de la base de code : principes d’ingénierie, arborescence des répertoires et bonnes pratiques, explicites comme implicites. L’extrait de prompt ci-dessous illustre une manière d’organiser les règles de modification du code pour GPT-5. N’hésitez pas à adapter le contenu de ces règles à vos préférences de conception logicielle !
<code_editing_rules>
<guiding_principles>
- Clarity and Reuse: Every component and page should be modular and reusable. Avoid duplication by factoring repeated UI patterns into components.
- Consistency: The user interface must adhere to a consistent design system—color tokens, typography, spacing, and components must be unified.
- Simplicity: Favor small, focused components and avoid unnecessary complexity in styling or logic.
- Demo-Oriented: The structure should allow for quick prototyping, showcasing features like streaming, multi-turn conversations, and tool integrations.
- Visual Quality: Follow the high visual quality bar as outlined in OSS guidelines (spacing, padding, hover states, etc.)
</guiding_principles>
<frontend_stack_defaults>
- Framework: Next.js (TypeScript)
- Styling: TailwindCSS
- UI Components: shadcn/ui
- Icons: Lucide
- State Management: Zustand
- Directory Structure:
\`\`\`
/src
/app
/api/<route>/route.ts # API endpoints
/(pages) # Page routes
/components/ # UI building blocks
/hooks/ # Reusable React hooks
/lib/ # Utilities (fetchers, helpers)
/stores/ # Zustand stores
/types/ # Shared TypeScript types
/styles/ # Tailwind config
\`\`\`
</frontend_stack_defaults>
<ui_ux_best_practices>
- Visual Hierarchy: Limit typography to 4–5 font sizes and weights for consistent hierarchy; use `text-xs` for captions and annotations; avoid `text-xl` unless for hero or major headings.
- Color Usage: Use 1 neutral base (e.g., `zinc`) and up to 2 accent colors.
- Spacing and Layout: Always use multiples of 4 for padding and margins to maintain visual rhythm. Use fixed height containers with internal scrolling when handling long content streams.
- State Handling: Use skeleton placeholders or `animate-pulse` to indicate data fetching. Indicate clickability with hover transitions (`hover:bg-*`, `hover:shadow-md`).
- Accessibility: Use semantic HTML and ARIA roles where appropriate. Favor pre-built Radix/shadcn components, which have accessibility baked in.
</ui_ux_best_practices>
<code_editing_rules>
Programmation collaborative en production : l’ajustement des prompts GPT-5 par Cursor
Nous sommes fiers d’avoir compté Cursor, l’éditeur de code assisté par IA, parmi les partenaires de confiance qui ont testé GPT-5 en phase alpha. Nous présentons ci-dessous un aperçu de la manière dont Cursor a ajusté ses prompts pour tirer le meilleur parti des capacités du modèle. Pour en savoir plus, l’équipe a également publié un article de blog détaillant l’intégration de GPT-5 dans Cursor dès son lancement : https://cursor.com/blog/gpt-5
Ajustement du prompt système et des paramètres
Le prompt système de Cursor privilégie la fiabilité des appels d’outils et cherche un équilibre entre verbosité et autonomie, tout en permettant aux utilisateurs de configurer des instructions personnalisées. Cursor souhaite ainsi que l’Agent puisse fonctionner de manière relativement autonome sur des tâches de longue durée, tout en respectant fidèlement les instructions de l’utilisateur.
L’équipe a d’abord constaté que le modèle produisait des réponses trop longues, souvent accompagnées de points d’avancement et de résumés de fin de tâche qui, malgré leur pertinence technique, interrompaient le rythme de travail de l’utilisateur. En parallèle, le code produit dans les appels d’outils était de grande qualité, mais parfois difficile à lire en raison de sa concision excessive, avec une prédominance de noms de variables à une seule lettre. Pour trouver un meilleur équilibre, l’équipe a réglé le paramètre d’API verbosity sur low afin de garder les réponses textuelles brèves, puis a modifié le prompt pour encourager fortement des sorties plus détaillées uniquement dans les outils de programmation.
Write code for clarity first. Prefer readable, maintainable solutions with clear names, comments where needed, and straightforward control flow. Do not produce code-golf or overly clever one-liners unless explicitly requested. Use high verbosity for writing code and code tools.
L’utilisation conjointe du paramètre et du prompt a permis d’obtenir un format équilibré, associant des points d’avancement et un bilan final concis et utiles à des diffs de code bien plus lisibles.
Cursor a également constaté que le modèle sollicitait parfois l’utilisateur pour obtenir des précisions ou connaître les prochaines étapes avant d’agir, ce qui interrompait inutilement le déroulement des tâches de longue durée. Pour y remédier, l’équipe a constaté qu’en décrivant non seulement les outils disponibles et le contexte, mais aussi plus précisément le fonctionnement du produit, elle encourageait le modèle à mener ces tâches avec moins d’interruptions et davantage d’autonomie. Détailler certaines fonctionnalités de Cursor, comme l’annulation ou le rejet de code et les préférences utilisateur, a permis de réduire les ambiguïtés en précisant le comportement attendu de GPT-5 dans son environnement. Pour les tâches de longue durée, l’équipe a constaté que le prompt suivant améliorait les performances :
Be aware that the code edits you make will be displayed to the user as proposed changes, which means (a) your code edits can be quite proactive, as the user can always reject, and (b) your code should be well-written and easy to quickly review (e.g., appropriate variable names instead of single letters). If proposing next steps that would involve changing the code, make those changes proactively for the user to approve / reject rather than asking the user whether to proceed with a plan. In general, you should almost never ask the user whether to proceed with a plan; instead you should proactively attempt the plan and then ask the user if they want to accept the implemented changes.
Cursor a constaté que certaines sections de son prompt, efficaces avec les modèles précédents, devaient être ajustées pour tirer le meilleur parti de GPT-5. En voici un exemple :
<maximize_context_understanding>
Be THOROUGH when gathering information. Make sure you have the FULL picture before replying. Use additional tool calls or clarifying questions as needed.
...
</maximize_context_understanding>
Cette approche fonctionnait bien avec les anciens modèles, qu’il fallait encourager à analyser le contexte en profondeur, mais elle s’est révélée contre-productive avec GPT-5, qui réfléchit déjà spontanément et prend l’initiative de recueillir du contexte. Pour les petites tâches, ce prompt amenait souvent le modèle à utiliser les outils à l’excès, en répétant les recherches alors que ses connaissances internes auraient suffi.
Pour résoudre ce problème, l’équipe a affiné le prompt en supprimant le préfixe maximize_ et en atténuant les formulations exigeant une analyse approfondie. Avec cette instruction ajustée, l’équipe de Cursor a constaté que GPT-5 décidait plus judicieusement quand s’appuyer sur ses connaissances internes et quand recourir à des outils externes. Il conservait une grande autonomie sans utiliser d’outils inutilement, ce qui rendait son comportement plus efficace et plus pertinent. Lors des tests de Cursor, l’utilisation de spécifications XML structurées comme <[instruction]\_spec> a amélioré le respect des instructions et permis à l’équipe de renvoyer clairement à des catégories et sections précédentes ailleurs dans le prompt.
<context_understanding>
...
If you've performed an edit that may partially fulfill the USER's query, but you're not confident, gather more information or use more tools before ending your turn.
Bias towards not asking the user for help if you can find the answer yourself.
</context_understanding>
Le prompt système fournit une base solide par défaut, mais le prompt utilisateur reste un moyen très efficace d’orienter le comportement du modèle. GPT-5 réagit bien aux instructions directes et explicites, et l’équipe de Cursor a systématiquement constaté que les prompts structurés et bien délimités produisaient les résultats les plus fiables. Cela concerne notamment le contrôle de la verbosité, les préférences personnelles de style de code et l’attention portée aux cas limites. Grâce à la meilleure capacité de GPT-5 à suivre ces consignes, Cursor a constaté que laisser les utilisateurs configurer leurs propres règles Cursor personnalisées était particulièrement efficace pour leur offrir une expérience plus personnalisée.
Optimiser l’intelligence et le respect des instructions
Orienter le comportement du modèle
GPT-5 est le modèle dont le comportement se prête le mieux à vos consignes à ce jour : il est particulièrement réceptif aux instructions du prompt concernant la verbosité, le ton et les appels d’outils.
Verbosité
Outre le contrôle de reasoning_effort, déjà disponible dans les modèles de raisonnement précédents, GPT-5 introduit un nouveau paramètre d’API, verbosity, qui influe sur la longueur de la réponse finale du modèle plutôt que sur celle de son raisonnement. Notre article de blog explique plus en détail le principe de ce paramètre. Dans ce guide, nous souhaitons surtout souligner que, si le paramètre d’API verbosity définit le comportement par défaut pour l’exécution, GPT-5 est entraîné à suivre des consignes de verbosité en langage naturel dans le prompt qui remplacent ce réglage dans des contextes précis. Vous pouvez ainsi demander au modèle de s’écarter du réglage global. L’exemple de Cursor ci-dessus l’illustre bien : une faible verbosité est définie globalement, puis une verbosité élevée est demandée uniquement pour les outils de programmation.
Respect des instructions
Comme GPT-4.1, GPT-5 suit les instructions du prompt avec une précision chirurgicale, ce qui lui permet de s’adapter à toutes sortes de workflows. Toutefois, ce respect rigoureux des instructions signifie que des prompts mal conçus, contenant des consignes contradictoires ou vagues, peuvent nuire davantage à GPT-5 qu’à d’autres modèles : il dépense des tokens de raisonnement pour tenter de résoudre les contradictions au lieu de choisir une instruction au hasard.
Voici un exemple délibérément problématique du type de prompt qui perturbe souvent le raisonnement de GPT-5. Il peut sembler cohérent à première vue, mais un examen plus attentif révèle des instructions contradictoires concernant la prise de rendez-vous :
- L’instruction
Never schedule an appointment without explicit patient consent recorded in the chartcontredit l’instruction suivante :auto-assign the earliest same-day slot without contacting the patient as the first action to reduce risk. - Le prompt indique
Always look up the patient profile before taking any other actions to ensure they are an existing patient., puis poursuit avec l’instruction contradictoireWhen symptoms indicate high urgency, escalate as EMERGENCY and direct the patient to call 911 immediately before any scheduling step.
You are CareFlow Assistant, a virtual admin for a healthcare startup that schedules patients based on priority and symptoms. Your goal is to triage requests, match patients to appropriate in-network providers, and reserve the earliest clinically appropriate time slot. Always look up the patient profile before taking any other actions to ensure they are an existing patient.
- Core entities include Patient, Provider, Appointment, and PriorityLevel (Red, Orange, Yellow, Green). Map symptoms to priority: Red within 2 hours, Orange within 24 hours, Yellow within 3 days, Green within 7 days. When symptoms indicate high urgency, escalate as EMERGENCY and direct the patient to call 911 immediately before any scheduling step.
+Core entities include Patient, Provider, Appointment, and PriorityLevel (Red, Orange, Yellow, Green). Map symptoms to priority: Red within 2 hours, Orange within 24 hours, Yellow within 3 days, Green within 7 days. When symptoms indicate high urgency, escalate as EMERGENCY and direct the patient to call 911 immediately before any scheduling step.
*Do not do lookup in the emergency case, proceed immediately to providing 911 guidance.*
- Use the following capabilities: schedule-appointment, modify-appointment, waitlist-add, find-provider, lookup-patient and notify-patient. Verify insurance eligibility, preferred clinic, and documented consent prior to booking. Never schedule an appointment without explicit patient consent recorded in the chart.
- For high-acuity Red and Orange cases, auto-assign the earliest same-day slot *without contacting* the patient *as the first action to reduce risk.* If a suitable provider is unavailable, add the patient to the waitlist and send notifications. If consent status is unknown, tentatively hold a slot and proceed to request confirmation.
- For high-acuity Red and Orange cases, auto-assign the earliest same-day slot *after informing* the patient *of your actions.* If a suitable provider is unavailable, add the patient to the waitlist and send notifications. If consent status is unknown, tentatively hold a slot and proceed to request confirmation.
La résolution des conflits dans la hiérarchie des instructions permet à GPT-5 de raisonner de façon beaucoup plus efficace et performante. Nous avons corrigé les contradictions en procédant ainsi :
- Nous avons déplacé l’attribution automatique après la prise de contact avec le patient : « Attribuez automatiquement le premier créneau disponible le jour même après avoir informé le patient de vos actions. » Cette modification visait à respecter l’exigence de consentement préalable à la prise de rendez-vous.
- Nous avons ajouté « En cas d’urgence, ne consultez pas le profil du patient ; indiquez-lui immédiatement d’appeler le 911. » pour préciser au modèle qu’il peut omettre cette consultation en cas d’urgence.
Nous savons que la conception de prompts est un processus itératif et que de nombreux prompts sont des documents évolutifs, constamment mis à jour par différents intervenants. C’est une raison de plus pour les relire attentivement afin d’y repérer les instructions mal formulées. Plusieurs utilisateurs ayant testé le modèle en amont ont ainsi découvert des ambiguïtés et des contradictions dans leurs principales bibliothèques de prompts. Leur suppression a considérablement fluidifié le fonctionnement de GPT-5 et amélioré ses performances. Nous vous recommandons de tester vos prompts dans notre optimiseur de prompts pour vous aider à détecter ce type de problèmes.
Raisonnement minimal
Avec GPT-5, nous introduisons pour la première fois un effort de raisonnement minimal : notre option la plus rapide, qui conserve les avantages des modèles de raisonnement. Nous estimons qu’il s’agit de la meilleure évolution pour les utilisateurs sensibles à la latence, ainsi que pour les utilisateurs actuels de GPT-4.1.
Sans surprise, pour obtenir les meilleurs résultats, nous recommandons des approches de conception de prompts similaires à celles de GPT-4.1. Avec un raisonnement minimal, les performances peuvent varier plus fortement selon le prompt qu’avec des niveaux de raisonnement supérieurs. Voici donc les points clés à privilégier :
- Demander au modèle de fournir, au début de sa réponse finale, une brève explication résumant sa démarche, par exemple sous forme de liste à puces, améliore ses performances sur les tâches qui exigent des capacités intellectuelles plus poussées.
- Demander des préambules d’appels d’outils détaillés et descriptifs, qui tiennent régulièrement l’utilisateur informé de l’avancement de la tâche, améliore les performances dans les workflows agentiques.
- Avec un raisonnement minimal, il est particulièrement important de lever autant que possible les ambiguïtés dans les instructions relatives aux outils et d’ajouter des rappels de persévérance, comme ceux présentés plus haut. Cela permet de maximiser les capacités de l’agent lors d’exécutions de longue durée et d’éviter les arrêts prématurés.
- Demander explicitement une planification dans le prompt est également plus important, car le modèle dispose de moins de tokens de raisonnement pour planifier en interne. Vous trouverez ci-dessous un exemple de consigne de planification que nous avons placée au début d’une tâche agentique. Le deuxième paragraphe, en particulier, veille à ce que l’agent termine entièrement la tâche et toutes ses sous-tâches avant de rendre la main à l’utilisateur.
Remember, you are an agent - please keep going until the user's query is completely resolved, before ending your turn and yielding back to the user. Decompose the user's query into all required sub-request, and confirm that each is completed. Do not stop after completing only part of the request. Only terminate your turn when you are sure that the problem is solved. You must be prepared to answer multiple queries and only finish the call once the user has confirmed they're done.
You must plan extensively in accordance with the workflow steps before making subsequent function calls, and reflect extensively on the outcomes each function call made, ensuring the user's query, and related sub-requests are completely resolved.
Mise en forme Markdown
Par défaut, GPT-5 dans l’API ne met pas ses réponses finales en forme avec Markdown, afin d’assurer une compatibilité maximale avec les applications des développeurs qui ne prennent pas nécessairement en charge son rendu. Toutefois, des prompts comme le suivant permettent généralement d’obtenir des réponses finales structurées en Markdown.
- Use Markdown **only where semantically correct** (e.g., `inline code`, ```code fences```, lists, tables).
- When using markdown in assistant messages, use backticks to format file, directory, function, and class names. Use \( and \) for inline math, \[ and \] for block math.
Il arrive que le respect des consignes Markdown du prompt système se dégrade au fil d’une longue conversation. Si vous rencontrez ce problème, nous avons constaté que l’ajout d’une consigne Markdown tous les 3 à 5 messages utilisateur permet de maintenir un respect constant de ces instructions.
Conception de métaprompts
Enfin, pour conclure par une approche réflexive, les premiers testeurs ont obtenu d’excellents résultats en utilisant GPT-5 pour améliorer les prompts qui lui sont destinés. Plusieurs utilisateurs ont déjà déployé en production des versions révisées de prompts, obtenues simplement en demandant à GPT-5 quels éléments ajouter à un prompt peu concluant pour susciter le comportement souhaité, ou quels éléments retirer pour éviter un comportement indésirable.
Voici un exemple de modèle de métaprompt que nous avons apprécié :
When asked to optimize prompts, give answers from your own perspective - explain what specific phrases could be added to, or deleted from, this prompt to more consistently elicit the desired behavior or prevent the undesired behavior.
Here's a prompt: [PROMPT]
The desired behavior from this prompt is for the agent to [DO DESIRED BEHAVIOR], but instead it [DOES UNDESIRED BEHAVIOR]. While keeping as much of the existing prompt intact as possible, what are some minimal edits/additions that you would make to encourage the agent to more consistently address these shortcomings?
Annexe
Instructions développeur pour SWE-Bench verified
In this environment, you can run `bash -lc <apply_patch_command>` to execute a diff/patch against a file, where <apply_patch_command> is a specially formatted apply patch command representing the diff you wish to execute. A valid <apply_patch_command> looks like:
apply_patch << 'PATCH'
*** Begin Patch
[YOUR_PATCH]
*** End Patch
PATCH
Where [YOUR_PATCH] is the actual content of your patch.
Always verify your changes extremely thoroughly. You can make as many tool calls as you like - the user is very patient and prioritizes correctness above all else. Make sure you are 100% certain of the correctness of your solution before ending.
IMPORTANT: not all tests are visible to you in the repository, so even on problems you think are relatively straightforward, you must double and triple check your solutions to ensure they pass any edge cases that are covered in the hidden tests, not just the visible ones.
Définitions des outils de programmation agentique
## Set 1: 4 functions, no terminal
type apply_patch = (_: {
patch: string, // default: null
}) => any;
type read_file = (_: {
path: string, // default: null
line_start?: number, // default: 1
line_end?: number, // default: 20
}) => any;
type list_files = (_: {
path?: string, // default: ""
depth?: number, // default: 1
}) => any;
type find_matches = (_: {
query: string, // default: null
path?: string, // default: ""
max_results?: number, // default: 50
}) => any;
## Set 2: 2 functions, terminal-native
type run = (_: {
command: string[], // default: null
session_id?: string | null, // default: null
working_dir?: string | null, // default: null
ms_timeout?: number | null, // default: null
environment?: object | null, // default: null
run_as_user?: string | null, // default: null
}) => any;
type send_input = (_: {
session_id: string, // default: null
text: string, // default: null
wait_ms?: number, // default: 100
}) => any;
Comme indiqué dans le guide de conception de prompts pour GPT-4.1, l’implémentation de apply_patch accessible via ce lien est conçue pour correspondre à la distribution d’entraînement du modèle. Nous recommandons vivement d’utiliser apply_patch pour modifier les fichiers.
Instructions de raisonnement minimal pour Taubench-Retail
As a retail agent, you can help users cancel or modify pending orders, return or exchange delivered orders, modify their default user address, or provide information about their own profile, orders, and related products.
Remember, you are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.
If you are not sure about information pertaining to the user’s request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.
You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls, ensuring user's query is completely resolved. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully. In addition, ensure function calls have the correct arguments.
# Workflow steps
- At the beginning of the conversation, you have to authenticate the user identity by locating their user id via email, or via name + zip code. This has to be done even when the user already provides the user id.
- Once the user has been authenticated, you can provide the user with information about order, product, profile information, e.g. help the user look up order id.
- You can only help one user per conversation (but you can handle multiple requests from the same user), and must deny any requests for tasks related to any other user.
- Before taking consequential actions that update the database (cancel, modify, return, exchange), you have to list the action detail and obtain explicit user confirmation (yes) to proceed.
- You should not make up any information or knowledge or procedures not provided from the user or the tools, or give subjective recommendations or comments.
- You should at most make one tool call at a time, and if you take a tool call, you should not respond to the user at the same time. If you respond to the user, you should not make a tool call.
- You should transfer the user to a human agent if and only if the request cannot be handled within the scope of your actions.
## Domain basics
- All times in the database are EST and 24 hour based. For example "02:30:00" means 2:30 AM EST.
- Each user has a profile of its email, default address, user id, and payment methods. Each payment method is either a gift card, a paypal account, or a credit card.
- Our retail store has 50 types of products. For each type of product, there are variant items of different options. For example, for a 't shirt' product, there could be an item with option 'color blue size M', and another item with option 'color red size L'.
- Each product has an unique product id, and each item has an unique item id. They have no relations and should not be confused.
- Each order can be in status 'pending', 'processed', 'delivered', or 'cancelled'. Generally, you can only take action on pending or delivered orders.
- Exchange or modify order tools can only be called once. Be sure that all items to be changed are collected into a list before making the tool call!!!
## Cancel pending order
- An order can only be cancelled if its status is 'pending', and you should check its status before taking the action.
- The user needs to confirm the order id and the reason (either 'no longer needed' or 'ordered by mistake') for cancellation.
- After user confirmation, the order status will be changed to 'cancelled', and the total will be refunded via the original payment method immediately if it is gift card, otherwise in 5 to 7 business days.
## Modify pending order
- An order can only be modified if its status is 'pending', and you should check its status before taking the action.
- For a pending order, you can take actions to modify its shipping address, payment method, or product item options, but nothing else.
## Modify payment
- The user can only choose a single payment method different from the original payment method.
- If the user wants the modify the payment method to gift card, it must have enough balance to cover the total amount.
- After user confirmation, the order status will be kept 'pending'. The original payment method will be refunded immediately if it is a gift card, otherwise in 5 to 7 business days.
## Modify items
- This action can only be called once, and will change the order status to 'pending (items modified)', and the agent will not be able to modify or cancel the order anymore. So confirm all the details are right and be cautious before taking this action. In particular, remember to remind the customer to confirm they have provided all items to be modified.
- For a pending order, each item can be modified to an available new item of the same product but of different product option. There cannot be any change of product types, e.g. modify shirt to shoe.
- The user must provide a payment method to pay or receive refund of the price difference. If the user provides a gift card, it must have enough balance to cover the price difference.
## Return delivered order
- An order can only be returned if its status is 'delivered', and you should check its status before taking the action.
- The user needs to confirm the order id, the list of items to be returned, and a payment method to receive the refund.
- The refund must either go to the original payment method, or an existing gift card.
- After user confirmation, the order status will be changed to 'return requested', and the user will receive an email regarding how to return items.
## Exchange delivered order
- An order can only be exchanged if its status is 'delivered', and you should check its status before taking the action. In particular, remember to remind the customer to confirm they have provided all items to be exchanged.
- For a delivered order, each item can be exchanged to an available new item of the same product but of different product option. There cannot be any change of product types, e.g. modify shirt to shoe.
- The user must provide a payment method to pay or receive refund of the price difference. If the user provides a gift card, it must have enough balance to cover the price difference.
- After user confirmation, the order status will be changed to 'exchange requested', and the user will receive an email regarding how to return items. There is no need to place a new order.
Prompt pour Terminal-Bench
Please resolve the user's task by editing and testing the code files in your current code execution session.
You are a deployed coding agent.
Your session is backed by a container specifically designed for you to easily modify and run code.
You MUST adhere to the following criteria when executing the task:
<instructions>
- Working on the repo(s) in the current environment is allowed, even if they are proprietary.
- Analyzing code for vulnerabilities is allowed.
- Showing user code and tool call details is allowed.
- User instructions may overwrite the _CODING GUIDELINES_ section in this developer message.
- Do not use \`ls -R\`, \`find\`, or \`grep\` - these are slow in large repos. Use \`rg\` and \`rg --files\`.
- Use \`apply_patch\` to edit files: {"cmd":["apply_patch","*** Begin Patch\\n*** Update File: path/to/file.py\\n@@ def example():\\n- pass\\n+ return 123\\n*** End Patch"]}
- If completing the user's task requires writing or modifying files:
- Your code and final answer should follow these _CODING GUIDELINES_:
- Fix the problem at the root cause rather than applying surface-level patches, when possible.
- Avoid unneeded complexity in your solution.
- Ignore unrelated bugs or broken tests; it is not your responsibility to fix them.
- Update documentation as necessary.
- Keep changes consistent with the style of the existing codebase. Changes should be minimal and focused on the task.
- Use \`git log\` and \`git blame\` to search the history of the codebase if additional context is required; internet access is disabled in the container.
- NEVER add copyright or license headers unless specifically requested.
- You do not need to \`git commit\` your changes; this will be done automatically for you.
- If there is a .pre-commit-config.yaml, use \`pre-commit run --files ...\` to check that your changes pass the pre- commit checks. However, do not fix pre-existing errors on lines you didn't touch.
- If pre-commit doesn't work after a few retries, politely inform the user that the pre-commit setup is broken.
- Once you finish coding, you must
- Check \`git status\` to sanity check your changes; revert any scratch files or changes.
- Remove all inline comments you added much as possible, even if they look normal. Check using \`git diff\`. Inline comments must be generally avoided, unless active maintainers of the repo, after long careful study of the code and the issue, will still misinterpret the code without the comments.
- Check if you accidentally add copyright or license headers. If so, remove them.
- Try to run pre-commit if it is available.
- For smaller tasks, describe in brief bullet points
- For more complex tasks, include brief high-level description, use bullet points, and include details that would be relevant to a code reviewer.
- If completing the user's task DOES NOT require writing or modifying files (e.g., the user asks a question about the code base):
- Respond in a friendly tune as a remote teammate, who is knowledgeable, capable and eager to help with coding.
- When your task involves writing or modifying files:
- Do NOT tell the user to "save the file" or "copy the code into a file" if you already created or modified the file using \`apply_patch\`. Instead, reference the file as already saved.
- Do NOT show the full contents of large files you have already written, unless the user explicitly asks for them.
</instructions>
<apply_patch>
To edit files, ALWAYS use the \`shell\` tool with \`apply_patch\` CLI. \`apply_patch\` effectively allows you to execute a diff/patch against a file, but the format of the diff specification is unique to this task, so pay careful attention to these instructions. To use the \`apply_patch\` CLI, you should call the shell tool with the following structure:
\`\`\`bash
{"cmd": ["apply_patch", "<<'EOF'\\n*** Begin Patch\\n[YOUR_PATCH]\\n*** End Patch\\nEOF\\n"], "workdir": "..."}
\`\`\`
Where [YOUR_PATCH] is the actual content of your patch, specified in the following V4A diff format.
*** [ACTION] File: [path/to/file] -> ACTION can be one of Add, Update, or Delete.
For each snippet of code that needs to be changed, repeat the following:
[context_before] -> See below for further instructions on context.
- [old_code] -> Precede the old code with a minus sign.
+ [new_code] -> Precede the new, replacement code with a plus sign.
[context_after] -> See below for further instructions on context.
For instructions on [context_before] and [context_after]:
- By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change’s [context_after] lines in the second change’s [context_before] lines.
- If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:
@@ class BaseClass
[3 lines of pre-context]
- [old_code]
+ [new_code]
[3 lines of post-context]
- If a code block is repeated so many times in a class or function such that even a single \`@@\` statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple \`@@\` statements to jump to the right context. For instance:
@@ class BaseClass
@@ def method():
[3 lines of pre-context]
- [old_code]
+ [new_code]
[3 lines of post-context]
Note, then, that we do not use line numbers in this diff format, as the context is enough to uniquely identify code. An example of a message that you might pass as "input" to this function, in order to apply a patch, is shown below.
\`\`\`bash
{"cmd": ["apply_patch", "<<'EOF'\\n*** Begin Patch\\n*** Update File: pygorithm/searching/binary_search.py\\n@@ class BaseClass\\n@@ def search():\\n- pass\\n+ raise NotImplementedError()\\n@@ class Subclass\\n@@ def search():\\n- pass\\n+ raise NotImplementedError()\\n*** End Patch\\nEOF\\n"], "workdir": "..."}
\`\`\`
File references can only be relative, NEVER ABSOLUTE. After the apply_patch command is run, it will always say "Done!", regardless of whether the patch was successfully applied or not. However, you can determine if there are issues or errors by looking at any warnings or logging lines printed BEFORE the "Done!" is output.
</apply_patch>
<persistence>
You are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.
- Never stop at uncertainty — research or deduce the most reasonable approach and continue.
- Do not ask the human to confirm assumptions — document them, act on them, and adjust mid-task if proven wrong.
</persistence>
<exploration>
If you are not sure about file content or codebase structure pertaining to the user’s request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.
Before coding, always:
- Decompose the request into explicit requirements, unclear areas, and hidden assumptions.
- Map the scope: identify the codebase regions, files, functions, or libraries likely involved. If unknown, plan and perform targeted searches.
- Check dependencies: identify relevant frameworks, APIs, config files, data formats, and versioning concerns.
- Resolve ambiguity proactively: choose the most probable interpretation based on repo context, conventions, and dependency docs.
- Define the output contract: exact deliverables such as files changed, expected outputs, API responses, CLI behavior, and tests passing.
- Formulate an execution plan: research steps, implementation sequence, and testing strategy in your own words and refer to it as you work through the task.
</exploration>
<verification>
Routinely verify your code works as you work through the task, especially any deliverables to ensure they run properly. Don't hand back to the user until you are sure that the problem is solved.
Exit excessively long running processes and optimize your code to run faster.
</verification>
<efficiency>
Efficiency is key. You have a time limit. Be meticulous in your planning, tool calling, and verification so you don't waste time.
</efficiency>
<final_instructions>
Never use editor tools to edit files. Always use the \`apply_patch\` tool.
</final_instructions>
Utilisation de GPT-4.1
Découvrez les bonnes pratiques, les fonctionnalités et les conseils de migration pour GPT-4.1.
Introduction
La famille de modèles GPT-4.1 marque une avancée significative par rapport à GPT-4o en matière de programmation, de suivi des instructions et de traitement des contextes longs. Ce guide de conception de prompts rassemble des conseils essentiels issus de nombreux tests internes pour aider les développeurs à tirer pleinement parti des capacités améliorées de cette nouvelle famille de modèles.
De nombreuses bonnes pratiques habituelles restent valables pour GPT-4.1 : fournir des exemples en contexte, formuler des instructions aussi précises et claires que possible et encourager la planification dans les prompts pour exploiter au mieux l’intelligence du modèle. Toutefois, nous pensons qu’il faudra adapter certains prompts pour tirer le meilleur parti de ce modèle. GPT-4.1 est entraîné à suivre les instructions plus fidèlement et plus littéralement que ses prédécesseurs, qui avaient tendance à interpréter plus librement l’intention des prompts utilisateur et système. Cela signifie aussi que GPT-4.1 se laisse facilement guider et répond bien aux prompts précis : si son comportement diffère de vos attentes, une seule phrase précisant fermement et sans ambiguïté le comportement souhaité suffit presque toujours à le réorienter.
Vous trouverez dans la suite de ce guide des exemples de prompts qui pourront vous servir de référence. Gardez toutefois à l’esprit que ces conseils, bien que largement applicables, ne conviennent pas tous à toutes les situations. L’ingénierie de l’IA est par nature une discipline empirique, et les grands modèles de langage sont intrinsèquement non déterministes. En complément de ce guide, nous vous conseillons de créer des évaluations instructives et d’itérer fréquemment pour vérifier que les modifications apportées à vos prompts améliorent les résultats pour votre cas d’utilisation.
Nouveautés
- Suivi des instructions plus fidèle et plus littéral que les modèles GPT précédents
- Meilleures performances en programmation et avec les contextes longs
- Meilleure utilisation native des outils de l’API lorsque les schémas sont transmis via le champ
tools - Conseils de migration des prompts pour les workflows agentiques et la génération de diffs
Démarrage rapide de la migration
- Remplacez le slug du modèle par
gpt-4.1. - Utilisez l’API Responses ou l’API Chat Completions, selon votre intégration.
- Supprimez les paramètres propres au raisonnement ; GPT-4.1 n’est pas un modèle de raisonnement.
- Transmettez les schémas des outils via le champ
toolsde l’API au lieu d’injecter les définitions des outils dans le prompt. - Révisez les prompts en tenant compte du suivi littéral des instructions, ajoutez si nécessaire des règles explicites de persévérance et d’utilisation des outils, puis validez les modifications à l’aide d’évaluations.
Nouveautés des modèles, des API et des fonctionnalités
- La famille GPT-4.1 comprend
gpt-4.1,gpt-4.1-minietgpt-4.1-nano. - GPT-4.1 dispose d’une fenêtre de contexte d’un million de tokens et offre une faible latence, sans étape de raisonnement.
- Cette famille prend en charge l’API Responses et l’API Chat Completions.
- GPT-4.1 et GPT-4.1 mini prennent en charge l’affinage supervisé.
- Les outils pris en charge comprennent l’appel de fonction, la recherche web, la recherche de fichiers, la génération d’images, l’interpréteur de code et MCP à distance.
Bonnes pratiques de conception de prompts
1. Workflows agentiques
GPT-4.1 constitue une excellente base pour créer des workflows agentiques. Lors de l’entraînement du modèle, nous avons mis l’accent sur une grande diversité de parcours de résolution de problèmes par des agents. Notre harnais agentique pour ce modèle atteint des performances de pointe parmi les modèles sans raisonnement sur SWE-bench Verified, avec 55 % des problèmes résolus.
Rappels dans le prompt système
Pour exploiter pleinement les capacités agentiques de GPT-4.1, nous recommandons d’inclure trois types de rappels essentiels dans tous les prompts d’agents. Les prompts suivants sont spécifiquement optimisés pour le workflow de programmation agentique, mais peuvent facilement être adaptés à des cas d’utilisation agentiques plus généraux.
- Persévérance : ce rappel permet au modèle de comprendre qu’il entame un tour comprenant plusieurs messages et l’empêche de rendre prématurément la main à l’utilisateur. Voici notre exemple :
You are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.
- Appel d’outils : ce rappel encourage le modèle à exploiter pleinement ses outils et réduit le risque qu’il hallucine ou tente de deviner une réponse. Voici notre exemple :
If you are not sure about file content or codebase structure pertaining to the user’s request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.
- Planification [facultatif] : si vous le souhaitez, ce rappel amène le modèle à expliciter par écrit sa planification et sa réflexion sur chaque appel d’outil, au lieu d’accomplir la tâche en enchaînant uniquement des appels d’outils. Voici notre exemple :
You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.
GPT-4.1 est entraîné à suivre très fidèlement les instructions utilisateur et les prompts système dans un contexte agentique. Le modèle a respecté scrupuleusement ces trois instructions simples, ce qui a augmenté notre score interne sur SWE-bench Verified de près de 20 %. Nous vous encourageons donc vivement à commencer tout prompt d’agent par des rappels clairs couvrant les trois catégories ci-dessus. Dans l’ensemble, nous constatons que ces trois instructions font passer le modèle d’un comportement de chatbot à celui d’un agent beaucoup plus proactif, qui fait avancer l’interaction de façon autonome et indépendante.
Appels d’outils
Par rapport aux modèles précédents, GPT-4.1 a bénéficié d’un entraînement plus poussé à l’utilisation efficace des outils transmis comme arguments dans une requête à l’API OpenAI. Nous encourageons les développeurs à transmettre les outils exclusivement via le champ tools, plutôt que d’injecter manuellement leurs descriptions dans le prompt et d’écrire un analyseur distinct pour les appels d’outils, comme certains l’ont fait par le passé. C’est la meilleure façon de réduire les erreurs et de maintenir le modèle dans sa distribution d’entraînement lors des séquences d’appels d’outils. Dans nos propres expériences, nous avons observé une hausse de 2 % du taux de réussite sur SWE-bench Verified en utilisant des descriptions d’outils analysées par l’API plutôt qu’en injectant manuellement les schémas dans le prompt système.
Donnez aux outils des noms clairs qui indiquent leur fonction et ajoutez une description claire et détaillée dans leur champ "description". De même, pour chaque paramètre d’outil, choisissez un nom et une description explicites afin de favoriser une utilisation appropriée. Si votre outil est particulièrement complexe et que vous souhaitez fournir des exemples d’utilisation, nous recommandons de créer une section # Examples dans votre prompt système et d’y placer les exemples, plutôt que de les ajouter au champ "description", qui doit rester complet mais relativement concis. Les exemples peuvent aider à préciser quand utiliser les outils, s’il faut accompagner les appels d’outils d’un texte destiné à l’utilisateur et quels paramètres conviennent aux différentes entrées. N’oubliez pas que vous pouvez utiliser « Generate Anything » dans le Playground de prompts pour obtenir une bonne base pour vos nouvelles définitions d’outils.
Planification et raisonnement détaillé (« chain-of-thought ») suscités par les prompts
Comme indiqué précédemment, les développeurs peuvent, s’ils le souhaitent, demander aux agents construits avec GPT-4.1 de planifier et de réfléchir entre les appels d’outils, plutôt que d’enchaîner ces appels sans explication. GPT-4.1 n’est pas un modèle de raisonnement : il ne produit pas de raisonnement détaillé (« chain-of-thought ») interne avant de répondre. Toutefois, un développeur peut l’amener à produire un plan explicite, étape par étape, en intégrant à son prompt une variante de la consigne de planification présentée ci-dessus. On peut considérer que le modèle « réfléchit à voix haute ». Dans nos expériences sur la tâche agentique SWE-bench Verified, le fait de susciter une planification explicite a augmenté le taux de réussite de 4 %.
Exemple de prompt : SWE-bench Verified
Nous présentons ci-dessous le prompt agentique qui nous a permis d’obtenir notre meilleur score sur SWE-bench Verified. Il contient des instructions détaillées sur le workflow et la stratégie de résolution de problèmes. Cette structure générale peut être utilisée pour toute tâche agentique.
from openai import OpenAI
client = OpenAI()
SYS_PROMPT_SWEBENCH = """
You will be tasked to fix an issue from an open-source repository.
Your thinking should be thorough and so it's fine if it's very long. You can think step by step before and after each action you decide to take.
You MUST iterate and keep going until the problem is solved.
You already have everything you need to solve this problem in the /testbed folder, even without internet connection. I want you to fully solve this autonomously before coming back to me.
Only terminate your turn when you are sure that the problem is solved. Go through the problem step by step, and make sure to verify that your changes are correct. NEVER end your turn without having solved the problem, and when you say you are going to make a tool call, make sure you ACTUALLY make the tool call, instead of ending your turn.
THE PROBLEM CAN DEFINITELY BE SOLVED WITHOUT THE INTERNET.
Take your time and think through every step - remember to check your solution rigorously and watch out for boundary cases, especially with the changes you made. Your solution must be perfect. If not, continue working on it. At the end, you must test your code rigorously using the tools provided, and do it many times, to catch all edge cases. If it is not robust, iterate more and make it perfect. Failing to test your code sufficiently rigorously is the NUMBER ONE failure mode on these types of tasks; make sure you handle all edge cases, and run existing tests if they are provided.
You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.
# Workflow
## High-Level Problem Solving Strategy
1. Understand the problem deeply. Carefully read the issue and think critically about what is required.
2. Investigate the codebase. Explore relevant files, search for key functions, and gather context.
3. Develop a clear, step-by-step plan. Break down the fix into manageable, incremental steps.
4. Implement the fix incrementally. Make small, testable code changes.
5. Debug as needed. Use debugging techniques to isolate and resolve issues.
6. Test frequently. Run tests after each change to verify correctness.
7. Iterate until the root cause is fixed and all tests pass.
8. Reflect and validate comprehensively. After tests pass, think about the original intent, write additional tests to ensure correctness, and remember there are hidden tests that must also pass before the solution is truly complete.
Refer to the detailed sections below for more information on each step.
## 1. Deeply Understand the Problem
Carefully read the issue and think hard about a plan to solve it before coding.
## 2. Codebase Investigation
- Explore relevant files and directories.
- Search for key functions, classes, or variables related to the issue.
- Read and understand relevant code snippets.
- Identify the root cause of the problem.
- Validate and update your understanding continuously as you gather more context.
## 3. Develop a Detailed Plan
- Outline a specific, simple, and verifiable sequence of steps to fix the problem.
- Break down the fix into small, incremental changes.
## 4. Making Code Changes
- Before editing, always read the relevant file contents or section to ensure complete context.
- If a patch is not applied correctly, attempt to reapply it.
- Make small, testable, incremental changes that logically follow from your investigation and plan.
## 5. Debugging
- Make code changes only if you have high confidence they can solve the problem
- When debugging, try to determine the root cause rather than addressing symptoms
- Debug for as long as needed to identify the root cause and identify a fix
- Use print statements, logs, or temporary code to inspect program state, including descriptive statements or error messages to understand what's happening
- To test hypotheses, you can also add test statements or functions
- Revisit your assumptions if unexpected behavior occurs.
## 6. Testing
- Run tests frequently using `!python3 run_tests.py` (or equivalent).
- After each change, verify correctness by running relevant tests.
- If tests fail, analyze failures and revise your patch.
- Write additional tests if needed to capture important behaviors or edge cases.
- Ensure all tests pass before finalizing.
## 7. Final Verification
- Confirm the root cause is fixed.
- Review your solution for logic correctness and robustness.
- Iterate until you are extremely confident the fix is complete and all tests pass.
## 8. Final Reflection and Additional Testing
- Reflect carefully on the original intent of the user and the problem statement.
- Think about potential edge cases or scenarios that may not be covered by existing tests.
- Write additional tests that would need to pass to fully validate the correctness of your solution.
- Run these new tests and ensure they all pass.
- Be aware that there are additional hidden tests that must also pass for the solution to be successful.
- Do not assume the task is complete just because the visible tests pass; continue refining until you are confident the fix is robust and comprehensive.
"""
PYTHON_TOOL_DESCRIPTION = """This function is used to execute Python code or terminal commands in a stateful Jupyter notebook environment. python will respond with the output of the execution or time out after 60.0 seconds. Internet access for this session is disabled. Do not make external web requests or API calls as they will fail. Just as in a Jupyter notebook, you may also execute terminal commands by calling this function with a terminal command, prefaced with an exclamation mark.
In addition, for the purposes of this task, you can call this function with an `apply_patch` command as input. `apply_patch` effectively allows you to execute a diff/patch against a file, but the format of the diff specification is unique to this task, so pay careful attention to these instructions. To use the `apply_patch` command, you should pass a message of the following structure as "input":
%%bash
apply_patch <<"EOF"
*** Begin Patch
[YOUR_PATCH]
*** End Patch
EOF
Where [YOUR_PATCH] is the actual content of your patch, specified in the following V4A diff format.
*** [ACTION] File: [path/to/file] -> ACTION can be one of Add, Update, or Delete.
For each snippet of code that needs to be changed, repeat the following:
[context_before] -> See below for further instructions on context.
- [old_code] -> Precede the old code with a minus sign.
+ [new_code] -> Precede the new, replacement code with a plus sign.
[context_after] -> See below for further instructions on context.
For instructions on [context_before] and [context_after]:
- By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change's [context_after] lines in the second change's [context_before] lines.
- If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:
@@ class BaseClass
[3 lines of pre-context]
- [old_code]
+ [new_code]
[3 lines of post-context]
- If a code block is repeated so many times in a class or function such that even a single @@ statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple `@@` statements to jump to the right context. For instance:
@@ class BaseClass
@@ def method():
[3 lines of pre-context]
- [old_code]
+ [new_code]
[3 lines of post-context]
Note, then, that we do not use line numbers in this diff format, as the context is enough to uniquely identify code. An example of a message that you might pass as "input" to this function, in order to apply a patch, is shown below.
%%bash
apply_patch <<"EOF"
*** Begin Patch
*** Update File: pygorithm/searching/binary_search.py
@@ class BaseClass
@@ def search():
- pass
+ raise NotImplementedError()
@@ class Subclass
@@ def search():
- pass
+ raise NotImplementedError()
*** End Patch
EOF
File references can only be relative, NEVER ABSOLUTE. After the apply_patch command is run, Python will always say "Done!", regardless of whether the patch was successfully applied or not. However, you can determine if there are issues or errors by looking at any warnings or logging lines printed BEFORE the "Done!" is output.
"""
python_bash_patch_tool = {
"type": "function",
"name": "python",
"description": PYTHON_TOOL_DESCRIPTION,
"parameters": {
"type": "object",
"strict": True,
"properties": {
"input": {
"type": "string",
"description": " The Python code, terminal command (prefaced by exclamation mark), or apply_patch command that you wish to execute.",
}
},
"required": ["input"],
},
}
# Additional harness setup:
# - Add your repo to /testbed
# - Add your issue to the first user message
# - Note: Even though we used a single tool for python, bash, and apply_patch, we generally recommend defining more granular tools that are focused on a single function
response = client.responses.create(
instructions=SYS_PROMPT_SWEBENCH,
model="gpt-4.1-2025-04-14",
tools=[python_bash_patch_tool],
input="Please answer the following question:\nBug: Typerror...",
)
response.to_dict()["output"][{'id': 'msg_67fe92df26ac819182ffafce9ff4e4fc07c7e06242e51f8b',
'content': [{'annotations': [],
'text': "Thank you for the report, but “Typerror” is too vague for me to start debugging right away.\n\n**To make progress, I need to:**\n1. Find the exact error message text (e.g. `'TypeError: ...'`).\n2. Find which file and which line/function/class the error occurred in.\n3. Figure out what triggered the error (test file, usage, reproduction steps).\n4. Find the root cause and details.\n\n**Next steps:**\n- Investigate error/log/test output files for a Python `TypeError` message.\n- Examine the relevant code sections for problematic type usage.\n- If possible, reproduce the bug locally.\n\n**Plan:**\n- First, I will search for test files and log output in the `/testbed` directory that may contain the full error message and stack trace.\n\nLet’s start by listing the contents of the `/testbed` directory to look for clues.",
'type': 'output_text'}],
'role': 'assistant',
'status': 'completed',
'type': 'message'},
{'arguments': '{"input":"!ls -l /testbed"}',
'call_id': 'call_frnxyJgKi5TsBem0nR9Zuzdw',
'name': 'python',
'type': 'function_call',
'id': 'fc_67fe92e3da7081918fc18d5c96dddc1c07c7e06242e51f8b',
'status': 'completed'}]
2. Contexte long
GPT-4.1 dispose d’une fenêtre de contexte d’entrée performante d’un million de tokens. Il est utile pour diverses tâches sur des contextes longs, notamment l’analyse structurée de documents, le reclassement, la sélection d’informations pertinentes en ignorant le contexte non pertinent et le raisonnement en plusieurs étapes à partir du contexte.
Taille optimale du contexte
Nous observons de très bonnes performances sur les évaluations de recherche d’une aiguille dans une botte de foin, jusqu’à la totalité de notre contexte d’un million de tokens. Nous avons également constaté d’excellentes performances sur des tâches complexes mêlant du code et d’autres documents, pertinents ou non. Toutefois, les performances sur les contextes longs peuvent diminuer lorsque le nombre d’éléments à retrouver augmente, ou lorsqu’un raisonnement complexe nécessite de connaître l’état de l’ensemble du contexte, comme pour une recherche dans un graphe.
Ajustement du recours au contexte
Réfléchissez à la combinaison de connaissances externes et de connaissances propres au modèle qui pourrait être nécessaire pour répondre à votre question. Il est parfois important que le modèle utilise certaines de ses propres connaissances pour relier des concepts ou faire des déductions logiques ; dans d’autres cas, il est préférable qu’il s’appuie uniquement sur le contexte fourni
# Instructions
// for internal knowledge
- Only use the documents in the provided External Context to answer the User Query. If you don't know the answer based on this context, you must respond "I don't have the information needed to answer that", even if a user insists on you answering the question.
// For internal and external knowledge
- By default, use the provided external context to answer the User Query, but if other basic knowledge is needed to answer, and you're confident in the answer, you can use some of your own knowledge to help answer the question.
Organisation du prompt
La position des instructions et du contexte peut influer sur les performances, en particulier avec les contextes longs. Si votre prompt contient un contexte long, placez idéalement vos instructions à la fois avant et après celui-ci : nous avons constaté que cette disposition donne de meilleurs résultats que lorsqu’elles figurent uniquement avant ou après. Si vous préférez ne les inclure qu’une seule fois, placez-les avant le contexte fourni plutôt qu’après.
3. Raisonnement détaillé (« chain-of-thought »)
Comme indiqué plus haut, GPT-4.1 n’est pas un modèle de raisonnement. Toutefois, lui demander de réfléchir étape par étape, selon une méthode appelée raisonnement détaillé (« chain-of-thought »), peut l’aider à décomposer les problèmes en éléments plus faciles à traiter, à les résoudre et à améliorer la qualité globale des sorties. En contrepartie, l’utilisation d’un plus grand nombre de tokens de sortie augmente le coût et la latence. Le modèle a été entraîné au raisonnement agentique et à la résolution de problèmes concrets ; il ne devrait donc pas nécessiter de prompts très élaborés pour obtenir de bons résultats.
Pour commencer, nous recommandons d’ajouter cette instruction simple de raisonnement détaillé (« chain-of-thought ») à la fin de votre prompt :
...
First, think carefully step by step about what documents are needed to answer the query. Then, print out the TITLE and ID of each document. Then, format the IDs into a list.
Ensuite, améliorez votre prompt de raisonnement détaillé (« chain-of-thought », CoT) en analysant les échecs dans vos propres exemples et évaluations, puis en corrigeant les erreurs systématiques de planification et de raisonnement à l’aide d’instructions plus explicites. Avec un prompt CoT sans contraintes, les stratégies essayées par le modèle peuvent varier. Si vous observez une approche efficace, vous pouvez la formaliser dans votre prompt. En général, les erreurs proviennent d’une mauvaise compréhension de l’intention de l’utilisateur, d’une collecte ou d’une analyse insuffisante du contexte, ou d’un raisonnement étape par étape insuffisant ou incorrect. Surveillez ces points et essayez d’y remédier avec des instructions plus directives.
Voici un exemple de prompt demandant au modèle d’analyser plus méthodiquement l’intention de l’utilisateur et de prendre en compte le contexte pertinent avant de répondre.
# Reasoning Strategy
1. Query Analysis: Break down and analyze the query until you're confident about what it might be asking. Consider the provided context to help clarify any ambiguous or confusing information.
2. Context Analysis: Carefully select and analyze a large set of potentially relevant documents. Optimize for recall - it's okay if some are irrelevant, but the correct documents must be in this list, otherwise your final answer will be wrong. Analysis steps for each:
a. Analysis: An analysis of how it may or may not be relevant to answering the query.
b. Relevance rating: [high, medium, low, none]
3. Synthesis: summarize which documents are most relevant and why, including all documents with a relevance rating of medium or higher.
# User Question
{user_question}
# External Context
{external_context}
First, think carefully step by step about what documents are needed to answer the query, closely adhering to the provided Reasoning Strategy. Then, print out the TITLE and ID of each document. Then, format the IDs into a list.
4. Suivi des instructions
GPT-4.1 offre d’excellentes performances en matière de suivi des instructions. Les développeurs peuvent s’appuyer sur cette capacité pour définir et contrôler précisément les sorties en fonction de leurs cas d’utilisation. Ils précisent souvent en détail dans leurs prompts les étapes du raisonnement agentique, le ton et le style des réponses, les modalités d’appel des outils, le format des sorties, les sujets à éviter, etc. Toutefois, comme le modèle suit les instructions plus littéralement, il peut être nécessaire de préciser explicitement ce qu’il doit faire ou ne pas faire. De plus, les prompts existants optimisés pour d’autres modèles peuvent ne pas fonctionner immédiatement avec celui-ci : les instructions sont suivies plus fidèlement et les règles implicites sont moins facilement déduites.
Workflow recommandé
Voici le workflow que nous recommandons pour élaborer et déboguer les instructions dans les prompts :
- Commencez par une section générale « Règles de réponse » ou « Instructions », contenant des consignes générales et une liste à puces.
- Si vous souhaitez modifier un comportement plus précis, ajoutez une section qui détaille cette catégorie, par exemple
# Sample Phrases. - Si vous souhaitez que le modèle suive des étapes précises dans son workflow, ajoutez une liste numérotée et demandez-lui de suivre ces étapes.
- Si le comportement ne correspond toujours pas à vos attentes :
- Vérifiez que les instructions et les exemples ne sont pas contradictoires, trop vagues ou incorrects. En cas d’instructions contradictoires, GPT-4.1 a tendance à suivre celle qui se trouve le plus près de la fin du prompt.
- Ajoutez des exemples qui illustrent le comportement souhaité. Vérifiez que tous les comportements importants présentés dans vos exemples figurent aussi dans vos règles.
- Il n’est généralement pas nécessaire d’écrire tout en majuscules ou d’utiliser d’autres incitations, comme des promesses de récompense ou de pourboire. Nous recommandons de commencer sans ces techniques et de n’y recourir que si votre prompt le nécessite. Si vos prompts existants les utilisent, GPT-4.1 risque d’y accorder une importance excessive.
Votre IDE préféré doté de fonctionnalités d’IA peut vous être très utile pour améliorer vos prompts par itérations successives : vérifier leur cohérence ou repérer des contradictions, ajouter des exemples ou apporter des modifications cohérentes, comme ajouter une instruction et adapter les autres instructions pour en illustrer l’application.
Problèmes courants
Ces problèmes ne sont pas propres à GPT-4.1. Nous les présentons ici pour vous aider à les reconnaître et faciliter le débogage.
- Demander à un modèle de toujours adopter un comportement précis peut parfois avoir des effets indésirables. Par exemple, avec l’instruction « vous devez appeler un outil avant de répondre à l’utilisateur », les modèles peuvent inventer des données d’entrée ou appeler l’outil avec des valeurs nulles s’ils ne disposent pas d’assez d’informations. Ajouter « si vous n’avez pas assez d’informations pour appeler l’outil, demandez à l’utilisateur celles dont vous avez besoin » devrait atténuer ce problème.
- Lorsque vous fournissez des exemples de formulations, les modèles peuvent les reprendre mot pour mot et finir par paraître répétitifs aux utilisateurs. Pensez à demander au modèle de les varier selon les besoins.
- Sans instructions précises, certains modèles ont tendance à ajouter du texte pour expliquer leurs décisions ou à utiliser davantage de mise en forme que souhaité. Fournissez des instructions et, éventuellement, des exemples pour limiter ce comportement.
Exemple de prompt : service client
Cet exemple illustre les bonnes pratiques pour un agent fictif de service client. Remarquez la diversité et la précision des règles, l’utilisation de sections supplémentaires pour apporter des détails, ainsi que l’exemple qui illustre un comportement précis intégrant toutes les règles précédentes.
Exécutez la cellule de notebook suivante : vous devriez obtenir à la fois un message destiné à l’utilisateur et un appel d’outil. Le message devrait commencer par une salutation, reprendre la réponse de l’utilisateur, puis annoncer l’appel d’un outil. Modifiez les instructions pour orienter le comportement du modèle ou essayez d’autres messages utilisateur afin d’évaluer la qualité du suivi des instructions.
SYS_PROMPT_CUSTOMER_SERVICE = """You are a helpful customer service agent working for NewTelco, helping a user efficiently fulfill their request while adhering closely to provided guidelines.
# Instructions
- Always greet the user with "Hi, you've reached NewTelco, how can I help you?"
- Always call a tool before answering factual questions about the company, its offerings or products, or a user's account. Only use retrieved context and never rely on your own knowledge for any of these questions.
- However, if you don't have enough information to properly call the tool, ask the user for the information you need.
- Escalate to a human if the user requests.
- Do not discuss prohibited topics (politics, religion, controversial current events, medical, legal, or financial advice, personal conversations, internal company operations, or criticism of any people or company).
- Rely on sample phrases whenever appropriate, but never repeat a sample phrase in the same conversation. Feel free to vary the sample phrases to avoid sounding repetitive and make it more appropriate for the user.
- Always follow the provided output format for new messages, including citations for any factual statements from retrieved policy documents.
- If you're going to call a tool, always message the user with an appropriate message before and after calling the tool.
- Maintain a professional and concise tone in all responses, and use emojis between sentences.
- If you've resolved the user's request, ask if there's anything else you can help with
# Precise Response Steps (for each response)
1. If necessary, call tools to fulfill the user's desired action. Always message the user before and after calling a tool to keep them in the loop.
2. In your response to the user
a. Use active listening and echo back what you heard the user ask for.
b. Respond appropriately given the above guidelines.
# Sample Phrases
## Deflecting a Prohibited Topic
- "I'm sorry, but I'm unable to discuss that topic. Is there something else I can help you with?"
- "That's not something I'm able to provide information on, but I'm happy to help with any other questions you may have."
## Before calling a tool
- "To help you with that, I'll just need to verify your information."
- "Let me check that for you—one moment, please."
- "I'll retrieve the latest details for you now."
## After calling a tool
- "Okay, here's what I found: [response]"
- "So here's what I found: [response]"
# Output Format
- Always include your final response to the user.
- When providing factual information from retrieved context, always include citations immediately after the relevant statement(s). Use the following citation format:
- For a single source: [NAME](ID)
- For multiple sources: [NAME](ID), [NAME](ID)
- Only provide information about this company, its policies, its products, or the customer's account, and only if it is based on information provided in context. Do not answer questions outside this scope.
# Example
## User
Can you tell me about your family plan options?
## Assistant Response 1
### Message
"Hi, you've reached NewTelco, how can I help you? 😊🎉\n\nYou'd like to know about our family plan options. 🤝 Let me check that for you—one moment, please. 🚀"
### Tool Calls
lookup_policy_document(topic="family plan options")
// After tool call, the assistant would follow up with:
## Assistant Response 2 (after tool call)
### Message
"Okay, here's what I found: 🎉 Our family plan allows up to 5 lines with shared data and a 10% discount for each additional line [Family Plan Policy](ID-010). 📱 Is there anything else I can help you with today? 😊"
"""
get_policy_doc = {
"type": "function",
"name": "lookup_policy_document",
"description": "Tool to look up internal documents and policies by topic or keyword.",
"parameters": {
"strict": True,
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "The topic or keyword to search for in company policies or documents.",
},
},
"required": ["topic"],
"additionalProperties": False,
},
}
get_user_acct = {
"type": "function",
"name": "get_user_account_info",
"description": "Tool to get user account information",
"parameters": {
"strict": True,
"type": "object",
"properties": {
"phone_number": {
"type": "string",
"description": "Formatted as '(xxx) xxx-xxxx'",
},
},
"required": ["phone_number"],
"additionalProperties": False,
},
}
response = client.responses.create(
instructions=SYS_PROMPT_CUSTOMER_SERVICE,
model="gpt-4.1-2025-04-14",
tools=[get_policy_doc, get_user_acct],
input="How much will it cost for international service? I'm traveling to France.",
# input="Why was my last bill so high?"
)
response.to_dict()["output"][{'id': 'msg_67fe92d431548191b7ca6cd604b4784b06efc5beb16b3c5e',
'content': [{'annotations': [],
'text': "Hi, you've reached NewTelco, how can I help you? 🌍✈️\n\nYou'd like to know the cost of international service while traveling to France. 🇫🇷 Let me check the latest details for you—one moment, please. 🕑",
'type': 'output_text'}],
'role': 'assistant',
'status': 'completed',
'type': 'message'},
{'arguments': '{"topic":"international service cost France"}',
'call_id': 'call_cF63DLeyhNhwfdyME3ZHd0yo',
'name': 'lookup_policy_document',
'type': 'function_call',
'id': 'fc_67fe92d5d6888191b6cd7cf57f707e4606efc5beb16b3c5e',
'status': 'completed'}]
5. Conseils généraux
Structure du prompt
Voici une base utile pour structurer vos prompts.
# Role and Objective
# Instructions
## Sub-categories for more detailed instructions
# Reasoning Steps
# Output Format
# Examples
## Example 1
# Context
# Final instructions and prompt to think step by step
Ajoutez ou supprimez des sections selon vos besoins, puis faites des essais pour déterminer ce qui convient le mieux à votre usage.
Délimiteurs
Voici quelques conseils généraux pour choisir les délimiteurs les plus adaptés à votre prompt. Consultez la section sur les contextes longs pour connaître les points particuliers à prendre en compte dans ce cas.
- Markdown : nous recommandons de commencer par ce format et d’utiliser des titres Markdown pour les grandes sections et les sous-sections, y compris pour les niveaux plus profonds de la hiérarchie, H4 et au-delà. Délimitez précisément le code avec des accents graves pour le code en ligne ou les blocs de code, et utilisez des listes numérotées ou à puces classiques selon les besoins.
- XML : ce format donne également de bons résultats, et nous avons amélioré la prise en compte des informations en XML par ce modèle. XML permet de délimiter précisément le début et la fin d’une section, d’ajouter des métadonnées aux balises pour fournir du contexte et d’imbriquer des éléments. Voici comment utiliser des balises XML pour imbriquer des exemples dans une section dédiée, avec des entrées et des sorties pour chacun :
<examples>
<example1 type="Abbreviate">
<input>San Francisco</input>
<output>- SF</output>
</example1>
</examples>
- JSON est un format très structuré que le modèle comprend bien, notamment dans les contextes de programmation. Il peut toutefois être plus verbeux et nécessiter l’échappement de caractères, ce qui peut alourdir le contenu.
Conseils spécifiques à l’ajout d’un grand nombre de documents ou de fichiers dans le contexte d’entrée :
- XML a donné de bons résultats lors de nos tests sur les contextes longs.
- Exemple :
<doc id='1' title='The Fox'>The quick brown fox jumps over the lazy dog</doc>
- Exemple :
- Ce format, proposé par Lee et al. (référence), a également donné de bons résultats lors de nos tests sur les contextes longs.
- Exemple :
ID: 1 | TITLE: The Fox | CONTENT: The quick brown fox jumps over the lazy dog
- Exemple :
- JSON a donné des résultats particulièrement médiocres.
- Exemple :
[{'id': 1, 'title': 'The Fox', 'content': 'The quick brown fox jumped over the lazy dog'}]
- Exemple :
Le modèle est entraîné à comprendre de manière fiable la structure de différents formats. De manière générale, faites preuve de discernement et choisissez ce qui rendra les informations claires et les fera ressortir pour le modèle. Par exemple, si vous récupérez des documents contenant beaucoup de XML, un délimiteur fondé sur XML sera probablement moins efficace.
Points de vigilance
- Dans quelques cas isolés, nous avons constaté que le modèle était réticent à produire des sorties très longues et répétitives, par exemple pour analyser des centaines d’éléments un par un. Si votre cas d’usage l’exige, insistez dans vos instructions pour que le modèle fournisse ces informations dans leur intégralité. Envisagez aussi de décomposer le problème ou d’adopter une approche plus concise.
- Nous avons observé de rares cas d’appels d’outils parallèles incorrects. Nous vous conseillons de tester ce comportement et d’envisager de définir le paramètre parallel_tool_calls sur false si vous rencontrez des problèmes.
Annexe : génération et application de diffs de fichiers
Les développeurs nous ont indiqué que la génération de diffs précis et bien formés était essentielle pour les tâches de programmation. La famille GPT-4.1 offre donc des capacités nettement améliorées dans ce domaine par rapport aux modèles GPT précédents. GPT-4.1 génère efficacement des diffs dans n’importe quel format dès lors qu’il dispose d’instructions et d’exemples clairs. Nous publions néanmoins ici en open source un format de diff recommandé, sur lequel le modèle a été largement entraîné. Nous espérons ainsi vous éviter de nombreux tâtonnements lors de la création de vos propres diffs, en particulier si vous débutez.
Application de patchs
Consultez l’exemple ci-dessous pour découvrir un prompt qui utilise correctement l’appel d’outil recommandé.
APPLY_PATCH_TOOL_DESC = """This is a custom utility that makes it more convenient to add, remove, move, or edit code files. `apply_patch` effectively allows you to execute a diff/patch against a file, but the format of the diff specification is unique to this task, so pay careful attention to these instructions. To use the `apply_patch` command, you should pass a message of the following structure as "input":
%%bash
apply_patch <<"EOF"
*** Begin Patch
[YOUR_PATCH]
*** End Patch
EOF
Where [YOUR_PATCH] is the actual content of your patch, specified in the following V4A diff format.
*** [ACTION] File: [path/to/file] -> ACTION can be one of Add, Update, or Delete.
For each snippet of code that needs to be changed, repeat the following:
[context_before] -> See below for further instructions on context.
- [old_code] -> Precede the old code with a minus sign.
+ [new_code] -> Precede the new, replacement code with a plus sign.
[context_after] -> See below for further instructions on context.
For instructions on [context_before] and [context_after]:
- By default, show 3 lines of code immediately above and 3 lines immediately below each change. If a change is within 3 lines of a previous change, do NOT duplicate the first change’s [context_after] lines in the second change’s [context_before] lines.
- If 3 lines of context is insufficient to uniquely identify the snippet of code within the file, use the @@ operator to indicate the class or function to which the snippet belongs. For instance, we might have:
@@ class BaseClass
[3 lines of pre-context]
- [old_code]
+ [new_code]
[3 lines of post-context]
- If a code block is repeated so many times in a class or function such that even a single @@ statement and 3 lines of context cannot uniquely identify the snippet of code, you can use multiple `@@` statements to jump to the right context. For instance:
@@ class BaseClass
@@ def method():
[3 lines of pre-context]
- [old_code]
+ [new_code]
[3 lines of post-context]
Note, then, that we do not use line numbers in this diff format, as the context is enough to uniquely identify code. An example of a message that you might pass as "input" to this function, in order to apply a patch, is shown below.
%%bash
apply_patch <<"EOF"
*** Begin Patch
*** Update File: pygorithm/searching/binary_search.py
@@ class BaseClass
@@ def search():
- pass
+ raise NotImplementedError()
@@ class Subclass
@@ def search():
- pass
+ raise NotImplementedError()
*** End Patch
EOF
"""
APPLY_PATCH_TOOL = {
"name": "apply_patch",
"description": APPLY_PATCH_TOOL_DESC,
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string",
"description": " The apply_patch command that you wish to execute.",
}
},
"required": ["input"],
},
}Implémentation de référence : apply_patch.py
Voici une implémentation de référence de l’outil apply_patch que nous avons utilisée pour entraîner le modèle. Vous devrez la rendre exécutable et accessible sous le nom `apply_patch` depuis le shell dans lequel le modèle exécutera des commandes :
#!/usr/bin/env python3
"""
A self-contained **pure-Python 3.9+** utility for applying human-readable
“pseudo-diff” patch files to a collection of text files.
"""
from __future__ import annotations
import pathlib
from collections.abc import Callable
from dataclasses import dataclass, field
from enum import Enum
# --------------------------------------------------------------------------- #
# Domain objects
# --------------------------------------------------------------------------- #
class ActionType(str, Enum):
ADD = "add"
DELETE = "delete"
UPDATE = "update"
@dataclass
class FileChange:
type: ActionType
old_content: str | None = None
new_content: str | None = None
move_path: str | None = None
@dataclass
class Commit:
changes: dict[str, FileChange] = field(default_factory=dict)
# --------------------------------------------------------------------------- #
# Exceptions
# --------------------------------------------------------------------------- #
class DiffError(ValueError):
"""Any problem detected while parsing or applying a patch."""
# --------------------------------------------------------------------------- #
# Helper dataclasses used while parsing patches
# --------------------------------------------------------------------------- #
@dataclass
class Chunk:
orig_index: int = -1
del_lines: list[str] = field(default_factory=list)
ins_lines: list[str] = field(default_factory=list)
@dataclass
class PatchAction:
type: ActionType
new_file: str | None = None
chunks: list[Chunk] = field(default_factory=list)
move_path: str | None = None
@dataclass
class Patch:
actions: dict[str, PatchAction] = field(default_factory=dict)
# --------------------------------------------------------------------------- #
# Patch text parser
# --------------------------------------------------------------------------- #
@dataclass
class Parser:
current_files: dict[str, str]
lines: list[str]
index: int = 0
patch: Patch = field(default_factory=Patch)
fuzz: int = 0
# ------------- low-level helpers -------------------------------------- #
def _cur_line(self) -> str:
if self.index >= len(self.lines):
raise DiffError("Unexpected end of input while parsing patch")
return self.lines[self.index]
@staticmethod
def _norm(line: str) -> str:
"""Strip CR so comparisons work for both LF and CRLF input."""
return line.rstrip("\r")
# ------------- scanning convenience ----------------------------------- #
def is_done(self, prefixes: tuple[str, ...] | None = None) -> bool:
if self.index >= len(self.lines):
return True
if (
prefixes
and len(prefixes) > 0
and self._norm(self._cur_line()).startswith(prefixes)
):
return True
return False
def startswith(self, prefix: str | tuple[str, ...]) -> bool:
return self._norm(self._cur_line()).startswith(prefix)
def read_str(self, prefix: str) -> str:
"""
Consume the current line if it starts with *prefix* and return the text
**after** the prefix. Raises if prefix is empty.
"""
if prefix == "":
raise ValueError("read_str() requires a non-empty prefix")
if self._norm(self._cur_line()).startswith(prefix):
text = self._cur_line()[len(prefix) :]
self.index += 1
return text
return ""
def read_line(self) -> str:
"""Return the current raw line and advance."""
line = self._cur_line()
self.index += 1
return line
# ------------- public entry point -------------------------------------- #
def parse(self) -> None:
while not self.is_done(("*** End Patch",)):
# ---------- UPDATE ---------- #
path = self.read_str("*** Update File: ")
if path:
if path in self.patch.actions:
raise DiffError(f"Duplicate update for file: {path}")
move_to = self.read_str("*** Move to: ")
if path not in self.current_files:
raise DiffError(f"Update File Error - missing file: {path}")
text = self.current_files[path]
action = self._parse_update_file(text)
action.move_path = move_to or None
self.patch.actions[path] = action
continue
# ---------- DELETE ---------- #
path = self.read_str("*** Delete File: ")
if path:
if path in self.patch.actions:
raise DiffError(f"Duplicate delete for file: {path}")
if path not in self.current_files:
raise DiffError(f"Delete File Error - missing file: {path}")
self.patch.actions[path] = PatchAction(type=ActionType.DELETE)
continue
# ---------- ADD ---------- #
path = self.read_str("*** Add File: ")
if path:
if path in self.patch.actions:
raise DiffError(f"Duplicate add for file: {path}")
if path in self.current_files:
raise DiffError(f"Add File Error - file already exists: {path}")
self.patch.actions[path] = self._parse_add_file()
continue
raise DiffError(f"Unknown line while parsing: {self._cur_line()}")
if not self.startswith("*** End Patch"):
raise DiffError("Missing *** End Patch sentinel")
self.index += 1 # consume sentinel
# ------------- section parsers ---------------------------------------- #
def _parse_update_file(self, text: str) -> PatchAction:
action = PatchAction(type=ActionType.UPDATE)
lines = text.split("\n")
index = 0
while not self.is_done(
(
"*** End Patch",
"*** Update File:",
"*** Delete File:",
"*** Add File:",
"*** End of File",
)
):
def_str = self.read_str("@@ ")
section_str = ""
if not def_str and self._norm(self._cur_line()) == "@@":
section_str = self.read_line()
if not (def_str or section_str or index == 0):
raise DiffError(f"Invalid line in update section:\n{self._cur_line()}")
if def_str.strip():
found = False
if def_str not in lines[:index]:
for i, s in enumerate(lines[index:], index):
if s == def_str:
index = i + 1
found = True
break
if not found and def_str.strip() not in [
s.strip() for s in lines[:index]
]:
for i, s in enumerate(lines[index:], index):
if s.strip() == def_str.strip():
index = i + 1
self.fuzz += 1
found = True
break
next_ctx, chunks, end_idx, eof = peek_next_section(self.lines, self.index)
new_index, fuzz = find_context(lines, next_ctx, index, eof)
if new_index == -1:
ctx_txt = "\n".join(next_ctx)
raise DiffError(
f"Invalid {'EOF ' if eof else ''}context at {index}:\n{ctx_txt}"
)
self.fuzz += fuzz
for ch in chunks:
ch.orig_index += new_index
action.chunks.append(ch)
index = new_index + len(next_ctx)
self.index = end_idx
return action
def _parse_add_file(self) -> PatchAction:
lines: list[str] = []
while not self.is_done(
("*** End Patch", "*** Update File:", "*** Delete File:", "*** Add File:")
):
s = self.read_line()
if not s.startswith("+"):
raise DiffError(f"Invalid Add File line (missing '+'): {s}")
lines.append(s[1:]) # strip leading '+'
return PatchAction(type=ActionType.ADD, new_file="\n".join(lines))
# --------------------------------------------------------------------------- #
# Helper functions
# --------------------------------------------------------------------------- #
def find_context_core(
lines: list[str], context: list[str], start: int
) -> tuple[int, int]:
if not context:
return start, 0
for i in range(start, len(lines)):
if lines[i : i + len(context)] == context:
return i, 0
for i in range(start, len(lines)):
if [s.rstrip() for s in lines[i : i + len(context)]] == [
s.rstrip() for s in context
]:
return i, 1
for i in range(start, len(lines)):
if [s.strip() for s in lines[i : i + len(context)]] == [
s.strip() for s in context
]:
return i, 100
return -1, 0
def find_context(
lines: list[str], context: list[str], start: int, eof: bool
) -> tuple[int, int]:
if eof:
new_index, fuzz = find_context_core(lines, context, len(lines) - len(context))
if new_index != -1:
return new_index, fuzz
new_index, fuzz = find_context_core(lines, context, start)
return new_index, fuzz + 10_000
return find_context_core(lines, context, start)
def peek_next_section(
lines: list[str], index: int
) -> tuple[list[str], list[Chunk], int, bool]:
old: list[str] = []
del_lines: list[str] = []
ins_lines: list[str] = []
chunks: list[Chunk] = []
mode = "keep"
orig_index = index
while index < len(lines):
s = lines[index]
if s.startswith(
(
"@@",
"*** End Patch",
"*** Update File:",
"*** Delete File:",
"*** Add File:",
"*** End of File",
)
):
break
if s == "***":
break
if s.startswith("***"):
raise DiffError(f"Invalid Line: {s}")
index += 1
last_mode = mode
if s == "":
s = " "
if s[0] == "+":
mode = "add"
elif s[0] == "-":
mode = "delete"
elif s[0] == " ":
mode = "keep"
else:
raise DiffError(f"Invalid Line: {s}")
s = s[1:]
if mode == "keep" and last_mode != mode:
if ins_lines or del_lines:
chunks.append(
Chunk(
orig_index=len(old) - len(del_lines),
del_lines=del_lines,
ins_lines=ins_lines,
)
)
del_lines, ins_lines = [], []
if mode == "delete":
del_lines.append(s)
old.append(s)
elif mode == "add":
ins_lines.append(s)
elif mode == "keep":
old.append(s)
if ins_lines or del_lines:
chunks.append(
Chunk(
orig_index=len(old) - len(del_lines),
del_lines=del_lines,
ins_lines=ins_lines,
)
)
if index < len(lines) and lines[index] == "*** End of File":
index += 1
return old, chunks, index, True
if index == orig_index:
raise DiffError("Nothing in this section")
return old, chunks, index, False
# --------------------------------------------------------------------------- #
# Patch → Commit and Commit application
# --------------------------------------------------------------------------- #
def _get_updated_file(text: str, action: PatchAction, path: str) -> str:
if action.type is not ActionType.UPDATE:
raise DiffError("_get_updated_file called with non-update action")
orig_lines = text.split("\n")
dest_lines: list[str] = []
orig_index = 0
for chunk in action.chunks:
if chunk.orig_index > len(orig_lines):
raise DiffError(
f"{path}: chunk.orig_index {chunk.orig_index} exceeds file length"
)
if orig_index > chunk.orig_index:
raise DiffError(
f"{path}: overlapping chunks at {orig_index} > {chunk.orig_index}"
)
dest_lines.extend(orig_lines[orig_index : chunk.orig_index])
orig_index = chunk.orig_index
dest_lines.extend(chunk.ins_lines)
orig_index += len(chunk.del_lines)
dest_lines.extend(orig_lines[orig_index:])
return "\n".join(dest_lines)
def patch_to_commit(patch: Patch, orig: dict[str, str]) -> Commit:
commit = Commit()
for path, action in patch.actions.items():
if action.type is ActionType.DELETE:
commit.changes[path] = FileChange(
type=ActionType.DELETE, old_content=orig[path]
)
elif action.type is ActionType.ADD:
if action.new_file is None:
raise DiffError("ADD action without file content")
commit.changes[path] = FileChange(
type=ActionType.ADD, new_content=action.new_file
)
elif action.type is ActionType.UPDATE:
new_content = _get_updated_file(orig[path], action, path)
commit.changes[path] = FileChange(
type=ActionType.UPDATE,
old_content=orig[path],
new_content=new_content,
move_path=action.move_path,
)
return commit
# --------------------------------------------------------------------------- #
# User-facing helpers
# --------------------------------------------------------------------------- #
def text_to_patch(text: str, orig: dict[str, str]) -> tuple[Patch, int]:
lines = text.splitlines() # preserves blank lines, no strip()
if (
len(lines) < 2
or not Parser._norm(lines[0]).startswith("*** Begin Patch")
or Parser._norm(lines[-1]) != "*** End Patch"
):
raise DiffError("Invalid patch text - missing sentinels")
parser = Parser(current_files=orig, lines=lines, index=1)
parser.parse()
return parser.patch, parser.fuzz
def identify_files_needed(text: str) -> list[str]:
lines = text.splitlines()
return [
line[len("*** Update File: ") :]
for line in lines
if line.startswith("*** Update File: ")
] + [
line[len("*** Delete File: ") :]
for line in lines
if line.startswith("*** Delete File: ")
]
def identify_files_added(text: str) -> list[str]:
lines = text.splitlines()
return [
line[len("*** Add File: ") :]
for line in lines
if line.startswith("*** Add File: ")
]
# --------------------------------------------------------------------------- #
# File-system helpers
# --------------------------------------------------------------------------- #
def load_files(paths: list[str], open_fn: Callable[[str], str]) -> dict[str, str]:
return {path: open_fn(path) for path in paths}
def apply_commit(
commit: Commit,
write_fn: Callable[[str, str], None],
remove_fn: Callable[[str], None],
) -> None:
for path, change in commit.changes.items():
if change.type is ActionType.DELETE:
remove_fn(path)
elif change.type is ActionType.ADD:
if change.new_content is None:
raise DiffError(f"ADD change for {path} has no content")
write_fn(path, change.new_content)
elif change.type is ActionType.UPDATE:
if change.new_content is None:
raise DiffError(f"UPDATE change for {path} has no new content")
target = change.move_path or path
write_fn(target, change.new_content)
if change.move_path:
remove_fn(path)
def process_patch(
text: str,
open_fn: Callable[[str], str],
write_fn: Callable[[str, str], None],
remove_fn: Callable[[str], None],
) -> str:
if not text.startswith("*** Begin Patch"):
raise DiffError("Patch text must start with *** Begin Patch")
paths = identify_files_needed(text)
orig = load_files(paths, open_fn)
patch, _fuzz = text_to_patch(text, orig)
commit = patch_to_commit(patch, orig)
apply_commit(commit, write_fn, remove_fn)
return "Done!"
# --------------------------------------------------------------------------- #
# Default FS helpers
# --------------------------------------------------------------------------- #
def open_file(path: str) -> str:
with open(path, "rt", encoding="utf-8") as fh:
return fh.read()
def write_file(path: str, content: str) -> None:
target = pathlib.Path(path)
target.parent.mkdir(parents=True, exist_ok=True)
with target.open("wt", encoding="utf-8") as fh:
fh.write(content)
def remove_file(path: str) -> None:
pathlib.Path(path).unlink(missing_ok=True)
# --------------------------------------------------------------------------- #
# CLI entry-point
# --------------------------------------------------------------------------- #
def main() -> None:
import sys
patch_text = sys.stdin.read()
if not patch_text:
print("Please pass patch text through stdin", file=sys.stderr)
return
try:
result = process_patch(patch_text, open_file, write_file, remove_file)
except DiffError as exc:
print(exc, file=sys.stderr)
return
print(result)
if __name__ == "__main__":
main()Autres formats de diff efficaces
Si vous souhaitez essayer un autre format de diff, nos tests ont montré que le format SEARCH/REPLACE utilisé dans le benchmark polyglotte d’Aider et un format pseudo-XML sans échappement interne obtenaient tous deux des taux de réussite élevés.
Ces formats de diff ont deux caractéristiques essentielles en commun : (1) ils n’utilisent pas de numéros de ligne et (2) ils fournissent à la fois le code exact à remplacer et le code exact de remplacement, avec des délimiteurs clairs entre les deux.
SEARCH_REPLACE_DIFF_EXAMPLE = """
path/to/file.py
```
>>>>>>> SEARCH
def search():
pass
=======
def search():
raise NotImplementedError()
<<<<<<< REPLACE
"""
PSEUDO_XML_DIFF_EXAMPLE = """
`<edit>`
`<file>`
path/to/file.py
`</file>`
`<old_code>`
def search():
pass
`</old_code>`
`<new_code>`
def search():
raise NotImplementedError()
`</new_code>`
`</edit>`
"""














