22 KiB
RAG
Состояние as is
RAG сейчас используется как общее ядро индексации и retrieval по коду и документации.
Основной storage - rag_session и многослойный индекс в БД.
Основные части
RagService- фасад индексации и retrievalDocsIndexingPipeline- индексация документацииCodeIndexingPipeline- индексация кодаRagRepository- persistence и retrievalIntentRouterV2- планирование retrieval: слои, фильтры, ограниченияRuntimeRetrievalAdapter- выполнение retrieval в runtime
Индексация
Индексация идет по двум направлениям:
DOCSCODE
На вход подается snapshot или changes. Для каждого файла выбирается подходящий pipeline. На выходе формируются документы по слоям и сохраняются в RAG-хранилище.
Структура БД
Все слои сохраняются в общую таблицу rag_chunks.
Общие поля по слоям
| Поле БД | Назначение |
|---|---|
rag_session_id |
идентификатор сессии индексации |
path |
путь исходного файла |
content |
основной текст записи для retrieval |
layer |
идентификатор слоя |
title |
короткий заголовок записи |
lang |
язык исходного содержимого, в основном для code-слоев |
repo_id |
идентификатор репозитория или проекта |
commit_sha |
версия кода или документов на момент индексации |
span_start, span_end |
диапазон строк в исходном файле, если он есть |
embedding |
векторное представление записи |
metadata_json |
структурированные атрибуты конкретного слоя |
Поля со смыслом слоя
Смысл конкретного слоя хранится в metadata_json.
Именно эти атрибуты определяют, какой объект был извлечен и как его интерпретировать в retrieval.
Домены и поддомены должны храниться в metadata_json явно.
Слои DOCS
D0_DOC_CHUNKS
Задача: Хранит текстовые фрагменты документации для retrieval по содержимому разделов.
Формирование: Документ сначала разбирается на frontmatter и body, затем body режется на секции через markdown chunker. Для каждой секции создается отдельная запись слоя. Нарезка идет по разделам документа. Только в fallback-сценарии, когда markdown-структура не найдена, используется нарезка по фиксированным текстовым чанкам.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
document_id |
идентификатор документа-источника | frontmatter.id, иначе путь файла |
type |
тип документа из frontmatter | frontmatter.type |
module |
модуль документа | frontmatter.module |
domain |
домен документа | frontmatter.domain |
subdomain |
поддомен документа | frontmatter.subdomain |
tags |
теги документа | frontmatter.tags |
section_path |
полный путь секции в иерархии заголовков | результат MarkdownDocChunker |
section_title |
заголовок текущей секции | результат MarkdownDocChunker |
order |
порядок секции внутри документа | результат MarkdownDocChunker |
doc_kind |
классификация документа, например readme, spec, runbook |
DocsClassifier.classify(path) |
source_path |
исходный путь документа | путь файла |
artifact_type |
тип артефакта, здесь DOCS |
константа builder |
Связанные классы:
DocsIndexingPipeline, DocsContentParser, MarkdownDocChunker, DocsDocumentBuilder
D1_DOCUMENT_CATALOG
Задача: Хранит карточку документа как точку входа в документ и его краткое описание.
Формирование:
Источник данных - frontmatter, fallback title, summary и doc kind, вычисленный классификатором документации.
Данные извлекаются структурированно по атрибутам.
В content попадает summary документа, а не склейка всех частей документа в сплошной текст.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
document_id |
идентификатор документа | frontmatter.id, иначе путь файла |
type |
тип документа из frontmatter | frontmatter.type |
name |
системное имя документа | frontmatter.name |
title |
человекочитаемый заголовок документа | frontmatter.title, иначе fallback title |
module |
модуль документа | frontmatter.module |
domain |
домен документа | frontmatter.domain |
subdomain |
поддомен документа | frontmatter.subdomain |
layer |
логический слой, указанный в frontmatter документа | frontmatter.layer |
status |
статус документа | frontmatter.status |
updated_at |
дата или отметка последнего обновления | frontmatter.updated_at |
tags |
теги документа | frontmatter.tags |
entities |
сущности, связанные с документом | frontmatter.entities |
parent |
родительский документ | frontmatter.parent |
children |
дочерние документы | frontmatter.children |
links |
ссылки на связанные материалы | frontmatter.links |
source_path |
исходный путь документа | путь файла |
summary_text |
краткое содержание документа | секция # Summary |
doc_kind |
классификация документа, например readme, spec, runbook |
DocsClassifier.classify(path) |
Связанные классы:
DocsIndexingPipeline, DocsFrontmatterParser, DocsClassifier, DocsContentParser, DocsDocumentBuilder
D2_FACT_INDEX
Задача:
Хранит атомарные факты в форме subject-predicate-object для точного retrieval по утверждениям.
Формирование: Факты извлекаются из frontmatter и секций документа, после чего каждая найденная тройка превращается в отдельную запись.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
fact_id |
идентификатор факта | вычисляется builder из содержимого факта и пути |
subject_id |
субъект факта | DocsFactExtractor |
predicate |
предикат или тип связи | DocsFactExtractor |
object |
значение или объект факта | DocsFactExtractor |
object_ref |
ссылка на объект, если она выделена отдельно | DocsFactExtractor |
anchor |
место в документе, откуда взят факт | DocsFactExtractor |
tags |
теги факта | DocsFactExtractor |
source_path |
исходный путь документа | путь файла |
Связанные классы:
DocsIndexingPipeline, DocsFactExtractor, DocsDocumentBuilder
D3_ENTITY_CATALOG
Задача: Хранит сущности, найденные в документации, чтобы искать документы и связи вокруг конкретной сущности.
Формирование: Сущности извлекаются из frontmatter документа, после чего каждая сущность сохраняется отдельной записью.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
entity_name |
имя сущности | DocsEntityExtractor |
document_id |
идентификатор документа, где найдена сущность | frontmatter.id, иначе путь файла |
document_type |
тип документа-источника | frontmatter.type |
module |
модуль документа | frontmatter.module |
domain |
домен документа | frontmatter.domain |
subdomain |
поддомен документа | frontmatter.subdomain |
tags |
теги документа или сущности | frontmatter.tags |
source_path |
исходный путь документа | путь файла |
Связанные классы:
DocsIndexingPipeline, DocsEntityExtractor, DocsDocumentBuilder
D4_WORKFLOW_INDEX
Задача: Хранит workflow и сценарии из документации для ответов про flow, шаги и жизненный цикл процесса.
Формирование:
Workflow извлекаются из detail sections документа и сохраняются как отдельные сценарии.
Извлечение идет из структуры Details -> ## Сценарий.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
workflow_id |
идентификатор сценария | вычисляется builder из названия, anchor и документа |
document_id |
идентификатор документа-источника | frontmatter.id, иначе путь файла |
workflow_name |
название сценария | блок Details -> ## Сценарий -> **Название** |
preconditions |
предусловия сценария | блок Details -> ## Сценарий -> **Предусловия** |
trigger |
триггер или событие запуска | блок Details -> ## Сценарий -> **Триггер** |
main_flow |
основной сценарий | блок Details -> ## Сценарий -> **Основной сценарий** |
alternative_flow |
альтернативные ветки | блок Details -> ## Сценарий -> **Альтернативный сценарий** |
error_handling |
обработка ошибок | блок Details -> ## Сценарий -> **Обработка ошибок** |
postconditions |
постусловия | блок Details -> ## Сценарий -> **Постусловие** |
source_path |
исходный путь документа | путь файла |
Связанные классы:
DocsIndexingPipeline, DocsWorkflowExtractor, DocsDocumentBuilder
D5_RELATION_GRAPH
Задача: Хранит связи между документами и сущностями документации для navigation и related docs retrieval.
Формирование: Связи извлекаются из frontmatter и сохраняются как отдельные relation edges.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
relation_id |
идентификатор связи | вычисляется builder из source, target, relation type и anchor |
source_id |
источник связи | frontmatter.id или source документа в extractor |
relation_type |
тип связи | DocsRelationExtractor |
target_id |
целевой объект связи | DocsRelationExtractor |
anchor |
место в документе, где обнаружена связь | DocsRelationExtractor |
source_path |
исходный путь документа | путь файла |
Связанные классы:
DocsIndexingPipeline, DocsRelationExtractor, DocsDocumentBuilder
D6_INTEGRATION_INDEX
Задача: Хранит прикладные интеграции компонента, API, UI, сущности или внешней системы. Используется для ответов на вопросы вида "какие интеграции есть у компонента".
Формирование:
Интеграции извлекаются из блока ## Integrations документа.
Одна интеграция должна превращаться в отдельную запись слоя.
Описание интеграции может быть развернутым, а структурированные атрибуты должны выделяться в словарь.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
integration_id |
идентификатор интеграции | вычисляется builder из source, target и anchor |
source_id |
идентификатор объекта, для которого описана интеграция | frontmatter.id документа-источника |
source_type |
тип исходного объекта | frontmatter.doc_type |
target |
целевой объект интеграции | блок ## Integrations |
target_type |
тип целевого объекта, например api, ui, entity, service, external_system |
блок ## Integrations |
direction |
направление интеграции | блок ## Integrations |
interaction |
тип взаимодействия | блок ## Integrations |
via |
технический канал интеграции | блок ## Integrations |
purpose |
назначение интеграции | блок ## Integrations |
details |
дополнительные атрибуты интеграции в виде словаря | блок ## Integrations |
domain |
домен документа | frontmatter.domain |
subdomain |
поддомен документа | frontmatter.subdomain |
source_path |
исходный путь документа | путь файла |
anchor |
место в документе, где описана интеграция | блок ## Integrations |
Связанные классы:
DocsIndexingPipeline, DocsIntegrationExtractor, DocsDocumentBuilder
Слои CODE
C0_SOURCE_CHUNKS
Задача: Хранит фрагменты исходного кода как базовый слой для цитирования, explain и точечной догрузки кода.
Формирование: Исходный файл режется на кодовые чанки, и для каждого чанка создается отдельная запись.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
chunk_index |
порядковый номер чанка в файле | индекс чанка при нарезке |
chunk_type |
тип чанка, например функция, класс или текстовый блок | CodeTextChunker |
module_or_unit |
модуль, к которому относится chunk | вычисляется из пути файла |
is_test |
признак тестового файла | is_test_path(path) |
Связанные классы:
CodeIndexingPipeline, CodeTextChunker, CodeTextDocumentBuilder
C1_SYMBOL_CATALOG
Задача: Хранит символы кода: классы, функции и методы. Используется для поиска по именам и структуре кода.
Формирование:
Символы извлекаются SymbolExtractor, и каждый символ сохраняется как отдельная запись.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
symbol_id |
идентификатор символа | SymbolExtractor |
qname |
полное квалифицированное имя | SymbolExtractor |
kind |
тип символа: класс, функция, метод | SymbolExtractor |
signature |
сигнатура символа | SymbolExtractor |
parent_symbol_id |
родительский символ | SymbolExtractor |
package_or_module |
модуль или пакет символа | вычисляется из пути файла |
is_test |
признак тестового файла | is_test_path(path) |
Связанные классы:
CodeIndexingPipeline, PythonAstParser, SymbolExtractor, SymbolDocumentBuilder
C2_DEPENDENCY_GRAPH
Задача: Хранит связи между символами кода: вызовы, импорты, наследование. Используется для анализа зависимостей и flow.
Формирование:
Связи строятся EdgeExtractor по AST и списку символов, после чего каждая связь сохраняется отдельной записью.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
edge_id |
идентификатор связи | EdgeExtractor |
edge_type |
тип связи: вызов, импорт, наследование | EdgeExtractor |
src_symbol_id |
исходный символ | EdgeExtractor |
src_qname |
полное имя исходного символа | EdgeExtractor |
dst_symbol_id |
целевой символ, если он разрешен | EdgeExtractor |
dst_ref |
текстовая ссылка на целевой символ | EdgeExtractor |
resolution |
статус разрешения связи | EdgeExtractor |
is_test |
признак тестового файла | is_test_path(path) |
Связанные классы:
CodeIndexingPipeline, EdgeExtractor, EdgeDocumentBuilder
C3_ENTRYPOINTS
Задача: Хранит точки входа приложения: HTTP routes, CLI commands и другие entrypoints.
Формирование: Детекторы ищут HTTP и CLI точки входа по символам файла, после чего каждый найденный entrypoint сохраняется отдельной записью.
Фиксация в БД:
Атрибут в metadata_json |
Описание | Источник |
|---|---|---|
entry_id |
идентификатор точки входа | detector entrypoint model |
entry_type |
тип точки входа | detector entrypoint model |
framework |
framework, в котором найдена точка входа | detector entrypoint model |
route_or_command |
route или команда | detector entrypoint model |
handler_symbol_id |
идентификатор обработчика | detector entrypoint model |
handler_symbol |
имя обработчика | detector entrypoint model |
declaring_symbol |
символ, в котором объявлен entrypoint | detector entrypoint model |
entrypoint_kind |
вид точки входа | detector entrypoint model |
http_method |
HTTP-метод | detector entrypoint model |
route_path |
путь маршрута | detector entrypoint model |
decorator_text |
текст декоратора или объявления | detector entrypoint model |
summary_text |
краткое описание точки входа | detector entrypoint model |
is_test |
признак тестового файла | is_test_path(path) |
lang_payload |
дополнительные данные детектора | detector metadata |
artifact_type |
тип артефакта, здесь CODE |
константа builder |
Связанные классы:
CodeIndexingPipeline, EntrypointDetectorRegistry, FastApiEntrypointDetector, FlaskEntrypointDetector, TyperClickEntrypointDetector, EntrypointDocumentBuilder
C4_SEMANTIC_ROLES
Задача: Слой объявлен в enum и retrieval-планах как слой семантических ролей кода.
Формирование:
Слой формируется на основе символов, связей, dataflow slices и execution traces.
В текущем runtime этот слой не используется как активный маршрут, так как домен CODE отключен.
Фиксация в БД:
Смысловые атрибуты слоя сохраняются в rag_chunks.metadata_json.
Точное краткое описание состава этих атрибутов в текущем документе пока не зафиксировано.
Связанные классы:
CodeIndexingPipeline, SemanticRoleBuilder, SemanticRoleDocumentBuilder