Files
agent/v1_plan.md
2026-03-12 16:55:23 +03:00

377 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# v1.plan.md
## 1. Цель ближайшего этапа
На ближайшем этапе цель — не достраивать полного агента и не интегрировать решение в UI, а довести до зрелого состояния **изолированный code-first test pipeline**:
**user query -> IntentRouterV2 -> retrieval plan -> layered retrieval -> evidence gate -> LLM answer -> diagnostics**
Именно этот контур должен стать будущим ядром агента, которое позже заменит legacy `RouterService`.
---
## 2. Что считается результатом этапа
Этап можно считать успешным, когда:
- `IntentRouterV2` стабильно определяет `intent`, `sub_intent`, `keyword_hints`, `path_scope`, `layers`, `conversation_mode` и retrieval constraints;
- retrieval реально следует плану, заданному роутером;
- LLM получает контекст, собранный из retrieval, а не из побочных обходных механизмов;
- ответ не строится без достаточного evidence;
- диагностика тестов позволяет понять:
- что выбрал router;
- что извлек retrieval;
- чего не хватило;
- почему ответ хороший или плохой.
---
## 3. Что сейчас не делать
На текущем этапе не стоит:
- встраивать это сразу в UI;
- подключать docs retrieval как обязательную часть MVP;
- строить полный cross-domain runtime;
- пытаться довести сразу весь orchestration runtime;
- инвестировать много времени в `C6`, `D5`, `D6`;
- лечить legacy `RouterService`, кроме минимально необходимого для совместимости.
---
## 4. Приоритетный план работ
## 4.1. Итерация 1 — зафиксировать канонический test-first контур
### 4.1.1. Принять `IntentRouterV2` как единственную точку истины для тестового MVP
Именно `IntentRouterV2` должен определять:
- `domain`
- `intent`
- `sub_intent`
- `keyword_hints`
- `path_scope`
- `layers`
- `conversation_mode`
- retrieval constraints
### 4.1.2. Зафиксировать минимальный набор сценариев MVP-now
Для текущего этапа в качестве канонического набора сценариев следует оставить:
- `OPEN_FILE`
- `EXPLAIN`
- `FIND_TESTS`
- `FIND_ENTRYPOINTS`
- `GENERAL_QA` как fallback
### 4.1.3. Зафиксировать контракт тестового пайплайна
Нужно явно определить структуру следующих объектов:
- `RouterResult`
- `RetrievalRequest`
- `RetrievalResult`
- `EvidenceBundle`
- `AnswerSynthesisInput`
- `DiagnosticsReport`
Это нужно, чтобы тесты настраивали устойчивый контракт, а не размытый процесс.
---
## 4.2. Итерация 2 — связать router и retrieval
### 4.2.1. Сделать retrieval adapter под контракт роутера
Output `IntentRouterV2` должен напрямую превращаться в retrieval plan.
Примеры:
- `OPEN_FILE`
- path-priority retrieval
- `C0_SOURCE_CHUNKS`
- `EXPLAIN`
- symbol-first retrieval
- `C1 + C0 + C2`, optionally `C3`
- `FIND_TESTS`
- target symbol / path
- lightweight `C5-lite`
- `FIND_ENTRYPOINTS`
- `C3_ENTRYPOINTS`
- `GENERAL_QA`
- ограниченный broad retrieval без агрессивных допущений
### 4.2.2. Убрать разрыв между индексатором и retrieval runtime
Нужна надежная связка:
**index data -> retrieval gateway -> normalized retrieval output**
Retrieval должен стать нормальной runtime-функцией, а не только наличием индексов и отдельных explain-механизмов.
### 4.2.3. Ввести единый формат retrieval output
Нужен единый формат, в который складываются найденные артефакты:
- symbols
- chunks
- relations
- entrypoints
- tests
- diagnostics per layer
Это станет основой для `EvidenceBundle`.
---
## 4.3. Итерация 3 — перенести evidence-first логику в общий test pipeline
### 4.3.1. Сделать общий evidence gate
Для каждого sub-intent нужно определить minimum evidence.
#### `OPEN_FILE`
- найден path или очень сильный lexical hit;
- есть хотя бы 12 relevant chunks.
#### `EXPLAIN`
- найден целевой symbol или уверенный target fragment;
- есть минимальное число code chunks;
- есть хотя бы базовые relations или surrounding context.
#### `FIND_TESTS`
- найден target symbol/file;
- найден хотя бы один reliable candidate test.
#### `FIND_ENTRYPOINTS`
- найден хотя бы один candidate entrypoint.
#### `GENERAL_QA`
- найден хоть какой-то устойчивый контекст;
- иначе ответ должен честно говорить о слабом evidence.
### 4.3.2. Запретить уверенный ответ без опоры
Если minimum evidence не выполнен, система должна:
- либо честно деградировать;
- либо выдать частичный ответ;
- либо явно сообщить, каких данных не хватает.
---
## 4.4. Итерация 4 — унифицировать сборку контекста для LLM
### 4.4.1. Ввести единый `EvidenceBundle`
LLM должна получать структурированный пакет:
- target intent / sub-intent
- target symbol / path
- relevant code chunks
- retrieved relations
- entrypoints if any
- test evidence if any
- retrieval diagnostics summary
- evidence sufficiency flags
### 4.4.2. Разделить fast context и deep context
#### Fast context
Короткая выжимка:
- target symbol
- file
- short relations summary
- top evidence
#### Deep context
Полные chunks, расширенные relations и supporting fragments.
### 4.4.3. Стандартизировать prompt contract
Для каждого sub-intent нужен понятный режим ответа:
- открыть;
- объяснить;
- найти тесты;
- найти точки входа;
- общий fallback.
LLM должна понимать:
- какой тип ответа нужен;
- насколько evidence полон;
- можно ли делать выводы;
- где надо явно отметить неопределенность.
---
## 4.5. Итерация 5 — довести диагностику до рабочего инструмента настройки
### 4.5.1. Разделить диагностику на 2 уровня
#### Уровень 1 — Human-readable summary
Коротко:
- intent выбран правильно / нет;
- target найден / нет;
- retrieval успешен / нет;
- evidence достаточен / нет;
- ответ надежный / частичный / слабый.
#### Уровень 2 — Detailed diagnostics
Подробно:
- router fields;
- layer-by-layer retrieval;
- empty / failed layers;
- ranking decisions;
- evidence gate results;
- context assembly details.
### 4.5.2. Добавить явные failure reasons
Рекомендуемый минимальный набор:
- `router_low_confidence`
- `target_symbol_not_found`
- `path_scope_empty`
- `layer_c1_empty`
- `layer_c2_empty`
- `test_mapping_not_found`
- `insufficient_code_evidence`
---
## 5. Как трактовать RAG-план на текущем этапе
## 5.1. Что оставить как целевой план
Целевую карту слоев оставляем без изменений:
- `C0C6`
- `D0D6`
Она остается правильной как target architecture.
## 5.2. Что считать MVP-now
Для текущего этапа обязательны:
- `C0_SOURCE_CHUNKS`
- `C1_SYMBOL_CATALOG`
- `C2_SYMBOL_RELATIONS`
- `C3_ENTRYPOINTS`
И в облегченном виде:
- `C5_TEST_MAPPINGS_LITE`
Пока не делать блокирующими:
- `C4_EXECUTION_PATHS`
- `C6_CODE_FACTS`
- весь docs runtime
## 5.3. Что считать следующим этапом
После стабилизации code-first MVP:
- подключение docs retrieval;
- использование D-layers в runtime;
- docs-from-code generation;
- cross-domain linking.
---
## 6. Как строить тестовый контур
## 6.1. Router tests
Проверяют только:
- intent
- sub_intent
- layers
- keyword_hints
- path_scope
- confidence / fallback behavior
## 6.2. Retrieval tests
Проверяют:
- что retrieval реально использует router output;
- какие слои сработали;
- что извлечено;
- нет ли шума от тестов;
- не пропал ли основной код.
## 6.3. Evidence gate tests
Проверяют:
- достаточен ли evidence;
- правильно ли система деградирует;
- не отвечает ли уверенно при слабой опоре.
## 6.4. Answer quality tests
Проверяют финальный ответ LLM:
- есть ли опора в коде;
- нет ли лишних догадок;
- хватает ли связности;
- соответствует ли ответ типу вопроса.
---
## 7. Что скорректировать в README / архитектурном плане
В README нужно явно разделить:
### 7.1. Target Architecture
Полная целевая система.
### 7.2. MVP-now
Изолированный test-first контур для `CODE_QA`, который:
- не зависит от UI;
- не зависит от full runtime orchestration;
- нацелен на доводку `IntentRouterV2` + retrieval + evidence + LLM answers.
---
## 8. Самые важные изменения в реализации прямо сейчас
Приоритет:
### P1
Сделать `IntentRouterV2` центром тестового MVP.
### P2
Связать router output с реальным layered retrieval.
### P3
Ввести единый `EvidenceBundle`.
### P4
Сделать общий evidence gate для всего test pipeline.
### P5
Привести диагностику к форме, удобной для настройки через тесты.
### P6
Добавить `C5-lite` для `FIND_TESTS`.
---
## 9. Итоговая формулировка ближайшей цели
> Довести до зрелости изолированный code-first test pipeline на базе `IntentRouterV2`, в котором роутер управляет retrieval, retrieval формирует evidence bundle, evidence gate контролирует достаточность опоры, а LLM отвечает строго на основе извлеченного контекста и прозрачной диагностики.