8.4 KiB
8.4 KiB
Runtime Integration Plan (question_mode=address_query)
Дата: 2026-03-29
1) Цель интеграции
Добавить отдельный runtime-контур для быстрых адресных запросов к 1С через MCP, не ломая существующий Stage 4 deep-analysis path.
2) As-Is (подтверждено кодом)
Текущий assistant pipeline:
- normalizer -> route summary
- execution plan по deep-routes
assistantDataLayer.executeRouteRuntime(...)- admissibility / eligibility guards
- answer composer
Ключевые точки в текущем коде:
llm_normalizer/backend/src/services/assistantService.tsllm_normalizer/backend/src/services/routeHintAdapter.tsllm_normalizer/backend/src/services/assistantDataLayer.tsllm_normalizer/backend/src/services/assistantRuntimeGuards.tsllm_normalizer/backend/src/services/answerComposer.ts
2.1) Architecture Reference (mandatory)
Перед любыми изменениями address lane сверяться с:
address_architecture_contract_v1.md
Ключевая рамка:
Decompose -> Resolve -> Execute -> Compose- runtime не хранит company-specific словари
- company entities подтверждаются только через live resolver/MCP
3) To-Be: Separate Address Lane
Новый high-level flow:
- Входящий вопрос.
- L0 hybrid router: LLM decompose + deterministic fallback.
- Mode-classifier:
address_query|deep_analysis|unsupported. - Если
address_query:
- resolve
address_intent; - extract+validate filters;
- select recipe;
- execute MCP (live-first);
- normalize result schema;
- return factual answer.
- Если не
address_query: текущий deep path без изменений.
3.1) L0 Hybrid Router (stabilization layer)
Назначение: убрать хрупкость на шумном пользовательском вводе (опечатки, сленг, лишние слова), не раздувая словари.
Порядок работы:
- Сначала запускаем LLM decompose в строгий JSON-контракт.
- Если LLM дал пустой/невалидный/неиспользуемый фрагмент, включается короткий deterministic fallback:
- триггеры по корням/подстрокам (не giant словарь словоформ);
- парсинг дат/периодов/счетов;
- шумоочистка (служебные слова, междометия, мусорные хвосты).
- Если и fallback не дал валидный результат, возвращаем
LIMITED_WITH_REASON, без выдумывания фактов.
Ограничения:
- без company-specific словарей в runtime;
- без генерации SQL/1C-query в свободной форме;
- только интерпретация вопроса + передача в whitelist recipes.
4) Встраивание по слоям
4.1 Normalizer / Routing Layer
Изменения:
- добавить
question_modeиaddress_intentв normalizer contract; - добавить L0 router contract (decompose output + fallback reason);
- в
routeHintAdapterдобавить address-query rule set до deep route discipline.
Рекомендуемые файлы:
llm_normalizer/backend/src/types/normalizer.tsllm_normalizer/backend/src/services/routeHintAdapter.ts
4.2 Assistant Service Orchestration
Изменения:
- в
AssistantService.processMessage(...)добавить раннюю развилку поquestion_mode; - для
address_queryзапускать отдельный pipeline (без claim-bound deep-chain).
Рекомендуемый новый сервис:
llm_normalizer/backend/src/services/addressQueryService.ts
4.3 Intent + Filter Extraction
Новые компоненты:
addressIntentResolver.tsaddressFilterExtractor.tsaddressFilterValidator.ts
Выход контракта:
detected_modedetected_intentrequired_filtersresolved_filtersmissing_filters
4.4 Recipe Selection + MCP Execution
Новые компоненты:
addressRecipeCatalog.ts(статический whitelist recipes)addressRecipeSelector.tsaddressMcpExecutor.ts
Правила:
- только whitelist
recipe_id; - live-first; snapshot только explicit fallback;
- hard limit на строки и fixed sorting profile.
4.5 Result Materialization + Answer Composer
Новые компоненты:
addressResultMaterializer.tsaddressAnswerComposer.ts
Режимы ответа:
FACTUAL_LISTFACTUAL_SUMMARYLIMITED_WITH_REASON
4.6 Debug/Trace Contract
Минимальный debug блок для address lane:
detected_modedetected_intentextracted_filtersselected_recipemcp_call_statusrows_fetchedrows_matchedresponse_typellm_decomposition_attemptedllm_decomposition_appliedllm_decomposition_reasonfallback_rule_hitsanitized_user_message
5) Fallback Rules
- Если mode=
address_query, ноmissing_required_filters->LIMITED_WITH_REASON(без silent fallback в deep). - Если mode=
address_query, ноintentне поддержан ->LIMITED_WITH_REASONили controlled handoff в deep-path с явной пометкой. - Если live недоступен ->
LIMITED_WITH_REASON: live_unavailable.
5.1) Compound factual scope (M2.1 real status)
COMPOUND_FACTUAL_QUERYis currently detection-only.- Runtime does not execute multi-intent decomposition yet.
- Current behavior for compound prompts:
- one selected intent;
- one selected recipe;
- one factual/limited output block.
- Multi-step decomposition (
subquery planning -> per-subquery execution -> stitched composer) is planned for V1.1.
6) Safety Guardrails
- Никакого free-form query generation от LLM.
- Query только через recipe whitelist.
- Все параметры проходят типовую и value-валидацию.
- Account anchors — только validated account tokens (исключая date/amount pollution).
- Read-only MCP profile для address lane.
7) Minimal Implementation Queue
M0: контракты (question_mode,address_intent, filter schema, recipe schema).M1: classifier + resolver + validator (без MCP execution).M1.5: L0 hybrid router (LLM-first + deterministic fallback) в shadow mode.M2: MCP executor + 5 P0 recipe.M3: factual composer + debug payload + basic tests.M4: live rerun pack вdocs/ADDRESS/runs/....
7.2) L0 rollout policy
Shadow: LLM decompose не влияет на ответ, только trace/audit.Soft-enable: LLM decompose влияет на routing только для P0 intents.Full-enable: LLM decompose + fallback включены для всегоaddress_query.
Правило безопасности:
- любой сбой LLM должен откатываться в deterministic fallback, а не в random behavior.
7.1) Sprint B priority order (adapted to current reality)
documents_by_counterpartybank_operations_by_counterpartydocuments_forming_balancedocuments_by_contractbank_operations_by_contract
Rationale:
- start from anchors with higher resolver stability (counterparty first);
- unlock early positive evidence before contract-heavy variants;
- keep contract scenarios behind anchor-resolution hardening.
8) Out of Scope for V1
- Новый proof engine.
- Расширение доменов beyond P0 address intents.
- Полный redesign deep-stage routing.
- Автоматический свободный доступ к произвольным сущностям 1С.
9) Expected Acceptance (V1)
- Deep-analysis path не деградировал.
- Address intents из P0 стабильно маршрутизируются в MCP/live-first lane.
- Factual-ответы по P0 сценариям возвращаются в предсказуемом формате.
false_factual_rate = 0.- Нет silent-degradation: при провале LLM есть explainable fallback reason.
- На шумном вводе нет ложного сдвига anchor (
counterparty,account,period).