Files
agent/app/modules/rag_session/README.md
2026-02-27 21:28:09 +03:00

219 lines
9.4 KiB
Markdown
Raw 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.
# Модуль rag_session
## 1. Функции модуля
- Создание и обслуживание сессионного RAG индекса по загруженным пользователем файлам.
- Индексация снапшота и инкрементальных изменений.
- Хранение чанков, retrieval контекста, трекинг статуса index jobs.
- Публикация прогресса индексации через SSE.
## 2. Диаграмма классов и взаимосвязей
```mermaid
classDiagram
class RagModule
class RagService
class RagRepository
class RagSessionStore
class IndexJobStore
class IndexingOrchestrator
class TextChunker
class GigaChatEmbedder
class EventBus
RagModule --> RagService
RagModule --> RagRepository
RagModule --> RagSessionStore
RagModule --> IndexJobStore
RagModule --> IndexingOrchestrator
RagService --> RagRepository
RagService --> TextChunker
RagService --> GigaChatEmbedder
IndexingOrchestrator --> IndexJobStore
IndexingOrchestrator --> RagService
IndexingOrchestrator --> EventBus
```
## 3. Описание классов
- `RagModule`: composition-root для сессионного RAG и его API.
Методы: `__init__` — собирает сервисы индексации/retrieval; `public_router` — публикует внешние endpoint'ы; `internal_router` — публикует внутренние endpoint'ы.
- `RagService`: доменный сервис индексации и retrieval.
Методы: `index_snapshot` — индексирует полный набор файлов; `index_changes` — индексирует только изменения; `retrieve` — возвращает релевантные чанки по запросу.
- `RagRepository`: слой доступа к БД для сессий, джобов и чанков.
Методы: `ensure_tables` — создает/обновляет схему; `upsert_session/get_session/session_exists` — операции по сессиям; `create_job/update_job/get_job` — операции по задачам индексации; `replace_chunks/apply_changes/retrieve/fallback_chunks` — операции по chunk-данным.
- `RagSessionStore`: управление жизненным циклом `rag_session`.
Методы: `create` — создает новую сессию; `put` — upsert с внешним id; `get` — читает сессию.
- `IndexJobStore`: управление `index_job` на уровне приложения.
Методы: `create` — создает задачу индексации; `get` — читает задачу; `save` — обновляет статус/ошибку.
- `IndexingOrchestrator`: асинхронный оркестратор index-jobs.
Методы: `enqueue_snapshot` — ставит полную индексацию в очередь; `enqueue_changes` — ставит инкрементальную индексацию в очередь.
- `TextChunker`: разбивает текст файла на чанки для embedding.
Методы: `chunk` — возвращает список чанков заданного текста.
- `GigaChatEmbedder`: адаптер embeddings-модели.
Методы: `embed` — возвращает векторы для набора текстов.
- `EventBus`: доставка событий прогресса индексации.
Методы: `publish` — отправляет событие; `subscribe/unsubscribe` — управляет подписками SSE.
## 4. Сиквенс-диаграммы API
### POST /api/rag/sessions
Назначение: создает новую `rag_session` и запускает фоновую индексацию полного набора файлов.
```mermaid
sequenceDiagram
participant Router as RagModule.APIRouter
participant Sessions as RagSessionStore
participant Indexing as IndexingOrchestrator
Router->>Sessions: create(project_id)
Sessions-->>Router: rag_session_id
Router->>Indexing: enqueue_snapshot(rag_session_id, files)
Indexing-->>Router: index_job_id,status
```
### POST /api/rag/sessions/{rag_session_id}/changes
Назначение: ставит в очередь инкрементальную переиндексацию изменений для существующей `rag_session`.
```mermaid
sequenceDiagram
participant Router as RagModule.APIRouter
participant Sessions as RagSessionStore
participant Indexing as IndexingOrchestrator
Router->>Sessions: get(rag_session_id)
Sessions-->>Router: session
Router->>Indexing: enqueue_changes(rag_session_id, changed_files)
Indexing-->>Router: index_job_id,status
```
### GET /api/rag/sessions/{rag_session_id}/jobs/{index_job_id}
Назначение: возвращает состояние и статистику конкретной задачи индексации.
```mermaid
sequenceDiagram
participant Router as RagModule.APIRouter
participant Jobs as IndexJobStore
Router->>Jobs: get(index_job_id)
Jobs-->>Router: job_state
```
### GET /api/rag/sessions/{rag_session_id}/jobs/{index_job_id}/events
Назначение: дает SSE-поток событий прогресса по задаче индексации.
```mermaid
sequenceDiagram
participant Router as RagModule.APIRouter
participant Jobs as IndexJobStore
participant Events as EventBus
Router->>Jobs: get(index_job_id)
Router->>Events: subscribe(index_job_id, replay=True)
loop until terminal
Events-->>Router: index event
end
Router->>Events: unsubscribe(index_job_id)
```
### POST /api/index/snapshot (legacy)
Назначение: legacy-вход для полной индексации проекта с автоматическим созданием сессии по `project_id`.
```mermaid
sequenceDiagram
participant Router as LegacyAPIRouter
participant Sessions as RagSessionStore
participant Indexing as IndexingOrchestrator
Router->>Sessions: put(project_id, project_id)
Router->>Indexing: enqueue_snapshot(project_id, files)
Indexing-->>Router: index_job_id,status
```
### POST /api/index/changes (legacy)
Назначение: legacy-вход для инкрементальной индексации изменений по `project_id`.
```mermaid
sequenceDiagram
participant Router as LegacyAPIRouter
participant Sessions as RagSessionStore
participant Indexing as IndexingOrchestrator
Router->>Sessions: get(project_id)
alt missing
Router->>Sessions: put(project_id, project_id)
end
Router->>Indexing: enqueue_changes(project_id, changed_files)
Indexing-->>Router: index_job_id,status
```
### GET /api/index/jobs/{index_job_id} (legacy)
Назначение: legacy-чтение статуса index-job по `index_job_id`.
```mermaid
sequenceDiagram
participant Router as LegacyAPIRouter
participant Jobs as IndexJobStore
Router->>Jobs: get(index_job_id)
Jobs-->>Router: job_state
```
### GET /api/index/jobs/{index_job_id}/events (legacy)
Назначение: legacy-SSE поток событий по index-job.
```mermaid
sequenceDiagram
participant Router as LegacyAPIRouter
participant Jobs as IndexJobStore
participant Events as EventBus
Router->>Jobs: get(index_job_id)
Router->>Events: subscribe(index_job_id, replay=True)
loop until terminal
Events-->>Router: index event
end
Router->>Events: unsubscribe(index_job_id)
```
### POST /internal/rag/index/snapshot
Назначение: внутренний синхронный запуск полной индексации для сервисных сценариев.
```mermaid
sequenceDiagram
participant Router as InternalRagRouter
participant Sessions as RagSessionStore
participant RagService as RagService
Router->>Sessions: get(project_id)
alt missing
Router->>Sessions: put(project_id, project_id)
end
Router->>RagService: index_snapshot(project_id, files)
RagService-->>Router: indexed_files,failed_files
```
### POST /internal/rag/index/changes
Назначение: внутренний синхронный запуск индексации изменений.
```mermaid
sequenceDiagram
participant Router as InternalRagRouter
participant RagService as RagService
Router->>RagService: index_changes(project_id, changed_files)
RagService-->>Router: indexed_files,failed_files
```
### GET /internal/rag/index/jobs/{index_job_id}
Назначение: внутреннее получение статуса и ошибки index-job для сервисов оркестрации.
```mermaid
sequenceDiagram
participant Router as InternalRagRouter
participant Jobs as IndexJobStore
Router->>Jobs: get(index_job_id)
Jobs-->>Router: job_state
```
### POST /internal/rag/retrieve
Назначение: внутренний retrieval релевантных чанков из `rag_session` по текстовому запросу.
```mermaid
sequenceDiagram
participant Router as InternalRagRouter
participant RagService as RagService
participant RagRepo as RagRepository
Router->>RagService: retrieve(rag_session_id, query)
RagService->>RagRepo: retrieve/fallback_chunks
RagRepo-->>RagService: chunks
RagService-->>Router: items
```