Tag: rag, llm, vector-database, embeddings, chunking, retrieval, prompt-engineering
Livello: avanzato
TL;DR: Pattern architetturali per fornire ai modelli linguistici contesto esterno, aziendale o aggiornato, riducendo le allucinazioni tramite retrieval semantico.
-
Naive RAG: Modello base con estrazione, calcolo degli embedding, indicizzazione e recupero lineare.
-
Advanced RAG: Pipeline ottimizzata con fasi di pre-retrieval (query routing, espansione) e post-retrieval.
-
Chunking: Suddivisione dei documenti in frammenti per indicizzazione (fixed size, semantico, ricorsivo).
-
Hybrid Search: Combinazione di ricerca semantica (vettoriale) e ricerca keyword (BM25) per risultati ottimali.
-
Query Transformation: Riscrivere, astrarre o espandere la query utente originale per migliorare il match vettoriale.
-
Reranking: Riordinare i documenti recuperati con un modello Cross-Encoder per massimizzare la rilevanza prima della generazione.
-
Modular RAG: Architetture flessibili dove i moduli di retrieval e generazione si adattano dinamicamente in base alla query.
-
Q: Come gestisci il problema del context window overflow nel RAG?R: Filtro rigorosamente i chunk tramite reranking, limitando i token passati al prompt ai top-K documenti strettamente necessari.
-
Q: Perché la ricerca puramente vettoriale non basta sempre?R: Perché fatica con ricerche esatte su codici o nomi specifici, per questo implemento sempre una hybrid search con BM25.
-
Q: Come valuti l'efficacia della tua pipeline RAG?R: Utilizzo metriche separate per la fase di retrieval (hit rate, MRR) e per la generazione (faithfulness, answer relevance), spesso con framework come Ragas.
-
Creare chunk di dimensioni eccessive, che diluiscono il segnale e confondono il calcolo della similarità.
-
Ignorare la pulizia dei dati sorgente: garbage in, garbage out anche con gli embedding migliori.
-
Dimenticare l'overlap tra i chunk, perdendo il contesto vitale che si trova a cavallo tra due blocchi.
-
Soffrire dell'effetto "lost in the middle", inserendo i chunk più importanti nel mezzo di un prompt enorme.
# Esempio di implementazione concettuale di Hybrid Search + Reranking
query = "Come configurare l'autenticazione?"
# 1. Hybrid Retrieval (Vector + Keyword)
vector_results = vector_store.similarity_search(query, k=10)
keyword_results = bm25_retriever.get_relevant_documents(query, k=10)
# 2. Merge e Deduplicazione
merged_docs = unique_merge(vector_results, keyword_results)
# 3. Reranking con Cross-Encoder
reranked_docs = cross_encoder.rank(query, merged_docs)
top_3_docs = reranked_docs[:3]
# 4. Generazione
response = llm.generate_answer(query, context=top_3_docs)
-
[ ] Implementazione e tuning della ricerca ibrida (BM25 + Vector)
-
[ ] Metriche del framework RAGAS (Faithfulness, Answer Relevance, Context Precision)
-
[ ] Pattern di Query Routing multi-database