Aula/resumo sobre otimização de banco vetorial com n8n e Pinecone,…
INEMA
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:⌗
-
Evitar inserir lixo (como metadados inúteis)
Use extração seletiva de texto com JSON e filtros para pegar apenas o conteúdo relevante. -
Obter vetores limpos e únicos
Prefira carregar como binário, criando apenas 1 vetor por documento. -
Manter o sentido do texto
Use o Recursive Text Splitter, pois ele evita cortar frases e mantém o contexto. -
Fazer buscas com mais precisão
Adicione metadados úteis, como o campodocument ID, para filtrar os resultados depois. -
Atualizar documentos depois
Gerencie os IDs dos vetores gerados ou utilize o Supabase (mais simples para esse tipo de tarefa do que o Pinecone). -
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). -
Dividir documentos muito grandes
Use o Character Splitter com separador definido (por exemplo: ponto final “.”) para manter a integridade das sentenças. -
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:⌗
- 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.
- 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.
- 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.
- Erro Comum: Embedding Incompatível
- Exemplo de erro ao tentar usar embedding
3-largecom índice configurado para3-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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Filtro por Metadado na Consulta RAG
- Você pode filtrar vetores por campos como
document IDna 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
1