OpenAI приоткрывает занавес над Codex

Компания OpenAI раскрывает секреты работы своих агентов для программирования

OpenAI приоткрывает занавес над Codex

Компания OpenAI удивила своей прозрачной политикой, опубликовав подробный технический разбор того, как работает ее агент для программирования Codex CLI. В статье, автором которой стал инженер OpenAI Майкл Болин, представлено одно из самых четких на сегодняшний день объяснений того, как AI-агент промышленного уровня координирует работу больших языковых моделей и инструментов, а также входные данные пользователя для выполнения реальных задач по разработке программного обеспечения.

В основе Codex лежит то, что OpenAI называет agent loop – повторяющийся цикл, в котором поочередно происходят инференс модели и действия ИИ инструментов. Каждый цикл начинается с того, что Codex формирует промпт из структурированных входных данных: системных инструкций, ограничений разработчика, сообщений пользователя, контекста среды и доступных инструментов – и отправляет этот запрос в Responses API для обработки.

Выходные данные модели могут принимать одну из двух форм. Либо система генерирует сообщение ассистента для пользователя, либо формирует запрос на вызов инструмента, например, выполнение команды shell, чтение файла или вызов утилиты планирования либо поиска. Если запрошен вызов инструмента, Codex выполняет его локально (в пределах определенной “песочницы” (sandbox)), добавляет результат к промпту и снова обращается к модели. Этот цикл продолжается до тех пор, пока модель не сгенерирует финальное сообщение ассистента, сигнализирующее о завершении хода диалога.

Хотя такой высокоуровневый подход характерен для многих ИИ-агентов, документация OpenAI выделяется своей детализацией. Болин подробно объясняет, как промпты собираются из отдельных элементов, как роли (система, разработчик, пользователь, ассистент) определяют приоритеты и как мелкие решения, например, порядок инструментов в списке, могут существенно влиять на производительность.

Одним из наиболее заметных архитектурных решений является модель взаимодействия stateless. Вместо использования серверной памяти диалогов через необязательный параметр previous_response_id, Codex отправляет всю историю диалога с каждым запросом. Такой подход упрощает инфраструктуру и позволяет поддерживать режим Zero Data Retention (ZDR) для клиентов, которым необходимы строгие гарантии конфиденциальности.

Недостаток очевиден: размер промптов увеличивается с каждой итерацией, что приводит к квадратичному росту объема передаваемых данных. OpenAI смягчает эту проблему с помощью агрессивного кеширования промптов, которое позволяет повторно использовать вычисления, если каждый новый промпт является точным расширением предыдущего. Когда кеширование работает, стоимость обработки растет линейно, а не квадратично.

Однако это накладывает жесткие ограничения на систему. Изменение инструментов в середине диалога, переключение моделей, модификация разрешений песочницы или даже изменение порядка определения инструментов могут привести к промахам кеша и резкому падению производительности. Болин отмечает, что ранняя поддержка инструментов Model Context Protocol (MCP) выявила именно такую уязвимость, заставив команду тщательно пересмотреть подход к динамическим обновлениям инструментов.

Увеличение промпта также сталкивается с еще одним жестким ограничением – контекстное окно модели. Поскольку и входные, и выходные токены учитываются в рамках этого лимита, агент, работающий продолжительное время и выполняющий сотни вызовов инструментов, рискует исчерпать доступный контекст.

Для решения этой проблемы Codex использует автоматическое сжатие диалога (compaction). Когда количество токенов превышает заданный порог, Codex заменяет полную историю диалога сжатым представлением, созданным с помощью специализированной конечной точки API – /responses/compact. Важно, что этот сжатый контекст содержит зашифрованную полезную нагрузку, сохраняющую скрытое понимание модели предыдущих взаимодействий. Это позволяет ей продолжать логические рассуждения без доступа к полной необработанной истории диалога.

Ранние версии Codex требовали от пользователей запускать сжатие вручную; сегодня этот процесс автоматизирован и почти незаметен – важное улучшение удобства использования по мере того, как агенты берут на себя все более продолжительные и сложные задачи.

Исторически компания OpenAI неохотно публиковала глубокие технические детали о флагманских продуктах вроде ChatGPT. Однако Codex стал исключением. В результате мы получили редкое и откровенное описание компромиссов, связанных с созданием реального ИИ-агента: производительность против приватности, гибкость против эффективности кеширования, автономность против безопасности. Болин не избегает упоминаний о багах, неэффективных решениях и извлеченных тяжелым трудом уроках, обращая внимание, что современные ИИ-агенты мощные, но далеко не волшебные.

За пределами самого Codex эта публикация служит своего рода руководством для всех, кто создает агентов поверх современных API больших языковых моделей. Она освещает новые лучшие практики (stateless design, prefix-stable prompts, explicit context management), которые быстро становятся отраслевыми стандартами.