Внутри собственного агента по работе с данными в OpenAI
Авторы: Бонни Сюй, Аравинд Суреш и Эмма Тан
Данные определяют то, как учатся системы, развиваются продукты и принимаются решения в компаниях. Однако получать ответы быстро, корректно и с нужным контекстом зачастую оказывается сложнее, чем должно быть. Чтобы упростить эту задачу по мере масштабирования OpenAI, мы создали собственный специализированный ИИ-агент по работе с данными, который исследует нашу платформу и делает выводы на ее основе.
Наш агент — это кастомный инструмент исключительно для внутреннего использования (не внешнее предложение), созданный специально с учетом данных, разрешений и рабочих процессов OpenAI. Мы рассказываем о том, как мы его создали и используем, чтобы продемонстрировать реальные и эффективные способы того, как ИИ может поддерживать повседневную работу наших команд. Инструменты OpenAI, которые мы использовали для его создания и запуска (Codex, наша флагманская модель GPT‑5, Evals API и Embeddings API) — это те же инструменты, которые мы предоставляем разработчикам по всему миру.
Наш агент по работе с даннымипозволяет сотрудникам переходить от вопроса к инсайту за считанные минуты, а не дни. Это снижает порог входа для извлечения данных и проведения детального анализа во всех отделах, а не только в нашей команде аналитиков. Сегодня команды инженеров, специалистов по работе с данными, специалистов по выходу на рынок (Go-To-Market), финансистов и исследователей в OpenAI полагаются на агента при решении важнейших задач, связанных с данными. Например, он помогает понять, как оценивать запуски и отслеживать состояние бизнеса, и все это в интуитивном формате естественного языка. Агент объединяет знания на уровне таблиц на базе Codex с контекстом продукта и организации. Его система памяти, которая постоянно обучается, означает, что он также совершенствуется с каждым новым запросом.

В этой статье мы подробно расскажем о том, почему нам понадобился специализированный ИИ-агент по работе с данными, чем полезны его обогащенный кодом контекст данных и самообучение, а также поделимся извлеченными уроками.
Почему нам потребовался кастомный инструмент
Платформа данных OpenAI обслуживает более 3,5 тыс. внутренних пользователей из числа инженеров, продакт-менеджеров и исследователей, работающих с более чем 600 петабайтами данных в 70 тыс. наборов данных. При таком масштабе простой поиск нужной таблицы может оказаться одной из самых трудоемких частей анализа.
Как выразился один из внутренних пользователей:
«У нас много довольно похожих таблиц, и я трачу кучу времени на то, чтобы понять, чем они отличаются и какую из них использовать. Некоторые включают пользователей, вышедших из системы, а некоторые нет. В некоторых есть пересекающиеся поля; сложно разобраться, что к чему».
Даже при выборе правильных таблиц получение верных результатов может оказаться непростой задачей. Аналитикам необходимо осмыслять данные таблиц и взаимосвязи между ними, чтобы обеспечить правильное применение преобразований и фильтров. Распространенные ошибки (соединения «многие ко многим», ошибки передачи фильтров (filter pushdown) и необработанные нулевые значения) могут незаметно сделать результаты недействительными. При масштабах OpenAI аналитики не должны тратить время на отладку семантики SQL или производительности запросов: их внимание должно быть сосредоточено на определении метрик, проверке предположений и принятии решений на основе данных.

Этот SQL-запрос состоит более чем из 180 строк. Нелегко понять, объединяем ли мы правильные таблицы и запрашиваем ли нужные колонки.
Как это работает
Давайте разберем, что представляет собой наш агент, как он формирует контекст и как поддерживает процесс самообучения.
Наш агент работает на базе GPT‑5.2 и предназначен для работы с платформой данных OpenAI. Он доступен везде, где уже работают сотрудники: в качестве агента в Slack, через веб-интерфейс, внутри IDE, в Codex CLI через MCP и напрямую в внутреннем приложении ChatGPT от OpenAI через MCP-коннектор.
Пользователи могут задавать сложные открытые вопросы, которые обычно требуют многократных раундов ручного исследования. Возьмем этот пример запроса, в котором используется тестовый набор данных: «Для поездок на такси в Нью-Йорке какие пары почтовых индексов мест посадки и высадки являются наиболее ненадежными, с наибольшим разрывом между типичным и худшим временем в пути, и когда возникает эта вариативность?»
Агент выполняет анализ от начала и до конца: от понимания вопроса до изучения данных, выполнения запросов и обобщения выводов.
Одна из суперспособностей агента — то, как он рассуждает при решении проблем. Вместо того чтобы следовать фиксированному сценарию, агент оценивает собственный прогресс. Если промежуточный результат выглядит некорректным (например, если получается ноль строк из-за неверного соединения или фильтра), агент исследует, что пошло не так, корректирует свой подход и пробует снова. На протяжении всего этого процесса он сохраняет полный контекст и переносит накопленные знания между этапами. Этот процесс замкнутого цикла и самообучения переносит итерации с пользователя на самого агента, обеспечивая более быстрые результаты и стабильно более качественный анализ по сравнению с ручными рабочими процессами.

Рассуждения агента для определения наиболее ненадежных пар точек посадки и высадки такси в Нью-Йорке.
Агент охватывает весь рабочий процесс аналитики: обнаружение данных, выполнение SQL-запросов, а также публикацию блокнотов и отчетов. Он понимает внутренние знания компании, может искать внешнюю информацию в интернете и со временем совершенствуется благодаря накопленному опыту использования и памяти.
Контекст — это всё
Высококачественные ответы зависят от богатого и точного контекста. Без контекста даже самые мощные модели могут давать неверные результаты, например, сильно занижая или завышая количество пользователей либо неверно истолковывая внутреннюю терминологию.

Агент без памяти неспособен эффективно выполнять запросы.

Память агента обеспечивает более быстрый поиск за счет определения нужных таблиц.
Во избежание подобных сбоев агент построен на основе нескольких уровней контекста, которые связывают его с данными OpenAI и корпоративными знаниями.
Слой №1: Использование таблиц
- Обоснование на основе метаданных: Агент полагается на метаданные схемы (имена столбцов и типы данных) для составления SQL-запросов, а также использует цепочки таблиц (например, связи между родительскими и дочерними таблицами), чтобы получить контекст о том, как различные таблицы соотносятся друг с другом.
- Вывод запросов: Загрузка исторических запросов помогает агенту понять, как писать собственные запросы и какие таблицы обычно объединяются.
Слой №2: Ручные аннотации
- Курируемые описания таблиц и столбцов, предоставленные экспертами в предметной области; они отражают назначение, семантику, бизнес-смысл и известные нюансы, которые непросто вывести из схем или прошлых запросов.
Одних метаданных недостаточно. Чтобы по-настоящему отличать таблицы друг от друга, необходимо понимать, как они были созданы и откуда происходят.
Слой №3: Обогащение с помощью Codex
- Выводя определение таблицы на уровне кода, агент формирует более глубокое понимание того, что на самом деле содержат данные.
- Нюансы относительно того, что хранится в таблице и как она формируется из аналитического события, предоставляют дополнительную информацию. Например, это дает контекст об уникальности значений, частоте обновления данных в таблице, области видимости данных (например, если таблица исключает определенные поля, она обладает соответствующим уровнем детализации) и т. д.
- Это обеспечивает расширенный контекст использования, показывая, как таблица применяется не только в SQL, но и в Spark, Python и других системах обработки данных.
- Это означает, что агент может различать таблицы, которые выглядят похожими, но существенно отличаются друг от друга. Например, он может определить, включает ли таблица трафик ChatGPT исключительно от первой стороны. Этот контекст также обновляется автоматически, поэтому он остается актуальным без ручного обслуживания.
Слой №4: Институциональные знания
- Агент имеет доступ к Slack, Google Docs и Notion, в которых фиксируется важнейший контекст компании: запуски, инциденты надежности, внутренние кодовые имена и инструменты, а также канонические определения и логика вычислений для ключевых метрик.
- Эти документы загружаются, преобразуются в векторные представления (эмбеддинги) и сохраняются вместе с метаданными и правами доступа. Служба поиска управляет контролем доступа и кэшированием во время выполнения, позволяя агенту эффективно и безопасно извлекать эту информацию.

Слой №5: Память
- Когда агенту предоставляют исправления или он обнаруживает нюансы, касающиеся определенных вопросов по данным, он способен сохранять эти знания для последующего использования, что позволяет ему постоянно совершенствоваться во взаимодействии с пользователями.
- В результате будущие ответы формируются на более точной основе, а не за счет повторного столкновения с одними и теми же проблемами.
- Цель памяти заключается в сохранении и повторном использовании неочевидных исправлений, фильтров и ограничений, которые критически важны для правильности данных, но их трудно вывести только с помощью других слоев.
- Например, в одном из случаев агент не знал, как отфильтровать данные для конкретного аналитического эксперимента (он полагался на сопоставление с определенной строкой, заданной в шлюзе экспериментов). Память имела здесь решающее значение, чтобы гарантировать корректную фильтрацию вместо попыток нечеткого сопоставления строк.
- Когда вы вносите исправление для агента или когда он извлекает новые знания из вашего разговора, он предложит сохранить эту информацию в памяти на будущее.
- Элементы памяти также могут создаваться и редактироваться пользователями вручную.
- Память распределяется по уровням: глобальному и персональному, а встроенный инструментарий агента позволяет легко её редактировать.

Слой №6: Контекст выполнения
- Если для таблицы отсутствует предварительный контекст или имеющаяся информация устарела, агент может отправлять интерактивные запросы к хранилищу данных для непосредственного изучения и опроса таблицы. Это позволяет ему проверять схемы, понимать данные в режиме реального времени и соответствующим образом реагировать.
- Агент также может при необходимости обращаться к другим системам платформ данных (службе метаданных, Airflow, Spark) для получения более широкого контекста данных, находящегося за пределами хранилища.
Мы запускаем ежедневный автономный конвейер, который объединяет статистику использования таблиц, аннотации пользователей и обогащение на базе Codex в единое нормализованное представление. Этот обогащенный контекст затем преобразуется в векторные представления (эмбеддинги) с помощью API эмбеддингов OpenAI и сохраняется для последующего поиска. Во время выполнения запроса агент извлекает только наиболее релевантный встроенный контекст с помощью дополненной генерацией с поиском (RAG) вместо сканирования необработанных метаданных или журналов. Это делает анализ таблиц быстрым и масштабируемым даже для десятков тысяч таблиц, сохраняя при этом предсказуемо низкую задержку во время выполнения. Интерактивные запросы отправляются в наше хранилище данных по мере необходимости в реальном времени.
В совокупности эти уровни гарантируют, что рассуждения агента опираются на данные, код и накопленные знания OpenAI, что позволяет кардинально снизить количество ошибок и повысить качество ответов.
Создан мыслить и работать как коллега по команде
Одноразовые ответы подходят, когда задача ясна, но большинство вопросов таковыми не являются. Чаще всего для достижения правильного результата требуется доработка в процессе диалога и некоторая коррекция курса.
Агент создан так, чтобы вести себя как коллега по команде, с которым можно вести конструктивный диалог. Он работает в режиме реального времени, поддерживает диалог и справляется как с быстрыми ответами, так и с итеративным исследованием.
Он переносит полный контекст между репликами, поэтому пользователи могут задавать уточняющие вопросы, корректировать свои намерения или менять направление без необходимости повторять все заново. Если агент начинает двигаться по ложному пути, пользователи могут прервать его прямо посреди анализа и перенаправить, точно так же, как при работе с коллегой-человеком, который слушает, а не прет напролом.
Когда инструкции неясны или неполны, агент проявляет инициативу и задает уточняющие вопросы. Если ответ не предоставлен, он применяет разумные значения по умолчанию для продвижения вперед. Например, если пользователь спрашивает о росте бизнеса без указания диапазона дат, агент может взять за основу последние 7 или 30 дней. Такие предварительные настройки позволяют ему оставаться отзывчивым и не блокировать работу, одновременно приближаясь к правильному результату.
В результате получается агент, который отлично справляется как с задачами, когда вы точно знаете, чего хотите (например, «Расскажи мне об этой таблице»), так и эффективно помогает в исследованиях (например, «Я вижу здесь спад, можем ли мы разбить это по типам клиентов и временным интервалам?»).
После запуска мы заметили, что пользователи часто выполняют одни и те же рутинные повторяющиеся аналитические задачи. Чтобы ускорить этот процесс, рабочие процессы (workflows) агента объединяют повторяющиеся анализы в многоразовые наборы инструкций. Примеры включают рабочие процессы для еженедельных бизнес-отчетов и проверки таблиц. Задавая контекст и лучшие практики одинжды, рабочие процессы оптимизируют повторный анализ и обеспечивают стабильные результаты для разных пользователей.

Быстрое развитие без потери доверия
Создание постоянно работающего и развивающегося агента означает, что качество может ухудшаться так же легко, как и улучшаться. Без тесной обратной связи регрессии неизбежны и незаметны. Единственный способ масштабировать возможности, не подрывая доверие — это систематическая оценка.
В этом разделе мы расскажем, как мы используем API Evals от OpenAI для измерения и защиты качества ответов агента.
Оценки (Evals) строятся на основе тщательно подобранных наборов пар «вопрос-ответ». Каждый вопрос нацелен на важную метрику или аналитический паттерн, в правильности работы которого мы крайне заинтересованы, в паре с созданным вручную «эталонным» SQL-запросом, выдающим ожидаемый результат. Для каждой оценки мы отправляем вопрос на естественном языке в конечную точку генерации запросов, выполняем сгенерированный SQL и сравниваем вывод с результатом эталонного SQL.
Оценка не полагается на простое сопоставление строк. Сгенерированный SQL может отличаться синтаксически, оставаясь при этом корректным, а наборы результатов могут включать дополнительные столбцы, которые существенно не влияют на ответ. Чтобы учесть это, мы сравниваем как сам SQL, так и результирующие данные, и передаем эти сигналы оценщику Evals от OpenAI. Оценщик выдает финальный балл вместе с объяснением, учитывая как правильность, так и допустимые вариации.
Эти оценки похожи на модульные тесты, которые выполняются непрерывно во время разработки для выявления регрессий подобно канарейкам на производстве; это позволяет нам вовремя выявлять проблемы и уверенно проводить итерации по мере расширения возможностей агента.
Безопасность агента
Наш агент напрямую подключается к существующей модели безопасности и контроля доступа OpenAI. Он функционирует исключительно как уровень интерфейса, наследуя и применяя те же разрешения и защитные механизмы, которые регулируют работу с данными OpenAI.
Весь доступ агента является строгопрозрачным (сквозным), что означает: пользователи могут запрашивать только те таблицы, к которым у них уже есть права доступа. Если доступ отсутствует, агент сообщает об этом или переключается на альтернативные наборы данных, на использование которых у пользователя есть разрешение.
Наконец, он создан с расчетом на прозрачность. Как и любая система, он может совершать ошибки. Он раскрывает свой процесс рассуждения, суммируя предположения и шаги выполнения вместе с каждым ответом. При выполнении запросов он напрямую ссылается на нижележащие результаты, позволяя пользователям изучать исходные данные и проверять каждый шаг анализа.
Извлеченные уроки
Создание нашего агента с нуля позволило извлечь практические уроки о том, как ведут себя агенты, с какими трудностями они сталкиваются и что действительно делает их надежными в масштабе.
Урок №1: Меньше значит больше
На раннем этапе мы предоставили агенту полный набор инструментов и быстро столкнулись с проблемами пересекающегося функционала. Хотя такая избыточность может быть полезна в определенных нестандартных ситуациях и более очевидна для человека при ручном вызове, она сбивает агентов с толку. Чтобы уменьшить двусмысленность и повысить надежность, мы ограничили и объединили некоторые вызовы инструментов.
Урок №2: Направляйте цель, а не путь
Мы также обнаружили, что излишне предписывающие подсказки (промпты) ухудшают результаты. Хотя многие вопросы имеют схожую общую аналитическую форму, детали различаются настолько, что жесткие инструкции часто уводили агента по ложному пути. Перейдя к руководству на более высоком уровне и полагаясь на возможности рассуждения GPT‑5 при выборе подходящего пути выполнения, мы сделали агента более устойчивым и добились лучших результатов.
Урок №3: Смысл заложен в коде
Схемы и история запросов описывают структуру и использование таблицы, но ее истинный смысл кроется в коде, который ее создает. Логика пайплайна фиксирует допущения, гарантии актуальности и бизнес-цели, которые никогда не отражаются в SQL или метаданных. Сканируя кодовую базу с помощью Codex, наш агент понимает, как наборы данных сконструированы на самом деле, и способен лучше рассуждать о том, что именно содержит каждая таблица. Он может отвечать на вопросы «что здесь находится» и «когда это можно использовать» гораздо точнее, чем опираясь только на сигналы хранилища данных.
Та же концепция, новые инструменты
Мы постоянно работаем над улучшением нашего агента, расширяя его способность справляться с неоднозначными вопросами, повышая его надежность и точность за счет более строгой валидации, а также более глубоко интегрируя его в рабочие процессы. Мы верим, что он должен органично вписываться в привычный рабочий процесс людей, а не функционировать как отдельный инструмент.
Хотя наш инструментарий будет продолжать извлекать выгоду из фундаментальных улучшений в рассуждениях агентов, валидации и самокоррекции, миссия нашей команды остается прежней: беспрепятственно обеспечивать быстрый и надежный анализ данных во всей экосистеме данных OpenAI.
Автор
Благодарности
Особая благодарность командам Data Productivity и Data Science, а также нашим многочисленным кросс-функциональным пользователям за их эксперименты и отзывы.
Полный текст статьи читайте на OpenAI
