Files
RAG_helper/docs/BACKLOG.md
T
AR 15 M4 a8f7e68795 feat(sprint8a): регрессия роутера в UI с выбором кейсов и кэшем
Оператор-настройщик после правки промпта _router нажимает «Прогнать выбранное»
на странице «Регрессия» и видит, что сломалось. Не CLI, не в обход
интерфейса — встроено в верхнюю навигацию рядом с Настройками.

Backend:
- Таблицы eval_runs / eval_run_cases (с is_pass) / eval_router_predictions
  (кэш text_hash + router_config_id → predicted_intent). Миграции
  k7e9d5c67h34 и l8f0e6d78i45.
- services/eval_run_service.py: start_router_run(text_hashes) запускает
  фоновую корутину через asyncio.create_task, фиксирует активную версию
  _router. Кэш привязан к версии: повторный прогон на той же версии —
  мгновенный, на новой — пересчитывается. compute_diff_vs_previous
  сравнивает с предыдущим прогоном на той же версии (новые fail / pass).
- API: POST /eval/runs (фон, body text_hashes), GET /eval/runs,
  GET /eval/runs/{id}, GET /eval/router-cases-with-status (все 1573 кейса
  + кэш на активной версии).

Frontend (static/regression.html — новая страница, ссылка добавлена в
шапки index/sandbox/settings/docs):
- Сворачиваемый блок «Выбор кейсов»: фильтр по intent, ввод диапазона
  (1-50, 200-300), кнопки «Все видимые», «Снять все», «Только без кэша»,
  «Только FAIL в кэше», «Снять кэшированные». Чекбокс в шапке.
- Таблица 1573 кейсов отсортирована по count desc: #, чекбокс, запрос,
  intent, частота, кэш (PASS / FAIL → predicted / —). Цветной фон строки
  по статусу кэша.
- Счётчик «выбрано N (новых: X, в кэше: Y)»; кнопка
  «Прогнать выбранное (X новых + Y из кэша)» — сразу видно реальный
  объём LLM-работы.
- Polling /eval/runs/{id} раз в 2 секунды, прогресс-бар, drill-down:
  все кейсы прогона + фильтр pass/fail + поиск + diff vs предыдущий
  (новые fail / новые pass).

docs/SPRINTS.md: Спринт 8 разбит на 8a ( закрыт), 8b (регрессия ответов
веток, ждёт базу кейсов от пользователя), 8c (handoff/resumable/loop/
guard/rag — позже).

docs/BACKLOG.md: новый файл для идей на потом. Записаны: просмотр
архивного графа без активации (из 7.7), варианты C (LLM-judge) и D
(эталон + embeddings) для регрессии веток в 8b.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 20:39:22 +05:00

2.9 KiB

Идеи на потом (бэклог)

Это не план с дедлайнами — список идей и улучшений, которые всплыли в работе, но решено отложить, чтобы не раздувать текущий спринт. Перед стартом нового спринта — пройтись по списку, что-то взять в скоуп.

Формат записи: краткое название → Зачем:Откуда пришло (контекст / коммит / Спринт). Если идея взята в работу — переносим в docs/SPRINTS.md и удаляем отсюда.


UI

Просмотр архивного графа шагов без активации

Зачем. Сейчас, чтобы увидеть содержимое архивного 6-шагового графа new_booking, его нужно сделать активным. Хочется кнопку «Открыть только для чтения» — посмотреть шаги архива, не переключая активный.

Откуда. Спринт 7.7 (коммит a79b6f9), обсуждение с пользователем 2026-05-02. Решено отложить до отдельного спринта.


Регрессия

LLM-judge для регрессии ответов веток (вариант C из 8b)

Зачем. Дополнительный способ pass/fail для свободно-текстовых ответов веток: отдельный LLM-вызов оценивает «вот вопрос, вот ответ — подходит ли по смыслу?» Прощает перефраз, в отличие от точного совпадения слов. Дороже (× ещё один LLM-вызов на кейс) и менее детерминирован.

Откуда. Обсуждение Спринта 8b 2026-05-02. На старт 8b берём только A (RAG) + B (keywords), C — на потом, если хрупкость keywords станет проблемой.

Эталонный ответ + embeddings (вариант D из 8b)

Зачем. Альтернатива LLM-judge: оператор пишет «правильный ответ» в кейсе, при прогоне считаем cosine similarity между фактическим ответом и эталоном. Pass если ≥ порога (например, 0.75). Дешевле LLM-judge (один embedding-вызов вместо LLM), но требует сочинять эталоны и плохо ловит фактические ошибки в цифрах/адресах.

Откуда. Обсуждение Спринта 8b 2026-05-02. Кандидат на 8c вместе с C, если A+B окажется недостаточно.