# Normalizer v2 Spec ## Назначение `Normalizer v2` переводит слой нормализации с single-intent модели на decomposition-first: `raw message -> fragments + scope + flags -> deterministic routing in code` LLM в v2 не выдает финальное route-решение как источник истины. LLM возвращает структурированную семантику, а маршрут выбирается правилами в коде. ## Вход - Сырое сообщение пользователя (в т.ч. длинное, multi-intent, шумное). ## Выход - JSON по схеме `normalized_query_v2`. - Ключевые части: - `message_in_scope`, `scope_confidence` - `fragments[]` - `discarded_fragments[]` - `global_notes` ## Fragment Contract Каждый фрагмент содержит: - domain gating (`domain_relevance`, `business_scope`); - semantic hints (`entity_hints`, `account_hints`, `document_hints`, `register_hints`); - `time_scope`; - route-critical flags; - `candidate_labels` (multi-label, без жесткого single-intent); - `confidence`. ## Deterministic Routing Код применяет правила к `flags`: 1. `asks_for_exact_object_trace=true` -> `live_mcp_drilldown` 2. `asks_for_ranking_or_top=true` или `asks_for_period_summary=true` -> `batch_refresh_then_store` 3. `has_multi_entity_scope=true` и `asks_for_chain_explanation=true` -> `hybrid_store_plus_live` 4. `asks_for_rule_check=true` и нет causal-chain -> `store_feature_risk` 5. `asks_for_anomaly_scan=true` без heavy/causal -> `store_feature_risk` 6. fragment `out_of_scope` -> `no_route` 7. остальное in-scope -> `store_canonical` ## Совместимость - `v1` и `v2` поддерживаются параллельно. - Выбор схемы: - `promptVersion=normalizer_v2` (или `schemaVersion=v2`) -> `normalized_query_v2` - иначе -> `normalized_query_v1` ## UI-диагностика v2 Добавлены диагностические представления: - Fragment View - Scope View - Flags View - Route Simulation ## Ограничения этапа - Полноценный quality-eval v2 отдельно планируется (см. `reports/v2_pilot_eval_plan.md`). - Старый eval runner метрик `intent/route` ориентирован на v1 и не является основным приемочным контуром для v2.