Data určují, jak se systémy učí, jak se produkty vyvíjejí a jak se společnosti rozhodují. Získat odpovědi rychle, správně a ve správném kontextu je však často těžší, než by mělo být. Abychom to usnadnili, jak OpenAI roste, vytvořili jsme vlastního interního datového agenta umělé inteligence, který zkoumá a uvažuje na naší vlastní platformě.
Náš agent je vlastní interní nástroj (nikoli externí nabídka), vytvořený speciálně na základě dat, oprávnění a pracovních postupů OpenAI. Ukazujeme, jak jsme ho vytvořili a používáme, abychom pomohli odhalit příklady skutečných a účinných způsobů, jak může umělá inteligence podpořit každodenní práci v našich týmech. Nástroje OpenAI, které jsme použili k jeho sestavení a spuštění (Codex, náš vlajkový model GPT‑5, rozhraní API Evals(otevře se v novém okně) a rozhraní API Embeddings(otevře se v novém okně)) jsou stejné nástroje, které dáváme k dispozici vývojářům po celém světě.
Náš datový agent umožňuje zaměstnancům dostat se od otázky k poznatku během několika minut, nikoli dnů. Tím se snižuje laťka pro získávání dat a diferencovanou analýzu ve všech funkcích, nejen v našem datovém týmu. V současné době se týmy v oblasti inženýrství, datové vědy, marketingu, financí a výzkumu společnosti OpenAI opírají o agenta, který jim pomáhá odpovídat na důležité otázky ohledně dat. Může například pomoci odpovědět na otázky, jak vyhodnotit spuštění a pochopit stav podniku, a to vše v intuitivním formátu přirozeného jazyka. Agent kombinuje znalosti na úrovni tabulek na základě nástroje Codex s kontextem produktu a organizace. Díky systému průběžně se učící paměti se také s každou konverzací zlepšuje.

V tomto příspěvku vysvětlíme, proč jsme potřebovali datového agenta s umělou inteligencí na míru, proč jsou jeho kódem obohacený datový kontext a samoučení tak užitečné a jaké zkušenosti jsme se na této cestě získali.
Datová platforma OpenAI slouží více než 3,5 tisícům interních uživatelů z oblasti inženýrství, produktů a výzkumu, kteří využívají více než 600 petabajtů dat v 70 tisících datových sadách. Při této velikosti může být pouhé nalezení správné tabulky jednou z časově nejnáročnějších částí analýzy.
Jak to vyjádřil jeden z interních uživatelů:
„Máme spoustu tabulek, které jsou si dost podobné, a já trávím spoustu času tím, že se snažím zjistit, v čem se liší a které použít. Některé zahrnují odhlášené uživatele, jiné ne. Některé mají překrývající se pole, je těžké říct, co je co.“
Vytvoření správných výsledků může být náročné i v případě, že jsou vybrány správné tabulky. Analytici musí uvažovat o datech a relacích v tabulkách, aby zajistili správné použití transformací a filtrů. Běžné způsoby selhání – spojování N : N, chyby při odesílání filtrů a neošetřené nuly – mohou bez upozornění znehodnotit výsledky. V měřítku OpenAI by analytici neměli trávit čas laděním sémantiky SQL nebo výkonnosti dotazů: měli by se soustředit na definování metrik, ověřování předpokladů a rozhodování na základě dat.

Tento příkaz SQL má více než 180 řádků. Není snadné zjistit, zda spojujeme správné tabulky a dotazujeme se na správné sloupce.
Pojďme si projít, co je náš agent, jak vytváří kontext a jak se neustále zlepšuje.
Náš agent využívá GPT‑5.2 a je navržen tak, aby mohl uvažovat nad datovou platformou OpenAI. Je k dispozici všude tam, kde zaměstnanci už pracují: jako agent Slack, prostřednictvím webového rozhraní, v IDE, v rozhraní příkazového řádku Codex prostřednictvím MCP(otevře se v novém okně) a přímo v interní aplikaci ChatGPT společnosti OpenAI prostřednictvím konektoru MCP(otevře se v novém okně).
Uživatelé mohou klást složité, otevřené otázky, které by obvykle vyžadovaly několik kol ručního zkoumání. Vezměme si tento příklad promptu, který používá testovací soubor dat: „Které dvojice PSČ pro jízdy taxíkem v New Yorku jsou nejnespolehlivější, s největším rozdílem mezi typickou a nejhorší cestovní dobou, a kdy k této variabilitě dochází?“
Agent provádí analýzu od začátku do konce, od pochopení otázky přes zkoumání dat, provádění dotazů až po syntézu poznatků.

Odpověď agenta na otázku.
Jednou ze superschopností agenta je, že dokáže problémy zdůvodnit. Agent se neřídí pevně daným scénářem, ale sám vyhodnocuje svůj postup. Pokud mezivýsledek vypadá špatně (např. obsahuje nulové řádky v důsledku nesprávného spojení nebo filtru), agent zjistí, co se pokazilo, upraví svůj přístup a zkusí to znovu. Během tohoto procesu zachovává úplný kontext a přenáší poznatky mezi jednotlivými kroky. Tento uzavřený samoučící se proces přesouvá iteraci z uživatele na samotného agenta, což umožňuje rychlejší výsledky a trvale vyšší kvalitu analýz než manuální pracovní postupy.

Uvažování agenta k identifikaci nejméně spolehlivých dvojic vyzvednutí a vysazení u taxi v New Yorku.
Agent pokrývá celý analytický pracovní postup: objevování dat, spouštění SQL a publikování poznámkových bloků a zpráv. Rozumí interním znalostem společnosti, dokáže vyhledávat externí informace na webu a postupem času se zlepšuje díky naučenému používání a paměti.
Kvalitní odpovědi závisí na bohatém a přesném kontextu. Bez kontextu mohou i silné modely přinést nesprávné výsledky, například výrazně zkreslené odhady počtu uživatelů nebo nesprávnou interpretaci interní terminologie.

Agent bez paměti, neschopný efektivně se dotazovat.

Paměť agenta umožňuje rychlejší dotazy díky vyhledávání správných tabulek.
Aby se předešlo těmto způsobům selhání, je agent postaven na několika vrstvách kontextu, díky kterým je podložený daty a institucionálními znalostmi OpenAI.
- Ukotvení v metadatech: Agent se při psaní SQL opírá o metadata schématu (názvy sloupců a datové typy) a používá strom tabulek (např. vztahy mezi tabulkami předchůdce a následovník), aby poskytl kontext, jaké relace mezi sebou tabulky mají.
- Inference dotazu: Příjem historických dotazů pomáhá agentovi pochopit, jak psát vlastní dotazy a které tabulky se obvykle spojují.
- Vypracované popisy tabulek a sloupců od oborových expertů, které zachycují záměr, sémantiku, obchodní význam a známá upozornění, která nelze snadno odvodit ze schémat nebo předchozích dotazů.
Samotná metadata nestačí. Aby bylo možné tabulky skutečně rozlišit od sebe, je třeba pochopit, jak byly vytvořeny a odkud pocházejí.
- Odvozením definice tabulky na úrovni kódu si agent vytváří hlubší představu o tom, co data skutečně obsahují.
- Nuance ohledně toho, co je uloženo v tabulce a jak je to odvozeno z analytické události, poskytuje další informace. Může například poskytnout kontext jedinečnosti hodnot, jak často jsou data tabulky aktualizována, rozsah dat (např. pokud tabulka vylučuje určitá pole, má tuto úroveň granularity) atd.
- To poskytuje rozšířený kontext použití tím, že ukazuje, jak se tabulka používá mimo SQL v prostředích Spark, Python a dalších datových systémech.
- To znamená, že agent dokáže rozlišovat mezi tabulkami, které vypadají podobně, ale v klíčových ohledech se liší. Dokáže například určit, zda tabulka obsahuje pouze přenosy ChatGPT první strany. Tento kontext se také automaticky obnovuje, takže je stále aktuální bez nutnosti ruční údržby.
- Agent může přistupovat ke službám Slack, Google Docs a Notion, které zachycují kritický firemní kontext, jako jsou spuštění, incidenty spolehlivosti, interní kódové názvy a nástroje a kanonické definice a logika výpočtu klíčových metrik.
- Tyto dokumenty jsou načteny, vloženy a uloženy s metadaty a oprávněními. Služba načítání zajišťuje řízení přístupu a ukládání do mezipaměti za běhu, což agentovi umožňuje efektivně a bezpečně získávat tyto informace.

- Když je agent opraven nebo objeví nuance ohledně určitých datových dotazů, dokáže si tato zjištění uložit pro příště, což mu umožňuje se neustále zlepšovat spolu se svými uživateli.
- Budoucí odpovědi tak budou vycházet z přesnějšího základu a nebudou opakovaně narážet na stejné problémy.
- Cílem paměti je zachovat a znovu použít nezjevné opravy, filtry a omezení, které jsou rozhodující pro správnost dat, ale je obtížné je odvodit pouze z ostatních vrstev.
- V jednom případě například agent nevěděl, jak filtrovat konkrétní analytický experiment (spoléhal se na porovnání s konkrétním řetězcem definovaným v bráně experimentu). Paměť tady byla velmi důležitá, aby bylo zajištěno správné filtrování, a ne jen pokusy o shodu řetězce.
- Když je agent opraven nebo když najde poznatek z konverzace, vyzve k uložení dané paměti pro příště.
- Paměti mohou uživatelé vytvářet a upravovat také ručně.
- Paměti jsou rozvrženy na globální a osobní úrovni a nástroje agenta usnadňují jejich úpravu.

- Pokud pro tabulku neexistuje žádný předchozí kontext nebo pokud jsou existující informace zastaralé, může agent zadávat živé dotazy do datového skladu a kontrolovat tabulku a dotazovat se na ni přímo. To mu umožňuje ověřovat schémata, porozumět datům v reálném čase a odpovídajícím způsobem reagovat.
- Agent je také schopen komunikovat s dalšími systémy datové platformy (služba metadat, Airflow, Spark), aby získal širší kontext dat, která existují mimo datový sklad.
Její hodnocení jsou založena na zpracovaných sadách dvojic otázek a odpovědí. Každá otázka se zaměřuje na důležitou metriku nebo analytický vzorec, na jehož správnosti nám velmi záleží, a je spojena s ručně vytvořeným „zlatým“ dotazem SQL, který vede k očekávanému výsledku. Pro každé vyhodnocení pošleme otázku v přirozeném jazyce na jeho koncový bod pro generování dotazů, spustíme vygenerované SQL a porovnáme výstup s výsledkem očekávaného SQL.
Vyhodnocení se nespoléhá na naivní shodu řetězců. Generovaný dotaz SQL se může syntakticky lišit a přitom být správný a sady výsledků mohou obsahovat další sloupce, které nemají podstatný vliv na odpověď. Abychom to zohlednili, porovnáváme SQL i výsledná data a tyto signály vkládáme do systému hodnocení Evals OpenAI. Hodnotitel vypracuje konečné skóre spolu s vysvětlením, které zachycuje správnost i přijatelnou odchylku.
Tato vyhodnocení jsou jako jednotkové testy, které běží průběžně během vývoje a identifikují regrese jako kanárci ve výrobě. Umožňuje nám to včas zachytit problémy a s jistotou iterovat, jak se rozšiřují schopnosti agenta.
Náš agent se přímo napojuje na stávající model zabezpečení a řízení přístupu OpenAI. Funguje čistě jako vrstva rozhraní, která dědí a vynucuje stejná oprávnění a ochranné mantinely, jimiž se řídí data OpenAI.
Veškerý přístup agenta je striktně průchozí, což znamená, že uživatelé se mohou dotazovat pouze na tabulky, ke kterým už mají oprávnění. Pokud přístup chybí, označí to nebo se vrátí k alternativním datovým sadám, které je uživatel oprávněn používat.
V neposlední řadě je vytvořen s ohledem na transparentnost. Jako každý systém může dělat chyby. Sděluje svůj proces uvažování shrnutím předpokladů a kroků provedení vedle každé odpovědi. Při provádění dotazů se propojí přímo s podkladovými výsledky, což uživatelům umožňuje kontrolovat nezpracovaná data a ověřovat každý krok analýzy.
Vytvoření našeho agenta od nuly přineslo praktické poznatky o tom, jak se agenti chovají, kde mají problémy a co je vlastně činí spolehlivými ve velkém měřítku.
Na začátku jsme agentovi poskytli celou sadu nástrojů a rychle jsme narazili na problémy s překrývajícími se funkcemi. Tato redundance může být užitečná pro specifické vlastní případy a pro člověka je při ručním vyvolání zřejmější, pro agenty je však matoucí. Abychom snížili nejednoznačnost a zvýšili spolehlivost, omezili jsme a konsolidovali některá volání nástrojů.
Zjistili jsme také, že vysoce preskriptivní prompty zhoršují výsledky. Ačkoli mnoho otázek má obecný analytický tvar, detaily se natolik liší, že rigidní instrukce často vedou agenta na nesprávnou cestu. Přechodem na vyšší úroveň vedení a spoléháním se na uvažování GPT‑5 při výběru vhodné cesty provádění agent zvýšil robustnost a dosahoval lepších výsledků.
Schémata a historie dotazů popisují tvar a použití tabulky, ale její skutečný význam se skrývá v kódu, který ji vytváří. Logika kanálu zachycuje předpoklady, záruky čerstvosti a obchodní záměry, které se nikdy neobjeví v SQL ani metadatech. Díky procházení kódové základny pomocí nástroje Codex náš agent chápe, jak jsou datové sady ve skutečnosti konstruovány, a dokáže lépe odhadnout, co jednotlivé tabulky skutečně obsahují. Dokáže odpovědět na otázky „co je tady“ a „kdy to mohu použít“ mnohem přesněji než pouze na základě signálů z datového skladu.
Neustále pracujeme na vylepšování agenta tím, že zvyšujeme jeho schopnost zpracovávat nejednoznačné otázky, zlepšujeme jeho spolehlivost a přesnost pomocí silnějších validací a hlouběji ho integrujeme do pracovních postupů. Věříme, že by se měl přirozeně začlenit do způsobu, jakým lidé již pracují, a ne fungovat jako samostatný nástroj.
Zatímco naše nástroje budou i nadále těžit ze základních vylepšení v oblasti uvažování agentů, validace a samoopravy, poslání našeho týmu zůstává stejné: bezproblémově poskytovat rychlou a důvěryhodnou analýzu dat v celém datovém ekosystému OpenAI.
Autor
Poděkování
Speciální poděkování týmům datové produktivity a datové vědy, stejně jako našim mnoha uživatelům napříč funkcemi za jejich experimentování a zpětnou vazbu.


