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.
12 KiB
| layout | title | parent |
|---|---|---|
| default | Fluxos de Extração | Portuguese (Beta) |
Fluxos de Extração
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.
Este documento descreve como os dados fluem através do pipeline de extração do TrustGraph, desde o envio do documento até ao armazenamento nos repositórios de conhecimento.
Visão Geral
┌──────────┐ ┌─────────────┐ ┌─────────┐ ┌────────────────────┐
│ Librarian│────▶│ PDF Decoder │────▶│ Chunker │────▶│ Knowledge │
│ │ │ (PDF only) │ │ │ │ Extraction │
│ │────────────────────────▶│ │ │ │
└──────────┘ └─────────────┘ └─────────┘ └────────────────────┘
│ │
│ ├──▶ Triples
│ ├──▶ Entity Contexts
│ └──▶ Rows
│
└──▶ Document Embeddings
Armazenamento de Conteúdo
Armazenamento de Blobs (S3/Minio)
O conteúdo do documento é armazenado em armazenamento de blobs compatível com S3:
Formato do caminho: doc/{object_id}, onde object_id é um UUID
Todos os tipos de documentos armazenados aqui: documentos de origem, páginas, trechos
Armazenamento de Metadados (Cassandra)
Os metadados do documento armazenados no Cassandra incluem:
ID do documento, título, tipo (MIME)
Referência ao armazenamento de blobs object_id
Referência parent_id para documentos filhos (páginas, trechos)
document_type: "source", "page", "chunk", "answer"
Limiar de Incorporação vs. Streaming
A transmissão de conteúdo usa uma estratégia baseada no tamanho:
< 2MB: O conteúdo é incluído inline na mensagem (codificado em base64)
≥ 2MB: Apenas document_id é enviado; o processador busca via API do bibliotecário
Etapa 1: Envio de Documento (Bibliotecário)
Ponto de Entrada
Os documentos entram no sistema através da operação add-document do bibliotecário:
- O conteúdo é carregado no armazenamento de blobs
- Um registro de metadados é criado no Cassandra
- Retorna o ID do documento
Disparando a Extração
A operação add-processing dispara a extração:
Especifica document_id, flow (ID do pipeline), collection (loja de destino)
A operação load_document() do bibliotecário busca o conteúdo e o publica na fila de entrada do fluxo
Esquema: Documento
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)
Roteamento: Baseado no campo kind:
application/pdf → fila document-load → Decodificador PDF
text/plain → fila text-load → Fragmentador
Etapa 2: Decodificador PDF
Converte documentos PDF em páginas de texto.
Processo
- Buscar conteúdo (inline
dataou viadocument_iddo bibliotecário) - Extrair páginas usando PyPDF
- Para cada página:
Salvar como documento filho no bibliotecário (
{doc_id}/p{page_num}) Emitir triplas de procedência (página derivada do documento) Enviar para o fragmentador
Esquema: 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")
Etapa 3: Divisor em Blocos
Divide o texto em blocos de tamanho configurado.
Parâmetros (configuráveis no fluxo)
chunk_size: Tamanho do bloco alvo em caracteres (padrão: 2000)
chunk_overlap: Sobreposição entre blocos (padrão: 100)
Processo
- Buscar o conteúdo do texto (inline ou via bibliotecário)
- Dividir usando o divisor de caracteres recursivo
- Para cada bloco:
Salvar como documento filho no bibliotecário (
{parent_id}/c{index}) Emitir triplas de procedência (bloco derivado da página/documento) Encaminhar para os processadores de extração
Esquema: Bloco
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")
Hierarquia de Identificação de Documentos
Documentos filhos codificam sua linhagem no ID:
Fonte: doc123
Página: doc123/p5
Trecho da página: doc123/p5/c2
Trecho de texto: doc123/c2
Etapa 4: Extração de Conhecimento
Múltiplos padrões de extração disponíveis, selecionados pela configuração do fluxo.
Padrão A: Basic GraphRAG
Dois processadores paralelos:
kg-extract-definitions Entrada: Trecho Saída: Triplas (definições de entidades), Contextos de Entidade Extrai: rótulos de entidades, definições
kg-extract-relationships Entrada: Trecho Saída: Triplas (relacionamentos), Contextos de Entidade Extrai: relações sujeito-predicado-objeto
Padrão B: Orientado a Ontologia (kg-extract-ontology)
Entrada: Trecho Saída: Triplas, Contextos de Entidade Utiliza uma ontologia configurada para guiar a extração
Padrão C: Baseado em Agente (kg-extract-agent)
Entrada: Trecho Saída: Triplas, Contextos de Entidade Utiliza um framework de agente para a extração
Padrão D: Extração de Linhas (kg-extract-rows)
Entrada: Trecho Saída: Linhas (dados estruturados, não triplas) Utiliza uma definição de esquema para extrair registros estruturados
Esquema: Triplas
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
Esquema: 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)
Esquema: Linhas
Rows
├── metadata: Metadata
├── row_schema: RowSchema
│ ├── name: str
│ ├── description: str
│ └── fields: list[Field]
└── rows: list[dict[str, str]] # Extracted records
Etapa 5: Geração de Embeddings
Embeddings de Grafos
Converte contextos de entidades em embeddings vetoriais.
Processo:
- Receber EntityContexts
- Chamar o serviço de embeddings com o texto do contexto
- Output GraphEmbeddings (mapeamento de entidade para vetor)
Esquema: GraphEmbeddings
GraphEmbeddings
├── metadata: Metadata
└── entities: list[EntityEmbeddings]
└── EntityEmbeddings
├── entity: Term # Entity identifier
├── vector: list[float] # Embedding vector
└── chunk_id: str # Source chunk (provenance)
Incorporações de Documentos
Converte texto em partes diretamente em incorporações vetoriais.
Processo:
- Receber Parte (Chunk)
- Chamar o serviço de incorporação com o texto da parte
- Saída: Incorporações de Documento (DocumentEmbeddings)
Esquema: Incorporações de Documento (DocumentEmbeddings)
DocumentEmbeddings
├── metadata: Metadata
└── chunks: list[ChunkEmbeddings]
└── ChunkEmbeddings
├── chunk_id: str # Chunk identifier
└── vector: list[float] # Embedding vector
Incorporações de Linhas
Converte campos de índice de linha em incorporações vetoriais.
Processo:
- Receber Linhas
- Incorporar campos de índice configurados
- Saída para o armazenamento vetorial de linhas
Fase 6: Armazenamento
Armazenamento Triplo
Recebe: Triplas
Armazenamento: Cassandra (tabelas centradas em entidades)
Grafos nomeados separam o conhecimento central da procedência:
"" (padrão): Fatos de conhecimento central
urn:graph:source: Procedência de extração
urn:graph:retrieval: Explicabilidade em tempo de consulta
Armazenamento Vetorial (Incorporações de Grafos)
Recebe: Incorporações de Grafos Armazenamento: Qdrant, Milvus ou Pinecone Indexado por: IRI da entidade Metadados: chunk_id para procedência
Armazenamento Vetorial (Incorporações de Documentos)
Recebe: Incorporações de Documentos Armazenamento: Qdrant, Milvus ou Pinecone Indexado por: chunk_id
Armazenamento de Linhas
Recebe: Linhas Armazenamento: Cassandra Estrutura de tabela orientada por esquema
Armazenamento Vetorial de Linhas
Recebe: Incorporações de linhas Armazenamento: Banco de dados vetorial Indexado por: campos de índice de linha
Análise de Campos de Metadados
Campos Ativamente Utilizados
| Campo | Uso |
|---|---|
metadata.id |
Identificador de documento/fragmento, registro, procedência |
metadata.user |
Multilocação, roteamento de armazenamento |
metadata.collection |
Seleção de coleção de destino |
document_id |
Referência do bibliotecário, vinculação de procedência |
chunk_id |
Rastreamento de procedência através do pipeline |
<<<<<<< HEAD
Campos Potencialmente Redundantes
| Campo | Status |
|---|---|
metadata.metadata |
Definido como [] por todos os extratores; metadados de nível de documento agora gerenciados pelo bibliotecário no momento do envio |
=======
Campos Removidos
| Campo | Status |
|---|---|
metadata.metadata |
Removido da classe Metadata. Triplas de metadados de nível de documento agora são emitidas diretamente pelo bibliotecário para o armazenamento de triplas no momento do envio, e não são transmitidas através do pipeline de extração. |
e3bcbf73 (The metadata field (list of triples) in the pipeline Metadata class)
Padrão de Campos de Bytes
Todos os campos de conteúdo (data, text, chunk) são bytes, mas são imediatamente decodificados para strings UTF-8 por todos os processadores. Nenhum processador usa bytes brutos.
Configuração do Fluxo
Os fluxos são definidos externamente e fornecidos ao bibliotecário através do serviço de configuração. Cada fluxo especifica:
Filas de entrada (text-load, document-load)
Cadeia de processadores
Parâmetros (tamanho do fragmento, método de extração, etc.)
Padrões de fluxo de exemplo:
pdf-graphrag: PDF → Decodificador → Fragmentador → Definições + Relacionamentos → Incorporações
text-graphrag: Texto → Fragmentador → Definições + Relacionamentos → Incorporações
pdf-ontology: PDF → Decodificador → Fragmentador → Extração de Ontologia → Incorporações
text-rows: Texto → Fragmentador → Extração de Linhas → Armazenamento de Linhas