Related APIs: POST /api/rag/sessions, POST /api/rag/sessions/{rag_session_id}/changes, GET /api/rag/sessions/{rag_session_id}/jobs/{index_job_id}.
Related logic: snapshot indexing, change indexing, retrieval filtering.
Source of truth: src/app/modules/rag/session_store.py, таблица rag_sessions.
Назначение
RagSession определяет границу индекса для проекта. Все документы, задачи и retrieval-запросы внутри rag привязаны к этой сущности.
Контекст
Сессия используется и в новом API с UUID, и в legacy/internal режиме, где project_id может совпадать сrag_session_id. Через неё сервис восстанавливает repo_id, который затем участвует в кэшировании документов.
Роль в доменной модели
RagSession является владельцем набора индексированных документов и асинхронных IndexJob. Без неё нельзя безопасно выполнять reindex или retrieval, потому что именно она задаёт scope таблицы rag_chunks.
Атрибуты
attribute
type
required
description
constraints
rag_session_id
str
yes
уникальный идентификатор сессии
primary key, non-empty
project_id
str
yes
идентификатор проекта или workspace
non-empty
created_at
timestamp with time zone
yes
время создания записи в БД
default CURRENT_TIMESTAMP
Состояния и жизненный цикл
Основные состояния
created
active
reused via legacy/internal API
Переходы состояний
RagSessionStore.create(project_id) создаёт новую сессию с UUID.
RagSessionStore.put(rag_session_id, project_id) создаёт или обновляет сессию с заданным ключом.
После создания сессия используется для indexing и retrieval до тех пор, пока не будет заменена новым идентификатором на уровне вызывающего сервиса.
Инварианты и ограничения
project_id не должен быть пустым.
Для retrieval и indexing используется только один rag_session_id за операцию.
RagService._resolve_repo_id использует project_id этой сущности как repo_id для cache scope.
Связи с другими сущностями
entity
relation
description
IndexJob
one-to-many
одна сессия может иметь много задач индексации
RagDocument
one-to-many
все записи в rag_chunks привязаны к одной сессии
Использование в системе
Related API
POST /api/rag/sessions
POST /api/rag/sessions/{rag_session_id}/changes
GET /api/rag/sessions/{rag_session_id}/jobs/{index_job_id}
Related UI
Прямого UI в репозитории не обнаружено.
Related logic
logic-rag-indexing
logic-rag-retrieval
Related integrations
PostgreSQL таблица rag_sessions
Функциональные требования
Сессия должна создаваться до постановки snapshot job.
При change indexing запрос должен ссылаться на существующую сессию в новом публичном API.
Legacy/internal API может создавать запись с предсказуемым rag_session_id, равным project_id.
Нефункциональные требования
Audit / history
Время создания фиксируется в таблице rag_sessions.
Security
Отдельных прав доступа на уровне сущности внутри модуля нет.
Observability
Основная наблюдаемость сессии идёт через связанные IndexJob.