Salta ai contenuti

BestRAG - Cheatsheet Archiviazione e Recupero RAG Ibrido

BestRAG - Cheatsheet Archiviazione e Recupero RAG Ibrido

BestRAG (Best Retrieval Augmented Generation) è una libreria Python per la costruzione di pipeline RAG ibride. Combina embedding densi, sparse e late-interaction per l”archiviazione e la ricerca di documenti in modo efficiente, utilizzando Qdrant come archivio vettoriale e FastEmbed per gli embedding. L”idea: archivia ogni chunk una volta con più rappresentazioni, quindi recupera con rilevanza fusione in modo da ottenere sia il richiamo semantico dei vettori densi che la precisione esatta del termine di sparse (stile BM25).

Installazione

MetodoComando
pippip install bestrag
RequisitiUn”istanza Qdrant (Docker locale o Qdrant Cloud)
EmbeddingUtilizza FastEmbed sotto il cofano
Verificapython -c "import bestrag; print('ok')"

Perché Ibrido

Tipo di recuperoForte conDebole con
Denso (vettore)Significato, parafrasiID esatti, numeri, termini rari
Sparse (BM25)Termini esatti, identificatoriSinonimi, parafrasi
Late interactionCorrispondenza token fine-grainedCosto
Fuso (ibrido)Meglio di denso + sparse

BestRAG memorizza tutte le rappresentazioni in modo che una singola query tragga vantaggio da tutte loro.

Uso di Base

from bestrag import BestRAG

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

# Ingesta documenti (embed denso + sparse + late-interaction, upsert in Qdrant)
rag.store_pdf("handbook.pdf")
rag.store_text("Nick prefers concise answers.", metadata={"source": "prefs"})

# Recupera con rilevanza ibrida fusione
results = rag.search("what does the refund policy say?", limit=5)
for r in results:
    print(r.score, r.text)
MetodoDescrizione
BestRAG(url, collection_name, ...)Connettiti a Qdrant, scegli una raccolta
store_pdf(path)Analizza + chunk + embed + upsert un PDF
store_text(text, metadata=...)Ingesta testo grezzo
search(query, limit=k)Recupero ibrido (fuso)
delete(...)Rimuovi documenti

Cosa Succede su Ingesta

PassaggioDettaglio
AnalizzaEstrai testo (ad es. da PDF)
ChunkDividi in passaggi
EmbedVettori densi + sparse + late-interaction per chunk
UpsertMemorizza tutti i vettori + payload in Qdrant

Cosa Succede su Ricerca

PassaggioDettaglio
Embed queryDenso + sparse (+ late interaction)
Query QdrantRecupera candidati per rappresentazione
FondiCombina ranking (stile RRF) in un elenco
RitornaTop-k passaggi con punteggi + metadati

Alimentare Risultati a un LLM

# Recupera, quindi costruisci un prompt fondato
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}"
# → invia il prompt al tuo LLM

Accordatura

LevaEffetto
Dimensione chunk/sovrapposizioneGranularità del recupero
Modello densoQualità semantica (tramite FastEmbed)
Modello sparseCorrispondenza esatta del termine (BM25)
limit (k)Richiamo vs dimensione prompt
Filtri metadatiAmbito di ricerca restrittivo / controllo di accesso

BestRAG vs Rotolamento Proprio

AspettoBestRAGManuale (LangChain/LlamaIndex)
Setup ibridoBuilt-in (denso+sparse+LI)Cablaggio manuale
MemorizzaQdrant, opinionatoQualsiasi, flessibile
ControlloPiù semplice, meno manopoleControllo totale
Migliore perInizio RAG ibrido velocePipeline personalizzate

Costruito su FastEmbed e Qdrant; raggiungi LangChain o LlamaIndex quando hai bisogno di controllo della pipeline completa.

Risorse