TL;DR
SABER — метод обучения LLM переключаться между четырьмя режимами рассуждения: NoThink (без рассуждений), FastThink (минимум токенов), CoreThink (средняя глубина) и DeepThink (полное рассуждение). Перед обучением каждую задачу профилируют базовой моделью — считают сколько токенов она тратит на рассуждение — и присваивают целевой бюджет токенов: 128 для простых, 4096 для средних, 16384 для сложных. В system prompt явно указывают этот лимит: "Your reasoning should be STRICTLY UNDER 128 tokens". Модель учат через reinforcement learning с наградами за правильный ответ и штрафами за превышение бюджета.
Проблема: LLM с Chain-of-Thought переобдумывают (overthinking) — на задачу "1+1" выдают несколько абзацев рассуждений вместо прямого ответа. Это жрёт токены (= деньги), увеличивает задержку и применяется одинаково ко всем задачам — и к "столица Франции", и к олимпиадной математике. Предыдущие методы пытались урезать длину единообразно для всех примеров — это либо ломало точность на сложных задачах, либо не давало экономии на простых. Корень проблемы: модель не умеет оценивать сложность задачи и подбирать под неё глубину рассуждения.
SABER решает через адаптивные бюджеты токенов под сложность задачи. Перед обучением прогоняют датасет через базовую модель и смотрят сколько токенов она тратит на каждый пример — это proxy для сложности. Дальше разбивают на три тира и для каждого задают целевой бюджет с понижением на один тир: если базовая модель тратила 128-4096 токенов, целевой бюджет становится 128; если 4096-16384 — целевой 4096; выше 16384 — без ограничений. Дополнительно в датасет добавляют примеры с NoThink режимом — когда модель должна отвечать без рассуждений вообще. Такая градация позволяет эффективно научить модель плавно переключаться между режимами, а явное указание бюджета в промпте делает поведение предсказуемым для пользователя.
Схема метода
Предобработка данных (один раз):
ШАГ 1: Прогнать датасет через базовую модель → посчитать токены в <think>
ШАГ 2: Разбить по тирам (128 / 4096 / 16384+) → присвоить целевой бюджет
ШАГ 3: Добавить NoThink дубликаты (0 токенов) → расширить датасет
RL-обучение (10 эпох на 2K примеров):
ШАГ 1: System prompt с бюджетом + задача → модель генерирует ответ
ШАГ 2: Награда = правильность + штраф за длину + штраф за экстремумы → обновить веса
Инференс (выбираешь режим):
NoThink: ответ без рассуждений
FastThink: бюджет 128 токенов → быстрый ответ
CoreThink: бюджет 4096 токенов → умеренная глубина
DeepThink: без ограничений → полное рассуждение
Пример применения
Задача: Ты руководитель продукта в российском стартапе. Команда предлагает три фичи для следующего спринта. Нужно быстро оценить ROI каждой — сейчас на планёрке нет времени на глубокий анализ.
Промпт:
System: Ты продуктовый аналитик. Твоё рассуждение между <think> и </think>
должно быть СТРОГО МЕНЬШЕ 128 токенов. Отвечай структурно и по делу.
Question: Оцени ROI трёх фич для B2B SaaS-платформы с 500 платящими клиентами:
1. Интеграция с 1С (запрашивают 80% клиентов, разработка 2 месяца, 2 разработчика)
2. Тёмная тема интерфейса (запрашивают 30% клиентов, разработка 2 недели, 1 разработчик)
3. AI-помощник для заполнения форм (потенциально снизит onboarding на 50%,
разработка 4 месяца, 3 разработчика + data scientist)
Для каждой дай: оценку impact (1-10), effort (человеко-месяцы),
приоритет (высокий/средний/низкий), одно предложение обоснования.
Answer:
Результат:
Модель покажет краткое рассуждение в <think> (примерно 100-120 токенов) с расчётами impact/effort для каждой фичи, затем выдаст структурированный ответ:
- Три фичи с оценками по всем параметрам
- Короткое обоснование для каждой (не больше одного предложения)
- Итоговый приоритет
Если бы выбрал DeepThink, модель бы добавила анализ рисков, альтернативные метрики, проверку предположений — но это заняло бы в 10-20 раз больше токенов и времени.
Почему это работает
Слабость LLM: Модели с Chain-of-Thought не умеют оценивать сложность задачи и выбирать адекватную глубину рассуждения. Они применяют одинаково развёрнутый reasoning и к "2+2", и к олимпиадной задаче. Попытки единообразно урезать длину через инструкции типа "будь краток" дают нестабильный результат — модель либо выкидывает важные шаги на сложных задачах, либо игнорирует инструкцию на простых.
Сильная сторона LLM: Модели отлично следуют явным ограничениям в system prompt, особенно если ограничение выражено численно. Фраза "STRICTLY UNDER 128 tokens" работает как жёсткий лимит — модель воспринимает это как правило игры и старается не нарушать. Также модели хорошо адаптируются к разным режимам работы, если эти режимы явно размечены в обучающих данных.
Как SABER использует сильные стороны: Вместо размытых инструкций метод привязывает лимиты к сложности задач. Профилирование базовой модели даёт объективную оценку сложности через количество токенов — если базовая модель тратит 5000 токенов, задача не решится за 100. Целевой бюджет назначается с понижением на один тир, чтобы научить модель экономить, но не обрубать логику. Явное указание бюджета в system prompt превращает абстрактное "будь краток" в конкретный числовой лимит. RL-обучение с штрафами за превышение и наградами за правильность балансирует скорость и точность — модель учится урезать избыточное, сохраняя необходимое.
Дополнительные механизмы стабильности:
- NoThink режим в датасете — без специальных примеров модель деградирует на задачах без рассуждений (падение точности на 10-15%). Явное обучение на NoThink примерах даёт модели второй навык.
- Нижняя граница длины (минимум 20% от базовой модели) — предотвращает reward hacking, когда модель выдаёт пустые рассуждения ради штрафа за длину.
- Фильтрация по точности — только корректно решённые базовой моделью примеры подвергаются агрессивному урезанию бюджета. Это защищает от коллапса на сложных задачах.
Рычаги управления промптом:
- Числовой бюджет (128 / 4096 / 16384 / без лимита):
- Уменьши → быстрее, дешевле, риск потери точности на сложных задачах
- Увеличь → точнее, медленнее, дороже
- Можно задавать произвольные значения между тирами (например, 512 или 2000)
- Режим NoThink (пустой
<think></think>):- Используй для фактических вопросов, где рассуждение не нужно
- Экономит до 100% токенов на reasoning, но работает не на всех задачах
- Формулировка ограничения в system prompt:
- "STRICTLY UNDER" → жёсткий лимит
- "approximately" → мягкое указание
- "optimize for brevity" → размытая инструкция (хуже работает)
- Инструкция по выводу после
</think>:- Добавь "provide step-by-step justification" → увидишь reasoning даже в ответе
- Убери → только финальный результат
Шаблон промпта
Для FastThink / CoreThink (с бюджетом):
System: {твоя роль и контекст}. Твоё рассуждение между <think> и </think>
должно быть СТРОГО МЕНЬШЕ {число_токенов} токенов.
Question: {задача}
Answer: <think> ... </think> {ответ}
Для DeepThink (без ограничений):
System: {твоя роль и контекст}
Question: {задача}
Answer: <think> ... </think> {ответ}
Для NoThink (без рассуждений):
System: {твоя роль и контекст}. Отвечай напрямую без внутренних рассуждений:
<think></think>
{ответ здесь}
Question: {задача}
Answer: {ответ}
Подстановка плейсхолдеров:
{твоя роль и контекст}— например: "Ты финансовый аналитик, специализируешься на быстрых оценках ROI"{число_токенов}— рекомендуемые значения:- 128 для FastThink — простые задачи, где рассуждение очевидно
- 4096 для CoreThink — средняя сложность, нужна проверка шагов
- Можно использовать промежуточные: 256, 512, 1024, 2048
{задача}— твой вопрос или задача для модели{ответ}— финальный результат после рассуждения
🚀 Быстрый старт — вставь в чат:
Вот шаблон SABER для контроля глубины рассуждения LLM. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какой режим нужен (FastThink/CoreThink/DeepThink/NoThink) и какую роль задать — потому что метод требует явного указания бюджета токенов для работы. Она возьмёт структуру с <think> тегами и адаптирует под твою задачу.
Ограничения
⚠️ Требует RL-обучения для полного эффекта: Хотя принципы (явный бюджет в промпте, теги
<think>) работают и на базовых моделях, максимальная эффективность достигается только после переобучения модели методом SABER. На необученной модели указание лимита в 128 токенов может дать слабое соблюдение или потерю точности.
⚠️ Не для всех типов задач: Метод показывает лучшие результаты на структурированных задачах — математика, код, логические цепочки. На субъективных или творческих задачах (написание эссе, креатив, оценка стиля) строгие лимиты токенов могут обрубать нюансы. В исследовании тестировали только math reasoning, code generation и logic reasoning.
⚠️ Trade-off скорость vs точность остаётся: FastThink режим сокращает длину на 65-80%, но на самых сложных задачах (топ-10% по сложности) точность может упасть на 2-5%. Если задача критична — лучше использовать CoreThink или DeepThink, жертвуя скоростью.
⚠️ NoThink требует явного обучения: Простое отключение рассуждений без специальных примеров в датасете ведёт к падению точности на 10-20% даже на задачах, где рассуждение не обязательно. Это видно в таблицах: базовая модель в NoThink режиме даёт 65% точности, SABER после обучения — 76%.
⚠️ Профилирование требует вычислений: Перед обучением нужно прогнать весь датасет через базовую модель, чтобы определить сложность каждого примера. Это одноразовые затраты, но для больших датасетов (>100K примеров) требуется заметное время на инференс.
Как исследовали
Команда взяла дистиллированную модель DeepSeek-R1 размером 1.5B параметров — это модель, обученная на reasoning через RL и дающая state-of-the-art результаты для своего размера. Дальше собрали всего 2K примеров — 1K по математике (из датасета OpenR1-Math, отфильтрованные верификатором на корректность) и 1K по коду (из KodCode-Light-RL). Это очень мало по сравнению с baseline методами: например, SelfBudgeter требовал 30K примеров и 3 эпохи, L1 тоже работал на десятках тысяч примеров.
Перед обучением профилировали каждый пример базовой моделью — запускали инференс и считали токены между <think> и </think>. На основе распределения разбили на три тира: меньше 128 токенов (лёгкие), 128-4096 (средние), 4096-16384 (сложные), больше 16384 (очень сложные). Каждому примеру присвоили целевой бюджет на тир ниже: если базовая модель тратила 128-4096 токенов, целевой лимит ставили 128; если 4096-16384 — целевой 4096; выше 16384 — без ограничений. Логика простая: модель уже показала что может решить за N токенов, значит можно попробовать сжать до 0.25N-0.5N без потери точности.
Дальше разделили датасет по точности базовой модели: примеры, которые базовая модель решила правильно (~60%), подвергали агрессивному урезанию бюджета. Примеры, которые базовая модель завалила (~40%), разделили пополам: половине оставили исходный бюджет, половине вообще сняли лимиты. Это критический трюк для стабильности обучения — без этого модель начинала коллапсировать на сложных задачах.
Обучали через GRPO (Group Relative Policy Optimization) — вариант RL, где наградой служит композитный скор: +1 за правильный ответ, -1 за неправильный формат вывода, -0.4 за превышение лимита токенов, -0.4 за слишком короткое рассуждение (меньше 20% от базовой модели). Это защищает от reward hacking — когда модель выдаёт пустые <think></think> ради минимизации штрафа за длину.
Обучили 10 эпох на 2K примеров — вся процедура заняла скромное время и вычисления по сравнению с SFT + RL pipeline у конкурентов. Не требовали SFT warm-up — это ключевое отличие от других методов. Обычно RL на reasoning начинают с supervised fine-tuning на правильных решениях, потом только RL. SABER показал что можно обучать напрямую через RL, если правильно спроектировать награды и датасет.
Тестировали на четырёх бенчмарках: MATH500 (500 олимпиадных задач, подмножество MATH), GSM8K (8.5K школьных задач по арифметике), MATH (12.5K задач уровня AMC/AIME), MBPP (974 задачи по программированию). Замеряли точность (% правильных ответов) и среднюю длину рассуждения в токенах.
Результаты удивили: FastThink режим сократил длину рассуждений на 72.7% (с 5366 до 1463 токенов в среднем по бенчмаркам) и при этом увеличил точность на 3% по сравнению с базовой моделью. Обычно сжатие reasoning ведёт к падению точности — здесь наоборот. Исследователи объясняют это двумя факторами:
- Избыточность вредит: SFT-обученные reasoning модели склонны к повторениям и "воде" в рассуждениях. Урезая длину, модель выкидывает не важные шаги, а повторы и отвлечения.
- RL улучшает reasoning: Награда за правильность + штраф за формат научили модель фокусироваться на критических шагах. Формат
<think>с явным разделением reasoning и ответа дисциплинирует модель.
CoreThink дал 67.9% сокращение при +4.7% точности. DeepThink — 41.2% сокращение при +6.8% точности. Получается парадокс эффективности: даже самый "глубокий" режим короче базовой модели, но точнее.
Дальше проверили масштабирование на 7B модель — DeepSeek-R1-Distill-Qwen-7B. Здесь результаты скромнее: FastThink сократил длину на 82.1%, но точность упала на -2.5%. То есть trade-off проявляется сильнее на больших моделях — у них больше capacity для reasoning, и агрессивное урезание уже начинает вредить. CoreThink дал -0.8% точности, DeepThink — +1.9%. Вывод: SABER работает на разных размерах, но баланс скорость/точность зависит от capacity модели.
Самое интересное — кросс-доменная генерализация. Обучали только на математике и коде, но потом протестировали на LiveBench-Reasoning — бенчмарке логических головоломок, который модель не видела. SABER-DeepThink дал +1.9% точности по сравнению с базовой моделью на этом unseen датасете. Это показывает что навык контроля глубины reasoning переносится между доменами — модель научилась не конкретным математическим трюкам, а мета-навыку управления рассуждением.
Ключевой инсайт исследования: Overthinking — это не неизбежная цена за точность. Это артефакт обучения, который можно исправить правильным RL с адаптивными лимитами. Более того, умеренное сжатие reasoning улучшает точность, потому что заставляет модель фокусироваться на сути.
Оригинал из исследования (опционально)
System prompt для CoreThink/FastThink:
System message: [original sys] Your reasoning process between <think> and </think>
should be STRICTLY UNDER **XXX** tokens.
Question: [original prompt]
Answer: <think> ... </think> [response]
System prompt для DeepThink:
System message: [original sys]
Question: [original prompt]
Answer: <think> ... </think> [response]
System prompt для NoThink:
System message: [original sys] Respond directly without internal reasoning:
<think></think>
[response here]
Question: [original prompt]
Answer: [response]
Контекст: Исследователи использовали эти шаблоны на этапе RL-обучения. В system message подставляли исходные инструкции модели, в XXX — целевой бюджет токенов (128/4096/16384), в original prompt — задачу из датасета. Формат с явным разделением <think> и </think> критичен для награды за формат — если модель не выдаёт эти теги, получает -1 penalty.
Адаптации и экстраполяции
💡 Адаптация для рабочих планёрок
Совещания часто страдают от overthinking: менеджеры запрашивают развёрнутый анализ там, где достаточно резюме, или наоборот — получают поверхностную сводку вместо глубокого разбора. SABER-подход решает это через явные режимы глубины коммуникации.
Промпт для быстрых статус-апдейтов (FastThink для встреч):
System: Ты ассистент для управления планёркой. Твои комментарии к каждому пункту
между <analysis> и должны быть СТРОГО МЕНЬШЕ 50 слов.
Фокус на actionable insights, без воды.
Question: Команда принесла 3 статус-апдейта:
1. "Бэкенд API готов на 80%, осталась интеграция с платёжной системой"
2. "Дизайн экранов оплаты на ревью у стейкхолдеров, жду фидбек 3 дня"
3. "QA нашёл критический баг с расчётом НДС, блокирует релиз"
Для каждого дай: <analysis> оценка статуса (зелёный/жёлтый/красный),
главный риск, что делать дальше
Затем резюме встречи одним абзацем.
Answer:
Модель выдаст краткий анализ каждого пункта (по 30-40 слов) с конкретными действиями, затем общую сводку. Для сравнения, DeepThink режим развернул бы рассуждение в полноценный отчёт на страницу — избыточно для 15-минутной планёрки.
🔧 Техника: Динамическое переключение между режимами в одном запросе
Вместо фиксированного лимита на весь ответ можно задавать разные бюджеты для разных частей одной задачи:
System: Ты аналитик. Следуй режимам рассуждения для каждой части ответа:
Part 1 (Context Summary): ... </think> [резюме ситуации]
Part 2 (Deep Analysis): ... </think> [детальный разбор]
Part 3 (Action Items): ... </think> [конкретные шаги]
Question: {задача с контекстом, требующая глубокого анализа и действий}
Answer:
Эффект: Гибридный режим — быстрая обработка контекста и action items, глубокое погружение только в критический анализ. Экономит до 40% токенов по сравнению с полным DeepThink, сохраняя качество там где нужно.
💡 Адаптация для образования: карточки с разноуровневыми объяснениями
Принцип SABER можно применить к образовательному контенту: один факт или концепция, но три уровня объяснения под разную аудиторию.
System: Ты педагог, создающий многоуровневые объяснения.
Для каждого уровня используй свой режим рассуждения:
Level 1 (ELI5): ... </think> [объяснение для 5-летнего]
Level 2 (High School): ... </think> [объяснение для старшеклассника]
Level 3 (Expert): ... </think> [объяснение для специалиста]
Question: Объясни концепцию {сложная тема} на трёх уровнях глубины.
Answer:
Пример применения: создание интерактивных учебников, где читатель выбирает глубину погружения в материал. FastThink даёт интуицию, CoreThink — механику, DeepThink — формальные доказательства.
Ресурсы
SABER: Switchable and Balanced Training for Efficient LLM Reasoning (arXiv:2506.XXXXX предварительный ID)
Авторы: Kai Zhao, Yanjun Zhao, Jiaming Song, Shien He, Lusheng Zhang, Qiang Zhang, Tianjiao Li
Организация: Bilibili Inc.
Связанные работы упомянутые в исследовании:
- L1 (Aggarwal & Welleck, 2025): Length-controlled policy optimization для строгих бюджетов токенов
- SelfBudgeter (Li et al., 2025): Модель сама предсказывает нужный бюджет токенов для задачи
- Kimi Long2Short (Kimi, 2025): Микс дистилляции + length-sensitive DPO для сжатия reasoning
- DeepSeek-R1: Базовая модель с distillation от крупной reasoning модели
Фреймворк для реализации:
verl (Volcano Engine RL framework) — https://github.com/volcengine/verl
Open-source библиотека для RL fine-tuning LLMs, используется в SABER.
