Strands Decider 2B: открытая модель для быстрых решений
Большинство AI-моделей умеет генерировать текст. Strands Decider 2B делает другое: выбирает один из заранее заданных вариантов и ставит ему оценку. Модель маленькая — всего 2 миллиарда параметров. Она работает на обычном процессоре или видеокарте, а ответ приходит за десятки миллисекунд.
Команда Strands открыла и код, и веса. Репозиторий strands-labs/strands-decider содержит всю архитектуру, данные для обучения и скрипты, а свежие веса лежат на Hugging Face. Это первая работа в Strands Labs. Там команда Strands предлагает пробовать экспериментальные подходы к агентному ИИ.
Что такое модель принятия решений
Модели принятия решений — новый класс моделей. На английском их называют decision models, а ещё system one models. Внимания они получили после выхода Jev от TypeSafe AI в сентябре 2026 года.
Отличие от обычной LLM укладывается в одну фразу: та пишет текст, эта выбирает из списка.
Вопрос выглядит так: «Ты сказал "включи свет" — это про кофемашину? Да или нет». Или так: «На каком языке фраза "sihamba ngokushesha"? Английский, зулу или нидерландский». Если выбирать не из списка, а оценивать, модель возвращает число от 0 до 1: «Насколько фраза "это лучший документ, который я читал" звучит позитивно — от 0 до 1».
У этого ограничения есть и польза, и цена.
Польза:
- модель быстрее, и при своём размере решает задачи не хуже больших моделей;
- ответ всегда один из предложенных вариантов — модель не может выдать что-то другое;
- задержка очень маленькая;
- вместе с ответом модель даёт оценку уверенности: «насколько я уверен, что этот ответ верен».
Последний пункт важен отдельно. У обычных LLM нет готовой оценки уверенности, которую можно получить из API. А из нескольких таких оценок складывается полезная метрика. По этой же причине удобно задавать модели сразу много вопросов про один и тот же текст.
Цена тоже очевидна. Модель не пишет текст, поэтому она не годится для кода, чат-ботов и пересказа документов. И решает только простые задачи: все ответы выдаёт за один параллельный проход, а не размышляет по шагам. Модели, которые размышляют по шагам, на сложных задачах сильнее.
Как устроен Strands Decider 2B
Внутри — всем знакомое ядро (на английском torso) предобученной LLM Qwen3.5-2B. Из него убрали LM head, то есть ту часть, которая превращает внутреннее состояние модели в текст. Вместо неё поставили pointer head. Он сравнивает скрытое состояние на каждой позиции варианта ответа со скрытым состоянием на специальной позиции <answer> и выдаёт оценку.
Сам pointer head крошечный — чуть больше миллиона параметров. Ядро дообучали с помощью LoRA-адаптера ранга 16.
Это вторая крупная версия архитектуры. Первая использовала slot head, и она работала заметно хуже. Опубликованная модель — версия 19, а в репозитории описано, что менялось на каждом шаге.
Точность, калибровка и задержка
Для моделей такого класса важны три вещи. Точность отвечает на вопрос «насколько часто ответ верный». Калибровка — «насколько можно верить оценке уверенности». И третья — скорость.
Точность и калибровку команда Strands считает на публичном наборе JevBench. Калибровку — через Brier score на том же наборе. Результаты доступны в открытом доступе.
В классе моделей на 2 миллиарда параметров Strands Decider занимает 3-е место из 33. Если убрать модели, которые чуть больше двух миллиардов, — 1-е место из 30.
По скорости: медиана около 115 мс на локальной Nvidia RTX3090. На M3 MacBook для небольших задач — около 153 мс. Задержка растёт примерно линейно с размером задачи, то есть с числом токенов во входных данных. Скорость зависит от железа, поэтому эти числа стоит читать вместе с конфигурацией машины.
Почему именно два миллиарда параметров
Причин две. Первая — желание поощрять эксперименты. Модель можно запустить и дообучить на том же компьютере, который уже стоит на столе. Пробовать получается быстро и без риска для кошелька.
Вторая — по мнению авторов, два миллиарда параметров попадают в удачное место: достаточно мало, чтобы экспериментировать, и достаточно много, чтобы браться за полезные задачи. Простой тест на это даёт сам JevBench — модель правильно решает 100% лёгких задач. Именно на такие задачи агентов обычно и применяют.
Где это уже пробуют
Авторы пишут об успешных экспериментах в нескольких областях: маршрутизация моделей, выбор инструментов, оценка качества, защитные проверки, память, управление контекстом и классификация политик.
Отдельно они описывают смешанные схемы. LLM принимает самые сложные решения, а модель принятия решений берёт на себя рутинные. Так выходит дешевле и быстрее. Ещё один вариант — сочетать такие модели с языками жёстко заданных рабочих процессов.
Модель пробуют и вовсе не для агентов: игры, автоматизация, прохождение лабиринтов.
Попробовать из командной строки
pip install strands-decider
Модели задают состояние и варианты ответа, а она выбирает один:
strands-decider ask StrandsAgents/strands-decider-2B-hobson-v19 \
--state "Help! My payouts have been failing for 3 days! " \
--choice "Which team should handle this?=billing,sales,retail"
Ответ выглядит так:
choice_0 -> billing (confidence 0.768) billing 0.845 retail 0.091 sales 0.064
Задача простая: жалоба на три дня неудачных выплат — это к отделу биллинга. Модель поставила billing 0.845, retail — 0.091, sales — 0.064.
Решение внутри агента: пример с get_weather
В репозитории есть пример агента на Strands, который использует Strands Decider 2B — он лежит в examples/strands/. Сам агент работает локально, локально же работает модель принятия решений, а за текстовые ответы отвечает обычная LLM из Amazon Bedrock.
Сценарий там намеренно искусственный. У агента есть инструмент get_weather и системный промпт, который делает его излишне услужливым. Спросите «Какая погода?» без указания города — и агент сам загадает город, а инструмент всё равно вызовет.
Решение Strands Decider 2B принимает до вызова. Она читает переписку и предлагаемые аргументы, а затем отвечает на два вопроса. Первый: опираются ли значения аргументов на то, что пользователь действительно сказал. Второй: не слишком ли рано вызывать этот инструмент. Несколько строк на Python превращают ответы в решение, и агент уточняет город вместо уверенного отчёта о погоде в каком-то городе.
Вопросы выглядят так:
QUESTIONS = {
"args_grounded": Decider.noul(
"Are the tool's argument values grounded in facts the user actually provided?",
{
"true": "every argument value traces back to something the user said",
"false": "an argument value was guessed or invented, not stated by the user",
},
),
"premature": Decider.noul(
"Is it premature to call this tool now, before clarifying with the user?",
{
"true": "the assistant should ask a clarifying question before calling the tool",
"false": "there is nothing left to clarify; calling now is appropriate",
},
),
}
Это штатный механизм вмешательств Strands. Класс InterventionHandler с методом before_tool_call передаётся в Agent(interventions=[...]) и срабатывает до выполнения любого инструмента. На выходе — одно из четырёх готовых действий: Proceed, Deny, Confirm (остановиться и спросить человека) или Guide (вернуть модели её ход с обратной связью, не блокируя вызов). Сам класс — обычный Python, и Strands не интересует, что внутри. Та же форма работает, если вместо модели принятия решений подставить политику Cedar или другого агента.
Пример — иллюстрация, а не рекомендация: вопросы, порог и правило придуманы вручную. Главная мысль в другом. Решение настолько дешёвое, что может стоять там, где вызов LLM поставить не получится.
Вывод
Скачать, запустить и дорабатывать Strands Decider 2B можно уже сегодня. Код, данные и все нужные скрипты лежат в репозитории, последние версии весов — на Hugging Face.
Команда Strands обещает библиотеки для встраивания таких моделей, так что репозиторий стоит держать под наблюдением.