Вокруг агентного ИИ принято спорить, какая модель лучше. Но эксперимент LangChain Terminal-Bench показывает, что решающим фактором качества может быть не модель, а обвязка (harness): смена только обвязки подняла кодинг-агента с примерно 30-го места в топ-5 при той же самой модели. Если обвязка определяет результат, то способ запуска цикла агента — это архитектурное решение, а не деталь развёртывания.
Открытый курс Пола Иуштина (Paul Iusztin) Building a Coding Agent From Scratch, опубликованный в рамках проекта Decoding AI, собирает на Python агента Decode и разбирает три режима запуска цикла. У каждого режима свой профиль задержек, а значит, и свой подходящий инференс-провайдер.
Один headless-цикл, три формы
Ядро системы — headless-обвязка без собственного интерфейса. Внутри неё работает общий для всех обвязок цикл агента: LLM выбирает действие, инструмент выполняет его, наблюдение возвращается обратно. Всё читается из контекстного окна и пишется в него.
Сам агент при этом компактен. В Decode это определение на ~20 строк в Pydantic AI, которое связывает модель, инструменты и тип вывода. В утёкшем исходном коде Claude Code основной цикл занимает примерно 150 строк. Всё остальное — память, навыки, песочница, разрешения, обратная связь от LSP, компактизация — это и есть обвязка.
К этому ядру подключаются интерфейсы. Отсюда и три режима.
Режим 1: интерактивный, онлайн
Терминальный интерфейс подключается к одному живому сеансу в памяти, в том же процессе. События приходят через асинхронные генераторы по мере поступления токенов.
Главная сложность — управление ходом выполнения. Если ввести текст, пока выполняется вызов инструмента, немедленная вставка сообщения испортит текущий ход. Решение Decode — очередь управления (steering queue) и приоритетный шлюз. Ввод буферизуется и вставляется только в безопасной точке. Цикл предоставляет две такие точки: MODEL_REQUEST — перед следующим вызовом модели, и WOULD_STOP — когда ход должен завершиться.
Три режима ввода отображаются на эти точки. Простой Enter управляет внутри текущего хода. Alt+Enter ставит продолжение в очередь до завершения хода. Esc запускает кооперативную остановку на следующей границе, очищая обе очереди, чтобы история осталась целой.
Человек читает каждый токен. Этот режим ограничен задержкой, поэтому ему нужен низколатентный хостинг API.
Режим 2: удалённый, офлайн
Удалённый режим оставляет обвязку headless и запускает её на сервере через агентный рантайм. Decode использует Kitaru — агентный рантайм ZenML, развёрнутый в GCP, а сами агенты выполняются на Modal.
За процессом никто не наблюдает. Очередь задач расходится по N обвязкам параллельно, каждая создаёт свой pull request. Так как рантайм записывает прогресс по шагам, песочница, упавшая посреди задачи, возобновляет работу с последнего записанного шага, а не перезапускается. Запуск, приостановленный для ввода человека, замирает и не потребляет вычислительные ресурсы, пока ждёт.
Инструменты выполняются удалённо в Modal Sandboxes, локально — в Docker. Здесь важен показатель «пропускная способность на доллар», а не время до первого токена.
Режим 3: асинхронный, онлайн
Третья форма находится между двумя предыдущими. Живой сеанс передаёт работу в очередь задач и сразу возвращает управление. Фоновые рабочие процессы распределяют вызовы LLM и публикуют результаты позже.
Пользователь онлайн, но не следит за каждым шагом. Очередь владеет работой, поэтому запуск переживает клиент, который его начал. Это паттерн агентов, запускаемых из Slack, и фонового ревью pull request. Тарифицируется такой режим как пакетная обработка, а не как чат.
Почему провайдер меняется в зависимости от режима
Модель стоимости следует за требованием к задержке, и разрыв велик.
Возьмём 1000 документов по 30 000 входных токенов и примерно 500 выходных токенов на документ. По тарифам frontier API в $3 за миллион входных и $15 за миллион выходных токенов расчёт из урока даёт около $97. Промпт-кэширование не спасает: у каждого документа свой префикс. При пакетной обработке на serverless GPU со скоростью около 3000 токенов в секунду та же работа занимает менее трёх часов GPU-времени — примерно $13.
Обратный случай не менее показателен. Тестовая модель Decode по умолчанию, Qwen3.6 35B, работает на одном H200. Опубликованные цены Modal указывают H200 SXM по $0.001261 за секунду, или около $4.54 в час. Если оставить интерактивный агент в простое на ночь, ожидая подтверждения y, десять часов простоя добавят к счету примерно $45.
В этом вся суть. Интерактивная работа оплачивается за токен, потому что человек ждёт. Офлайн- и асинхронная работа оплачивается за GPU-час, потому что цель — пропускная способность, а простой — враг.
Есть и вторая ось: serverless против зарезервированных мощностей. Анализ цен Modal сводится к одному сравнению. Резервирование взимает пиковую ставку за весь контракт; serverless следует за кривой спроса. Когда отношение пиковой нагрузки к средней превышает скидку за резервирование, serverless дешевле. Modal сообщает о типичных скидках 2–5× при отношении пика к среднему 5–10× для инференса, обучения и агентной разработки. Цитируемые отраслевые опросы оценивают загрузку резервирования ниже 30%, часто ниже 10%.
Ключевые выводы
- Обвязка важнее модели: только замена обвязки подняла агента с ~30-го места в топ-5 в Terminal-Bench.
- Интерактивный режим ограничен задержкой и управляется очередью, которая разряжается на границах
MODEL_REQUESTиWOULD_STOP. - Удалённый и асинхронный режимы ограничены пропускной способностью, поэтому при объёме тарификация за GPU-час выгоднее, чем за токен.
- 1000 документов стоят ~$97 по тарифам frontier API против ~$13 за пакетное GPU-время.
- Serverless выигрывает, когда отношение пиковой нагрузки к средней превышает скидку за резервирование: обычно 5–10× против 2–5×.
Практическое значение для админов
Выбор способа запуска агента напрямую влияет на счета за инференс. Если агент работает в интерактивном режиме и часто простаивает в ожидании ввода, тарификация за токен может оказаться дешевле, чем оплата GPU-часов простоя. Для пакетных задач вроде обработки документов или ревью кода выгоднее держать агента в офлайн-режиме на serverless GPU и платить за фактическое время вычислений. Тем, кто проектирует такие системы, пригодится и Shepherd: Python-рантайм для форка и отката любых агентных запусков — он решает смежную задачу управления жизненным циклом агентных процессов. А если вопрос упирается в эффективность GPU-фермы, стоит изучить порядок размещения задач, который дал +33 п.п. загрузки без смены железа.
Частые вопросы
Что такое harness (обвязка) агента?
Обвязка — это весь код вокруг модели: управление циклом, память, навыки, песочница, разрешения. В курсе Decode агент занимает ~20 строк, а обвязка — всё остальное.
Почему смена обвязки так сильно меняет результат?
Эксперимент LangChain Terminal-Bench показал: при той же модели смена только обвязки подняла агента с ~30-го места в топ-5. Качество определяется тем, как организован цикл, а не только выбором модели.
Какой режим выбрать для интерактивной работы?
Интерактивный режим ограничен задержкой, поэтому ему нужен низколатентный хостинг API с оплатой за токен. Если агент часто простаивает, ожидая ввода, лучше считать стоимость по токенам, а не по GPU-часам.
Когда выгоден serverless GPU?
Serverless выгоден, когда отношение пиковой нагрузки к средней превышает скидку за резервирование. Modal приводит типичные значения 5–10× для пика к среднему против скидок 2–5×.
Что делать, если песочница упала посреди задачи?
В удалённом режиме рантайм записывает прогресс по шагам, поэтому упавшая песочница возобновит работу с последнего записанного шага, а не перезапустится с нуля.
Как сэкономить на обработке большого объёма документов?
Пакетная обработка на serverless GPU значительно дешевле: 1000 документов обойдутся примерно в $13 против $97 по тарифам frontier API. При этом промпт-кэширование не поможет, если у каждого документа свой префикс.
Что такое Kitaru и Modal в контексте курса?
Kitaru — агентный рантайм ZenML, который Decode разворачивает в GCP для удалённого режима. Modal — платформа serverless GPU, где выполняются сами агенты и инструменты в песочницах.
Источник: marktechpost.com