Gå til hovedindhold
OpenAI

29. januar 2026

Ingeniørarbejde

Inde i OpenAIs interne dataagent

Af Bonnie Xu, Aravind Suresh og Emma Tang

Indlæser ...

Data driver den måde, hvorpå systemer lærer, produkter udvikler sig, og hvordan virksomheder træffer beslutninger. At få svar hurtigt, korrekt og med den rigtige kontekst er dog ofte sværere, end det burde være. For at gøre dette nemmere i takt med at OpenAI skalerer, har vi bygget vores egen skræddersyede interne AI-dataagent, der udforsker og ræsonnerer på vores egen platform.

Vores agent er et brugerdefineret internt værktøj (og ikke et eksternt tilbud), der er bygget specifikt omkring OpenAIs data, tilladelser og arbejdsgange. Vi viser, hvordan vi har bygget det, og hvordan vi bruger det, til at afdække eksempler på de virkelige og effektive måder, hvorpå AI kan understøtte det daglige arbejde på tværs af vores teams. De OpenAI-værktøjer, vi brugte til at bygge og køre det (Codex, vores GPT‑5‑flagskibsmodel, Evals API(åbner i et nyt vindue) og Embeddings API(åbner i et nyt vindue)), er de samme værktøjer, som vi stiller til rådighed for udviklere overalt.

Vores dataagent lader medarbejdere gå fra spørgsmål til indsigt på få minutter i stedet for dage. Dette gør det lettere for alle at trække data og udføre nuanceret analyse på tværs af alle funktioner, og ikke kun af vores datateam. I dag bruger OpenAI's teams indenfor ingeniørvidenskab, datalogi, markedsføring, finans og forskning agenten til at besvare dataspørgsmål med stor betydning. For eksempel kan det hjælpe med at besvare spørgsmål om, hvordan man evaluerer lanceringer og forstår virksomhedens sundhed, alt sammen gennem det intuitive format af naturligt sprog. Agenten kombinerer Codex-drevet viden på tabelniveau med produkt- og organisationskontekst. Dets kontinuerligt lærende hukommelsessystem betyder, at det også forbedres for hver tur.

Skærmbillede, der viser en bruger, der spørger efter ChatGPT WAU den 6. okt. 2025 sammenlignet med DevDay 2023. Agenten rapporterer ≈800 millioner WAU for 2025 og ≈100 millioner for 2023, med noter der viser en ændring på over 700 millioner og en stigning på ca. 8×, efterfulgt af forklarende kontekst.

I dette indlæg vil vi gennemgå, hvorfor vi havde brug for en skræddersyet AI-dataagent, hvad der gør dens kodeberigede datakontekst og selvlæringsfunktion så nyttig, og hvilke erfaringer vi har lært undervejs.

Hvorfor havde vi brug for et brugerdefineret værktøj

OpenAIs dataplatform betjener mere end 3,500 interne brugere, der arbejder indenfor ingeniørvidenskab, produktion og forskning, og spænder over 600 petabyte data på tværs af 70.000 datasæt. I den størrelse kan en af de mest tidskrævende dele af at lave en analyse være at finde den rette tabel.

Som en intern bruger udtrykte det:

[[indryk]]“Vi har mange tabeller, der er ret ens, og jeg bruger masser af tid på at finde ud af, hvordan de er forskellige, og hvilke jeg skal bruge. Nogle inkluderer brugere, der er logget ud, og andre gør det ikke. "Nogle har overlappende felter. Det er svært at sige, hvad der er hvad.”

Selv når de korrekte tabeller er valgt, kan det være svært at producere korrekte resultater. Analytikere skal ræsonnere over tabeldata og tabelrelationer for at sikre, at transformationer og filtre anvendes korrekt. Almindelige fejltilstande – mange-til-mange-joins, filter-pushdown-fejl og ikke-håndterede null-værdier – kan ubemærket gøre resultater ugyldige. På OpenAI’s skala bør analytikere ikke bruge tid på at fejlfinde SQL-semantik eller forespørgselsydeevne. Deres fokus bør være rettet mod at definere målepunkter, validere antagelser og træffe datadrevne beslutninger.

Skærmbillede af SQL-kode, der definerer to CTE'er – order_enriched og monthly_segment – som forbinder kundernes geografiske data, udleder felter for ordremåned og beregner månedlige aggregater såsom ordreantal, bruttoomsætning, omsætning med moms og gennemsnitlige dage fra forsendelse til modtagelse.

Denne SQL-sætning er over 180 linjer lang. Det er ikke nemt at forstå, om vi sammenkobler de rigtige tabeller og forespørger de rette kolonner.

Sådan fungerer det

Lad os gennemgå, hvad vores agent er, hvordan den udvælger kontekst, og hvordan den løbende forbedrer sig selv.

Vores agent er drevet af GPT‑5.2 og er designet til at ræsonnere over OpenAI’s dataplatform. Den er tilgængelig, der hvor medarbejdere allerede arbejder, f.eks. som en Slack-agent, via en webgrænseflade, inde i IDE'er, i Codex CLI via MCP(åbner i et nyt vindue) og direkte i OpenAI's interne ChatGPT‑app gennem en MCP-connector(åbner i et nyt vindue).

Diagram med titlen “Sådan fungerer datagenten.“ Indgangspunkter – Agent-UI, Local Agent-MCP, Remote Agent-MCP og Slack Agent – overføres til en Agent-API. API'en opretter forbindelse til intern dataviden og virksomhedskontekst, synkroniserer med et datalager og platformkilder samt udveksler anmodninger med GPT-5.2 model via Agent-MCP.

Brugere kan stille komplekse, åbne spørgsmål, der typisk ville kræve flere runder af manuel udforskning. Tag dette eksempel på en prompt, der bruger et testdatasæt: “For NYC-taxiture, hvilke afhentning-til-afleveringer ZIP-par er de mest upålidelige, med den største forskel mellem typiske og værst tænkelige turetider, og hvornår opstår den variabilitet?”

Agenten håndterer analysen fra start til slut, lige fra at forstå spørgsmålet til at udforske dataene, køre forespørgsler og sammenfatte resultater.

Skærmbillede, der viser en bruger, der spørger, hvilke NYC-taxi afhentning→aflevering ZIP-par der er mest “upålidelige.” Agenten forklarer ved hjælp af ca. 21.000 ture fra samples.nyctaxi.trips, definerer typisk (p50) vs værst tænkelige scenarier (p95), anvender filtre og beskriver, hvordan den identificerer, hvornår hver ZIP-pakkes længste tur fandt sted.

Agentens svar på spørgsmålet.

En af agentens superkræfter er, hvordan den løser problemer gennem ræsonnering. I stedet for at følge et fast manuskript vurderer agenten sine egne fremskridt. Hvis et mellemresultat ser forkert ud (f.eks. hvis det har nul rækker på grund af en forkert join eller et forkert filter), undersøger agenten, hvad der gik galt, justerer sin tilgang og prøver igen. Gennem hele denne proces bevarer agenten den fulde kontekst og fører læringen videre mellem trinene. Denne lukkede, selvlærende proces flytter iterationen fra brugeren til selve agenten, hvilket muliggør hurtigere resultater og konsekvent højere kvalitet af analyser end manuelle arbejdsgange.

Skærmbillede af en opgavearbejdsgang, der viser en AI-agents trinvise plan for analyse af varigheden af taxaturer i New York City. Det inkluderer mål, interne søgninger, skemainspektion, kodeudsnit og ræsonnering om beregning af p50/p95-spredninger, identifikation af upålidelige ZIP-par og planlægning af SQL-forespørgsler.

Agentens ræsonnement for at identificere de mest upålidelige afhentnings- og afleveringspar i NYC.

Agenten dækker hele analysearbejdsgangen fra at finde data, køre SQL og udgive notebooks og rapporter. Den forstår intern virksomhedsviden, kan søge på nettet efter ekstern information og forbedres over tid gennem indlært brug og hukommelse.

Kontekst er altafgørende

Svar af høj kvalitet afhænger af en fyldig og præcis kontekst. Uden kontekst kan selv stærke modeller give forkerte resultater, såsom at fejlvurdere brugerantal betydeligt eller misfortolke intern terminologi.

Skærmbillede af en bruger, der spørger: "Hvad var ChatGPT Image Gen logget ind DAU i de sidste 30 dage?" med en statuslinje nedenfor, der viser, at agenten har "Arbejdet i 22 minutter 41 sekunder", hvilket angiver, at en langvarig forespørgsel er i gang.

En agent uden hukommelse kan ikke forespørge effektivt.

Skærmbillede, der viser en bruger, der spørger: "Hvad var ChatGPT Image Gen logget ind DAU i de sidste 30 dage?" Under meddelelsen står der "Har arbejdet i 1 minut og 22 sekunder", hvilket indikerer, at forespørgslen stadig kører og tager lang tid at fuldføre.

Agentens hukommelse gør det muligt at udføre hurtigere forespørgsler ved at finde de korrekte tabeller.

For at undgå disse fejltilstande er agenten bygget op omkring flere lag af kontekst, der forankrer den i OpenAI’s data og institutionelle viden.

Diagram med titlen "Dataagentens kontekstlag", der viser seks stablede lag: 1) Tabelbrug, 2) Menneskelige annoteringer, 3) Codex-berigelse, 4) Institutionel viden, 5) Hukommelse og 6) Kørselstidens kontekst. Hvert lag vises som en vandret bjælke i pyramideform.

Lag 1: Brug af tabel

  • Grundlag for metadata: Agenten er afhængig af skemadata (kolonnenavne og datatyper) til at informere SQL-skrivning og bruger tabelafstamning (f.eks. upstream- og downstream-tabelrelationer) til at give kontekst om, hvordan forskellige tabeller relaterer til hinanden.
  • Forespørgselsinferens: Indlæsning af historiske forespørgsler hjælper agenten med at forstå, hvordan den kan skrive sine egne forespørgsler, og hvilke tabeller der typisk sammenføjes.

Lag 2: Menneskelige annoteringer

  • Udvalgte beskrivelser af tabeller og kolonner leveret af domæneeksperter, der forstår intention, semantik, forretningsmæssig betydning og kendte forbehold, som er svære at udlede af skemaer eller tidligere forespørgsler.

Metadata alene er ikke nok. For virkelig at kunne skelne tabeller fra hinanden, er det vigtigt at forstå, hvordan de blev oprettet, og hvor de stammer fra.

Lag 3: Codex-berigelse

  • Ved at udlede en definition af en tabel på kodeniveau opbygger agenten en dybere forståelse af, hvad dataene rent faktisk indeholder. 
    • Der opnås ekstra information ved at se på variationer af, hvad der gemmes i tabellen, og hvordan det udledes fra en analysebegivenhed. For eksempel kan det give kontekst om værdiers unikke karakter, hvor ofte tabeldataene opdateres, dataenes omfang (f.eks. hvis tabellen ekskluderer bestemte felter, har den dette detaljeringsniveau) osv.
  • Dette giver en forbedret brugskontekst ved at vise, hvordan tabellen anvendes ud over SQL i Spark, Python og andre datasystemer.
  • Det betyder, at agenten kan skelne mellem tabeller, der ser ens ud, men adskiller sig på væsentlige måder. For eksempel kan den afgøre, om en tabel kun indeholder førsteparts ChatGPT‑trafik. Denne kontekst opdateres også automatisk, så den forbliver opdateret uden manuel vedligeholdelse.
Diagram med titlen “Codex-beriget videnspipeline.” Populære tabeller indgår i flere Codex-opgaver, der udtrækker detaljer fra OpenAI-kodebasen, herunder en tabels formål, granularitet og primære nøgler, downstream-brugsmønstre, alternative tabelmuligheder og dataaktualitet.

Lag 4: Institutionel viden 

  • Agenten kan få adgang til Slack, Google Docs og Notion, som indfanger kritisk virksomhedskontekst såsom lanceringer, pålidelighedshændelser, interne kodenavne og værktøjer samt de kanoniske definitioner og beregningslogikken for nøglemålepunkter.
  • Disse dokumenter optages, indlejres og gemmes sammen med metadata og tilladelser. En hentningstjeneste håndterer adgangskontrol og caching under kørsel, hvilket gør det muligt for agenten at hente disse oplysninger effektivt og sikkert.
Skærmbillede af en bruger, der spørger, hvorfor brugen af forbindelser faldt i december. Agenten forklarer, at faldet skyldtes et logningsproblem, der startede den 13. november 2025, hvilket medførte underoptalt brug efter lanceringen af ChatGPT 5.1. Legacy-telemetri gik tom, indtil en nyere begivenhed blev kilden til den reelle værdi.

Lag 5: Hukommelse

  • Når agenten får rettelser eller opdager variationer vedrørende visse dataspørgsmål, kan den gemme disse erfaringer til næste gang, så den konstant kan forbedre sig sammen med sine brugere. 
    • Derfor begynder fremtidige svar fra et mere præcist udgangspunkt frem for gentagne gange at støde på de samme problemer.
    • Målet med hukommelse er at bevare og genbruge ikke-åbenlyse rettelser, filtre og begrænsninger, der er kritiske for datakorrekthed, men som er vanskelige at udlede alene fra de andre lag. 
    • For eksempel vidste agenten i ét tilfælde ikke, hvordan man filtrerede efter et bestemt analyseeksperiment (den var afhængig af matchning mod en specifik streng defineret i en eksperimentgate). Hukommelse var afgørende her for at sikre, at agenten kunne filtrere korrekt, i stedet for at forsøge at lave uklar strengmatchning.
  • Når du giver agenten en rettelse, eller når den finder en læring fra din samtale, vil den bede dig om at gemme den viden til næste gang. 
    • En sådan hukommelse kan også oprettes og redigeres manuelt af brugere.
    • Hukommelser er defineret på globalt og personligt niveau, og agentens værktøjer gør det nemt at redigere dem.
Notifikationsbanner, der viser “Dataagent ønsker at gemme 2 læringer i hukommelsen,” med et element mærket “ChatGPT Top-niveau Metrics” og en bekræftelsesmeddelelse til højre, der lyder “Gemt i global hukommelse” med et grønt flueben.

Lag 6: Kontekst for køretid

  • Når der ikke findes nogen tidligere kontekst for en tabel, eller når eksisterende oplysninger er forældede, kan agenten sende live-forespørgsler til datalageret for at inspicere og forespørge tabellen direkte. Dette gør det muligt at validere skemaer, forstå dataene i realtid og reagere i overensstemmelse hermed.
  • Agenten kan også kommunikere med andre dataplatformsystemer (metadatatjeneste, Airflow, Spark), hvis det er nødvendigt, for at få en bredere datakontekst, der findes uden for lageret.

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(åbner i et nyt vindue) and stored for retrieval. At query time, the agent pulls only the most relevant embedded context via retrieval-augmented generation(åbner i et nyt vindue) (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 titlen "Konteksthentning i dataagenten". RAG-indlejringer bruger offline-forbehandlingslag såsom tabelbrug, menneskelige annoteringer, Codex-berigelse, institutionel viden og hukommelse. Live-hentning viser, at agenten forespørger en database via semantisk søgning eller præcis teksthentning for at skabe kontekst for køretid.

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.

Brugergrænsefladens inputlinje med pladsholderteksten "Stil et dataspørgsmål". Nedenfor er der en knap mærket "Brug en arbejdsgang", og til højre er der mikrofon- og sende-ikoner. Bjælken har afrundede hjørner og er vist på en mørk baggrund.

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(åbner i et nyt vindue) 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 titlen "Dataagentens evalueringspipeline". Spørgsmål og svar-evaluering parres med forventet SQL-feed i et genereringstrin, der producerer SQL og resultater. OpenAI Evals sammenligner genererede vs. forventede resultater ved hjælp af dataframe- og SQL-sammenligning og genererer en score og argumentation.

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.

Skrevet af

Bonnie Xu, Aravind Suresh og Emma Tang

Tak til

Særlig tak til Data Productivity- og Data Science-teams samt til vores mange tværfunktionelle brugere for deres eksperimenter og feedback.