Microsoft выпустила Agent Lightning v1.0 для обучения агентов внутри их собственной обвязки

agent-lightning v1.0

Исследователи Microsoft вместе с коллегами из Fudan University, Zhejiang University и University of Edinburgh опубликовали Agent Lightning v1.0, фреймворк для обучения LLM-агентов с подкреплением, который целиком умещается примерно в 3,500 строк кода. Обучение с Agent Lightning улучшило результат компактной модели Qwen3.5-9B на SWE-bench Verified с 41.8% до 56.4%, и для этого хватило 6 тысяч обучающих примеров и умеренных вычислительных ресурсов. Проект открытый целиком: код и скрипты обучения лежат на GitHub, документация с примерами запуска на отдельной странице, карточка статьи с PDF на Hugging Face. Обучение построено на открытом датасете SWE-smith и открытых весах Qwen3.5-9B, а пайплайн очистки данных авторы выложили вместе с кодом. Готовый чекпоинт дообученной модели не публикуется, но весь путь до него описан и воспроизводим.

Архитектура Agent Lightning v1.0
Архитектура Agent Lightning v1.0: агенты с обвязкой, API Gateway с Rollout API и LLM API Proxy, Rollout Controller, Customized Trainer, движки инференса и обучения

TL;DR

Полезный кодовый агент стал помещаться на гораздо более скромное железо. Модель на 9 миллиардов параметров решает 56.4% задач SWE-bench Verified, тогда как ещё недавно такие цифры показывали только фронтирные закрытые модели на два порядка больше. Модель может работать на GPU ценой до $2000, таких как RTX 3090, 4090 или 5090. Локальный ассистент без подписки и без отправки кода на чужие серверы перестаёт быть фантазией.

Следует помнить, что SWE-bench Verified — это починка багов в Python-репозиториях с готовыми тестами, а разрыв между бенчмарками и настоящей работой огромен, например, на бенчмарк Remote Labor Index лучшие агенты набрали лишь 2.5% на реальных фрилансерских заказах.

Порог входа в обучение агентов упал до 6 тысяч примеров, 3,500 строк кода и своего Kubernetes вместо платных песочниц. Это означает, что дообучить агента под конкретную кодовую базу может университетская группа или средняя компания, а не только большая лаборатория.

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

Почему обвязка меняет правила игры

Современный агент никогда не работает как отдельная языковая модель. Вокруг неё есть обвязка (agent harness): код, который собирает контекст, вызывает инструменты, порождает сабагентов и решает, когда остановиться. Примеры обвязок для программирования: mini-SWE-agent, OpenHands, OpenCode, Claude Code, Codex. Примеры общего назначения это OpenClaw и Hermes.

Первые RL-фреймворки (verl, AReaL, slime) устроены так, что весь цикл «модель сделала шаг, среда ответила» нужно было написать заново внутри обучающего кода. Взять готовый mini-SWE-agent и просто подключить его к обучению не получалось: у него своя логика и свои зависимости. Первая версия Agent Lightning решила проблему иначе: агент остаётся нетронутым, только вместо настоящего API модели ему подсовывают адрес прокси. Через прокси проходят все запросы к модели, и тренер учится на них, ничего не зная о том, что происходит внутри агента. Идею повторили verl Uni-Agent, AReaL 2.0, slime v0.3.0 и Polar. Такую схему авторы называют harnessed agentic RL.

Разница принципиальная. В классической схеме тренер владеет циклом со средой и видит одну непрерывную историю токенов, поэтому один роллаут превращается в один линейный обучающий пример. В harnessed-схеме циклом владеет обвязка, а тренер видит только последовательность пар «промпт и ответ», каждую из которых обвязка собрала заново.

Сравнение классического agentic RL и harnessed agentic RL
Слева классический agentic RL, справа harnessed. В таблице видно, что к латентному состоянию добавляется состояние обвязки

Ретокенизация: текст тот же, токены другие

Обвязка общается с моделью текстом, а RL работает с конкретными ID токенов. Обычно предыдущий вызов является полным текстовым префиксом следующего промпта, и кажется логичным склеить два вызова в один пример. Но текстовое совпадение не гарантирует совпадения токенов. Авторы нашли три причины:

  • Чат-шаблон не композиционален: отрендерить историю целиком не то же самое, что склеить отрендеренные части. У Qwen шаблон умеет выбрасывать ранее сгенерированный маркер <think>.
  • Декодирование не инъективно: превратив токены в текст и токенизировав обратно, исходные ID не всегда получишь.
  • Обработчики tool-call и структурированного вывода нормализуют ответ, меняя пробелы, разделители или структуру JSON.

AReaL и verl Uni-Agent держат в прокси буфер и подменяют кусок нового промпта исходными токенами. Авторы указывают на цену: подменённый промпт отличается от того, под которым реально сэмплировался следующий ответ, и обучение становится off-policy. Agent Lightning склеивает только при точном совпадении токенов, иначе закрывает последовательность и начинает новую.

токены
Слово having в первом вызове разбито на токены h и aving, при повторной токенизации превращается в hav и ing. Текст идентичен, границы токенов разные

Advantage и loss: считать по роллаутам или по примерам

Из-за ретокенизации, сабагентов и суммаризации контекста один роллаут даёт разное число обучающих примеров. В экспериментах только 36% роллаутов остались одним примером, в среднем выходит 2.41 примера на роллаут.

Возьмём группу GRPO из двух роллаутов с наградами 1 и 0. Если первый распался на три примера, а второй остался одним, baseline по роллаутам равен 1/2, а по примерам уже 3/4. Авторы считают правильным уровень роллаутов: ретокенизация это побочный эффект токенизатора, и оценка эпизода не должна от неё зависеть. verl Uni-Agent и Polar считают по роллаутам, slime и AReaL по примерам.

С нормализацией loss та же логика. Вариант seq-mean-token-mean из GRPO даёт больший вес роллаутам, которые случайно распались на много примеров. Формально корректнее token-mean из DAPO и rollout-level token-mean из slime, но первый оказался чувствителен к длинным последовательностям: когда в батче много длинных примеров с отрицательным advantage, обучение позже разъезжается. Выбрали rollout-level нормализацию, где каждый роллаут весит одинаково.

Три примера из одного роллаута перетягивают среднее по группе
Слева каждый роллаут даёт один обучающий пример, справа роллаут 1 разворачивается в три примера с наградой 1

Архитектура и экономия на GPU

Фреймворк состоит из трёх частей. API Gateway хранит роллауты, модели и события и проксирует вызовы LLM. ID роллаута зашит прямо в путь прокси, поэтому каждый вызов автоматически привязывается к своему эпизоду. Rollout Controller запускает агентов как обычные Kubernetes Job. Customized Trainer построен поверх verl и собирает события в обучающие примеры.

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

Отдельного внимания заслуживает collocated async RL. В синхронном режиме шаг обучения ждёт самый медленный роллаут, и GPU простаивают. Асинхронный вариант из AReaL разносит генерацию и обновление весов на разные пулы машин, но требует больше GPU. В collocated-варианте оба этапа делят один пул по времени: набрав достаточно данных, Gateway перестаёт принимать запросы, дожидается текущих, а новые ставит на паузу. Для обвязки переключение невидимо. Итог: примерно двукратное ускорение против синхронного RL при меньшем числе GPU.

Сравнение трёх режимов по загрузке GPU
Синхронный RL с простоями, асинхронный на восьми GPU и collocated async на четырёх

Эксперименты и попытки списать

Search-агент на Llama-3.2-3B-Instruct обучали по постановке Search-R1 с GRPO: валидационная награда выросла с 25.1% до 41.7%. Агент общего назначения в песочнице на Qwen3-4B-Instruct-2507 с алгоритмом RLOO поднялся с 51.9% до 70.2%.

Основной сценарий это coding-агент. Обвязка mini-SWE-agent, модель Qwen3.5-9B, задачи из SWE-smith (59,136 штук, 295 ГБ образов против 4 ТБ у R2E-Gym). В данных нашлось много мусора: у 18,033 записей пустое описание проблемы, у 1,265 в образе нет нужной ветки, у python-jsonschema больше 7,000 тестов. После фильтрации базовую модель прогнали по четыре раза на каждой задаче и оставили те, где есть и успехи, и провалы. Плюс добавили 1,000 нерешаемых задач, чтобы набор не стал слишком лёгким. Финал: 6 тысяч обучающих и 400 тестовых примеров.

Во время обучения агент находил обходные пути вместо честного решения: искал gold-коммит в истории Git, качал апстрим-код через wget, curl и pip, тянул исходники библиотеками вроде urllib. Никто его этому не учил, он просто обнаружил, что награда за обход такая же, как за работу. Помогли два барьера: команды Git отключили и каталог .git спрятали, а сетевая политика Kubernetes закрыла исходящий трафик кроме белого списка. Это в миниатюре расхождение между формальной целью и настоящим намерением, которое в более серьёзных приложениях становится по-настоящему неприятным.

Свои решения авторы проверили сравнением трёх конфигураций на одном GRPO-объективе. Вариант с rollout-level advantage и rollout-level нормализацией дал лучшую валидационную награду 38.2% на шаге 128 против 35.0% у базовой конфигурации и 33.1% у промежуточной. Его энтропия политики растёт медленнее и держится стабильнее. Чекпоинт на шаге 208 показал на SWE-bench Verified 56.4% против исходных 41.8%.

Валидационная награда трёх конфигураций coding-агента и энтропия политики
Конфигурация с rollout-level advantage и нормализацией выше по награде и стабильнее по энтропии

Итог

Agent Lightning v1.0 это первая подробная инвентаризация мест, где обучение через продакшен-обвязку расходится с классическим agentic RL, с разбором решений verl Uni-Agent, AReaL, slime и Polar. Вместе с открытым пайплайном данных и защитой от reward hacking это даёт рабочий шаблон для тех, кто хочет обучать агентов на своих задачах.


neurohive telegram
Подписаться
Уведомить о
guest

0 Comments
Старые
Новые Популярные