загрузка…
Роутинг длинных диалогов интернет-магазина

FRIDA vs Jev vs QWEN 3.6 35B?

Агент магазина на LangGraph перед каждым ответом решает, какой ветке отдать реплику клиента: приветствие, товары, заказы, доставка или прощание. Ошибка роутера — агент отвечает не про то. Роутеры-судьи FRIDA-Decisions и TypeSafe Jev принимают запрос одного формата, а промпт для него можно собрать двумя способами: подход frida и подход jev. Оба промпта прогоняем через обоих судей на одном датасете длинных диалогов с резкими сменами темы и сравниваем точность, устойчивость к дрейфу и скорость. LLM Qwen — модель другого класса: в сравнении подходов не участвует, у неё свой системный промпт, она показана как эталон.

Большие цифры — лучшая точность роутера среди прогонов на текущей версии датасета. Они обновляются сами, когда в data/runs.db появляется новый прогон.

Шаг 1 · что проверяем

Пять веток и реплики с историей

Каждая реплика клиента — отдельный тестовый пример: история диалога до неё, само сообщение и эталонная ветка. Роутер должен выбрать ветку по текущему сообщению, даже если до этого двадцать реплик шла другая тема.

Стратегии контекста

У FRIDA лимит 512 токенов state, а диалоги длинные. Поэтому сравниваем, какую часть истории класть в запрос. Каждая стратегия — отдельный прогон, датасет тот же.

СтратегияЧто уходит в модельЗачем
fullтекущее сообщение + вся историямаксимум контекста; FRIDA режет до 512 токенов сама
last_nтекущее + последние 8 репликкороткое окно свежего контекста
current_onlyтолько текущее сообщениебазовая линия: что вообще даёт история

State для промпта frida собирается раскладкой current_first: текущее сообщение первым, история от свежих реплик к старым. FRIDA режет state справа, поэтому при переполнении теряется самое давнее, а не классифицируемое сообщение.

Шаг 2 · одна реплика, один промпт

Что получает каждая модель

Запросы ниже собраны тем же кодом, что и в прогоне (router.py, llm_router.py), для выбранной реплики датасета. FRIDA и Jev получают один и тот же запрос по выбранному промпту (Jev — плюс поле model). LLM-эталон получает свой системный промпт и state сообщением пользователя.

Реплика
Промпт
Стратегия
Диалог до этой реплики
Шаг 3 · два способа спросить судью

Промпт FRIDA против промпта Jev

FRIDA и Jev принимают запрос одного формата (state + вопрос route типа choice), но «родной» способ его написать у них разный. Промпт frida — state строкой и короткие описания веток. Промпт jev написан по документации TypeSafe: state объектом с полями, инструкция-вопрос со ссылкой на поле, у веток what / not_for / examples.

Чем отличаются

Подход FRIDA · промпт fridaПодход Jev · промпт jev
stateодна строка с подписями «Клиент:» / «Оператор:»объект {current_message, history: [{speaker, text}]}
порядок историитекущее сообщение первым, история от свежих к старым — под обрезку справаистория по порядку, текущее сообщение — отдельное поле
инструкциякоманда: «Определи, к какой ветке…»вопрос со ссылкой на поле: «К какой теме относится current_message?»
веткистрока-перечень признаковчто это, чем это не является (границы с соседями), примеры
под кого писалсяFRIDA: текущее сообщение не теряется при обрезке до 512 токеновJev: по документации TypeSafe (State, Primitives, Choice)

Один и тот же запрос двумя способами

Реплика и стратегия — с предыдущего слайда:

Промпт frida

Промпт jev

Кому какой промпт подходит

Точность FRIDA и Jev на каждом промпте, по стратегиям; берётся последний полный прогон каждой комбинации.

Шаг 4 · результаты из runs.db

Один промпт — два судьи и эталон

Выберите подход к промпту и стратегию: для FRIDA и Jev берётся последний полный прогон этой комбинации (или идущий прямо сейчас). LLM-эталон от промпта не зависит — у него всегда свой системный промпт. Другой прогон можно выбрать в списке под моделью.

Точность

Доля верно выбранных веток; ошибки вызова не считаются.

Скорость одного вызова, мс

Сплошная часть — медиана, светлая — до p95.

Шаг 5 · где ошибаются

По веткам и при смене темы

Те же три прогона в разрезе: точность по каждой ветке, на репликах с резкой сменой темы (drift) против обычных и самые частые промахи.

Точность по веткам

Дрейф темы против обычных реплик

Частые промахи (ожидали → выбрали)

Шаг 6 · item в item

Реплика за репликой

Каждый квадрат — одна реплика датасета: зелёный — модель выбрала верную ветку, красный — промах, серый — прогона по этой реплике нет. Точка сверху — смена темы. Нажмите на квадрат, чтобы увидеть сообщение и ответы всех трёх моделей.

Показать

Выберите реплику на карте.

Шаг 7 · полная картина

Все комбинации на одном экране

Точность последнего полного прогона для каждой комбинации промпта и стратегии. Нажмите на строку, чтобы открыть её на слайде результатов.

Как обновить данные

Запустите прогон в соседнем терминале — страница подхватит его сама, по мере записи items:

  • python src/run_experiment.py run --router qwen --strategy full
  • python src/run_experiment.py run --router frida --strategy current_only
  • python src/run_experiment.py run --router jev --strategy full --prompt jev
Все прогоны в базе