Um embedding é um jeito de transformar um texto em um ponto. Textos que “querem dizer algo parecido” caem perto uns dos outros. A frase parece mágica até você lembrar o que ela não diz: perto não é verdadeiro, não é autorizado, não é vigente. É só perto.
Bancos vetoriais — Pinecone, Qdrant, Weaviate, pgvector, Chroma — guardam esses pontos e respondem “quais são os k vizinhos desta pergunta?”. No RAG, esses vizinhos viram o contexto do modelo. A qualidade do sistema nasce menos da logomarca do banco e mais de duas decisões pobres de glamour: como você corta o texto e o que você guarda junto do vetor.
No artigo de julho sobre por que recuperar contexto, a tese era: não encha o prompt; busque o trecho. Aqui vai o mecanismo dessa busca, e o modo como ele mente com educação.
Geometria do sentido
O modelo de embedding lê um trecho e devolve uma lista de números. Trezentas, mil, três mil dimensões, conforme o modelo. Similaridade de cosseno — o ângulo entre dois vetores — vira a métrica usual. Pergunta e parágrafo com ângulo pequeno sobem na ranking.
Isso captura um tipo de semelhança: tópico, vocabulário, às vezes intenção. “Prazo de devolução” se aproxima de “política de reembolso”. “Volume 3 da coleção” se aproxima de outros volumes. Útil. Insuficiente.
A geometria não sabe que a política de 2024 foi revogada. Não sabe que dois parágrafos usam as mesmas palavras para dizer o contrário. Não sabe que “combo” e “carrinho” são produtos diferentes com regras diferentes, embora morem em frases parecidas. O espaço é de sentido aproximado, não de lógica.
Quem já organizou um acervo sente o paralelo. Dois livros lado a lado na estante “negócios” não concordam. A prateleira é um índice de vizinhança. A verdade de cada um está no argumento, que a prateleira não lê.
flowchart TD
D[Documento] --> C[Cortar trechos]
C --> E[Embedding]
E --> I[Índice]
Q[Pergunta] --> V[Vetor da pergunta]
V --> I
I --> T[Trechos vizinhos]
T --> G[Geração]
classDef ouro fill:#FBF5E4,stroke:#C9A227,color:#0B1F18,stroke-width:1.4px
classDef verde fill:#F3FAF7,stroke:#1E7A57,color:#0B1F18,stroke-width:1.4px
classDef fim fill:#14513B,stroke:#0F3328,color:#FBFAF6,stroke-width:1.4px
class D,Q ouro
class C,E,V,I,T verde
class G fim
O tamanho do trecho é uma aposta de recall
Chunking é o corte. Cada trecho vira um vetor. Trecho grande carrega contexto e dilui a pergunta: a média do capítulo inteiro se afasta do parágrafo que respondia. Trecho pequeno acerta o parágrafo e perde a condição que estava na frase anterior. Recall — a chance de o trecho certo aparecer no top-k — depende desse corte mais do que da escolha entre dois bancos famosos.
Não existe tamanho universal. Há combinações que se repetem porque falham menos no começo:
- trechos de algumas centenas de tokens, com sobreposição pequena, para manuais e contratos;
- corte por seção ou cabeçalho quando o documento já tem estrutura (um sumário, uma cláusula, um capítulo);
- corte por parágrafo quando a unidade de sentido já é o parágrafo, como em notas e FAQs.
Sobreposição existe para não perder a frase que atravessa a fronteira. Exagerar a sobreposição duplica vetores, encarece o índice e devolve o mesmo parágrafo três vezes, ocupando o k com eco.
Uma pergunta prática organiza o experimento melhor do que um post de rede: o que deve ser recuperável de uma vez só? Se a resposta vive numa tabela de três linhas, a tabela não pode ser partida no meio. Se a resposta é um capítulo de vinte páginas, você não quer o capítulo inteiro no prompt; quer o parágrafo e, se preciso, o título da seção como metadado.
Mude um parâmetro por vez. Meça se o parágrafo de ouro entra no top-k. Só depois discuta o gerador. Um RAG “ruim” é, com frequência, um corte que nunca entregou a evidência.
Metadados são o antídoto parcial à geometria
O vetor não deve viajar sozinho. Junto dele cabem campos que a busca semântica não substitui: livro, volume, data, idioma, tipo de documento, público, permissão, âncora da página.
Filtros de metadado acontecem antes ou junto da busca por vizinhança. “Só a política vigente.” “Só o volume 2.” “Só o que este usuário pode ler.” Sem filtro, o vizinho mais próximo pode ser a edição antiga, o rascunho interno, o contrato de outro autor.
Isso não é detalhe de banco. É o mesmo princípio de um catálogo: você não encontra um título só por “parecer” com outro; usa coleção, idioma, ano. O banco vetorial que só guarda vetores é uma estante sem lombada.
Datas merecem um campo próprio. Quando o documento muda, o vetor antigo precisa morrer ou ganhar versão. Índice velho, como já vimos no RAG, é uma mentira bem indexada. Hash do arquivo e data de ingestão não são burocracia. São o mínimo para saber o que o sistema viu.
O que similaridade não é
Similaridade não é relevância. Um parágrafo pode ser vizinho e inútil: define o termo, não responde a pergunta.
Similaridade não é completude. O trecho certo pode ser o segundo, e o primeiro — mais “parecido” — é um marketing que usa as mesmas palavras.
Similaridade não é verdade. Dois trechos próximos podem ser um fato e uma objeção ao fato. O modelo, se você não disser o contrário, mistura os dois num consenso suave.
Similaridade não é permissão. O parecer jurídico confidencial pode ser o vizinho perfeito da pergunta do leitor. Recuperá-lo é um incidente, não um acerto de recall.
Por isso busca híbrida — léxica mais vetorial — continua a ganhar casos. Nome próprio, SKU, cláusula “5.2”, ISBN: a palavra exata importa. O vetor sozinho dilui o identificador. Um ranking que mistura BM25 e cosseno, depois filtra metadado, costuma ser mais honesto do que “só embeddings, que é o estado da arte”.
Escolher o banco depois de escolher a pergunta
A indústria discute qual vector DB “vence”. Para um acervo de dezenas de milhares de trechos, quase qualquer um com filtro, upsert e backup serve. A pergunta útil é outra:
- consigo filtrar por metadado sem gambiarra?
- consigo apagar e reindexar um documento sem corromper o resto?
- o trecho volta com o texto original, não só o id?
- a latência cabe no orçamento daquela tela?
Se o volume é pequeno, um índice no Postgres com pgvector reduz uma peça móvel. Se o volume explode e a equipe já opera um serviço gerenciado, o serviço ganha. Trocar de banco para ganhar dois pontos de recall, enquanto o corte parte cláusulas no meio, é otimismo de catálogo.
Um teste que cabe numa tarde
- Pegue dez documentos que alguém realmente consulta.
- Escreva quinze perguntas com o trecho-resposta marcado.
- Corte de três jeitos (parágrafo, seção, tamanho fixo com sobreposição).
- Meça, para cada corte, quantas vezes o trecho-resposta entra no top-5.
- Só no vencedor ligue o modelo, com a regra de recusar sem evidência.
Você vai discuti-lo menos como “IA” e mais como arquivo: o que indexamos, em que pedaços, com que etiqueta. É um trabalho de editor de acervo. O banco vetorial só guarda a geometria. A verdade continua sendo uma propriedade do texto — e da pessoa que decide se aquele texto ainda vale.
Leia também: RAG: por que recuperar contexto em vez de encher o prompt.