Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
17 KiB
| layout | title | parent |
|---|---|---|
| default | Потоки извлечения данных | Russian (Beta) |
Потоки извлечения данных
Beta Translation: This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
Этот документ описывает, как данные передаются через конвейер извлечения данных TrustGraph, начиная с отправки документов и заканчивая хранением в хранилищах знаний.
Обзор
┌──────────┐ ┌─────────────┐ ┌─────────┐ ┌────────────────────┐
│ Librarian│────▶│ PDF Decoder │────▶│ Chunker │────▶│ Knowledge │
│ │ │ (PDF only) │ │ │ │ Extraction │
│ │────────────────────────▶│ │ │ │
└──────────┘ └─────────────┘ └─────────┘ └────────────────────┘
│ │
│ ├──▶ Triples
│ ├──▶ Entity Contexts
│ └──▶ Rows
│
└──▶ Document Embeddings
Хранение контента
Blob-хранилище (S3/Minio)
Содержимое документов хранится в блочном хранилище, совместимом с S3:
Формат пути: doc/{object_id}, где object_id - это UUID
Все типы документов хранятся здесь: исходные документы, страницы, фрагменты
Хранилище метаданных (Cassandra)
Метаданные документов, хранящиеся в Cassandra, включают:
Идентификатор документа, заголовок, тип (MIME-тип)
Ссылку object_id на блочное хранилище
Ссылку parent_id для дочерних документов (страниц, фрагментов)
Тип document_type: "source", "page", "chunk", "answer"
Порог для встроенных данных и потоковой передачи
Передача контента использует стратегию, основанную на размере:
< 2 МБ: Контент включается непосредственно в сообщение (в кодировке base64)
≥ 2 МБ: Отправляется только document_id; процессор извлекает данные через API librarian
Этап 1: Отправка документа (Librarian)
Точка входа
Документы поступают в систему через операцию add-document librarian:
- Контент загружается в блочное хранилище
- Создается запись метаданных в Cassandra
- Возвращается идентификатор документа
Запуск извлечения
Операция add-processing запускает извлечение:
Указывает document_id, flow (идентификатор конвейера), collection (целевое хранилище)
Операция load_document() librarian извлекает контент и публикует его в очередь ввода конвейера
Схема: Document
Document
├── metadata: Metadata
│ ├── id: str # Document identifier
│ ├── user: str # Tenant/user ID
│ ├── collection: str # Target collection
│ └── metadata: list[Triple] # (largely unused, historical)
├── data: bytes # PDF content (base64, if inline)
└── document_id: str # Librarian reference (if streaming)
Маршрутизация: Основана на поле kind:
application/pdf → очередь document-load → Декодер PDF
text/plain → очередь text-load → Разделитель (Chunker)
Этап 2: Декодер PDF
Преобразует документы PDF в текстовые страницы.
Процесс
- Получение содержимого (встроенное
dataили черезdocument_idот библиотекаря) - Извлечение страниц с использованием PyPDF
- Для каждой страницы:
Сохранение как дочерний документ в библиотеке (
{doc_id}/p{page_num}) Отправка информации о происхождении (страница получена из документа) Передача разделителю (chunker)
Схема: TextDocument
TextDocument
├── metadata: Metadata
│ ├── id: str # Page URI (e.g., https://trustgraph.ai/doc/xxx/p1)
│ ├── user: str
│ ├── collection: str
│ └── metadata: list[Triple]
├── text: bytes # Page text content (if inline)
└── document_id: str # Librarian reference (e.g., "doc123/p1")
Этап 3: Разделение на фрагменты
Разделяет текст на фрагменты заданного размера.
Параметры (настраиваются в процессе выполнения)
chunk_size: Целевой размер фрагмента в символах (по умолчанию: 2000)
chunk_overlap: Перекрытие между фрагментами (по умолчанию: 100)
Процесс
- Получение содержимого текста (встроенного или через библиотеку)
- Разделение с использованием рекурсивного разделителя символов
- Для каждого фрагмента:
Сохранение как дочерний документ в библиотеке (
{parent_id}/c{index}) Вывод информации о происхождении (фрагмент получен из страницы/документа) Передача на этапы обработки извлечения
Схема: Фрагмент
Chunk
├── metadata: Metadata
│ ├── id: str # Chunk URI
│ ├── user: str
│ ├── collection: str
│ └── metadata: list[Triple]
├── chunk: bytes # Chunk text content
└── document_id: str # Librarian chunk ID (e.g., "doc123/p1/c3")
Иерархия идентификаторов документов
Дочерние документы кодируют свою родословную в идентификаторе:
Источник: doc123
Страница: doc123/p5
Часть страницы: doc123/p5/c2
Часть текста: doc123/c2
Этап 4: Извлечение знаний
Доступно несколько шаблонов извлечения, выбираемых конфигурацией потока.
Шаблон A: Базовый GraphRAG
Два параллельных процессора:
kg-extract-definitions Вход: Часть текста Выход: Тройки (определения сущностей), Контексты сущностей Извлекает: метки сущностей, определения
kg-extract-relationships Вход: Часть текста Выход: Тройки (отношения), Контексты сущностей Извлекает: отношения субъект-предикат-объект
Шаблон B: Основанный на онтологии (kg-extract-ontology)
Вход: Часть текста Выход: Тройки, Контексты сущностей Использует настроенную онтологию для управления извлечением
Шаблон C: Основанный на агентах (kg-extract-agent)
Вход: Часть текста Выход: Тройки, Контексты сущностей Использует агентную платформу для извлечения
Шаблон D: Извлечение строк (kg-extract-rows)
Вход: Часть текста Выход: Строки (структурированные данные, а не тройки) Использует определение схемы для извлечения структурированных записей
Схема: Тройки
Triples
├── metadata: Metadata
│ ├── id: str
│ ├── user: str
│ ├── collection: str
│ └── metadata: list[Triple] # (set to [] by extractors)
└── triples: list[Triple]
└── Triple
├── s: Term # Subject
├── p: Term # Predicate
├── o: Term # Object
└── g: str | None # Named graph
Схема: EntityContexts
EntityContexts
├── metadata: Metadata
└── entities: list[EntityContext]
└── EntityContext
├── entity: Term # Entity identifier (IRI)
├── context: str # Textual description for embedding
└── chunk_id: str # Source chunk ID (provenance)
Схема: Строки
Rows
├── metadata: Metadata
├── row_schema: RowSchema
│ ├── name: str
│ ├── description: str
│ └── fields: list[Field]
└── rows: list[dict[str, str]] # Extracted records
Этап 5: Генерация векторных представлений (эмбеддингов)
Векторные представления графа
Преобразует контексты сущностей в векторные представления.
Процесс:
- Получение контекстов сущностей (EntityContexts)
- Вызов сервиса генерации векторных представлений с текстом контекста
- Вывод векторных представлений графа (отображение сущности во вектор)
Схема: Векторные представления графа (GraphEmbeddings)
GraphEmbeddings
├── metadata: Metadata
└── entities: list[EntityEmbeddings]
└── EntityEmbeddings
├── entity: Term # Entity identifier
├── vector: list[float] # Embedding vector
└── chunk_id: str # Source chunk (provenance)
Векторные представления документов
Преобразует текстовые фрагменты непосредственно в векторные представления.
Процесс:
- Получение фрагмента текста
- Вызов сервиса векторизации с текстом фрагмента
- Вывод векторного представления документа
Схема: Векторное представление документа
DocumentEmbeddings
├── metadata: Metadata
└── chunks: list[ChunkEmbeddings]
└── ChunkEmbeddings
├── chunk_id: str # Chunk identifier
└── vector: list[float] # Embedding vector
Встраивания строк
Преобразует поля индекса строк в векторные представления.
Процесс:
- Получение строк
- Встраивание настроенных полей индекса
- Вывод в хранилище векторов строк
Этап 6: Хранение
Тройной магазин
Получает: Тройки
Хранение: Cassandra (таблицы, ориентированные на сущности)
Именованные графы разделяют основные знания от информации об источнике:
"" (по умолчанию): Факты основных знаний
urn:graph:source: Информация об источнике извлечения
urn:graph:retrieval: Объяснимость во время запроса
Хранилище векторов (Встраивания графов)
Получает: Встраивания графов Хранение: Qdrant, Milvus или Pinecone Индексируется по: IRI сущности Метаданные: chunk_id для информации об источнике
Хранилище векторов (Встраивания документов)
Получает: Встраивания документов Хранение: Qdrant, Milvus или Pinecone Индексируется по: chunk_id
Хранилище строк
Получает: Строки Хранение: Cassandra Структура таблицы, определяемая схемой
Хранилище векторов строк
Получает: Встраивания строк Хранение: Векторная база данных Индексируется по: полям индекса строк
Анализ полей метаданных
Активно используемые поля
| Поле | Использование |
|---|---|
metadata.id |
Идентификатор документа/фрагмента, ведение журнала, информация об источнике |
metadata.user |
Многопользовательский режим, маршрутизация хранения |
metadata.collection |
Выбор целевой коллекции |
document_id |
Ссылка на библиотекаря, связывание с информацией об источнике |
chunk_id |
Отслеживание информации об источнике через конвейер |
<<<<<<< HEAD
Потенциально избыточные поля
| Поле | Статус |
|---|---|
metadata.metadata |
Устанавливается в [] всеми извлекателями; метаданные на уровне документа теперь обрабатываются библиотекарем при отправке |
=======
Удаленные поля
| Поле | Статус |
|---|---|
metadata.metadata |
Удалено из класса Metadata. Тройки метаданных на уровне документа теперь напрямую выдаются библиотекарем в тройной магазин при отправке, а не передаются через конвейер извлечения. |
e3bcbf73 (The metadata field (list of triples) in the pipeline Metadata class)
Шаблон полей байтов
Все поля содержимого (data, text, chunk) являются bytes, но немедленно декодируются в строки UTF-8 всеми процессорами. Ни один процессор не использует необработанные байты.
Конфигурация потока
Потоки определяются внешне и предоставляются библиотекарию через сервис конфигурации. Каждый поток определяет:
Входные очереди (text-load, document-load)
Цепочка процессоров
Параметры (размер фрагмента, метод извлечения и т. д.)
Пример шаблонов потоков:
pdf-graphrag: PDF → Decoder → Chunker → Definitions + Relationships → Embeddings
text-graphrag: Text → Chunker → Definitions + Relationships → Embeddings
pdf-ontology: PDF → Decoder → Chunker → Ontology Extraction → Embeddings
text-rows: Text → Chunker → Row Extraction → Row Store