Ir para o conteúdo

Integração com Bancos Vetoriais e RAG

Os arquivos Markdown gerados pelo comando leai compile foram especificamente desenhados para servir de base de conhecimento para sistemas de RAG (Retrieval-Augmented Generation).


💎 Anatomia de um Documento Otimizado para RAG

Cada arquivo gerado em ./docs/<SCHEMA>/ possui a seguinte estrutura:

---
schema: ERGON
table: TB_FUNCIONARIOS
type: TABLE
columns: 14
primary_key: [ID_FUNC]
foreign_keys:
  - column: ID_SETOR
    references: TB_SETORES(ID)
tags:
  - recursos-humanos
  - folha-pagamento
---

# Tabela: TB_FUNCIONARIOS

Armazena o registro de empregados ativos, dados contratuais e vínculos setoriais.

## Colunas
...

Por que esse formato é ideal para embeddings?

  • YAML Frontmatter: Permite alimentar os metadados do documento no banco vetorial (metadata={"schema": "ERGON", "type": "TABLE"}).
  • Filtros por Metadados: Você pode consultar a base vetorial aplicando filtros exatos (where={"schema": "FINANCEIRO"}) antes da busca por similaridade semântica.
  • Hierarquia Limpa: Sessões bem delimitadas (## Colunas, ## Relacionamentos, ## Triggers) facilitam o particionamento em chunks lógicos.

🚀 Exemplo de Ingestão com Python e LangChain / Chroma

from pathlib import Path
from langchain_community.document_loaders import DirectoryLoader, UnstructuredMarkdownLoader
from langchain_text_splitters import MarkdownHeaderTextSplitter
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

# 1. Carregar os documentos gerados pelo LEAI
headers_to_split_on = [
    ("#", "Entity"),
    ("##", "Section"),
]
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)

docs = []
for md_file in Path("./docs").glob("**/*.md"):
    text = md_file.read_text(encoding="utf-8")
    chunks = markdown_splitter.split_text(text)
    for chunk in chunks:
        chunk.metadata["source"] = str(md_file)
        docs.append(chunk)

# 2. Criar o índice vetorial no Chroma
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector_db = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db")

print(f"Sucesso! {len(docs)} chunks indexados para busca semântica.")

🗄️ Bancos Vetoriais Recomendados

  • pgvector (PostgreSQL): Ideal se sua equipe já possui infraestrutura PostgreSQL.
  • ChromaDB / Qdrant: Excelentes para uso local, rápido e embutido.
  • Pinecone / Weaviate: Ideais para pipelines serverless e escalabilidade massiva.