АДРЕСНЫЙ РЕЖИМ - ллм декомпоз

This commit is contained in:
2026-04-01 22:11:40 +03:00
parent 18e0f1364d
commit b2d32f869c
1540 changed files with 10464 additions and 1451 deletions
@@ -35,6 +35,21 @@
- `filter_extraction_audit.json`
- `resolver_ambiguity_cases.md`
## Subwave M1.5 — L0 Hybrid Router Stabilization
Цель: стабилизировать входную интерпретацию на шумном вводе без раздувания словарей.
- LLM-first decompose в строгий JSON-контракт;
- deterministic fallback (корни/подстроки, парсинг дат и счетов, шумоочистка);
- режим `shadow` (без влияния на финальный ответ) и сбор trace;
- переход в `soft-enable` только после прохождения регрессии.
Артефакты:
- `llm_router_shadow_report.json`
- `fallback_trigger_audit.md`
- `noisy_input_regression_results.md`
## Subwave M2 — Recipe + MCP Execution (Live-first)
Цель: связать intents с whitelist recipes и реальным MCP execution.
@@ -90,4 +105,5 @@ Acceptance gates:
## Что делаем сразу
- Сегодня стартуем с `M0` и `M1` (контракты + классификация/фильтры).
- После этого сразу поднимаем `M2` для 2 первых intents (`payables/receivables`).
- После этого закрываем `M1.5` (shadow L0 router + регрессия на шумных вопросах).
- И только затем поднимаем `M2` для 2 первых intents (`payables/receivables`).
+22 -2
View File
@@ -28,11 +28,11 @@
## C. Договоры
- какие договоры не закрыты
- что по договору 15/24
- что по договору 1-ПМ/2020
- есть ли долг по договору с Альфой
- какие документы связаны с этим договором
- покажи незакрытые договоры по контрагенту
- какие хвосты по договору №15/24 на дату
- какие хвосты по договору 1-ПМ/2020 на дату
- есть ли открытые позиции по договору
## D. Документы
@@ -79,7 +79,27 @@
- проверь, есть ли открытые позиции по договору
- проверь, есть ли документы по контрагенту за июль 2020
## I. Robustness (шум, опечатки, сленг)
- свк доки за 20год покеж
- свк 20 год - покажи доки плс
- что по свк за 2020 год выведи все доки плиз что есть
- какие доки есть по свк за 2021
- какие документы по контрагенту свк за все время
- покажи сальдо по 60.01 на 31.07.20
- остаток 60 на 2020.05
- какой остаток по счету 60 на 2020 май
- 60 счет остаток на май 2020 покажи
- свк за 2020 покаж все поступления
- свк июль 2020 какие доки есть
- доки по свк с 01.07.2020 по 31.07.2020
- покаж по договору 1-ПМ/2020 доки за 2020
- че висит по 60 счету на 31 07 2020
- бля епт покажи доки по свк за 20й
## Правило маршрутизации
- если вопрос = factual lookup -> `address_query`
- если вопрос = why/prove/causal diagnosis -> `deep_analysis`
@@ -41,15 +41,35 @@
Новый high-level flow:
1. Входящий вопрос.
2. Mode-classifier: `address_query` | `deep_analysis` | `unsupported`.
3. Если `address_query`:
2. L0 hybrid router: LLM decompose + deterministic fallback.
3. Mode-classifier: `address_query` | `deep_analysis` | `unsupported`.
4. Если `address_query`:
- resolve `address_intent`;
- extract+validate filters;
- select recipe;
- execute MCP (live-first);
- normalize result schema;
- return factual answer.
4. Если не `address_query`: текущий deep path без изменений.
5. Если не `address_query`: текущий deep path без изменений.
## 3.1) L0 Hybrid Router (stabilization layer)
Назначение: убрать хрупкость на шумном пользовательском вводе (опечатки, сленг, лишние слова), не раздувая словари.
Порядок работы:
1. Сначала запускаем LLM decompose в строгий JSON-контракт.
2. Если LLM дал пустой/невалидный/неиспользуемый фрагмент, включается короткий deterministic fallback:
- триггеры по корням/подстрокам (не giant словарь словоформ);
- парсинг дат/периодов/счетов;
- шумоочистка (служебные слова, междометия, мусорные хвосты).
3. Если и fallback не дал валидный результат, возвращаем `LIMITED_WITH_REASON`, без выдумывания фактов.
Ограничения:
- без company-specific словарей в runtime;
- без генерации SQL/1C-query в свободной форме;
- только интерпретация вопроса + передача в whitelist recipes.
## 4) Встраивание по слоям
@@ -58,6 +78,7 @@
Изменения:
- добавить `question_mode` и `address_intent` в normalizer contract;
- добавить L0 router contract (decompose output + fallback reason);
- в `routeHintAdapter` добавить address-query rule set до deep route discipline.
Рекомендуемые файлы:
@@ -131,6 +152,11 @@
- `rows_fetched`
- `rows_matched`
- `response_type`
- `llm_decomposition_attempted`
- `llm_decomposition_applied`
- `llm_decomposition_reason`
- `fallback_rule_hit`
- `sanitized_user_message`
## 5) Fallback Rules
@@ -160,9 +186,20 @@
1. `M0`: контракты (`question_mode`, `address_intent`, filter schema, recipe schema).
2. `M1`: classifier + resolver + validator (без MCP execution).
3. `M2`: MCP executor + 5 P0 recipe.
4. `M3`: factual composer + debug payload + basic tests.
5. `M4`: live rerun pack в `docs/ADDRESS/runs/...`.
3. `M1.5`: L0 hybrid router (LLM-first + deterministic fallback) в shadow mode.
4. `M2`: MCP executor + 5 P0 recipe.
5. `M3`: factual composer + debug payload + basic tests.
6. `M4`: live rerun pack в `docs/ADDRESS/runs/...`.
## 7.2) L0 rollout policy
1. `Shadow`: LLM decompose не влияет на ответ, только trace/audit.
2. `Soft-enable`: LLM decompose влияет на routing только для P0 intents.
3. `Full-enable`: LLM decompose + fallback включены для всего `address_query`.
Правило безопасности:
- любой сбой LLM должен откатываться в deterministic fallback, а не в random behavior.
## 7.1) Sprint B priority order (adapted to current reality)
@@ -191,3 +228,5 @@ Rationale:
- Address intents из P0 стабильно маршрутизируются в MCP/live-first lane.
- Factual-ответы по P0 сценариям возвращаются в предсказуемом формате.
- `false_factual_rate = 0`.
- Нет silent-degradation: при провале LLM есть explainable fallback reason.
- На шумном вводе нет ложного сдвига anchor (`counterparty`, `account`, `period`).