Перейти к содержанию

Маршрутизация и быстрые ответы

Synth обрабатывает каждый запрос в два слоя: сначала быстрые ответы — мгновенный ответ на простые запросы без вызова большой модели, затем маршрутизация — автоматический выбор модели для всего остального. Оба слоя настраиваются в интерфейсе.

Общий поток запроса

Запрос пользователя
   │
   ▼
┌─ Быстрые ответы ───────────────────┐
│  Классификация → каскад моделей    │
│  уверены? ───── да → готовый ответ │
│  нет ───────── fallback            │
└───────────────┬────────────────────┘
   │
   ▼
┌─ Маршрутизация ────────────────────┐
│  Классификация → выбор модели      │
└───────────────┬────────────────────┘
   │
   ▼
 LLM
  • Если быстрые ответы выключены — запрос сразу уходит в маршрутизацию.
  • Если выключена и маршрутизация — используется модель, выбранная в сессии.

0 токенов

Быстрые ответы отвечают, не вызывая большую модель, — это чистая экономия токенов и времени на простых репликах.

Быстрые ответы

Быстрые ответы обрабатывают простые запросы — приветствия, «да/нет», классификацию задач — мгновенно.

Классификация задачи

Первый шаг — определить класс запроса:

Класс Примеры Что дальше
small_talk привет, спасибо, пока Готовый ответ
classify «почини баг», «напиши тесты», «что такое…» Определение намерения: вопрос, команда, ревью, фикс, тест
enum_decision да, нет, отменяю, планируй Выбор варианта: да/нет/подтвердить/отменить/режим
llm_task всё остальное Запрос уходит в маршрутизацию

Классификация опирается на встроенные словари приветствий, намерений и вариантов ответа (русский и английский). Если запрос не попал ни в один класс, он считается обычной задачей для модели.

Каскад моделей

Для трёх «быстрых» классов запускается каскад — следующая ступень включается, только если предыдущая не уверена:

  1. Правила — самый быстрый слой: сравнение со словарями, миллисекунды.
  2. Эмбеддинги — семантическая классификация: понимает смысл, даже если нужных слов в словаре нет.
  3. Микро-модель — маленькая локальная модель для структурированной классификации; используется редко.

Каждая ступень возвращает метку и уверенность (0–1). Если уверенность не ниже порога (по умолчанию 0.8), быстрые ответы дают готовый ответ. Иначе запрос уходит дальше.

Как работают эмбеддинги

Эмбеддинг-классификатор определяет намерение по смыслу, а не по словам:

  • Для каждой метки заранее готовится эталонный текст на языке сессии, который превращается в вектор — эмбеддинг.
  • Текст запроса превращается в вектор той же моделью, затем вычисляется косинусная близость с эталонами: 1 — почти идентичны, 0 — не связаны.
  • Побеждает метка с максимальной близостью. Если близость достаточная, метка принимается.

Настройка. В разделе «Быстрые ответы» есть блок «Embedding»: выбирается эмбеддинг-модель и провайдер. Если эмбеддинги недоступны, классификация работает по правилам, а сложные случаи уходят в fallback.

Маршрутизация

Маршрутизация решает, какой моделью отвечать на запросы, которые не обработали быстрые ответы.

Классификация запроса

Категория Сигналы Примеры
coding вызовы инструментов кода, слова «напиши», «исправь», «реализуй» «напиши функцию», «почини баг»
research слова «исследуй», «проанализируй», «почему», «объясни» «проанализируй архитектуру»
chat всё остальное обычный диалог

Это быстрый слой без обращения к модели.

Стратегии выбора модели

Стратегия Как работает Когда использовать
Контентная Категория запроса → модель из настроек (coding / chat / research) Разные модели под разные типы задач
По стоимости Оценка сложности → дешёвая или дорогая модель Экономия на простых запросах
Контентная + стоимость Сначала контентная; короткий chat-запрос → дешёвая модель Комбинированный подход
Авто Как контентная Универсальный вариант

Контентная стратегия ищет сопоставление «категория → провайдер/модель»: сначала в настройках сессии, затем в глобальной конфигурации, в конце — модель сессии по умолчанию.

Стратегия по стоимости оценивает сложность эвристикой:

  • короткий текст без вызовов инструментов — простая задача → дешёвая модель;
  • длинный текст или несколько вызовов инструментов — сложная задача → дорогая модель;
  • промежуточные случаи — по длине текста.

Контроль качества

После ответа модели может работать проверка качества:

  • слишком короткий ответ считается неуверенным;
  • если ответ не прошёл проверку, запрос пересылается на fallback-модель.

Так явно неудачные ответы перехватываются до показа пользователю — качество не проваливается на дешёвых моделях.

Примеры прохождения запросов

Запрос Путь Итог
«привет» small_talk мгновенный ответ
«да» enum_decision мгновенный ответ
«напиши тесты для функции sum» classify → намерение test мгновенный ответ
«объясни, как работает авторизация» classify не уверен → research ответ модели анализа
«проверь интеграцию с PostgreSQL» llm_task → coding ответ модели кодинга

Настройка

Настройка Где Назначение
Быстрые ответы вкл/выкл Настройки → Быстрые ответы Включить слой мгновенных ответов
Порог уверенности Настройки → Быстрые ответы Ниже порога — запрос уходит в fallback
Embedding-модель Настройки → Быстрые ответы → Embedding Семантическая классификация
Маршрутизация вкл/выкл Настройки → Маршрутизация Включить выбор модели
Стратегия Настройки → Маршрутизация content / cost / content+cost / auto
Модели под категории Настройки → Маршрутизация → Контентная coding / chat / research → модель
Контроль качества Настройки → Маршрутизация → Контроль качества fallback-модель и минимальная длина

Что дальше