Skip to content

Coach behavioral eval lifecycle: версионируемый набор поведенческих сценариев с порогом качества #528

Description

@rbctmz

Type

feature

Area

ai-coaching

Purpose

Чтобы у Coach появился измеряемый критерий «качество совета», а не только набор узких rule-гейтов. Сейчас качество LLM-рекомендации проверяется только косвенно: narrative-evidence-гейт ловит фактическое противоречие (readiness/HRV/trend), mutation/token-budget гейты ограничивают дугу, а drift-отчёт смотрит на факты решений. Ничего из этого не отвечает на вопрос «является ли рекомендация безопасной, точной, действенной и непротиворечивой» в целом.

По результату должен существовать версионируемый набор поведенческих eval-кейсов для Coach (по образцу services/bike_hr_tss_eval.py: holdout-сплит, метрики, вердикт pass/fail), прогоняемый непрерывно, с pass-rate и порогом качества, и правилом «production failure → новый eval-кейс». Это закрывает крупнейший gap AI-native SDLC-подхода (stage Test/Deploy) в контексте Coach.

Non-goals

  • НЕ немедленный regex-блокировщик одной фразы («запретить говорить "увеличь нагрузку" при плохом восстановлении»). Это анти-паттерн: ловит конкретное выражение, а не класс проблем, и ничего не говорит о качестве ответа в целом. Такой quick-fix сознательно исключён из скоупа.
  • Не автоматическая реализация фиксов по провалившимся eval-кейсам (без человеческого triage).
  • Не production control bands / observability — это отдельный контур.

Context (уже воспроизведённый falsifying check)

Сценарий: реальный снапшот с плохим восстановлением (readiness низкий, HRV подавлен, TSB глубоко отрицательный) + Coach генерирует рекомендацию «увеличить нагрузку / сегодня интервалы». Рекомендация проходит через существующие гейты, потому что «increase intensity» не является правилом-противоречием в narrative-гейте, а mutation/token-гейты это не оценивают. Итог: покрытие = claim-level fact-checker + ограничители, но НЕ поведенческий eval. Пробел реален и не дублирует существующее.

Proposed approach (эскиз, детали — в ExecPlan)

  1. Инвентаризация поведенческих свойств Coach (безопасность, точность, действенность, непротиворечивость, стиль/тон).
  2. Формат eval-кейса: вход (data snapshot + prompt/намерение) → ожидаемое качество (набор проверяемых свойств, не единственный «верный» текст). LLM-ответы не должны сравниваться со строкой — сравниваются свойства.
  3. Версионируемый реестр кейсов (tests/evals/coach/...), детерминированный прогон через реальный провайдер или Mock с зафиксированным контекстом.
  4. Метрики: pass-rate по свойствам, разбиение по классам сценариев, порог качества (например, ≥ N% + красная зона для критичных свойств).
  5. Непрерывный прогон в CI + правило «production failure → новый eval-кейс» в контур Maintain.

ExecPlan

to be created — docs/coach_behavioral_eval_lifecycle_execplan.md

Acceptance criteria

  • Given версионируемый реестр eval-кейсов Coach, when он прогоняется детерминированно, then выводится pass-rate по свойствам и общий вердикт (pass/fail) по порогу.
  • Given проваленный eval-кейс, when Coach выдаёт рекомендацию, нарушающую критичное свойство, then гейт возвращает fail и связывает с конкретным кейсом (не блокируя всю сборку без triage).
  • Given новый production-инцидент с качеством ответа Coach, when диагностика фиксирует паттерн, then существующий процесс может добавить eval-кейс в реестр (правило закрытия петли Maintain).
  • Anti-тест (должен остаться fail): снапшот с плохим восстановлением + «увеличить нагрузку» не должен молча проходить как «хороший совет».

Files in scope

  • tests/evals/coach/ — новый каталог с реестром и прогоном
  • services/coach_behavioral_eval.py — новый модуль (по аналогии с services/bike_hr_tss_eval.py)
  • .github/workflows/ci.yml — job непрерывного прогона evals
  • docs/coach_behavioral_eval_lifecycle_execplan.md — новый ExecPlan

Smoke baseline

Не регрессировать python -m pytest tests/smoke -q и -m "not live and not debug" tests/. Новые eval-кейсы — отдельный контур, не смешивать со smoke.

Dependencies

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions