3 октября 2026 года Microsoft и Hugging Face открыли ThinkingBox. Песочница гоняет агента по изолированным MCP-сессиям и ставит зачёт только если в базе осталось нужное состояние, причём двадцать раз подряд. Если бот закрывает тикеты, двигает заказы или пишет в CRM, последняя фраза в диалоге этого не гарантирует.
Заказ на кухонную технику за $745 завис в исключении курьера в Нэшвилле, на пятнадцать дней позже обещанной даты. Агент делает девять вызовов: тянет заказ, смотрит трекинг, профиль, дважды политику возврата, убеждается, что тикета нет, открывает его и пишет хронологию. Политику читает верно: сегмент клиента компенсацию за опоздание не получает. Затем закрывает тикет как решённый и спрашивает, чем ещё помочь. Нужное конечное состояние другое. Исключение перевозчика ещё открыто, тикет должен остаться on hold. В задаче sandbox_external_retail_group1.py:test_case_ST003_006 проверка падает на одном поле: статус solved вместо hold. Задачи публичного бенча синтетические: схемы похожи на агентские процессы в компаниях, люди в них не настоящие.
Грейдер, который смотрит только форму вызовов, такой прогон принял бы. На срезе 121 680 валидных попыток по 12 моделям исполняемые проверки не прошли 79 853 раза. Из этих провалов 67,24% всё равно закончились чисто: инструмент, меняющий состояние, вызвался, финальной ошибки инструмента нет. При этом в 77,61% случаев в полях неверные значения, в 43,30% есть лишние побочные эффекты, в 25,36% не хватает обязательных. Доли пересекаются.
Три зачёта на 507 задачах
Каждую из 507 задач гоняют 20 раз с чистого бэкенда. Домены такие: розница, 98 задач, автострахование 100, путешествия 104, необанк 104, консалтинг 101. Рядом кладут три числа. pass@1 показывает, какая доля попыток удалась. pass@20 показывает, какая доля задач решилась хотя бы раз из двадцати. Observed 20/20 считает задачи, где прошли все 20 записанных попыток, без оценки «примерно» и без сглаживания.
По pass@1 лидирует Claude Opus 5.5 с 67,16%. Дальше Claude Opus 5, 66,50%, GPT-5.4, 65,36%, GPT-5.6 Sol, 61,91%, Claude Sonnet 4.6, 59,19%, GPT-6 Astra, 58,31%. Из открытых весов выше всех Kimi-K3, 57,37%, рядом с GPT-6 Astra. Qwen3.8-27B на 51,70%, DeepSeek-V4-Pro на 43,26%. Grok-4.3 в общей колонке на 14,38%, o3-pro на 19,31%. Домен сдвигает результат не слабее смены модели. Claude Opus 4.6 на рознице даёт 68,62%, на автостраховании 8,30%. По моделям из той же таблицы средний pass@1 на рознице 59,52%, на автостраховании 33,83%.
От одного удачного захода до двадцати одинаковых путь разный. Большую часть своего pass@1 на повторах удерживают только трое. GPT-6 Astra сохраняет 78%, Claude Opus 5.5 и Claude Opus 5 по 71%. GLM-5.1, Kimi-K2.6 и DeepSeek-V4-Pro оставляют около 8%.
Kimi-K3 закрывает поле шире всех: 476 задач из 507 хотя бы раз, это 93,89%. Совсем не берёт 31. На рознице pass@1 у него 82,24%, выше проприетарных моделей в этом домене. Все двадцать попыток проходят у 68 задач, 13,41%. Claude Opus 5 устроен наоборот. Хотя бы раз он закрывает 79,09% и полностью сдаётся на 106 задачах, зато 47,53% бенча проходит на каждой попытке. У Opus 5.5 средний pass@1 чуть выше, 67,16% против 66,50%, и «хотя бы раз» тоже шире. Задач со всеми двадцатью успехами столько же, 241. Kimi-K3 берёт на 75 задач больше, если хватает одного попадания. Opus 5 стабильно закрывает на 173 задачи больше.
Для работы, которая трогает настоящие записи, Microsoft смотрит не в колонку pass@20. Она отвечает, умеет ли модель вообще, а не повторит ли она то же самое.
Цена успеха и цена 20 из 20
Деньги считали по открытым тарифам OpenRouter на 20 сентября 2026, без промоскидок и без эндпоинтов, где заявлена квантизация. Цену Opus 5.5 взяли с сайта Anthropic. На модель один эндпоинт, в сумму входят input, output и кэш. Это индекс для сравнения, не счёт из облака.
Успешная попытка стоит так: цена 507 попыток, по одной на задачу, делённая на 507 × pass@1. У GPT-5.4 эти попытки обходятся в $43.49 при pass@1 65,36%. Выходит $0.131 за один успех.
На линии, где никто одновременно не дешевле и не точнее, три модели. Ниже всех за успех GPT-5.6 Sol, $0.127. GPT-5.4 прибавляет 3,45 пункта pass@1 за $0.004. Claude Opus 5.5 прибавляет ещё 1,80 пункта и стоит $0.276. Claude Opus 5 при $0.475 и 66,50% дороже и слабее Opus 5.5 сразу по обеим осям.
Стабильность делят иначе. Стоимость кампании из двадцати полных прогонов делят на число задач, прошедших все 20 попыток. У GPT-6 Astra кампания это 20 × $86.03 = $1720.60, стабильных задач 231, получается $7.45. Дешевле всех за такую задачу GPT-5.4: $6.80, но задач всего 128, это 25,25%, бюджет кампании $869.80. Opus 5.5 доводит 241 задачу, 47,53%, по $7.80, кампания $1880.77. Тот же 241 у Opus 5 стоит $13.30 при кампании $3206. GPT-5.6 Sol, самый дешёвый на одиночном успехе, на стабильности выходит $9.76: 82 задачи и кампания $800. Sonnet 4.6 закрывает 102 задачи по $15.56. Kimi-K3 закрывает 68 по $20.68, кампания $1406.40.
Трое с лучшей ценой стабильной задачи друг друга не отменяют. Каждая следующая такая задача дороже. Дешёвый разовый ответ и дешёвый ответ, который повторяется, покупаются у разных моделей.
Провалы размечены одной меткой на трейс. Среднее по моделям, не единственная причина: инструменты 79,9%, неверная запись состояния 10,3%, исход для пользователя не закрыт 7,0%, состояние не меняли 2,9%. Обычно агент доходит до сценария и застревает на ошибке инструмента, невыполненном предусловии или пустой выдаче. Подъём от повторов, более узкого набора инструментов и ручного подтверждения необратимой правки на ThinkingBox-Bench не измерен. Зачёт в среде ставят по конечному состоянию до записи, не по пересказу модели.
Прогон в OpenEnv
ThinkingBox это песочница, ThinkingBox-Bench это набор. У задачи есть старт базы, цель, MCP-инструменты, политика домена и проверки конечного состояния. Симулированный пользователь хранит закрытый контекст и отдаёт его только по вопросу: номер брони, предпочтение, дату рождения. Каждая попытка получает свежую MCP-сессию. Две попытки одной задачи не делят строку и кэш инструмента. Иначе двадцать повторов сравнивать не с чем. 477 задач из 507 оценивают только по состоянию. На 30 добавлен узкий вопрос к ответу, если в базе нечего сверить, например сказал ли агент, что гарантии нет. Модель видит задачу, диалог и схемы инструментов. Эталон состояния, проверки и доступы остаются на стороне оценщика.
Сейчас это на Hugging Face: документация окружения OpenEnv и датасет microsoft/ThinkingBox-Bench. Эпизод возвращает бинарную награду, прошёл или нет. Адаптер сделан для оценки. Канонический результат берёт закреплённый релиз thinkingbox-bench-v1.0. Свой сценарий на том же интерфейсе прогнать можно, каноном бенча такой прогон не будет. Microsoft пишет, что отдельные сценарии вне бенча можно использовать тем же интерфейсом и в обучении. Инфраструктурная ошибка в награду бенча не превращается.
Просмотрщик датасета в сплите test показывает 507 строк подмножества tasks. На карточке общий счётчик 513 строк: к задачам добавлены пять сценариев и строка agents. Тег релиза thinkingbox-bench-v1.0. Исполняемые проверки лежат в microsoft/thinkingbox-data. Страница документации по ссылке из поста открывает ветку main, её ставят из исходников. Рядом указана стабильная линия OpenEnv v0.7.0 для обычной установки через pip.
Стенд рассчитан на Linux и WSL, Python 3.11+, uv и Docker. Нужны клон OpenEnv с окружением envs/thinkingbox_env, данные на теге thinkingbox-bench-v1.0 и CLI tb из microsoft/thinkingbox. Образ OpenEnv поднимает только свой API. Typesense 30.1, прокси сессий с MCP-серверами и модельные эндпоинты запускают отдельно. Один эндпоинт может обслужить агента, симулированного пользователя и судью. Прокси стартует командой tb mcp-start –host 127.0.0.1 –port 7111. Сервер читает YAML из переменной OPENENV_TB_CONFIG. Прокси по умолчанию ждут на http://127.0.0.1:7111, независимых сред одновременно до 8. Поле seed в API есть и намеренно не используется: задачу выбирает её идентификатор.
GET /health показывает, что процесс жив. GET /ready на порту 8000 отдаёт 503, пока не сойдутся проверки данных, конфигурации и Session Proxy. Typesense и живой опрос каждого модельного эндпоинта в эту готовность не входят.
example_usage.py только сбрасывает задачу и перечисляет инструменты. Зачёт эпизода делает thinkingbox-eval. Для одного прогона берут задачу розницы:
echo "- sandbox_external_retail_group1.py:test_case_ST002_001" > one_task.yaml uv run --project envs/thinkingbox_env thinkingbox-eval \ one_task.yaml \ --config "$PWD/thinkingbox.yaml" \ --output results.jsonl \ --errors-output errors.jsonl \ --repeat 1 --message-timeout 1800
Операционные сбои пишут в отдельный файл ошибок, чтобы перезапустить их, а не смешать с исходом модели. В каноническом счёте такие попытки шли как неуспех. Прогон привязан к коммиту фреймворка, релизу данных и хешу бандла.
Код ThinkingBox под лицензией MIT, данные бенча под CDLA-Permissive-2.0, окружение OpenEnv под BSD-3-Clause. Собирала команда Microsoft Copilot Studio вместе с Toloka.
Если сценарий пишет в тикеты или заказы, рабочая цифра здесь не средний pass@1. Это число задач, где сошлись все двадцать попыток, и строка базы до того, как поверить последней фразе агента.