Pressione Esc para fechar

Indexing - FAISS

← Voltar para o Dia 4: RAG: finalmente

Indexing FAISS

O que é

FAISS, sigla para Facebook AI Similarity Search, é uma biblioteca desenvolvida pela Meta para realizar busca eficiente por similaridade entre vetores.

No contexto de RAG, o FAISS pode ser utilizado na etapa de Indexing para organizar embeddings e permitir encontrar rapidamente os vetores mais próximos de uma consulta.

Diferentemente do Chroma, que oferece uma solução mais completa para armazenamento e gerenciamento de dados vetoriais, o FAISS é principalmente uma biblioteca de busca e indexação vetorial.

O fluxo simplificado é:

Documentos
   ↓
Parsing
   ↓
Cleaning
   ↓
Chunking
   ↓
Embedding Model
   ↓
Embeddings
   ↓
FAISS Index
   ↓
Vector Search
   ↓
Chunks relevantes

Como funciona

Imagine que temos milhões de pontos espalhados em um espaço multidimensional.

Cada ponto representa um embedding:

Embedding 1 → ●
Embedding 2 →       ●
Embedding 3 →   ●
Embedding 4 →                 ●
Embedding 5 →      ●
...

Quando chega uma nova pergunta, seu embedding também se transforma em um ponto:

Consulta → ★

O objetivo é encontrar rapidamente os pontos mais próximos da estrela.

O FAISS cria estruturas de índice que tornam essa busca muito mais eficiente do que simplesmente comparar a consulta com todos os vetores individualmente.

Pergunta
   ↓
Embedding
   ↓
Vetor da consulta
   ↓
FAISS Index
   ↓
Vetores mais próximos
   ↓
IDs dos chunks
   ↓
Conteúdo dos chunks

Existem diferentes tipos de índices no FAISS, com diferentes compromissos entre velocidade, memória e precisão da busca.

Por exemplo, uma busca exaustiva pode comparar a consulta com todos os vetores, enquanto índices aproximados podem pesquisar apenas regiões mais promissoras do espaço vetorial.

Isso é especialmente relevante quando a quantidade de embeddings cresce muito.

Um exemplo

Imagine uma base com 1 milhão de chunks.

Depois do processamento:

Chunk 1 → Embedding → Vetor 1
Chunk 2 → Embedding → Vetor 2
Chunk 3 → Embedding → Vetor 3
...
Chunk 1.000.000 → Embedding → Vetor 1.000.000

O FAISS pode construir um índice sobre esses vetores.

Cada vetor pode estar associado ao identificador do chunk correspondente:

FAISS Index

Vetor 1 → ID 001
Vetor 2 → ID 002
Vetor 3 → ID 003
...
Vetor N → ID N

Quando o usuário pergunta:

"Qual é o prazo para solicitar férias?"

a pergunta passa pelo Embedding Model:

Pergunta
   ↓
Embedding Model
   ↓
Vetor da pergunta

Esse vetor é enviado ao FAISS para encontrar os vetores mais próximos:

Vetor da pergunta
       ↓
     FAISS
       ↓
IDs mais próximos
       ↓
001, 027, 184...

O sistema utiliza esses IDs para recuperar os respectivos chunks e entregá-los ao LLM como contexto.

Portanto, o FAISS não precisa necessariamente armazenar todo o conteúdo textual. Ele pode cuidar principalmente dos vetores e dos identificadores, enquanto o conteúdo original é mantido em outra estrutura.

Por que é importante

FAISS é importante porque demonstra uma diferença fundamental entre armazenar embeddings e pesquisar embeddings de maneira eficiente.

Ele foi projetado especificamente para problemas de busca por similaridade em grandes conjuntos de vetores e oferece diferentes estruturas de indexação.

A relação com os conceitos anteriores pode ser resumida assim:

Embedding Model
→ transforma conteúdo em vetores

Vector Embedding
→ representação numérica do conteúdo

FAISS
→ cria índices e realiza busca por similaridade

Vector Search
→ procura os vetores mais próximos

Retrieval
→ utiliza os resultados para recuperar os chunks

LLM
→ utiliza os chunks recuperados para gerar a resposta

Também é importante diferenciar FAISS de Chroma:

FAISS
→ biblioteca focada em indexação e busca vetorial

Chroma
→ banco de dados vetorial com recursos de armazenamento,
  gerenciamento e consulta de embeddings

Essa diferença não significa que um seja necessariamente melhor que o outro. Eles atendem a necessidades diferentes e podem até aparecer em arquiteturas distintas.

Outro conceito importante é que o FAISS oferece diferentes estratégias de indexação. Algumas priorizam simplicidade e precisão, enquanto outras utilizam aproximações para conseguir maior velocidade e menor consumo de recursos em grandes volumes.

Isso introduz uma ideia importante para os próximos conceitos: Approximate Nearest Neighbor (ANN), em que o sistema procura os vizinhos mais próximos de maneira aproximada para obter uma busca muito mais eficiente em grandes bases.

O ponto central é: FAISS é uma biblioteca especializada em indexação e busca por similaridade vetorial, permitindo que sistemas como RAG encontrem rapidamente os embeddings mais próximos de uma consulta.

link de compartilhamento