Initial import NDC_1C

This commit is contained in:
2026-03-26 10:38:25 +03:00
commit a162d77ef7
2943 changed files with 3615871 additions and 0 deletions
@@ -0,0 +1,82 @@
# Final Answer Composer Spec
## 1. Назначение
`answerComposer` преобразует нормализованные retrieval results в один user-facing ответ на русском языке.
Реализация:
- `backend/src/services/answerComposer.ts`
Вход:
- `userMessage`
- `routeSummary`
- `retrievalResults[]` (уже в unified schema)
Выход:
- `assistant_reply` (текст для пользователя)
- `reply_type`
- `fallback_type`
## 2. Приоритеты ответа
Порядок разрешения:
1. `out_of_scope` fallback.
2. `clarification` fallback (если factual результатов нет).
3. `error`, если есть только ошибки retrieval.
4. `empty`, если запрос валиден, но найдено 0 результатов.
5. `partial`, если есть полезные данные, но покрытие неполное.
6. `factual`, если есть корректные результаты без fallback-конфликта.
## 3. Типы ответов
### `factual`
- данные найдены;
- даётся краткий итог + компактная сводка.
### `empty`
- корректный запрос, но выдача пустая.
### `partial`
- часть вопроса обработана;
- часть недоступна/пустая/ошибочная.
### `clarification`
- нужно уточнение периода/документа/счёта/контрагента.
### `out_of_scope`
- запрос не относится к учётному контуру компании.
### `error`
- техническая ошибка retrieval.
## 4. Контентные правила
User-facing текст:
- только русский;
- без route names;
- без `trace`, `fallback_type`, `planned routes`;
- без служебного planner/debug языка.
Технические детали живут только в `debug` payload.
## 5. Форматирование factual-ответа
Composer умеет кратко форматировать несколько типов retrieval:
- `chain`: акцент на цепочки контрагент/документы/операции.
- `ranking`: топ/ранжирование.
- `list`: список записей (в т.ч. риск-объекты).
- `object/summary`: компактный факт-блок.
Если результатов много, выдаётся только верхняя часть (top-N), остальное остаётся в debug payload.