Passer au contenu principal
OpenAI

29 janvier 2026

Ingénierie

À l'intérieur de l'agent de données interne d'OpenAI

Par Bonnie Xu, Aravind Suresh et Emma Tang

Chargement…

Les données alimentent la manière dont les systèmes apprennent, les produits évoluent et les entreprises prennent des décisions. Mais obtenir des réponses rapidement, correctement et dans le bon contexte est souvent plus difficile que cela ne devrait l’être. Pour simplifier les opérations à mesure qu'OpenAI se développe, nous avons conçu notre propre agent de données IA sur mesure, développé en interne, qui explore et raisonne sur notre propre plateforme.

Notre agent est un outil interne personnalisé (non destiné à une offre externe), conçu spécifiquement pour les données, les autorisations et les flux de travail d’OpenAI. Nous montrons comment nous l’avons conçu et l’utilisons pour mettre en lumière des exemples concrets et marquants de la manière dont l’IA peut soutenir le travail quotidien de nos équipes. Les outils OpenAI que nous avons utilisés pour le créer et l’exécuter (Codex, notre modèle phare GPT‑5, l’ API Evals(s'ouvre dans une nouvelle fenêtre) et l’API Embeddings(s'ouvre dans une nouvelle fenêtre)) sont les mêmes outils que nous mettons à la disposition des développeurs partout dans le monde.

Notre agent de données permet aux employés de passer d’une question à une information en quelques minutes, pas en quelques jours. Cela facilite l'extraction de données et la réalisation d'analyses nuancées dans toutes les fonctions, et pas seulement par notre équipe chargée des données. Aujourd’hui, les équipes d’ingénierie, de science des données, de stratégie de mise sur le marché, de finance et de recherche chez OpenAI s’appuient sur l’agent pour répondre à des questions de données à fort impact. Par exemple, cela peut vous aider à évaluer les lancements et à comprendre la santé de l'entreprise, le tout grâce au format intuitif du langage naturel. L’agent associe des connaissances au niveau des tableaux, alimentées par Codex, avec le contexte du produit et de l’organisation. Son système de mémoire en apprentissage continu signifie qu'il s'améliore également à chaque interaction.

Capture d’écran montrant un utilisateur demandant le WAU de ChatGPT le 6 octobre 2025 comparé à OpenAI DevDay 2023. L’agent rapporte ≈800M de WAU pour 2025 et ≈100M pour 2023, avec des notes indiquant un changement de +700M et une augmentation d’environ ~8×, suivies d’un contexte explicatif.

Dans cet article, nous allons expliquer pourquoi nous avions besoin d’un agent de données IA sur mesure, ce qui rend son contexte de données enrichi en code et son apprentissage autonome si utiles, ainsi que les leçons que nous avons apprises en cours de route.

Pourquoi nous avons eu besoin d’un outil personnalisé

La plateforme de données d’OpenAI dessert plus de 3 500 utilisateurs internes travaillant dans les équipes d’ingénierie, de produit et de recherche, couvrant plus de 600 pétaoctets de données réparties sur 70 000 ensembles de données. À cette taille, trouver le bon tableau peut être l'une des étapes les plus longues de l'analyse.

Comme l’a exprimé un utilisateur interne :

« Nous avons de nombreux tableaux qui se ressemblent, et je passe énormément de temps à essayer de comprendre leurs différences et lequel utiliser. Certains incluent les utilisateurs déconnectés, d'autres non. Certains ont des champs qui se chevauchent ; il est difficile de savoir ce qui est quoi. »

Même avec les bons tableaux sélectionnés, il peut être difficile d’obtenir des résultats corrects. Les analystes doivent analyser les données des tableaux et les relations entre eux pour garantir que les transformations et les filtres sont appliqués correctement. Les modes de défaillance courants, tels que les jointures plusieurs-à-plusieurs, les erreurs de propagation des filtres et les valeurs nulles non gérées, peuvent invalider les résultats sans avertissement. À l’échelle d’OpenAI, les analystes ne devraient pas avoir à perdre du temps à déboguer la sémantique SQL ou la performance des requêtes : ils devraient se concentrer sur la définition des indicateurs, la validation des hypothèses et la prise de décisions fondées sur les données.

Capture d’écran de code SQL définissant deux CTE — order_enriched et monthly_segment — qui associent des données géographiques des clients, dérivent des champs de mois de commande et calculent des agrégats mensuels tels que le nombre de commandes, les revenus bruts, les revenus avec taxes et le nombre moyen de jours entre l’expédition et la réception.

Cette déclaration SQL fait 180+ lignes. Il n'est pas facile de savoir si nous joignons les bons tableaux et interrogeons les bonnes colonnes.

Comment ça marche

Explorons ce qu’est notre agent, comment il organise le contexte et comment il continue de s’améliorer.

Notre agent est alimenté par GPT‑5.2 et est conçu pour raisonner sur la plateforme de données d’OpenAI. Il est disponible partout où les employés travaillent déjà : en tant qu’agent Slack, via une interface Web, à l’intérieur des IDE, dans la CLI Codex via MCP(s'ouvre dans une nouvelle fenêtre), et directement dans l’application interne ChatGPT d’OpenAI via un connecteur MCP(s'ouvre dans une nouvelle fenêtre).

Diagramme intitulé « Comment fonctionne l'agent de données ». Les points d’entrée—Agent-UI, Local Agent-MCP, Remote Agent-MCP et Slack Agent—alimentent un Agent-API. L'API se connecte aux connaissances internes en matière de données et au contexte de l'entreprise, se synchronise avec un entrepôt de données et des sources de plateformes, et échange des requêtes avec le modèle GPT-5.2 via Agent-MCP.

Les utilisateurs peuvent poser des questions complexes et ouvertes qui nécessiteraient généralement plusieurs étapes d’exploration manuelle. Prenez cet exemple d’invite, qui utilise un jeu de données de test : « Pour les trajets de taxi à NYC, quelles paires de codes postaux entre le point de prise en charge et le point de dépose sont les moins fiables, avec le plus grand écart entre les temps de trajet typiques et les pires cas, et quand cette variabilité se produit-elle? »

L’agent gère l’analyse de bout en bout, de la compréhension de la question à l’exploration des données, l’exécution de requêtes et la synthèse des résultats.

Capture d’écran montrant un utilisateur demandant quelles paires de codes postaux de prise en charge→dépose en taxi à NYC sont les plus « peu fiables ». L’agent explique en utilisant environ 21 000 trajets provenant de samples.nyctaxi.trips, définit le cas typique (p50) par rapport au pire cas (p95), applique des filtres et décrit comment il identifie quand le trajet le plus long de chaque paire de codes postaux a eu lieu.

La réponse de l’agent à la question.

L’un des superpouvoirs de l’agent est sa capacité à raisonner à travers les problèmes. Plutôt que de suivre un script fixe, l’agent évalue ses propres progrès. Si un résultat intermédiaire semble incorrect (par exemple, s’il comporte zéro ligne en raison d’une jointure ou d’un filtre incorrect), l’agent examine ce qui a mal tourné, ajuste son approche et réessaie. Tout au long de ce processus, il conserve l'intégralité du contexte et transmet les apprentissages d'une étape à l'autre. Ce processus en boucle fermée et autoapprenant transfère l’itération de l’utilisateur à l’agent lui-même, permettant d’obtenir des résultats plus rapides et des analyses de qualité supérieure de manière constante par rapport aux flux de travail manuels.

Capture d’écran d’un flux de travail de tâche montrant le plan étape par étape d’un agent IA pour analyser la durée des trajets en taxi à NYC. Il inclut des objectifs, des recherches internes, l’inspection du schéma, des extraits de code et le raisonnement sur le calcul des écarts p50/p95, l’identification de paires de codes postaux peu fiables et la planification de requêtes SQL.

Le raisonnement de l’agent pour identifier les paires de prise en charge et dépose de taxi à NYC les moins fiables.

L’agent couvre l’ensemble du flux de travail analytique : découverte de données, exécution de SQL, publication de carnets et rapports. Il comprend les connaissances internes de l’entreprise, peut effectuer des recherches sur le Web pour obtenir des informations externes et s’améliore au fil du temps grâce à l’utilisation et à la mémoire acquises.

Le contexte est tout

Des réponses de haute qualité dépendent d’un contexte riche et précis. Sans contexte, même des modèles performants peuvent produire des résultats erronés, comme surestimer considérablement le nombre d’utilisateurs ou mal interpréter la terminologie interne.

Capture d’écran d’un utilisateur demandant : « Quel était le DAU connecté de ChatGPT Image Gen pour les 30 derniers jours? », avec une ligne d’état en dessous indiquant que l’agent a fonctionné pendant « 22m 41s », ce qui indique qu’une requête de longue durée est en cours.

L’agent sans mémoire, incapable de formuler des requêtes efficacement.

Capture d’écran montrant un utilisateur demandant : « Quel était le DAU connecté ChatGPT Image Gen au cours des 30 derniers jours? » Sous le message, une ligne de statut indique « A fonctionné pour 1m 22s », ce qui indique que la requête est toujours en cours et prend beaucoup de temps à compléter.

La mémoire de l’agent permet d’accélérer les requêtes en trouvant les bons tableaux.

Pour éviter ces modes de défaillance, l’agent est conçu autour de plusieurs couches de contexte qui l’ancrent dans les données et le savoir institutionnel d’OpenAI.

Diagramme intitulé « Couches de contexte de l’agent de données » montrant six niveaux empilés : 1) Utilisation du tableau, 2) Annotations humaines, 3) Enrichissement Codex, 4) Connaissances institutionnelles, 5) Mémoire, et 6) Contexte d’exécution. Chaque couche apparaît sous forme de barre horizontale dans une pyramide.

Couche nº 1 : Utilisation du tableau

  • Ancrage des métadonnées : L’agent s’appuie sur les métadonnées du schéma (noms de colonnes et types de données) pour orienter la rédaction SQL et utilise la lignée des tableaux (par exemple, les relations de tableaux en amont et en aval) pour fournir un contexte sur la manière dont différents tableaux sont reliés.
  • Inférence de requête : L’intégration des requêtes historiques aide l’agent à comprendre comment écrire ses propres requêtes et quelles tableaux sont généralement assemblés.

Couche nº 2 : Annotations humaines

  • Descriptions organisées des tableaux et des colonnes fournies par des experts du domaine, capturant l’intention, la sémantique, la signification commerciale et les mises en garde connues qui ne sont pas facilement déduites des schémas ou des requêtes antérieures.

Les métadonnées à elles seules ne suffisent pas. Pour vraiment distinguer les tableaux, vous devez comprendre comment ils ont été créés et d'où ils proviennent.

Couche nº 3 : Enrichissement Codex

  • En établissant une définition au niveau du code d'un tableau, l'agent développe une compréhension plus approfondie de ce que les données contiennent réellement. 
    • Les nuances concernant ce qui est stocké dans le tableau et la manière dont cela est dérivé d’un événement analytique apportent des informations supplémentaires. Par exemple, cela peut fournir du contexte sur le caractère unique des valeurs, la fréquence de mise à jour des données du tableau, la portée des données (p. ex., si le tableau exclut certains champs, il présente ce niveau de granularité), etc.
  • Cela offre un contexte d'utilisation enrichi en illustrant comment le tableau est exploité au-delà de SQL dans Spark, Python et d'autres systèmes de données.
  • Cela signifie que l’agent peut distinguer entre des tableaux qui se ressemblent mais diffèrent de manière cruciale. Par exemple, il peut indiquer si un tableau inclut uniquement le trafic de première partie de ChatGPT. Ce contexte est également actualisé automatiquement, ce qui lui permet de rester à jour sans entretien manuel.
Diagramme intitulé « Pipeline de connaissances enrichi par Codex ». Les tableaux populaires alimentent plusieurs tâches Codex, qui extraient des détails de la base de code d’OpenAI, y compris l’objectif d’un tableau, sa granularité et ses clés primaires, les modèles d’utilisation en aval, les options de tables alternatives et la fraîcheur des données.

Couche nº 4 : Connaissances institutionnelles 

  • L’agent peut accéder à Slack, Google Docs et Notion, qui capturent le contexte critique de l’entreprise, tel que les lancements, les incidents de fiabilité, les noms de code et outils internes, ainsi que les définitions canoniques et la logique de calcul des indicateurs clés.
  • Ces documents sont ingérés, intégrés et stockés avec des métadonnées et des autorisations. Un service de récupération gère le contrôle d’accès et la mise en cache au moment de l’exécution, permettant à l’agent de récupérer ces informations de manière efficace et sécuritaire.
Capture d’écran d’un utilisateur demandant pourquoi l’utilisation des connecteurs a diminué en décembre. L’agent explique que la baisse était due à un problème de journalisation à partir du 13 novembre 2025, entraînant une sous-estimation de l’utilisation après le lancement de ChatGPT 5.1. La télémétrie héritée est restée vide jusqu'à ce qu'un événement plus récent devienne la référence principale.

Couche nº 5 : Mémoire

  • Lorsque l’agent reçoit des corrections ou découvre des nuances sur certaines questions de données, il peut enregistrer ces apprentissages pour la prochaine fois, ce qui lui permet de s’améliorer constamment avec ses utilisateurs. 
    • Par conséquent, les réponses futures partent d'une base de référence plus précise plutôt que de rencontrer à répétition les mêmes problèmes.
    • L’objectif de la mémoire est de conserver et de réutiliser des corrections, des filtres et des contraintes non évidentes qui sont essentielles à l’exactitude des données, mais difficiles à déduire des autres couches seules. 
    • Par exemple, dans un cas, l’agent ne savait pas comment filtrer un certain test analytique (cela reposait sur une correspondance avec une chaîne précise définie dans un portail d'expérimentation). La mémoire était d'une importance cruciale ici pour garantir qu'elle puisse filtrer correctement, plutôt que d'essayer de faire une correspondance de chaînes de manière approximative.
  • Lorsque vous donnez une correction à l’agent ou lorsqu’il trouve un apprentissage dans votre conversation, il vous invite à sauvegarder cette mémoire pour la prochaine fois. 
    • Les mémoires peuvent également être créées et modifiées manuellement par les utilisateurs.
    • Les mémoires sont classées au niveau global et personnel, et les outils de l'agent facilitent leur modification.
Bannière de notification indiquant « L'agent de données souhaite enregistrer 2 apprentissages dans la mémoire », avec un élément intitulé « Métriques de haut niveau ChatGPT » et un message de confirmation à droite indiquant « Enregistré dans la mémoire globale » avec une coche verte.

Couche nº 6 : Contexte d’exécution

  • Lorsqu'il n'existe aucun contexte préalable pour un tableau ou lorsque les informations existantes sont obsolètes, l'agent peut envoyer des requêtes en direct à l'entrepôt de données afin d'inspecter et de consulter directement le tableau. Cela lui permet de valider des schémas, de comprendre les données en temps réel et de réagir en conséquence.
  • L’agent est également capable de dialoguer avec d’autres systèmes de la plateforme de données (service de métadonnées, Airflow, Spark) au besoin pour obtenir un contexte de données plus large qui existe en dehors de l’entrepôt.

We run a daily offline pipeline that aggregates table usage, human annotations, and Codex-derived enrichment into a single, normalized representation. This enriched context is then converted into embeddings using the OpenAI embeddings API(s'ouvre dans une nouvelle fenêtre) and stored for retrieval. At query time, the agent pulls only the most relevant embedded context via retrieval-augmented generation(s'ouvre dans une nouvelle fenêtre) (RAG) instead of scanning raw metadata or logs. This makes table understanding fast and scalable, even across tens of thousands of tables, while keeping runtime latency predictable and low. Runtime queries are issued to our data warehouse live as needed.

Diagramme intitulé « Récupération du contexte dans l’agent de données. » Les couches de prétraitement hors ligne — utilisation des tableaux, annotations humaines, enrichissement Codex, connaissances institutionnelles et mémoire — alimentent les intégrations GARI. La récupération en direct montre l’agent interrogeant une base de données par recherche sémantique ou récupération de texte exacte pour produire un contexte d’exécution.

Together, these layers ensure the agent’s reasoning is grounded in OpenAI’s data, code, and institutional knowledge, dramatically reducing errors and improving answer quality.

Built to think and work like a teammate

One-shot answers work when the problem is clear, but most questions aren’t. More often, arriving at the correct result requires back-and-forth refinement and some course correction.

The agent is built to behave like a teammate you can reason with. It’s a conversational, always-on and handles both quick answers and iterative exploration.

It carries over complete context across turns, so users can ask follow-up questions, adjust their intent, or change direction without restating everything. If the agent starts heading down the wrong path, users can interrupt mid-analysis and redirect it, just like working with a human collaborator who listens instead of plowing ahead.

When instructions are unclear or incomplete, the agent proactively asks clarifying questions. If no response is provided, it applies sensible defaults to make progress. For example, if a user asks about business growth with no date range specified, it may assume the last seven or 30 days. These priors allow it to stay responsive and non-blocking while still converging on the right outcome.

The result is an agent that works well both when you know exactly what you want (e.g., “Tell me about this table”) and just as strong when you’re exploring (e.g., “I’m seeing a dip here, can we break this down by customer type and timeframe?”). 

After rollout, we observed that users frequently ran the same analyses for routine repetitive work. To expedite this, the agent's workflows package recurring analyses into reusable instruction sets. Examples include workflows for weekly business reports and table validations. By encoding context and best practices once, workflows streamline repeat analyses and ensure consistent results across users.

Barre-d’entrée de l’interface utilisateur avec le texte réservé « Poser une question sur les données ». En dessous, il y a un bouton intitulé « Utiliser un flux de travail », et à droite se trouvent les icônes microphone et envoi. La barre a des coins arrondis et est placée sur un fond sombre.

Moving fast without breaking trust

Building an always-on, evolving agent means quality can drift just as easily as it can improve. Without a tight feedback loop, regressions are inevitable and invisible. The only way to scale capability without breaking trust is through systematic evaluation.

In this section, we’ll discuss how we leverage OpenAI’s Evals API(s'ouvre dans une nouvelle fenêtre) to measure and protect the agent’s response quality.

Its Evals are built on curated sets of question-answer pairs. Each question targets an important metric or analytical pattern we care deeply about getting right, paired with a manually authored “golden” SQL query that produces the expected result. For each eval, we send the natural language question to its query-generation endpoint, execute the generated SQL, and compare the output against the result of the expected SQL.

Diagramme intitulé « Pipeline d’évaluation de l’agent de données ». Les paires d'évaluation questions-réponses avec le flux SQL attendu sont intégrées dans une étape de génération qui produit le SQL et les résultats. OpenAI Evals compare les résultats générés aux résultats attendus à l'aide d'un dataframe et d'une comparaison SQL, produisant un score et un raisonnement.

Evaluation doesn’t rely on naive string matching. Generated SQL can differ syntactically while still being correct, and result sets may include extra columns that don’t materially affect the answer. To account for this, we compare both the SQL and the resulting data, and feed these signals into OpenAI’s Evals grader. The grader produces a final score along with an explanation, capturing both correctness and acceptable variation.

These evals are like unit tests that run continuously during development to identify regressions as canaries in production; this allows us to catch issues early and confidently iterate as the agent's capabilities expand.

Agent security

Our agent plugs directly into OpenAI’s existing security and access-control model. It operates purely as an interface layer, inheriting and enforcing the same permissions and guardrails that govern OpenAI’s data. 

All of the agent’s access is strictly pass-through, meaning users can only query tables they already have permission to access. When access is missing, it flags this or falls back to alternative datasets the user is authorized to use.

Finally, it's built for transparency. Like any system, it can make mistakes. It exposes its reasoning process by summarizing assumptions and execution steps alongside each answer. When queries are executed, it links directly to the underlying results, allowing users to inspect raw data and verify every step of the analysis.

Lessons learned

Building our agent from scratch surfaced practical lessons about how agents behave, where they struggle, and what actually makes them reliable at scale.

Lesson #1: Less is More

Early on, we exposed our full tool set to the agent, and quickly ran into problems with overlapping functionality. While this redundancy can be helpful for specific custom cases and is more obvious to a human when manually invoking, it’s confusing to agents. To reduce ambiguity and improve reliability, we restricted and consolidated certain tool calls.

Lesson #2: Guide the Goal, Not the Path

We also discovered that highly prescriptive prompting degraded results. While many questions share a general analytical shape, the details vary enough that rigid instructions often pushed the agent down incorrect paths. By shifting to higher-level guidance and relying on GPT‑5’s reasoning to choose the appropriate execution path, the agent became more robust and produced better results.

Lesson #3: Meaning Lives in Code

Schemas and query history describe a table’s shape and usage, but its true meaning lives in the code that produces it. Pipeline logic captures assumptions, freshness guarantees, and business intent that never surface in SQL or metadata. By crawling the codebase with Codex, our agent understands how datasets are actually constructed and is able to better reason about what each table actually contains. It can answer “what’s in here” and “when can I use it” far more accurately than from warehouse signals alone. 

Same vision, new tools

We’re constantly working to improve our agent by increasing its ability to handle ambiguous questions, improving its reliability and accuracy with stronger validations, and integrating it more deeply into workflows. We believe it should blend naturally into how people already work, instead of functioning like a separate tool.

While our tooling will keep benefiting from underlying improvements in agent reasoning, validation, and self-correction, our team’s mission remains the same: seamlessly deliver fast, trustworthy data analysis across OpenAI’s data ecosystem.

Auteur

Bonnie Xu, Aravind Suresh, Emma Tang

Remerciements

Un grand merci aux équipes de productivité des données et de science des données, ainsi qu’à nos nombreux utilisateurs interfonctionnels pour leurs expérimentations et leurs commentaires.