Pular para o conteúdo principal

Capítulo 1: Busca por Similaridade

Introdução​

A busca por similaridade é a base da recuperação em sistemas RAG. Ela encontra documentos cujas representações vetoriais estão mais próximas do vetor da consulta.

Métricas de Distância​

Similaridade Cosseno​

import numpy as np

def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# Range: -1 to 1 (1 = identical)

Distância Euclidiana​

def euclidean_distance(a, b):
return np.linalg.norm(a - b)

# Range: 0 to infinity (0 = identical)

Produto Interno (Produto Escalar)​

def inner_product(a, b):
return np.dot(a, b)

# For normalized vectors, equivalent to cosine

Recuperação Top-K​

from langchain.vectorstores import Chroma

# Create retriever
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 5} # Return top 5 results
)

# Retrieve
docs = retriever.get_relevant_documents("What is RAG?")

Limiares de Score​

Filtre por similaridade mínima:

retriever = vectorstore.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={
"score_threshold": 0.7, # Minimum similarity
"k": 10
}
)

Maximum Marginal Relevance (MMR)​

Equilibre relevância com diversidade:

retriever = vectorstore.as_retriever(
search_type="mmr",
search_kwargs={
"k": 5,
"fetch_k": 20, # Fetch more candidates
"lambda_mult": 0.7 # 1=relevance, 0=diversity
}
)

Comparação​

MétodoMelhor ParaTrade-off
SimilaridadeUso geralPode ter resultados redundantes
LimiarFiltragem de qualidadePode retornar poucos resultados
MMRResultados diversosRelevância ligeiramente menor

Próximos Passos​

Continue para Capítulo 2: Busca Híbrida.