Hopp til hovedinnhold
OpenAI

29. januar 2026

Teknisk arbeid

Inne i OpenAIs interne dataagent

Av Bonnie Xu, Aravind Suresh og Emma Tang

Laster inn …

Data driver hvordan systemer lærer, produkter utvikler seg, og hvordan selskaper tar beslutninger. Men det å få svar raskt, korrekt og med riktig kontekst er ofte vanskeligere enn det burde være. For å gjøre dette enklere etter hvert som OpenAI skalerer, bygde vi vår egen skreddersydde interne KI-dataagent som utforsker og resonerer over vår egen plattform.

Vår agent er et tilpasset, internt verktøy (ikke et eksternt tilbud), bygget spesielt rundt OpenAI sine data, tillatelser og arbeidsflyter. Vi viser hvordan vi bygde det og bruker det for å fremheve eksempler på de virkelige, innflytelsesrike måtene KI kan støtte det daglige arbeidet på tvers av teamene våre. OpenAI-verktøyene vi brukte til å bygge og kjøre det (Codex, vår GPT‑5 flaggskipmodell, Evals API(åpnes i et nytt vindu) og Embeddings API(åpnes i et nytt vindu)) er de samme verktøyene vi gjør tilgjengelige for utviklere overalt.

Vår dataagent lar ansatte gå fra spørsmål til innsikt på minutter, ikke dager. Dette senker terskelen for å hente ut data og utføre nyansert analyse på tvers av alle funksjoner, ikke bare av datateamet vårt. I dag støtter team på tvers av Engineering, Data Science, go-to-market, Finance og Research hos OpenAI seg på agenten for å svare på høyt prioriterte datasprøsmål. For eksempel kan det hjelpe deg med å svare på hvordan du evaluerer lanseringer og forstår forretningshelsen, alt gjennom det intuitive formatet av naturlig språk. Agenten kombinerer Codex-drevet kunnskap på tabellnivå med produkt- og organisasjonskontekst. Det kontinuerlig lærende minnesystemet betyr at det også forbedres med hver vending.

Skjermbilde som viser en bruker som ber om ChatGPT WAU den 6. oktober 2025 sammenlignet med DevDay 2023. Agenten rapporterer ≈800M WAU for 2025 og ≈100M for 2023, med notater som viser en +700M endring og en ~8× økning, etterfulgt av forklarende kontekst.

I dette innlegget skal vi bryte ned hvorfor vi trengte en skreddersydd AI-dataagent, hva som gjør dens kodeberikede datakontekst og selvlæring så nyttig, og hvilke lærdommer vi lærte underveis.

Hvorfor vi trengte et egendefinert verktøy

OpenAIs dataplattform betjener mer enn 3,5k interne brukere som jobber på tvers av Engineering, Product og Research, og omfatter over 600 petabyte med data på tvers av 70k datasett. I den størrelsen kan det å finne den rette tabellen være en av de mest tidkrevende delene av å utføre analyse.

Som en intern bruker uttrykte det:

“Vi har mange tabeller som er ganske like, og jeg bruker masse tid på å finne ut hvordan de er forskjellige og hvilke jeg skal bruke. Noen inkluderer utloggede brukere, noen gjør det ikke. "Noen har overlappende felt; det er vanskelig å si hva som er hva.”

Selv med de riktige tabellene valgt, kan det være utfordrende å produsere korrekte resultater. Analytikere må resonnere om tabelldata og tabellrelasjoner for å sikre at transformasjoner og filtre anvendes korrekt. Vanlige feilmønstre—mange-til-mange-tilkoblinger, filter pushdown-feil og ubehandlede nullverdier—kan stille gjøre resultatene ugyldige. På OpenAIs nivå bør analytikere ikke bruke tid på å feilsøke SQL-semantikk eller spørringsytelse: deres fokus bør være på å definere måleparametere, validere antakelser og ta datadrevne beslutninger.

Skjermbilde av SQL-kode som definerer to CTE-er—order_enriched og monthly_segment—som kobler kundens geografidata, utleder ordremånedsfelt og beregner månedlige aggregater som antall ordre, bruttoinntekt, inntekt med skatt og gjennomsnittlig antall dager fra forsendelse til mottak.

Denne SQL-setningen er over 180 linjer lang. Det er ikke lett å vite om vi kobler sammen de riktige tabellene og spør etter de riktige kolonnene.

Slik fungerer det

La oss gå gjennom hva agenten vår er, hvordan den kuraterer kontekst, og hvordan den fortsetter å forbedre seg selv.

Vår agent drives av GPT‑5.2 og er designet for å resonnere over OpenAIs dataplattform. Den er tilgjengelig der ansatte allerede jobber: som en Slack-agent, via et nettgrensesnitt, inne i IDE-er, i Codex CLI via MCP(åpnes i et nytt vindu), og direkte i OpenAI sin interne ChatGPT‑app gjennom en MCP-kobling(åpnes i et nytt vindu).

Diagram med tittelen «Hvordan dataagenten fungerer.» Inngangspunkter—Agent-UI, Local Agent-MCP, Remote Agent-MCP og Slack Agent—mates inn i en Agent-API. API-en kobler til intern datakunnskap og bedriftskontekst, synkroniserer med et datalager og plattformkilder, og utveksler forespørsler med GPT-5.2 modell via Agent-MCP.

Brukere kan stille komplekse, åpne spørsmål som vanligvis ville kreve flere runder med manuell utforsking. Ta dette eksempel-promptet, som bruker et testdatasett: “For NYC-taxiturer, hvilke henting-til-avlevering ZIP-par er de mest upålitelige, med det største gapet mellom typiske og verste fall-reisetider, og når oppstår den variasjonen?”

Agenten håndterer analysen fra start til slutt, fra å forstå spørsmålet til å utforske dataene, kjøre spørringer og syntetisere funn.

Skjermbilde som viser en bruker som spør hvilke NYC taxi henting→avlevering ZIP-par som er mest «upålitelige». Agenten forklarer ved å bruke ~21k turer fra samples.nyctaxi.trips, definerer typisk (p50) vs verstefall (p95), anvender filtre og beskriver hvordan det identifiserer når hver ZIP-pars lengste reise fant sted.

Agentens svar på spørsmålet.

En av agentens superkrefter er hvordan den resonnerer seg gjennom problemer. I stedet for å følge et fast manus evaluerer agenten sin egen fremdrift. Hvis et mellomresultat ser feil ut (f.eks. hvis det har null rader på grunn av en feilaktig join eller et feilaktig filter), undersøker agenten hva som gikk galt, justerer tilnærmingen sin og prøver igjen. Gjennom hele denne prosessen beholder den full kontekst og tar med seg lærdom mellom trinnene. Denne lukkede, selvlærende prosessen flytter iterasjon fra brukeren til selve agenten, noe som muliggjør raskere resultater og konsekvent høyere kvalitet på analyser enn manuelle arbeidsflyter.

Skjermbilde av en oppgavearbeidsflyt som viser en AI-agents trinnvise plan for å analysere varigheten av taxiturer i NYC. Det inkluderer mål, interne søk, skjema-inspeksjon, kodesnutter og resonnering om å beregne p50/p95-spredninger, identifisere upålitelige ZIP-par og planlegge SQL-spørringer.

Agentens resonnering for å identifisere de mest upålitelige NYC taxi pickup–dropoff-parene.

Agenten dekker hele analysearbeidsflyten: oppdager data, kjører SQL og publiserer notatbøker og rapporter. Den forstår intern kunnskap i selskapet, kan søke på nettet etter ekstern informasjon, og forbedrer seg over tid gjennom lært bruk og hukommelse.

Kontekst er alt

Svar av høy kvalitet avhenger av rik og nøyaktig kontekst. Uten kontekst kan selv sterke modeller gi feil resultater, som å grovt feilestimere antall brukere eller feiltolke intern terminologi.

Skjermbilde av en bruker som spør hva antall daglige aktive, innloggede brukere (DAU) for ChatGPT sin bildegenerering har vært de siste 30 dagene. Under meldingen vises en statuslinje som viser at agenten har jobbet i 22 minutter og 41 sekunder, noe som indikerer at en langvarig spørring fortsatt pågår.

Agenten uten minne, ute av stand til å forespørre effektivt.

Skjermbildet viser en bruker som spør hva antall daglige aktive, innloggede brukere (DAU) for ChatGPT sin bildegenerering har vært de siste 30 dagene. Under meldingen vises en statuslinje med teksten «Har kjørt i 1 minutt og 22 sekunder», som indikerer at spørringen fortsatt kjøres og tar uvanlig lang tid å fullføre.

Agentens minne gjør det mulig å utføre raskere spørringer ved å finne de riktige tabellene.

For å unngå disse feilmodusene er agenten bygget rundt flere lag med kontekst som forankrer den i OpenAI sine data og institusjonelle kunnskap.

Diagram med tittelen “Dataagentens kontekstlag” som viser seks stablede nivåer: 1) Tabellbruk, 2) Menneskelige merknader, 3) Codex-berikelse, 4) Institusjonell kunnskap, 5) Minne, og 6) Kjøretidskontekst. Hvert lag vises som en horisontal stolpe i en pyramideform.

Lag #1: Bruk av tabell

  • Metadataforankring: Agenten baserer seg på skjema-metadata (kolonnenavn og datatyper) for å informere SQL-skriving og bruker tabellavstamning (f.eks. oppstrøms- og nedstrøms tabellrelasjoner) for å gi kontekst om hvordan ulike tabeller henger sammen.
  • Forespørselsinferens: Inntak av historiske forespørsler hjelper agenten med å forstå hvordan den kan skrive sine egne forespørsler og hvilke tabeller som vanligvis kobles sammen.

Lag #2: Menneskelige annotasjoner

  • Kuraterte beskrivelser av tabeller og kolonner levert av domeneeksperter, som fanger opp hensikt, semantikk, forretningsmessig betydning og kjente forbehold som ikke lett kan utledes fra skjemaer eller tidligere forespørsler.

Metadata i seg selv er ikke nok. For å virkelig kunne skille tabeller fra hverandre, må du forstå hvordan de ble opprettet og hvor de kommer fra.

Lag #3: Codex Enrichment

  • Ved å utlede en definisjon av en tabell på kodenivå, bygger agenten en dypere forståelse av hva dataene faktisk inneholder. 
    • Nyanser om hva som lagres i tabellen og hvordan det utledes fra en analytisk hendelse gir ekstra informasjon. For eksempel kan det gi kontekst om hvor unike verdiene er, hvor ofte tabelldataene oppdateres, omfanget av dataene (f.eks., hvis tabellen ekskluderer visse felt, har den dette detaljeringsnivået), osv.
  • Dette gir en forbedret brukskontekst ved å vise hvordan tabellen brukes utover SQL i Spark, Python og andre datasystemer.
  • Dette betyr at agenten kan skille mellom tabeller som ser like ut, men som er forskjellige på kritiske måter. For eksempel kan den fortelle om en tabell kun inkluderer førsteparts ChatGPT‑trafikk. Denne konteksten oppdateres også automatisk, slik at den forblir oppdatert uten behov for manuelt vedlikehold.
Diagram med tittelen «Codex-enriched knowledge pipeline». Populære tabeller inngår i flere Codex-oppgaver, som henter ut detaljer fra OpenAI-kodebasen, inkludert en tabells formål, granularitet og primærnøkler, bruksmønstre nedstrøms, alternative tabellvalg og dataaktualitet.

Lag #4: Institusjonell kunnskap 

  • Agenten kan få tilgang til Slack, Google Docs og Notion, som fanger opp kritisk bedriftskontekst som lanseringer, pålitelighetshendelser, interne kodenavn og verktøy, samt de kanoniske definisjonene og beregningslogikken for viktige måleparametere.
  • Disse dokumentene importeres, integreres og lagres med metadata og tillatelser. En hentetjeneste håndterer tilgangskontroll og hurtigbufring under kjøring, slik at agenten effektivt og trygt kan hente inn denne informasjonen.
Skjermbilde av en bruker som spør hvorfor bruken av koblinger falt i desember. Agenten forklarer at fallet skyldtes et loggingsproblem som startet 13. november 2025, og som førte til underrapportert bruk etter lanseringen av ChatGPT 5.1. Legacy-telemetri ble tom inntil en nyere hendelse ble den nye sannhetskilden.

Lag #5: Minne

  • Når agenten får korrigeringer eller oppdager nyanser i visse dataspørsmål, kan den lagre disse lærdommene til neste gang, slik at den hele tiden kan forbedre seg sammen med brukerne sine. 
    • Som et resultat starter fremtidige svar fra et mer presist utgangspunkt i stedet for å stadig møte de samme problemene.
    • Målet med minne er å beholde og gjenbruke ikke-åpenbare rettelser, filtre og begrensninger som er avgjørende for datakorrekthet, men vanskelige å utlede fra de andre lagene alene. 
    • For eksempel, i ett tilfelle, visste agenten ikke hvordan den skulle filtrere for et bestemt analyseeksperiment (det var avhengig av samsvar med en spesifikk streng definert i en eksperimentport). Minne var avgjørende viktig her for å sikre at det kunne filtrere korrekt, i stedet for å forsøke en uklar strengmatching.
  • Når du gir agenten en korrigering eller når den finner noe å lære av samtalen din, vil den gi deg en prompt for å lagre det minnet til neste gang. 
    • Minner kan også opprettes og redigeres manuelt av brukere.
    • Minner er avgrenset på globalt og personlig nivå, og agentens verktøy gjør det enkelt å redigere dem.
Varslingsbanner som viser «Dataagent ønsker å lagre 2 lærdommer i minnet», med et merket element «ChatGPT Top-level Metrics» og en bekreftelsesmelding til høyre som lyder «Lagret i globalt minne» med en grønn hake.

Lag #6: Kjøretidskontekst

  • Når det ikke finnes noen tidligere kontekst for en tabell, eller når eksisterende informasjon er utdatert, kan agenten sende live spørringer til datavarehuset for å inspisere og forespørre tabellen direkte. Dette gjør at den kan validere skjemaer, forstå dataene i sanntid og svare deretter.
  • Agenten kan også kommunisere med andre Data Platform-systemer (metadata service, Airflow, Spark) etter behov for å få en bredere datakontekst som finnes utenfor datalageret.

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(åpnes i et nytt vindu) and stored for retrieval. At query time, the agent pulls only the most relevant embedded context via retrieval-augmented generation(åpnes i et nytt vindu) (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.

Diagram med tittelen «Konteksthenting i dataagenten». Offline forhåndsbehandlingslag—tabellbruk, menneskelige annotasjoner, Codex-berikelse, institusjonell kunnskap og minne—mates inn i RAG-innleiringer. Direkte henting viser at agenten søker i en database via semantisk søk eller nøyaktig tekstgjenfinning for å produsere kjøretidskontekst.

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.

UI-inntastingsfelt med plassholderteksten “Still et dataspørsmål.” Nedenfor er det en knapp merket «Bruk en arbeidsflyt», og til høyre er det mikrofon- og sendeikoner. Baren har avrundede hjørner og står mot en mørk bakgrunn.

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(åpnes i et nytt vindu) 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.

Diagram med tittelen «Dataagentens evalueringsprosess.» Q&A-evalueringspar med forventet SQL mates inn i et genereringstrinn som genererer SQL og resultater. OpenAI Evals sammenligner genererte mot forventede resultater ved hjelp av dataframe- og SQL-sammenligning, og gir en poengsum og en resonnering.

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.

Forfatter

Bonnie Xu, Aravind Suresh og Emma Tang

Anerkjennelser

Spesiell takk til teamene for dataproduktivitet og datavitenskap, samt til våre mange tverrfunksjonelle brukere for deres eksperimentering og tilbakemelding.