cerebro-vip INEMA.CLUB
inícioINEMA.N8N

Tópico dedicado a Graph RAG — arquitetura, implementação prática e…

INEMA.N8N · 2026-01-04 · ~11 min · ver no Telegram ↗

INEMA

🧠 HACKS DE FLUXO – GRAPH RAG

🔹 1. Hacks de modelagem do grafo (antes de qualquer código)

✅ Hack 1 — Comece com 1 nível de relacionamento

  • ❌ Erro comum: tentar multi-hop (doc → faq → procedure → policy)
  • ✅ Melhor:

  • doc → faq

  • doc → procedure

80% do valor vem do primeiro salto


✅ Hack 2 — Relacionamentos no metadata primeiro

Antes de criar tabela edges:

{ "related_faq_ids": ["uuid1", "uuid2"], "related_procedure_ids": ["uuid3"] }

Depois, se escalar:

  • normaliza para uma tabela de edges

📌 Mais rápido para MVP.


✅ Hack 3 — Um grafo lógico > grafo formal

Você não precisa Neo4j.

Postgres + IDs já resolve:

  • mais barato
  • mais simples
  • mais observável

🔹 2. Hacks de ingestão (onde mais dá problema)

✅ Hack 4 — Classificação ≠ Embedding

Use LLM barato para classificar Use embedding separado depois

Nunca peça para o LLM “classificar e embedar” no mesmo prompt


✅ Hack 5 — Sempre faça o LLM cuspir JSON fechado

Prompt com:

Responda APENAS com JSON válido. Sem texto fora do JSON.

E use:

  • retry automático
  • “corrija este JSON” se quebrar

✅ Hack 6 — FAQs: quebre tudo

Se um documento tem 10 perguntas:

  • split em 10 FAQs
  • embed question + answer juntos

🎯 Recall sobe muito.


✅ Hack 7 — IDs semânticos no começo

Mesmo se você ainda não sabe os relacionamentos:

  • gere UUIDs
  • depois você conecta

Relacionamento pode vir depois da ingestão


🔹 3. Hacks de busca (onde a mágica acontece)

✅ Hack 8 — 3 buscas pequenas > 1 busca grande

Melhor:

  • top 3 docs
  • top 3 faqs
  • top 3 procedures

Pior:

  • top 9 misturados

📌 Evita FAQ dominar tudo.


✅ Hack 9 — Graph traversal só nos top resultados

Nunca:

  • percorra tudo

Sempre:

  • pegue IDs só dos top K

Isso reduz custo e ruído.


✅ Hack 10 — Semântica primeiro, relação depois

Regra fixa:

  1. vector search
  2. relation search

Nunca o contrário.


🔹 4. Hacks de contexto (qualidade da resposta)

✅ Hack 11 — Contexto em blocos nomeados

Passe para o LLM assim:

```[DOCUMENTOS PRINCIPAIS] ...

[FAQS RELACIONADAS] ...

[PROCEDIMENTOS RELACIONADOS] ...```

📈 O LLM entende melhor do que texto corrido.


✅ Hack 12 — Limite duro de tokens por bloco

Exemplo:

  • documentos: 600 tokens
  • faqs: 300 tokens
  • procedures: 400 tokens

Corte contexto, não deixe o modelo decidir.


✅ Hack 13 — Proíba inferência

System prompt obrigatório:

“Se não estiver no contexto, diga que não encontrou.”

Isso reduz alucinação drasticamente.


🔹 5. Hacks de custo (importantíssimo)

✅ Hack 14 — Cache de embedding de pergunta

Perguntas repetidas?

  • reuse embedding
  • economiza $$$

✅ Hack 15 — Embeddings só no ingestion

Nunca re-embed documentos na query.


✅ Hack 16 — Skip traversal se score baixo

Se similaridade < threshold:

  • não faz traversal
  • responde “não encontrado”

🔹 6. Hacks de debugging (ninguém fala disso)

✅ Hack 17 — Log tudo como grafo

Log:

  • query
  • IDs retornados
  • relacionamentos seguidos

Isso vira:

  • auditoria
  • melhoria do grafo

✅ Hack 18 — Trace visual do fluxo

Mesmo simples:

Query → Doc#12 → FAQ#7 → Proc#3

Ajuda MUITO a ajustar.


🔹 7. Hacks mentais (arquitetura)

✅ Hack 19 — Graph RAG ≠ conhecimento geral

Use Graph RAG quando:

  • dados se referenciam
  • contexto importa
  • sequência importa

❌ Não use para Wikipedia-like.


✅ Hack 20 — RAG simples + grafo parcial

Você não precisa “converter tudo”:

  • 80% RAG normal
  • 20% com traversal

🧠 Frase-chave pra equipe

Vector search encontra o ponto. O grafo explica o caminho.

navegação do grafo).


7) Agregar contexto (Context Aggregation)

Monte um “contexto final” unificado:

  • Resultados primários (semânticos)
  • Contexto relacionado (via IDs)
  • Deduplicação
  • Ordenação (ex: priorizar primário > relacionado)

Uma estrutura boa:

  • primary_documents[]
  • primary_faqs[]
  • primary_procedures[]
  • linked_faqs[]
  • linked_procedures[]
  • linked_documents[]

8) Prompt final + geração de resposta

Passe ao LLM:

  • pergunta do usuário
  • contexto agregado
  • instruções rígidas:

  • “não invente”

  • “cite fontes (IDs/títulos)”
  • “se faltar, diga que não encontrou”

9) MVP: checklist do que precisa estar pronto

  • [ ] Supabase com pgvector
  • [ ] 3 tabelas com embeddings
  • [ ] Classificador LLM → JSON
  • [ ] Validador JSON
  • [ ] Embeddings API
  • [ ] Inserção no Supabase
  • [ ] Busca vetorial nas 3 tabelas
  • [ ] Traversal por IDs
  • [ ] Agregação do contexto
  • [ ] Prompt final e resposta

10) Melhorias recomendadas (depois do MVP)

  • Re-ranker (melhora precisão)
  • normalização de relacionamentos (tabela edges)
  • multi-hop traversal (2º nível)
  • controle de acesso (RLS)
  • observabilidade (log de queries + recall)

Aqui vai um passo a passo prático (do zero ao funcionando) para implementar um Graph RAG com Supabase + pgvector + OpenAI, bem alinhado ao fluxo .


1) Defina o modelo de dados e os relacionamentos

Você precisa de tabelas por tipo + campos de relacionamento.

Exemplo mínimo (3 tabelas):

  • documents

  • id (uuid)

  • title (text)
  • content (text)
  • category (text)
  • status (text)
  • metadata (jsonb)
  • related_faq_id (uuid, nullable)
  • related_procedure_id (uuid, nullable)
  • embedding (vector)

  • faqs

  • id (uuid)

  • question (text)
  • answer (text)
  • metadata (jsonb)
  • embedding (vector)

  • procedures

  • id (uuid)

  • title (text)
  • steps (text)
  • metadata (jsonb)
  • embedding (vector)

📌 O “grafo” nasce dos IDs (related_faq_id, related_procedure_id) e/ou listas de IDs dentro de metadata.


2) Crie o projeto no Supabase e habilite pgvector

  1. Criar projeto no Supabase
  2. No SQL Editor, executar:
  • create extension if not exists vector;
  1. Criar as tabelas com coluna embedding vector(1536) (se usar text-embedding-3-small, por exemplo)
  2. Criar índices vetoriais (recomendável):
  • ivfflat ou hnsw (depende da versão/config)

3) Escreva o “Schema Pack” para o LLM

O LLM precisa receber a descrição e o schema para classificar corretamente.

Monte um objeto como:

  • nome da tabela
  • descrição
  • colunas obrigatórias
  • tipos
  • relacionamentos aceitos

Isso entra sempre no prompt de ingestão.


4) Implemente o pipeline de ingestão (Ingestion Flow)

4.1 Receber o dado bruto

Entrada pode ser:

  • JSON
  • texto
  • arquivos (pdf, doc, etc.) — opcional pro MVP

4.2 Classificação (LLM)

Faça o LLM responder:

  • qual tabela (documents|faqs|procedures)
  • campos preenchidos conforme schema
  • IDs relacionados (se existirem)

Saída do LLM tem que ser JSON.

4.3 Validação do JSON

Valide com:

  • JSON Schema / Zod / Pydantic
  • Regras: campos obrigatórios, tipos, limites

Se falhar:

  • ou re-pede ao LLM “corrigir JSON”
  • ou rejeita a entrada

4.4 Geração de embedding (OpenAI)

Crie o texto a embedar por tipo:

  • Document: title + "\n" + content
  • FAQ: question + "\n" + answer
  • Procedure: title + "\n" + steps

Chame embeddings API e receba vetor.

4.5 Inserir no Supabase (roteador)

Com base no tipo classificado:

  • insere na tabela correta
  • salva embedding + metadata + related_*

5) Implemente busca semântica por tabela (3 buscas em paralelo)

Quando vem uma pergunta do usuário:

  1. Gerar embedding da pergunta
  2. Rodar 3 buscas vetoriais:
  • documents
  • faqs
  • procedures

Cada busca retorna:

  • top K registros
  • com id e metadados contendo relacionamentos

📌 Importante: o retorno precisa incluir related_faq_id / related_procedure_id (ou listas no metadata).


6) Implementar “Graph Traversal” (busca por IDs relacionados)

Agora vem a parte Graph RAG:

A partir dos resultados semânticos:

  • coletar todos related_faq_id
  • coletar todos related_procedure_id
  • (opcional) coletar “source_document_id” se existir

Depois, fazer consultas diretas no Supabase:

  • select * from faqs where id in (...)
  • select * from procedures where id in (...)
  • etc.

📌 Isso é “traversal” (navegação do grafo).


7) Agregar contexto (Context Aggregation)

Monte um “contexto final” unificado:

  • Resultados primários (semânticos)
  • Contexto relacionado (via IDs)
  • Deduplicação
  • Ordenação (ex: priorizar primário > relacionado)

Uma estrutura boa:

  • primary_documents[]
  • primary_faqs[]
  • primary_procedures[]
  • linked_faqs[]
  • linked_procedures[]
  • linked_documents[]

8) Prompt final + geração de resposta

Passe ao LLM:

  • pergunta do usuário
  • contexto agregado
  • instruções rígidas:

  • “não invente”

  • “cite fontes (IDs/títulos)”
  • “se faltar, diga que não encontrou”

9) MVP: checklist do que precisa estar pronto

  • [ ] Supabase com pgvector
  • [ ] 3 tabelas com embeddings
  • [ ] Classificador

🧩 Componentes Principais do Sistema

1. LLM (Large Language Model – ex: OpenAI GPT)

Funções:

  • Classificar os dados de entrada (documento, FAQ ou procedimento)
  • Validar e ajustar o JSON conforme o schema
  • Entender relacionamentos entre entidades
  • Orquestrar a estratégia de busca (semântica + relacional)
  • Gerar a resposta final ao usuário

📌 Usado em múltiplas etapas, não apenas na resposta final.


2. Supabase (PostgreSQL + pgvector)

Funções:

  • Armazenar os dados estruturados
  • Armazenar embeddings vetoriais
  • Manter chaves estrangeiras (IDs relacionados)
  • Executar:

  • Busca vetorial

  • Consultas diretas por ID
  • Filtros por relacionamento

📌 Atua como:

  • Banco relacional
  • Banco vetorial
  • Base do “grafo” (via FKs)

3. Vector Store (pgvector no Supabase)

Funções:

  • Armazenar embeddings
  • Executar similaridade semântica
  • Retornar metadados com IDs relacionados

Cada tabela possui seu próprio índice vetorial:

  • documents_vectors
  • faqs_vectors
  • procedures_vectors

4. Agente de Ingestão (Ingestion Agent)

Funções:

  • Receber dados brutos
  • Aplicar schema awareness
  • Classificar o conteúdo
  • Enviar para o roteador correto

Pode ser:

  • Um agent LLM
  • Um pipeline (LangChain / custom)

5. Roteador de Dados (Router)

Funções:

  • Direcionar dados para:

  • Tabela Documents

  • Tabela FAQs
  • Tabela Procedures

Baseado em:

  • Saída do LLM
  • Tipo de dado identificado

6. Parser & Validador JSON

Funções:

  • Converter texto do LLM em JSON
  • Validar estrutura e tipos
  • Garantir compatibilidade com o schema do banco

Pode usar:

  • Funções customizadas
  • JSON Schema
  • Pydantic / Zod

7. Agente de Consulta (Query Agent / Graph RAG Agent)

Funções:

  • Executar buscas vetoriais paralelas
  • Interpretar metadados
  • Navegar pelos relacionamentos (graph traversal)
  • Agregar contexto
  • Produzir resposta final

🔌 APIs Utilizadas

1. OpenAI Embeddings API

Uso:

  • Converter texto (título + conteúdo) em vetores

Chamadas via:

  • HTTP request direto (não via agent, no exemplo)

📌 Exemplo:

POST /v1/embeddings


2. OpenAI Chat / Responses API

Uso:

  • Classificação de dados
  • Validação de schema
  • Orquestração da busca
  • Geração da resposta final

📌 Exemplo:

POST /v1/chat/completions


3. Supabase REST API

Uso:

  • Inserir dados nas tabelas
  • Consultar por ID
  • Filtrar registros relacionados
  • Executar buscas vetoriais

4. PostgreSQL (SQL + pgvector)

Uso:

  • Criação de tabelas
  • Criação de índices vetoriais
  • Queries de similaridade
  • Joins lógicos via IDs

📌 Inclui:

  • SQL custom
  • Funções RPC do Supabase

🧠 Como esses componentes trabalham juntos

```Dados → LLM (classificação) → Parser / Validador → Embeddings API → Supabase (vector + relational)

Pergunta → Query Agent → Busca Vetorial (3 tabelas) → IDs relacionados → Queries diretas (graph traversal) → Resposta final (LLM)```


🧩 Stack típica resumida

Camada Tecnologia
LLM OpenAI (GPT + Embeddings)
Banco vetorial Supabase + pgvector
Banco relacional PostgreSQL
Orquestração Agent LLM
Validação JSON Schema / Pydantic
APIs OpenAI + Supabase
Arquitetura Graph RAG

🧠 Do que trata o fluxo?

Ele mostra como construir e operar um Graph RAG Agent que:

  • Usa Supabase como banco vetorial
  • Trabalha com múltiplos tipos de dados (Documentos, FAQs e Procedimentos)
  • Entende e explora relações entre esses dados, em vez de tratá-los como textos isolados

🔄 Visão geral do fluxo

1. Estrutura dos dados (modelo em grafo)

  • Existem três tabelas principais:

  • Documents

  • FAQs
  • Procedures
  • Cada registro pode conter:

  • Conteúdo textual (título, texto, etc.)

  • IDs de relacionamento, como:

    • related_faq_id
    • related_procedure_id

Esses IDs conectam os dados entre si, formando um grafo de informações.


2. Ingestão dos dados

O agente recebe:

  • Dados de teste
  • Definição dos esquemas das tabelas (colunas + significado)

O fluxo de ingestão é:

  1. LLM classifica o dado
  • Decide se o conteúdo é um documento, FAQ ou procedimento 2. Validação de schema

  • Garante que o JSON gerado segue o formato correto 3. Geração de embeddings

  • Usa título + conteúdo para criar vetores 4. Roteamento inteligente

  • Envia o dado para a tabela correta no Supabase 5. Preservação de relações

  • IDs relacionados são salvos nos metadados do vetor

📌 O ponto crítico aqui é:

o agente entende onde o dado entra e com quem ele se relaciona


3. Busca e recuperação (Query Flow)

Quando o usuário faz uma pergunta:

  1. Busca semântica paralela
  • O agente consulta 3 bancos vetoriais ao mesmo tempo:

    • documentos
    • FAQs
    • procedimentos
  1. Retorno com metadados
  • Cada resultado vem com IDs de relacionamento
  1. Travessia do grafo
  • O agente usa esses IDs para buscar:

    • FAQs relacionadas
    • Procedimentos relacionados
    • Documentos conectados
  1. Estratégia dupla
  • 🔍 Busca vetorial → encontra o conteúdo principal
  • 🔗 Consulta por ID → traz o contexto conectado
  1. Agregação de contexto
  • Junta tudo em uma resposta mais completa e coerente

🎯 Em resumo

O fluxo é sobre:

  • Como ingerir dados estruturados
  • Como manter relações explícitas entre eles
  • Como combinar busca semântica + relações de banco
  • Como evitar respostas isoladas ou “alucinadas”

👉 Em vez de:

“encontrei este trecho parecido”

O agente consegue:

“encontrei este documento e os FAQs e procedimentos diretamente ligados a ele”

Assistente RAG de Grafos

Fluxo de Ingestão e Vetorização de Dados

Entrada de dados com reconhecimento de esquema: O agente recebe dados de teste juntamente com definições de tabelas (documentos, FAQs, procedimentos) com mapeamentos de relacionamento.

Classificação de dados via LLM: Analisa os dados recebidos com base nos esquemas para determinar a atribuição correta à tabela.

Parsing e validação JSON: Extrai dados estruturados e valida conforme regras de esquema predefinidas.

Geração de embeddings OpenAI: Converte título + conteúdo em vetores por meio de requisição HTTP.

Roteamento inteligente: Direciona os dados para a tabela apropriada no Supabase com base na classificação (documentos/FAQs/procedimentos).

Preservação de relacionamentos: Armazena IDs de chave estrangeira (related_faq_id, related_procedure_id) nos metadados para permitir a navegação em grafo.


Fluxo de Recuperação em Grafo e Geração de Respostas

Busca semântica em múltiplas tabelas: O agente consulta simultaneamente três repositórios vetoriais separados (um por tipo de dado).

Recuperação vetorial inicial: Retorna trechos relevantes com IDs de relacionamento embutidos nos metadados.

Navegação de relacionamentos: Utiliza os IDs retornados para buscar registros diretamente conectados nas tabelas relacionadas.

Estratégia de busca dupla: Combina busca semântica para resultados primários + consultas diretas por ID para contexto vinculado.

Agregação de contexto: Mescla dados semanticamente relevantes com informações conectadas relacionalmente para respostas abrangentes.


Caso de Negócio / Caso de Uso

Solução: Um sistema RAG baseado em grafos que compreende os relacionamentos entre diferentes tipos de dados — entregando respostas que combinam conteúdo semanticamente relevante com informações diretamente relacionadas em tabelas interconectadas.


Proposta de Valor

Completude Contextual: Inclui automaticamente documentos, FAQs e procedimentos relacionados, em vez de trechos isolados.

Navegação Estruturada do Conhecimento: Segue relacionamentos explícitos entre tipos de dados da mesma forma que um humano conecta informações.

Redução de Alucinação: Aproveita relacionamentos definidos em vez de inferir conexões, aumentando a precisão.

Arquitetura de Dados Escalável: Lida com bases de conhecimento complexas e multi-entidade que uma busca vetorial simples não consegue navegar.


Compradores Ideais / Indústrias

TI Corporativa & Suporte: Sistemas de documentação em que guias, etapas de troubleshooting e FAQs se referenciam mutuamente.

Sistemas de Saúde: Prontuários médicos conectando diagnósticos, protocolos de tratamento, medicamentos e históricos de pacientes.

Compliance & Regulatório: Sistemas de auditoria conectando políticas, procedimentos, incidentes e ações corretivas.

Desenvolvimento de Produtos: Documentação de engenharia relacionando especificações, procedimentos de teste, issues e decisões de design.

Serviços Jurídicos: Gestão de casos ligando contratos, precedentes, petições e correspondências relacionadas.

Plataformas Educacionais: Materiais de curso conectando aulas, atividades, pré-requisitos e recursos.


Recursos Agente RAG de grafos

nm79 - Assistente RAG de Grafos Vetores

chatgpt.com ↗

1

Recursos

↑ voltar ao topo · ver no Telegram ↗