cerebro-vip INEMA.CLUB
inícioINEMA.N8N

Aula/resumo sobre otimização de banco vetorial com n8n e Pinecone,…

INEMA.N8N · 2025-04-03 · ~6 min · ver no Telegram ↗

INEMA

youtube.com/watch ↗

O que é Recursive Splitter com Overlap

1. Recursive Text Splitter (Divisor de Texto Recursivo):

É uma técnica de quebrar um texto longo em pedaços menores (chamados de "chunks") sem cortar frases no meio. Ele tenta manter o contexto e a coerência de cada parte.

2. Overlap (Sobreposição):

Significa que parte do final de um pedaço aparece também no início do próximo. Isso evita perder o sentido entre os pedaços.


Analogia simples:

Imagine que você tem um livro de receitas com 100 linhas. Em vez de dividir em blocos de 50 linhas "secos", você usa:

  • Chunk size = 50 linhas
  • Overlap = 10 linhas

Assim: - Chunk 1: linhas 1 a 50
- Chunk 2: linhas 41 a 90
- Chunk 3: linhas 81 a 100 (ou mais)

Cada bloco "repete" um pedaço do anterior, mantendo a conexão entre as ideias.


Por que isso importa?

Porque o modelo de IA entende melhor o texto se ele estiver inteiro ou parcialmente conectado. Se você cortar no meio de uma frase ou ideia, a IA pode não entender corretamente o que aquele pedaço significa.


Exemplo prático no contexto de IA:

Suponha que o texto original seja:

"O plano de evacuação deve ser seguido à risca. Caso contrário, vidas estarão em risco."

Se você dividir mal, pode ter: - Vetor 1: "O plano de evacuação deve ser seguido à" - Vetor 2: "risca. Caso contrário, vidas estarão em risco."

Isso fica estranho para a IA.
Com o Recursive Splitter com overlap, você teria: - Vetor 1: "O plano de evacuação deve ser seguido à risca." - Vetor 2: "risca. Caso contrário, vidas estarão em risco."

Agora a frase permanece completa e faz sentido nos dois vetores.


Quando usar:

  • Sempre que for dividir documentos grandes para não perder sentido entre os trechos.
  • Quando a coerência das respostas da IA for importante, como em atendimento ao cliente, contratos, políticas ou manuais.

Recomendações diretas para otimizar banco vetorial com n8n + Pinecone:

  1. Evitar inserir lixo (como metadados inúteis)
    Use extração seletiva de texto com JSON e filtros para pegar apenas o conteúdo relevante.

  2. Obter vetores limpos e únicos
    Prefira carregar como binário, criando apenas 1 vetor por documento.

  3. Manter o sentido do texto
    Use o Recursive Text Splitter, pois ele evita cortar frases e mantém o contexto.

  4. Fazer buscas com mais precisão
    Adicione metadados úteis, como o campo document ID, para filtrar os resultados depois.

  5. Atualizar documentos depois
    Gerencie os IDs dos vetores gerados ou utilize o Supabase (mais simples para esse tipo de tarefa do que o Pinecone).

  6. Evitar erro de compatibilidade
    Sempre combine o embedding correto com o índice configurado no Pinecone (ex: não usar embedding 3-large em índice criado para 3-small).

  7. Dividir documentos muito grandes
    Use o Character Splitter com separador definido (por exemplo: ponto final “.”) para manter a integridade das sentenças.

  8. Evitar perda de contexto entre partes
    Aplique chunk overlap, como por exemplo: dividir em blocos de 60 tokens com 20 de sobreposição, para manter continuidade entre os trechos.


Resumo prático final (em 1 linha):

Para melhor resultado, extraia só o texto útil, use Recursive Splitter com overlap, adicione metadados e carregue com embedding compatível.

Conclusão

O vídeo mostra que a qualidade dos dados vetorizados é mais importante que a quantidade. Ao usar splitting correto, metadados úteis e garantir compatibilidade de embedding, você:

  • Melhora a eficiência do agente RAG.
  • Reduz o custo computacional.
  • Aumenta a precisão da resposta.

“Vector Database Optimization with n8n: Metadata, Text Splitting, & Embeddings”:

Como otimizar a inserção de dados em um banco vetorial (Pinecone) usando o n8n, com foco em três pilares principais: metadata (metadados), text splitting (divisão de texto) e embeddings (vetorização). O objetivo é garantir uma base de conhecimento eficiente, para que os agentes de IA possam usar RAG (retrieval augmented generation) de forma eficaz.


Tópicos com exemplos e explicações:

  1. Configuração Inicial - Criar índice no Pinecone (usar embedding text-embedding-3-small). - Conectar o n8n ao Pinecone via API Key. - Escolher um documento PDF simples para testes.

Exemplo: Um documento com ID 1234 e algumas palavras fictícias.


  1. Fluxo Básico: Download, Extração e Envio para Pinecone - Baixar PDF no n8n. - Extrair texto com o nó “Extract from file”. - O problema: extrai também informações inúteis (número da versão, rodapé etc). - Resultado: 8 vetores são enviados ao Pinecone, muitos irrelevantes.

Solução futura: filtrar só o que importa antes de enviar para embedding.


  1. Formato de Carregamento: JSON vs. Binário - JSON: pega tudo que vem do PDF, inclusive dados desnecessários. - Binário: envia apenas o conteúdo principal. - Resultado com binário: cria 1 vetor (mais limpo, sem lixo), mas ainda mantém metadados como título, versão etc.

Dica: O formato binário pode ser útil para evitar excessos.


  1. Erro Comum: Embedding Incompatível - Exemplo de erro ao tentar usar embedding 3-large com índice configurado para 3-small. - O embedding não será gerado porque as dimensões não batem (ex: 1536 vs. 2048).

Conclusão: Sempre alinhe o embedding usado no Pinecone com o que está configurado no n8n.


  1. Uso de Metadados - Adicionar campos personalizados (ex: document ID) no momento da vetorização. - Isso permite filtrar depois usando metadados no momento da consulta.

Exemplo: Adicionar document ID: 1234 para rastrear origem de cada vetor.


  1. Filtro de Texto Desejado - Estratégia: extrair texto do JSON e selecionar só o trecho útil. - Resultado: apenas 1 vetor é criado, com o texto certo e metadados.

Vantagem: Reduz ruído e melhora a performance na busca por similaridade.


  1. Text Splitting (Divisão de Texto) - Recursive character splitter: divide mantendo coerência sem cortar frases.
    • Ideal para textos maiores com estrutura natural (ex: políticas).
    • Token splitter: divide a cada X tokens (ex: 5 tokens por vetor).
    • Útil quando se quer granularidade maior.
    • Character splitter com separador personalizado:
    • Permite quebrar em pontos específicos (ex: ponto final, pipe, barra).
    • Chunk overlap (sobreposição):
    • Adiciona redundância entre vetores, para não perder contexto entre partes divididas.

Exemplo: Chunk de 60 com overlap de 20 → mantém parte do final do vetor anterior no próximo.


  1. Atualização de Vetores no Pinecone - Atualizar vetores no Pinecone é complexo, pois ele gera múltiplos IDs para um único documento. - Não há (ainda) uma forma direta de deletar por metadado no Pinecone. - Em Supabase, é possível deletar e re-substituir por metadado.

Observação: Atualizações precisam capturar e deletar os múltiplos vector IDs.


  1. Uso de Namespace no Pinecone - Pinecone permite separar dados por namespaces. - Exemplo: cada conjunto de vetores pode ser enviado para um namespace diferente. - Ajuda na organização e atualização posterior.

  1. Filtro por Metadado na Consulta RAG - Você pode filtrar vetores por campos como document ID na hora de consultar. - Isso evita buscas inúteis em vetores que não têm relação com a pergunta do usuário.

Exemplo de filtro: document ID = 1234


aRAG3 - Exemplos e Usos Pinecone

chatgpt.com ↗

1

Recursos

↑ voltar ao topo · ver no Telegram ↗