Вышла Strands Decider 2B — открытая модель принятия решениймодель, которая выбирает между заданными вариантами и присваивает им числовые оценки, а не генерирует текст. Она содержит 2 млрд параметров, запускается на локальном CPU или GPU и возвращает ответы за десятки миллисекунд. Веса опубликованы на Hugging Face, код — на GitHub, вместе с обучающими данными и скриптами.
Релиз позиционируется как первый вклад в направление decision-моделей. Ниже — что именно изменилось, как это устроено и что это даёт на практике.
Что именно изменилось
Strands Decider 2B — это LLMбольшая языковая модель, генерирующая текст токен за токеном. У предобученного торса Qwen3.5-2B удалили LM headвыходной слой, проецирующий скрытое состояние на словарь токенов и дающий модели способность генерировать текст. Вместо него поставили pointer-headнебольшой выходной слой, который оценивает каждый вариант ответа, сравнивая скрытое состояние в его позиции со скрытым состоянием в позиции <answer> примерно на миллион параметров, а сам торс дообучили LoRA-адаптерлёгким обучаемым дополнением к весам модели, которое настраивает её под задачу без переобучения всех параметров ранга 16.
Механика выбора такая: pointer-head сравнивает представление вопроса с представлением каждого варианта, поэтому число вариантов не зашито в архитектуру и может меняться от запроса к запросу. Раньше применялся slot head, который, по данным авторов, показал значительно худшие результаты.
Выпускаемая версия — v19, прошедшая множество итераций; изменения каждой версии описаны в репозитории.
Установка выполняется командой pip install strands-decider. Запуск идёт командой strands-decider ask с указанием модели StrandsAgents/strands-decider-2B-hobson-v19, состояния через флаг --state и вариантов выбора через --choice в формате «вопрос=вариант1,вариант2»: так задаётся choiceвопрос, на который модель выбирает один вариант из предложенного списка. Устройство выбирается флагом --device со значениями cuda, mps или cpu.
Как устроен интерфейс
Запрос состоит из двух частей: состояниятекст или JSON, описывающий контекст: тикет, страницу, трассу агента, историю переписки и вопросы. Вопросы бывают двух типов:
- choice — choice, у Jev до 255 вариантов.
В ответе приходит вероятность для каждого допустимого ответа каждого вопроса. Например, вывод choice_0 -> billing (confidence 0.768) сопровождается оценками по вариантам: billing 0.845, retail 0.091, sales 0.064. В другом примере ответ выглядит как billing 0,91, technical 0,06, account 0,03, срочность 0,61. Что делать с этими числами — порог, эскалацию, логирование — решает код приложения.
Вопросы формулируются через Decider.noul, который принимает текст вопроса и словарь с описаниями вариантов «true» и «false»: описания нужны, чтобы модель понимала, что именно означает каждый из двух ответов. Например, args_grounded проверяет, обоснованы ли значения аргументов инструмента фактами, которые сообщил пользователь, а premature — не преждевременно ли вызывать инструмент до уточнения у пользователя.
Предыстория
Раньше агенты принимали решения, вызывая обычную LLM на каждом шаге, даже когда текст не требовался: агент выбирает инструмент, проверяет, закончена ли задача, решает, можно ли выполнять команду. Полная генерация на таком шаге стоит дороже и работает медленнее, чем требует выбор, а ответ ещё приходится парсить и проверять на соответствие формату. Отдельный быстрый контур для таких шагов предложила TypeSafe и назвала его System One.
До Strands Decider 2B в волне decision-моделей появились:
- Jev от TypeSafe — первая модель класса System One: получает состояние и типизированные вопросы, возвращает распределение вероятностей по допустимым ответам за один прямой проход без генерации токенов.
- Clef и Clef-flash от Cloudflare — оставляют базовую LLM замороженной (Qwen3.8-27B и Qwen3.5-9B соответственно), обучают LoRA-адаптеры и механизм маршрутизации внимания; после prefillобработки входного текста моделью до начала генерации выходной слой оценивает все варианты параллельно.
- pplx-decider-v1-27b от Perplexity — удаляет LM head и ставит выход сразу на 255 решений, переобучая основную модель, визуальный энкодер и новый выходной слой.
- Laya от Convai Innovations — построена на двунаправленном энкодере ModernBERT (421 млн параметров, мультиязычная версия mmBERT — 322 млн): для каждого варианта во вход добавляется маркер
[MASK], модель оценивает все варианты одновременно и применяет softmaxпреобразование набора чисел в распределение вероятностей, сумма которого равна единице. - GLiDE от Fastino — гибрид: сначала считает быстрое распределение вероятностей, а если лидирующий вариант неуверенный, выделяет дополнительное рассуждение.
Почему выбрали именно 2B
Авторы называют две причины. Первая — поощрять эксперименты: модель можно использовать и даже обучать на уже имеющемся оборудовании, что делает пробы простыми, быстрыми и малорисковыми. Вторая — два миллиарда параметров это «sweet spot»: достаточно мало для экспериментов и достаточно велико для осмысленной работы. Strands decider правильно выполняет 100% лёгких задач на JevBench, а такие задачи хорошо соответствуют простым проблемам, которые люди решают с помощью агентов.
Под Apache 2.0 выложены веса, код, рецепт обучения, список данных и оценки. Обучающие данные синтетические: их сгенерировали и проверили открытые LLM.
Что это меняет на практике
Вызов инструментов можно оборачивать в дешёвые решения: перед выполнением любого инструмента запускается обработчик, который решает, что делать дальше. Он возвращает одно из типизированных действий: Proceed — продолжить, Deny — запретить вызов, Confirm — остановиться и спросить человека, Guide — не блокировать вызов, а вернуть модели её ход вместе с обратной связью. Разница между Guide и Deny/Confirm в эффекте: Deny и Confirm прерывают вызов, а Guide отдаёт управление обратно модели с пояснением.
Обработчик — это Python-класс, и Strands не навязывает его внутреннее устройство, поэтому одна и та же форма подходит для вызова модели принятия решений, политики Cedar или другого агента. В примере вопросы, порог и политика выбраны вручную, и это иллюстрация, а не рекомендация. Команда Strands работает над библиотеками для интеграции моделей принятия решений.
Цифры
Медианная задержка локальных решений — около 115 мс на Nvidia RTX 3090 и около 153 мс на M3 MacBook для небольших задач. Задержка растёт примерно линейно с размером задачи.
Точность и калибровка (Brier scoreметрика, оценивающая, насколько заявленные вероятности совпадают с фактическими исходами) показаны на графике по траектории обучения: обе метрики улучшались на публичном наборе JevBench, конкретные числовые значения Brier scoreТип вопроса, на который модель отвечает уровнем на упорядоченной шкале. не приводятся.
Для сравнения, в таблице по другим моделям даны точность, цена вызова в USD и время ответа:
| Модель | Точность | Цена вызова, USD | Время ответа, с |
|---|---|---|---|
| Jev | 100 | 0,00035 | 0,44 |
| GPT-5.6 Terra | 99,8 | 0,00289 | 2,83 |
| GPT-5.6 Luna | 96,4 | 0,00039 | 2,50 |
| Claude Sonnet 4.6 | 80,0 | 0,02811 | 2,16 |
Полная стоимость решения считается так:
cost = decider_price + (1 - coverage) * fallback_priceЗдесь coverageдоля решений, которые модель приняла сама, не передавая их запасной модели — она зависит от порога уверенности: порог задаёт, насколько надёжным должно быть решение, чтобы модель приняла его сама, и чем выше порог, тем меньшую долю запросов модель берёт на себя и тем чаще приходится обращаться к запасной модели. fallback_price — цена решения на запасной модели.
Ограничения и открытые вопросы
Ключевая проблема — калибровка. GLiDE решает, когда рассуждать, по собственной первой вероятности, а она плохо отделяет правильные ответы от ошибочных: на задачах с закрытым миром быстрые ответы шли со средней уверенностью 86% и были верны в 68% случаев, поэтому модель рассуждала только на 13% задач.
Для оценки калибровки используются две метрики. ECEметрика, показывающая, насколько заявленная уверенность совпадает с фактической точностью и AUROCметрика, показывающая, насколько уверенность разделяет верные и неверные ответы: 0,5 означает «никак», 1,0 — идеально.
Есть ограничение закрытого списка: модель всегда отвечает вариантом из списка и может уверенно выбрать неправильный. Поэтому в список стоит добавлять вариант «другое» или «передать человеку» и следить, как часто модель его выбирает.
При 200 тестовых примерах разница в один-два пункта точности укладывается в шум, а разрыв в coverage на 20 пунктов уже значим.
Авторы Strands Decider признают, что у них есть много идей по улучшению точности и калибровки, особенно в снижении нижней границы задержки. Встроенный HTTP-сервер слушает 127.0.0.1 без аутентификации, так что в продакшене нужен свой слой авторизации. Останутся ли decision-модели отдельным классом надолго, пока неясно.