Strands Decider 2B: открытая модель для быстрых решений

· 2 мин чтения
ai-agents open-source local-llm model-routing guardrails
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 обещает библиотеки для встраивания таких моделей, так что репозиторий стоит держать под наблюдением.

Источник: https://strandsagents.com/blog/introducing-strands-decider/