ThinkingBox-Training: Qwen3.8-27B, 107 задач из 20 прогонов

22 октября Microsoft и Hugging Face открыли ThinkingBox-Training. Если агент пишет в базу, награда при дообучении берётся из конечной записи, а не из фразы «готово». Код отбора задач, прогонов и награды лежит в microsoft/thinkingbox-training.

3 октября тот же стенд открыли как проверку: 507 задач, инструменты MCP, зачёт по тому, что осталось в базе, и отдельный счёт серий из 20 прогонов. Официальный разбор стенда на Hugging Face, короткая заметка на сайте: ThinkingBox, 507 задач. Теперь бинарный итог той же проверки, 0 или 1, стоит наградой на других задачах, уже вне бенча.

Пул собрали заранее, по базовой модели, и на время обучения зафиксировали. Дальше дообучили все веса Qwen3.8-27B методом GRPO, 50 шагов. Внутри шага награда сравнивается между прогонами одной и той же задачи. Если все прогоны в группе кончились одинаково, сравнивать нечего.

С 38 задач до 107

После обучения бенч прогнали заново. 507 задач, по 20 раз, это 10 140 попыток. Эти задачи в учебный пул не входили: другие домены, другие базы, большая часть MCP-инструментов на тренировке не встречалась.

Три числа из их таблицы, базовая Qwen3.8-27B и чекпоинт после 50 шагов.

  • Задачи, пройденные все 20 раз: 38 (7,50%) и 107 (21,10%). Плюс 69 задач.
  • Успешные попытки, pass@1: 5 242 (51,70%) и 6 163 (60,78%). Плюс 9,08 пункта.
  • Задачи, решённые хотя бы раз, pass@20: 453 (89,35%) и 446 (87,97%). Минус 7 задач.

Повторять выходит чаще. Охват «хотя бы один раз» чуть уже. Microsoft пишет, что масса вероятности сдвинулась к траекториям, которые срабатывают снова, а часть редких путей пропала.

На том же бенче Claude Opus 5.5 держит 67,16% и 241 задачу из 20. GPT-5.4: 65,36% и 128. GPT-6 Astra по среднему ниже дообученного Qwen, 58,31%, стабильных задач при этом 231. Kimi-K3 закрывает 57,37% попыток и только 68 задач без срыва в серии. Claude Sonnet 4.6 на 59,19% и 102 таких задачах, почти рядом с Qwen по второму столбцу и ниже по среднему.

GPT-5.6 Sol как раз показывает, почему одного среднего мало. У него pass@1 61,91%, у дообученного Qwen 60,78%. Задач без единого провала в 20 попытках у Sol 82, у Qwen 107.

По пяти доменам выросли и средний успех, и счёт 20/20: розница, автострахование, путешествия, необанк, консалтинг. Покрытие «хотя бы раз» выросло в необанке и консалтинге и просело в рознице, путешествиях и автостраховании. Автострахование потеряло больше всех, 7,0 пункта. Розница прибавила больше всех к стабильному счёту, 24,5 пункта.

Дообученная Qwen3.8-27B, pass@1 по доменам: розница 67,91%, автострахование 56,45%, путешествия 62,69%, необанк 62,40%, консалтинг 54,51%.

Бронь без согласования менеджера

Один сюжет из поста, та же серия из 20 попыток. Гость просит номер попроще. Правила компании сначала требуют согласования менеджера. До обучения агент в 15 попытках из 20 менял бронь и проводил возврат без этого согласования. После дообучения бронь и платёж остались прежними во всех 20. Полный набор ожидаемых записей сошёлся в 19.

187 задач вне бенча

Группа GRPO здесь из восьми прогонов. Восемь нулей или восемь единиц внутри группы не дают различия, учиться не на чем. Берут задачи, которые базовая модель решает не всегда.

Сложность посчитали один раз до обучения и пул больше не пересобирали. Кандидата гоняют n раз, считают k успехов и оценивают вероятность успеха распределением Beta(k + ½, n − k + ½). Границы корзин: 0,08, 0,40, 0,60 и 0,90.

  • Ниже 0,08, почти никогда не выходит. Такие выкидывают.
  • От 0,08 до 0,40, трудные. Оставляют.
  • От 0,40 до 0,60, середина. Оставляют.
  • От 0,60 до 0,90, часто выходит. Оставляют для дообучения всех весов.
  • От 0,90, почти всегда выходит. Выкидывают.

В примере из поста GPT-5.4 сначала отсеял задачи, которые не решаются в принципе. Базовая Qwen прошла 3 пробы из 8. Самая большая доля вероятности, 54%, легла в трудную корзину. На обучении эта задача дала группу наград 0, 0, 0, 0, 1, 1, 1, 1. Четыре провала и четыре успеха, есть с чем сравнивать. Другая базовая модель могла бы положить ту же задачу в другую корзину.

В пул вошло 187 задач. Задач ThinkingBox-Bench среди них нет. Домены, базы и большая часть инструментов бенча на обучении не встречались. Общее у двух наборов другое. По словам авторов, каркас ThinkingBox, симулированный пользователь, зачёт по конечной базе, несколько общих инструментов и похожий вид задач ограничивают то, насколько результат переносится дальше этого каркаса. Подробности отбора они отдают в приложение C.4 статьи arXiv:2608.19741.

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

Ноль и единица с конца базы

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

Если итог виден в базе, отдельную модель для оценки не зовут. Если узкое требование из записей не вытащить, бинарный вопрос уходит модели-оценщику (judge). В этом прогоне это GPT-5 Chat. Симулированного пользователя играет тоже GPT-5 Chat: свой закрытый контекст, и на каждый эпизод свежий бэкенд с отдельной MCP-сессией. Агент, которого учат, при этом Qwen, не GPT.

Обучение и замер должны одинаково читать ответ Qwen. Одинаково вытаскивать рассуждение, имя инструмента и типы аргументов. Общий код в trainer/core/tb_interpret.py. Если разбор разъедется, награда достанется не тому агенту, которого потом гоняют по бенчу.

Отчётный запуск: все веса, GRPO со средним по токенам, те 187 задач. На один шаг 18 групп по 8 прогонов, 144 эпизода, 24 карты H100. Обучение синхронное, веса и состояние оптимизатора выгружают с карт. AdamW, скорость обучения 1e-6, weight decay нулевой. 50 шагов.

Группы, где награда не разъехалась, по ходу заменяли, в духе DAPO. Таймаут бэкенда в ошибку агента не записывают. Такую группу набирают заново.

Доллары в их таблице это индекс обслуживания для сравнения, не счёт облака. Дообученный чекпоинт в индексе стоит как базовая модель. В сумму входит вывод. Сам тренировочный прогон и предварительные пробы отбора в неё не входят.

Кампания 507 на 20: было $925.80, стало $855.58. Одна успешная попытка: $0.177 и $0.139. Одна задача, которая прошла все 20 раз: $24.36 и $8.00. В том же сравнении у GPT-5.4 выходит $6.80, у GPT-6 Astra $7.45, у Claude Opus 5.5 $7.80.

Три репозитория и 24 H100

Стек проверяли на Linux и WSL, Python 3.12, uv. Нужны карты NVIDIA с нормальным CUDA и NCCL, локальный чекпоинт Qwen3.8-27B и OpenAI-совместимые адреса для симулированного пользователя и модели-оценщика. Отчётная схема: 3 узла по 8 H100. Конфиг меньше этого зависит от размера модели, длины контекста и того, сколько прогонов идёт сразу.

Три репозитория кладут рядом. thinkingbox фиксируют на коммите 892964e7226044e5463ad188da119df838f4bec1, thinkingbox-data на теге thinkingbox-bench-v1.0, thinkingbox-training берут с ветки main.

mkdir -p ~/thinkingbox-workspace
cd ~/thinkingbox-workspace

git clone https://github.com/microsoft/thinkingbox.git
git clone https://github.com/microsoft/thinkingbox-data.git
git clone --branch main https://github.com/microsoft/thinkingbox-training

git -C thinkingbox checkout 892964e7226044e5463ad188da119df838f4bec1
git -C thinkingbox-data checkout thinkingbox-bench-v1.0

Дальше окружение на Python 3.12 через uv, extras fast, tracking и eval-proxy, и пропатченный Verl 0.9.0. После этой установки ещё один автоматический sync пакетов лучше не запускать: он может затереть патч обычным пакетом Verl. Как поднять Typesense, MCP и Ray, расписано в docs/reference-q38-run.md того же репозитория.

До того как занимать карты, есть пробный запуск (dry run). Он должен закончиться с кодом 0, не поднимая Ray и не занимая карты.

DRY_RUN=true ./scripts/run_train.sh \
  trainer.total_training_steps=50 \
  trainer.save_freq=5

Оценку чекпоинта гоняют тем же протоколом, что и бенч: 507 задач на 20 повторов, через OpenEnv. Как слить чекпоинт, написано в docs/evaluation.md. Исторический замер этого чекпоинта поднимали на восьми A100 через vLLM, имя модели q38-rlft, контекст до 262144 токенов. Прокси шаблона чата Qwen слушает порт 8014 и ходит в vLLM на 8001.

Код ThinkingBox под MIT. Данные бенча под CDLA-Permissive-2.0. Задачи публичного бенча синтетические: схемы похожи на корпоративные сценарии, живых клиентов в них нет. Собирала команда Microsoft Copilot Studio вместе с Toloka. Пост писали вместе с Mirco Milletari, Xiang Jiang, Sergio Paniego и Zhuochun Li.

Если бот двигает заказ, закрывает заявку или возвращает деньги, одного среднего pass@1 мало. Здесь он вырос на 9,08 пункта, а задач без единого провала в серии из 20 стало 107 вместо 38. Код петли открыт. Отчётные 187 задач остались у авторов, чекпоинт Qwen нужен свой, отчётный размер прогона это 24 H100.

Источники и ссылки


Комментарии загружаются…