TL;DR
Dynamic Template Selection (DTS) — метод адаптивного выбора шаблона промпта под сложность запроса. Вместо одного универсального verbose промпта для всех задач, система выбирает один из пяти шаблонов — от минимального (50 токенов) до развернутого (500 токенов). Контроль работает на двух уровнях: мягкие инструкции в промпте ("ответь кратко") и жёсткие лимиты через параметр max_tokens в API.
LLM генерирует избыточные ответы когда получает универсальный промпт. Простой вопрос "Столица Франции?" получает такой же развернутый шаблон как сложная задача про квантовую физику. Результат — переплата за output токены, которые стоят в 4-8 раз дороже input токенов у всех провайдеров. На миллионе запросов разница между 500 и 50 токенами в ответе = тысячи долларов.
Исследование проверило два роутера: простой MLP на эмбеддингах (90.5% точность) и fine-tuned RoBERTa трансформер (89.5%). Оба показали одинаковую точность выбора шаблона на всех трёх провайдерах — OpenAI, Gemini, Claude. Экономия output токенов составила 32.6-33.9% в зависимости от провайдера. Ключевая находка: решения роутера provider-agnostic — паттерны выбора шаблона универсальны, хотя сама генерация отличается.
Схема метода (исследовательская)
ОБУЧЕНИЕ РОУТЕРА (один раз):
1. Собрать датасет запросов → разметить каждый нужным типом шаблона
2. Обучить классификатор (MLP или трансформер)
→ выход: вероятности для 5 типов шаблонов
ПРИМЕНЕНИЕ (каждый запрос):
1. Запрос → роутер → выбор шаблона (minimal/standard/verbose/technical/executive)
2. Применить dual-layer control:
- Soft: системная инструкция стиля ответа
- Hard: max_tokens в API (50/200/500/400/150)
3. LLM генерирует ответ → экономия output токенов
Важно: ML-роутер требует код и обучение. Читателю доступны принципы метода для ручного применения.
Ключевые принципы для применения
1. Dual-Layer Token Control
Проблема: Инструкция "ответь кратко" работает непредсказуемо — модель может выдать 20 или 200 токенов.
Решение из DTS: Два уровня контроля одновременно:
Мягкий слой (soft prompting) — инструкции в промпте: - Minimal: "Ответь кратко и прямо, одно-два предложения" - Standard: "Дай чёткий структурированный ответ" - Verbose: "Дай развёрнутое объяснение с примерами и контекстом"
Жёсткий слой (hard caps) — лимиты в API:
- Через параметр max_tokens в API
- Minimal: 50, Standard: 200, Verbose: 500
- Гарантия: модель не превысит лимит даже если игнорирует инструкцию
Применимо в чате: Мягкий слой — да, сразу. Жёсткий слой — если есть доступ к API.
2. Multi-Template Approach
Проблема: Один промпт для всего = переплата за простые запросы.
Решение из DTS: Пять архетипов под разные задачи: - Minimal — факты, определения, да/нет - Standard — объяснения, инструкции - Verbose — обучение, глубокий анализ - Technical — код, формулы, спецификации - Executive — краткие выводы, саммари
Применимо в чате: Создай 3-5 заготовок промптов. Выбирай вручную или попроси LLM самостоятельно определить нужный уровень.
3. Cost-Aware Prompting
Инсайт: Output токены стоят в 4-8 раз дороже input токенов у всех провайдеров. Экономия 450 output токенов на один запрос = $0.0045 на Gemini 2.5 Pro. На миллионе запросов = $4,500.
Применимо: Всегда думай "какая длина ответа нужна". Явно указывай в промпте целевую длину.
Пример применения
Задача: Подготовка ответов для FAQ-бота интернет-магазина "Озон Маркет". Разные вопросы требуют разной детальности — от "Есть ли доставка в Владивосток?" до "Как работает программа лояльности?"
Промпт (minimal template для простых вопросов):
Ты — ассистент поддержки Озон Маркет.
ИНСТРУКЦИЯ: Ответь кратко и прямо, 1-2 предложения максимум.
Без лишних слов и вступлений.
ВОПРОС: Есть ли доставка в Владивосток?
Промпт (verbose template для сложных вопросов):
Ты — ассистент поддержки Озон Маркет.
ИНСТРУКЦИЯ: Дай развёрнутое объяснение с примерами, этапами и контекстом.
Структурируй ответ по пунктам где нужно.
ВОПРОС: Как работает программа лояльности и что даёт статус "Премиум"?
Результат: - Minimal промпт выдаст 10-15 слов: "Да, доставляем во Владивосток. Срок 7-10 дней, стоимость от 300₽." - Verbose промпт выдаст 100-150 слов: объяснение программы, условия получения статусов, список привилегий, пример расчёта кэшбэка
Экономия токенов на простых вопросах — до 90%. На 1000 запросов в день разница между "всегда verbose" и "адаптивно" = экономия 150,000 output токенов/месяц.
Почему это работает
LLM не умеет контролировать длину абстрактно. Инструкция "кратко" размыта — модель может выдать 20 или 200 токенов, потому что нет чёткого счётчика. Это особенность архитектуры: модель генерирует токен за токеном, не видя финальную длину заранее.
LLM хорошо следует конкретным паттернам и ограничениям. Когда промпт задаёт чёткую структуру ("1-2 предложения") + есть внешний лимит (max_tokens=50), модель генерирует компактно. Dual-layer control работает как направляющие рельсы: мягкие инструкции задают стиль, жёсткие лимиты гарантируют границы.
Provider-agnostic эффект: Паттерны выбора шаблона универсальны — все модели одинаково реагируют на контраст "простой вопрос vs сложный". Роутер обученный на одной модели работает на других без переобучения. Но сама генерация отличается — Gemini более "болтливый" (+1.3% токенов vs Claude), поэтому лимиты критичны.
Рычаги управления:
- Числовые лимиты (max_tokens) — уменьши для экономии, увеличь для полноты
- Инструкции стиля ("кратко"/"развёрнуто") — меняй формулировку под тон
- Число шаблонов — начни с 3 (minimal/standard/verbose), масштабируй до 5
- Пороги выбора — для сомнительных случаев дефолт на verbose (безопаснее)
Шаблонный подход (адаптация для чата)
Оригинальный DTS требует ML-роутер, но принцип multi-template применим вручную. Создай набор заготовок, выбирай под задачу:
Вариант 1: Ручной выбор (самый простой)
Подготовь 3 промпта под разные типы задач:
Minimal Template:
{роль и контекст}
ИНСТРУКЦИЯ: Ответь максимально кратко, 1-2 предложения.
Только суть, без деталей.
ВОПРОС: {твой вопрос}
Standard Template:
{роль и контекст}
ИНСТРУКЦИЯ: Дай структурированный ответ средней длины.
Покрой основные моменты, но не углубляйся в детали.
ВОПРОС: {твой вопрос}
Verbose Template:
{роль и контекст}
ИНСТРУКЦИЯ: Дай развёрнутое объяснение с примерами,
контекстом и пояснениями. Структурируй по пунктам.
ВОПРОС: {твой вопрос}
Выбирай шаблон вручную в зависимости от сложности вопроса.
Вариант 2: Авто-выбор через LLM (продвинутый)
Ты — умный роутер. Определи какой уровень детальности нужен для ответа:
- MINIMAL: простой факт, да/нет, определение (целевая длина: 1-2 предложения)
- STANDARD: объяснение, инструкция (целевая длина: 50-100 слов)
- VERBOSE: обучение, глубокий анализ (целевая длина: 150-300 слов)
ВОПРОС: {твой вопрос}
Выведи ТОЛЬКО одно слово: MINIMAL, STANDARD или VERBOSE
Затем используй выбранный шаблон из Варианта 1.
Вариант 3: One-shot с самоопределением
Ты — ассистент который адаптирует детальность под запрос.
ПРАВИЛО: Сначала определи сложность (простой факт / стандарт / глубокий анализ),
затем ответь соответствующей длиной:
- Простой → 1-2 предложения
- Стандарт → 50-100 слов
- Глубокий → 150-300 слов
ВОПРОС: {твой вопрос}
Формат ответа:
СЛОЖНОСТЬ: [твоя оценка]
ОТВЕТ: [твой ответ соответствующей длины]
Модель сама классифицирует и подстраивает длину в одном запросе.
🚀 Быстрый старт:
Если хочешь автоматизировать выбор шаблона — вставь в чат:
Вот три шаблона промптов для разных уровней детальности (minimal/standard/verbose).
Адаптируй их под мою задачу: {опиши свою задачу и типы вопросов}.
Предложи систему выбора — какие признаки вопроса должны триггерить каждый шаблон.
[вставить шаблоны из Варианта 1 выше]
LLM спросит про специфику твоих вопросов и предложит критерии выбора. Она возьмёт паттерн multi-template и адаптирует под твой контекст.
Адаптации
🔧 Техника: Явная длина в словах → больше предсказуемости
Dual-layer control из DTS использует токены (max_tokens). В чате без API доступа токены недоступны, но можно явно указать количество слов или предложений:
Ты — {роль}.
СТРОГОЕ ОГРАНИЧЕНИЕ: Ответ должен быть ровно {число} слов.
Не больше, не меньше. Считай слова перед выводом.
ВОПРОС: {твой вопрос}
Пример для FAQ-бота:
СТРОГОЕ ОГРАНИЧЕНИЕ: Ответ ровно 15 слов. Считай перед выводом.
ВОПРОС: Сколько стоит доставка в регионы?
Модель выдаст максимально компактный ответ. Комбинируй с soft prompting ("деловой тон", "разговорный стиль") для контроля стиля.
🔧 Техника: Пост-фильтрация через summarization
Если модель игнорирует лимиты длины — используй двухшаговый подход:
ШАГ 1: Дай полный ответ на вопрос.
ШАГ 2: Сократи ответ до {число} слов максимум,
сохранив только критически важную информацию.
ВОПРОС: {твой вопрос}
Модель сначала генерирует полный ответ (хорошее качество), затем сжимает его (контролируемая длина). Двойная генерация = больше токенов, но гарантия результата.
Ограничения
⚠️ Soft prompting без API лимитов: Инструкции "кратко"/"развёрнуто" работают, но модель может игнорировать. Без жёсткого
max_tokensнет гарантии длины — можешь попросить 50 слов, получить 150. Hard caps из DTS требуют API доступ.
⚠️ Субъективность "сложности": Роутер обучен на MMLU (академические вопросы). Для доменов где "сложность" определяется иначе (креатив, субъективные оценки, эмоциональный контент) — критерии выбора шаблона могут не работать. Потребуется адаптация или ручной выбор.
⚠️ Trade-off длина vs полнота: Агрессивное сокращение (minimal template везде) может обрезать важные нюансы. Исследование показало: routing accuracy 90% = в 10% случаев неправильный выбор. Дефолтный fallback на verbose для сомнительных случаев — обязателен.
⚠️ Provider-specific variations: Хотя routing decisions универсальны, разные провайдеры генерируют разную длину при одном промпте. Gemini +1.3% "болтливее" Claude при одинаковых инструкциях. Точная настройка требует тестирования на конкретном провайдере.
Как исследовали
Команда взяла 11,100 вопросов из MMLU (Massive Multitask Language Understanding) — академический бенчмарк с 57 предметами от биологии до права — и вручную разметила каждый вопрос одним из пяти типов шаблона (minimal/standard/verbose/technical/executive). Задача: научить модель автоматически выбирать правильный шаблон для любого запроса.
Проверили два подхода к роутингу: 1. MLP на эмбеддингах — простая нейросеть (3 слоя, 26K параметров), работает на готовых эмбеддингах от OpenAI (1536 измерений). Обучение ~1 минута на CPU. 2. Fine-tuned RoBERTa — полноценный трансформер (125M параметров), работает напрямую с текстом запроса. Обучение ~2.5 часа на GPU.
Ожидали что большой трансформер обойдёт простую MLP. Результат удивил: MLP показала 90.5% точности, RoBERTa — 89.5%. Простая модель на готовых эмбеддингах оказалась точнее сложной на 125 миллионов параметров. Почему? Information bottleneck theory: дополнительные слои трансформера могут терять информацию (data processing inequality), а эмбеддинги от OpenAI уже содержат всю семантику нужную для классификации. Больше параметров ≠ лучше для этой задачи.
Затем взяли 1,000 тестовых вопросов и прогнали через три провайдера (OpenAI GPT-4o-mini, Google Gemini 2.0 Flash Lite, Anthropic Claude 3 Haiku) — итого 9,000 реальных API вызовов ($0.87 стоимость эксперимента). Ключевая проверка: работает ли роутер provider-agnostic — одинаково на всех моделях без переобучения?
Результат подтвердил гипотезу: routing accuracy осталась 90.5% на всех трёх провайдерах — решения о выборе шаблона универсальны. Но токен savings варьировались (32.6% Claude, 33.0% OpenAI, 33.9% Gemini), потому что разные модели генерируют разную длину при одном промпте. Gemini оказался чуть более "болтливым" (+1.3%), Claude — самым компактным.
Измеряли через tiktoken (точный подсчёт токенов из реальных ответов API), не через теоретические оценки. Baseline — always-verbose (всегда самый длинный шаблон, ~498K токенов на 1000 вопросов). DTS сократил до ~323K токенов в среднем = экономия 33.2%.
Ablation study из шести вариантов показал: Logistic Regression (83.4%), Random Forest (78.7%), Ensemble RF+MLP (90.5% = как MLP solo, но сложнее), DistilBERT (89.0%). Вывод: нелинейность критична (MLP +7pp vs линейной регрессии), но сложность не помогает (MLP = Ensemble, MLP > трансформеры).
Экономический инсайт: Output tokens стоят в 4-8× дороже input у всех провайдеров. Роутинг 1M запросов с verbose (500 токенов) на minimal (50 токенов) экономит 450 output токенов × $0.01/1K = $4,500 на Gemini 2.5 Pro. Даже routing overhead ($0.40/1M для MLP embeddings или $65.75/1M для GPU inference) ничтожен на фоне экономии генерации.
Неожиданная находка: provider-agnostic routing — не предположение, а измеренный факт. Роутер обученный на одной модели работает на других без деградации точности. Это означает что паттерны "простой vs сложный вопрос" универсальны для всех современных LLM.
Ресурсы
Dynamic Template Selection for Output Token Generation Optimization: MLP-Based and Transformer Approaches (2025) Bharadwaj Yadavalli Ссылки на related work: Chain-of-Thought [Wei et al. 2022], MMLU benchmark [Hendrycks et al. 2021], Information Bottleneck Theory [Tishby et al. 2000]
