Создание AI-агента с Code Interpreter: выполнение кода в sandbox

Агент, который сам пишет и запускает код, ломается там, где нет контроля над исполнением: он портит данные, зависает или выдаёт неверный результат. Мы разрабатываем AI-агентов с изолированным запуском кода под ключ — от схемы до регламентов эксплуатации. Изоляция сокращает долю сбоев на живых задачах в разы, а ответы агента становятся проверяемыми.
Часто задаваемые вопросы

AI-агент с code interpreter: где ломается на живых задачах

AI-агент с code interpreter работает иначе, чем обычный чат-бот: вместо ответа «по памяти» модель пишет код, запускает его в изолированном окружении, читает вывод и уточняет расчёт. Именно выполнение кода в агенте даёт то, ради чего всё затевается — цифры считаются по вашим файлам, а не угадываются. Поэтому такой агент первым делом ломается там, где данные перестают быть учебно-аккуратными.

Первая точка отказа — расхождение схемы. На тестовом наборе таблица с ровными колонками, в реальной выгрузке — переименованные поля, пустые значения, разные разделители, листы без заголовка. Агент генерирует код под формат, который увидел в первой итерации, и падает на первом же непохожем файле.

Вторая — цикл: сбой не читается как сбой, агент правит одну строку, получает тот же результат и повторяет до лимита шагов, сжигая время и токены. Третья — изоляция запуска: если окружение не ограничено, сгенерированный код лезет в сеть, читает переменные окружения с ключами и пишет за пределы рабочей папки. И воспроизводимость результатов: без фиксации снимка данных, набора библиотек и случайного зерна два прогона одной задачи дают разные числа, а отчёт нечем защитить перед тем, кто будет по нему принимать решение.

Дальше разбираем, как это закрывается.

Что даёт управляемое выполнение кода в агенте

Управляемое выполнение кода — это когда сгенерированный агентом код уходит не в основной процесс, а в одноразовую изолированную среду с описанной политикой: доступные модули, сеть, время жизни процесса, лимиты памяти и диска. Агент остаётся планировщиком, а исполнение — отдельным шагом с проверяемым входом и выходом.

Повторяемые прогоны держатся на закреплённом окружении, тех же входных данных и тех же лимитах, поэтому разбор инцидента сводится к повтору запроса, а не к спорам «у нас локально работает». След прогона читается человеком: код, логи, промежуточные файлы и графики складываются в блокнот на базе Jupyter, и видно, каким шагом получена каждая цифра.

Ограничение прав агента убирает целый класс отказов: сеть — по списку разрешённых адресов, запись — только в рабочую папку, секреты не попадают в окружение. Неверный код портит одноразовую среду, а не рабочий контур, и стабильность агента перестаёт зависеть от аккуратности модели.

  • Одинаковый запрос и то же окружение дают тот же артефакт — результат перепроверяем перед передачей заказчику.
  • Сбой в одном шаге не роняет сервис: среда пересоздаётся с чистого состояния, восстановление занимает минуты.
  • Лимиты по времени, памяти и диску отсекают зацикливание до того, как оно займёт общий контур.
  • Доступ в сеть по списку адресов закрывает утечку данных наружу.

Итог — предсказуемое потребление ресурсов и повторяемость вместо надежды на удачный запуск: границы прогона, его след и лимиты описаны заранее.

Режимы работы code interpreter: сравнение подходов

Прежде чем AI-агент с code interpreter выполнит первую строку кода, нужно решить, где этот код исполняется. От режима зависят три вещи: дотянется ли агент до внутренних систем, какие данные покинут периметр и кто отвечает за эксплуатацию среды.

Вариант Когда подходит Ограничения
Песочница на нашей стороне Открытые данные, быстрый старт, разовые задачи Нет доступа к внутренним системам, данные уходят за периметр
Изолированная песочница в контуре заказчика Работа с чувствительными данными Нужны выделенные ресурсы и их эксплуатация
Локальный запуск на рабочей станции Отладка сценариев, разовые вычисления Нет воспроизводимости и общих лимитов
Запуск в процессе агента без изоляции Прототипы, доверенный код Ошибка или зацикливание роняет весь сервис

Локальный запуск: где он уместен

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

Песочница в инфраструктуре заказчика

Изолированная песочница поднимается в вашем контуре: код идёт в отдельном контейнере с урезанными правами, файловая система — только на чтение, исходящие соединения ограничены явным списком адресов. Данные не покидают периметр, а лимиты на процессорное время и память не дают одному сценарию занять узел целиком. Плата — выделенные ресурсы и совместная эксплуатация среды.

Ограничения среды мы фиксируем до старта, а не после первого инцидента — иначе режим запуска кода выбирается по факту сбоя.

Как мы внедряем агента: этапы инженерной работы

Работы идём в порядке, при котором риски всплывают до того, как агент получит доступ к данным и внешним системам. Сначала фиксируем сценарии, затем строим изоляцию, после — настраиваем права и лимиты, и только потом запускаем приёмку на реальных задачах.

  1. Аудит сценариев агента — разбираем, какие задачи он решает, где выполняет код, какие данные читает и куда пишет. Результат — карта сценариев с перечнем операций и точек, где нужна проверка человеком.
  2. Проектирование схемы изоляции — определяем, в какой среде исполняется код, как часто она пересоздаётся и что остаётся между запусками. Схему проверяем с двух сторон: что агент может сломать и что может утечь.
  3. Настройка прав и лимитов — выдаём только необходимые доступы: конкретные каталоги, список разрешённых адресов, ограничения по времени исполнения и объёму записи. Всё, что выходит за рамки, просто не выполняется.
  4. Подключение источников данных — агент получает файлы, базу и внешние сервисы, с которыми работает. Каждое подключение проходит через тот же контроль прав.
  5. Прогон на реальных задачах — проверяем сценарии вместе с ожидаемыми сбоями: неверный ввод, недоступный сервис, превышение лимита. Смотрим, как агент восстанавливается и что попадает в журнал.
  6. Приёмка агента — вы проверяете результат на своих задачах по критериям, согласованным заранее. Отдельно фиксируем, какие сбои считаем допустимыми, а какие блокируют запуск.
  7. Передача схемы и регламента сопровождения — отдаём описание архитектуры, правила обновления сценариев и порядок действий при отказе.

Что передаём на руки: конфигурации, политики и регламенты

Передаём не «работающий прототип», а комплект, по которому ваша команда эксплуатации может поднять агента на своём контуре и сопровождать его без нас. Интерпретатор кода исполняет сгенерированные программы в изолированной среде — значит, всё, что касается допусков, ограничений и наблюдаемости, должно быть зафиксировано письменно. Набор артефактов выглядит так.

  • Конфигурация среды выполнения: описание базового образа, зафиксированный перечень библиотек, правила сетевого доступа, точки монтирования рабочих файлов.
  • Политики доступа: роли и права, срок жизни ключей, порядок ротации секретов, разграничение между тестовым и рабочим контуром.
  • Лимиты ресурсов: максимальное время одного запуска, объём памяти и диска на сессию, число одновременных сессий, поведение при исчерпании квоты.
  • Матрица инструментов агента: какие вызовы разрешены автоматически, какие требуют подтверждения оператора, какие закрыты полностью.
  • Схема хранения артефактов: где лежат промежуточные файлы, как настроено их истечение и как удалить данные по запросу.
  • Передаваемая документация: инструкция по развёртыванию, перечень зависимостей, описание переменных окружения, точки подключения журналов и метрик.
  • Набор проверок: сценарии на типовые запросы, тесты на исчерпание лимитов, контроль качества итоговых ответов перед выкаткой.
  • Регламент сопровождения: уровни реагирования на сбои, окна обновления образов и библиотек, порядок отката на предыдущую версию.

Документы пишем так, чтобы инженер без нашего участия мог воспроизвести среду, изменить лимит или отозвать доступ. Отдельно проговариваем, какие места конфигурации рассчитаны на самостоятельную правку, а какие связаны с логикой агента и требуют согласования.

Кейс: стабильность агента до и после изоляции кода

Аналитическая платформа заказчика отдавала расчёты AI-агенту: он писал код по запросу пользователя и выполнял его прямо в процессе API. Пока запросы были простыми, это работало; на потоке из нескольких сотен сессий в сутки один бесконечный цикл или утечка памяти в чужом скрипте уводили рабочий процесс целиком — вместе с чужими задачами и незавершёнными диалогами. Доля сорванных задач держалась на 18%, а разбор каждого падения занимал у дежурного инженера часы: по логам нельзя было отличить ошибку агента от падения общего процесса.

Перенесли исполнение в отдельную изолированную среду на Docker: своя файловая система только для чтения, временный том для артефактов, запрет сетевых вызовов и жёсткие лимиты по процессору и памяти на сессию. Образ с зафиксированным набором библиотек собирается заранее — код агента не тянет зависимости из интернета и не ломает окружение соседям.

Что изменилось в поведении агента

Срыв сессии перестал быть общим сбоем: упавший расчёт завершается по лимиту времени, а очередь продолжает работать. Доля сорванных задач снизилась с 18% до 2%, отказов вида «агент завис и не отвечает» за квартал не осталось ни одного. Повторные запуски одного и того же запроса дают идентичный результат в 96% случаев — раньше расхождения ловили вручную, потому что окружение «плыло».

Отдельно выиграла диагностика: артефакты, логи запуска и входные данные складываются в один каталог — инцидент разбирается по фактам, а не по переписке. Время восстановления после падения расчёта — секунды вместо ручного перезапуска процесса и повторного прогона диалога.

Что делать, если агент уже работает без изоляции кода?

Останавливать сценарии не нужно: исполнение переезжает в изолированный контейнер параллельно, а прежний путь остаётся рабочим до сверки результатов. Разница принципиальная — песочница процесса ограничивает вызовы внутри интерпретатора, но делит с агентом адресное пространство, а изоляция на уровне контейнера задаёт границу для файловой системы, сети и прав пользователя. Поэтому сбой в первом варианте роняет сервис целиком, а во втором гасится вместе с контейнером.

Вариант Что ограничивает Когда подходит Ограничения
Песочница процесса Импорты, доступ к путям, время выполнения Демонстрации и внутренние задачи на доверенных данных Делит память с агентом, падение интерпретатора останавливает сервис
Изоляция контейнера Файловую систему, сеть, пользователя, память Пользовательский код и данные из внешних источников Нужен прогрев среды и сбор логов, запуск дольше

Перевод уже развёрнутого агента выглядит так: в кластере Kubernetes рядом поднимается вторая среда исполнения, маршрутизация переключается долей трафика через флаг, а ответы сверяются с прежними на одной выборке задач. Расхождения разбираются до полного переключения, откат делается тем же флагом. Контейнеры переиспользуются между вызовами, поэтому время ответа не растёт, а лимиты на память и число процессов выставляются на каждый запуск отдельно.

В результате код от пользователя перестаёт считаться доверенным по умолчанию: даже при вредоносном скрипте наружу уходят только разрешённые файлы, а остальное отсекает граница среды.

Частые технические сомнения по изоляции исполнения

Такие вопросы инженеры задают на разборе чаще всего: где границы доступа агента к файлам, что остаётся в среде после сессии и как ведёт себя система, когда сгенерированный код падает. Ниже — короткие ответы по каждому пункту, без общих слов.

Что агент видит в файловой системе?

На сессию поднимается отдельный контейнер с собственным корнем. Внутрь монтируется только рабочая директория — сначала в режиме чтения, запись открывается явным разрешением на конкретные пути. Ключи и переменные окружения хоста не пробрасываются, выход за пределы смонтированного дерева закрыт политикой доступа, а сетевой обмен по умолчанию выключен.

Как очищается среда между запусками?

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

Что будет, если код упал или зациклился?

На исполнение ставится лимит по времени, памяти и числу шагов на задачу. При превышении процесс снимается, а агенту возвращается лог ошибки — он переписывает код и повторяет шаг, но не уходит в бесконечный цикл: зацикливание отсекается счётчиком итераций. Один сбойный запуск не вытягивает ресурсы всей задачи, а причина падения остаётся в журнале для разбора.

Обсудим задачу: соберём схему под ваш сценарий

Чтобы оценка объёма работ опиралась на факты, а не на предположения, к первому разговору достаточно описания сценария, примера входных данных и перечня систем, с которыми агент будет обмениваться. Если есть текущие наработки — формулировки инструкций для модели, тесты, логи отказов — присылайте: они заметно сокращают разбор.

Обсуждение задачи идёт по шагам: проходим сценарий целиком, отмечаем, что агент делает сам и где подключается человек, как проверяется корректность результата и что считаем ошибкой. По итогам собираем план внедрения с очередностью этапов и точками, на которых фиксируем готовность. По итогам обсуждения заказчик получает:

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

Опишите задачу в свободной форме — вернёмся с оценкой, схемой окружения и планом первого этапа. Если сценарий ещё не устоялся, разберём варианты и предложим тот, который быстрее проверить на реальных данных.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139