Pular para o conteúdo

BestRAG - Cheatsheet de Recuperação e Armazenamento de RAG Híbrido

BestRAG - Cheatsheet de Recuperação e Armazenamento de RAG Híbrido

BestRAG (Best Retrieval Augmented Generation) é uma biblioteca Python para construir pipelines de RAG híbrido. Combina embeddings densos, esparsos e de interação tardia para armazenar e buscar documentos com eficiência, usando Qdrant como armazenamento de vetor e FastEmbed para os embeddings. A ideia: armazenar cada pedaço uma vez com múltiplas representações, depois recuperar com relevância fundida para que você obtenha tanto o recall semântico de vetores densos quanto a precisão de termos exatos da busca esparsa (estilo BM25).

Instalação

MétodoComando
pippip install bestrag
RequirementsUma instância Qdrant (Docker local ou Qdrant Cloud)
EmbeddingsUsa FastEmbed sob o capuz
Verifypython -c "import bestrag; print('ok')"

Por Que Híbrido

Tipo de RecuperaçãoForte emFraco em
Dense (vector)Significado, paráfraseIDs exatos, números, termos raros
Sparse (BM25)Termos exatos, identificadoresSinônimos, paráfrase
Late interactionCorrespondência de token de grana finaCusto
Fused (hybrid)Melhor de denso + esparso

BestRAG armazena todas as representações para que uma única consulta se beneficie de todas elas.

Uso Básico

from bestrag import BestRAG

rag = BestRAG(
    url="http://localhost:6333",     # Qdrant
    api_key="...",                   # if using Qdrant Cloud
    collection_name="docs",
)

# Ingest documents (embeds dense + sparse + late-interaction, upserts to Qdrant)
rag.store_pdf("handbook.pdf")
rag.store_text("Nick prefers concise answers.", metadata={"source": "prefs"})

# Retrieve with fused hybrid relevance
results = rag.search("what does the refund policy say?", limit=5)
for r in results:
    print(r.score, r.text)
MétodoDescrição
BestRAG(url, collection_name, ...)Conecte a Qdrant, escolha uma coleção
store_pdf(path)Parse + chunk + embed + upsert um PDF
store_text(text, metadata=...)Ingira texto bruto
search(query, limit=k)Recuperação híbrida (fundida)
delete(...)Remover documentos

O Que Acontece na Ingestão

PassoDetalhe
ParseExtraia texto (ex. de PDF)
ChunkDivida em passagens
EmbedVetores densos + esparsos + de interação tardia por chunk
UpsertArmazene todos os vetores + payload em Qdrant

O Que Acontece na Busca

PassoDetalhe
Embed queryDenso + esparso (+ interação tardia)
Query QdrantRecupere candidatos por representação
FuseCombine classificações (estilo RRF) em uma lista
ReturnTop-k passagens com pontuações + metadados

Alimentando Resultados em um LLM

# Retrieve, then build a grounded prompt
hits = rag.search(user_question, limit=5)
context = "\n\n".join(h.text for h in hits)
prompt = f"Answer using only this context:\n{context}\n\nQ: {user_question}"
# → send prompt to your LLM

Ajuste

AlavancaEfeito
Chunk size/overlapGranularidade de recuperação
Dense modelQualidade semântica (via FastEmbed)
Sparse modelCorrespondência de termo exato (BM25)
limit (k)Recall vs tamanho de prompt
Metadata filtersRestringir escopo de busca / controle de acesso

BestRAG vs Fazendo Você Mesmo

AspectoBestRAGManual (LangChain/LlamaIndex)
Hybrid setupIntegrado (denso+esparso+LI)Fiação manual
StoreQdrant, opinadoQualquer, flexível
ControlMais simples, menos botõesControle total
Melhor paraInício rápido de RAG híbridoPipelines personalizados

Construído em FastEmbed e Qdrant; alcance LangChain ou LlamaIndex quando você precisa de controle total de pipeline.

Recursos