Маршрутизация и быстрые ответы¶
Synth обрабатывает каждый запрос в два слоя: сначала быстрые ответы — мгновенный ответ на простые запросы без вызова большой модели, затем маршрутизация — автоматический выбор модели для всего остального. Оба слоя настраиваются в интерфейсе.
Общий поток запроса¶
Запрос пользователя
│
▼
┌─ Быстрые ответы ───────────────────┐
│ Классификация → каскад моделей │
│ уверены? ───── да → готовый ответ │
│ нет ───────── fallback │
└───────────────┬────────────────────┘
│
▼
┌─ Маршрутизация ────────────────────┐
│ Классификация → выбор модели │
└───────────────┬────────────────────┘
│
▼
LLM
- Если быстрые ответы выключены — запрос сразу уходит в маршрутизацию.
- Если выключена и маршрутизация — используется модель, выбранная в сессии.
0 токенов
Быстрые ответы отвечают, не вызывая большую модель, — это чистая экономия токенов и времени на простых репликах.
Быстрые ответы¶
Быстрые ответы обрабатывают простые запросы — приветствия, «да/нет», классификацию задач — мгновенно.
Классификация задачи¶
Первый шаг — определить класс запроса:
| Класс | Примеры | Что дальше |
|---|---|---|
| small_talk | привет, спасибо, пока | Готовый ответ |
| classify | «почини баг», «напиши тесты», «что такое…» | Определение намерения: вопрос, команда, ревью, фикс, тест |
| enum_decision | да, нет, отменяю, планируй | Выбор варианта: да/нет/подтвердить/отменить/режим |
| llm_task | всё остальное | Запрос уходит в маршрутизацию |
Классификация опирается на встроенные словари приветствий, намерений и вариантов ответа (русский и английский). Если запрос не попал ни в один класс, он считается обычной задачей для модели.
Каскад моделей¶
Для трёх «быстрых» классов запускается каскад — следующая ступень включается, только если предыдущая не уверена:
- Правила — самый быстрый слой: сравнение со словарями, миллисекунды.
- Эмбеддинги — семантическая классификация: понимает смысл, даже если нужных слов в словаре нет.
- Микро-модель — маленькая локальная модель для структурированной классификации; используется редко.
Каждая ступень возвращает метку и уверенность (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-модель и минимальная длина |