RAG Avanzato: spiegazione di LongRAG, Self-RAG e GraphRAG
LongRAG, Self-RAG, GraphRAG: tecniche di prossima generazione
Generazione Aumentata da Recupero (RAG) è evoluta ben oltre la semplice ricerca di similarità vettoriale. LongRAG, Self-RAG e GraphRAG rappresentano l’avanguardia di queste capacità.
I sistemi RAG moderni devono gestire documenti massivi, comprendere relazioni complesse tra entità e molto altro.
Questa bella immagine è generata dal modello AI Flux 1 dev.
L’evoluzione oltre il RAG di base
I sistemi RAG tradizionali seguono un semplice schema: suddividere i documenti, incorporarli in vettori, recuperare frammenti simili tramite similarità coseno e inviarli a un LLM. Sebbene efficace per molti casi d’uso, questo approccio fatica con tre scenari critici:
Comprendere la distinzione tra ricerca, deepsearch e ricerca approfondita aiuta a chiarire perché le varianti RAG avanzate sono necessarie per compiti complessi di recupero delle informazioni. Per un’analisi più approfondita di questi concetti, consulta Ricerca vs Deepsearch vs Ricerca Approfondita.
- Dipendenze a lungo raggio: Contesti importanti potrebbero estendersi per migliaia di token attraverso più frammenti
- Fiducia nel recupero: Il sistema non ha modo di valutare se il contenuto recuperato è effettivamente rilevante
- Complessità delle relazioni: La similarità vettoriale non può catturare le connessioni intricate tra entità
Le varianti RAG avanzate affrontano queste limitazioni con architetture specializzate su misura per sfide specifiche.
LongRAG: Conquistare il Contesto Esteso
Panoramica dell’Architettura
LongRAG ripensa fondamentalmente la strategia di frammentazione (chunking) sfruttando LLM con finestre di contesto estese (32K, 100K o addirittura 1M token). Invece di suddividere i documenti in piccoli frammenti da 512 token, LongRAG utilizza un approccio gerarchico:
Incorporamento a livello di documento: L’intero documento (o sezioni molto grandi) viene elaborato come un’unica unità. Un incorporamento a livello di documento cattura il significato semantico generale, mantenendo contemporaneamente il testo completo per l’elaborazione a valle.
Frammentazione minima: Quando la frammentazione è necessaria, LongRAG utilizza frammenti molto più grandi (4K-8K token) con una sovrapposizione significativa (20-30%). Questo preserva il flusso narrativo e riduce la frammentazione del contesto.
Assemblaggio del contesto: Al momento del recupero, LongRAG restituisce documenti completi o sezioni coerenti di grandi dimensioni invece di frammenti sparsi. Il LLM riceve un contesto continuo che preserva le relazioni strutturali e semantiche.
Strategia di Implementazione
Ecco un’implementazione concettuale utilizzando Python e moderni modelli di incorporamento:
from typing import List, Dict
import numpy as np
class LongRAGRetriever:
def __init__(self, model, chunk_size=8000, overlap=1600):
self.model = model
self.chunk_size = chunk_size
self.overlap = overlap
self.doc_embeddings = []
self.documents = []
def create_long_chunks(self, text: str) -> List[str]:
"""Crea grandi frammenti con sovrapposizione"""
chunks = []
start = 0
while start < len(text):
end = start + self.chunk_size
chunk = text[start:end]
chunks.append(chunk)
start += (self.chunk_size - self.overlap)
return chunks
def index_document(self, doc: str, metadata: Dict):
"""Indicizza il documento con incorporamento gerarchico"""
# Incorpora l'intero documento
doc_embedding = self.model.embed(doc)
# Crea grandi frammenti con sovrapposizione
chunks = self.create_long_chunks(doc)
chunk_embeddings = [self.model.embed(c) for c in chunks]
self.doc_embeddings.append({
'doc_id': len(self.documents),
'doc_embedding': doc_embedding,
'chunk_embeddings': chunk_embeddings,
'chunks': chunks,
'full_text': doc,
'metadata': metadata
})
self.documents.append(doc)
def retrieve(self, query: str, top_k: int = 3) -> List[Dict]:
"""Recupera contenuti lunghi pertinenti"""
query_embedding = self.model.embed(query)
# Valuta prima a livello di documento
doc_scores = [
np.dot(query_embedding, doc['doc_embedding'])
for doc in self.doc_embeddings
]
# Ottieni i documenti migliori
top_doc_indices = np.argsort(doc_scores)[-top_k:][::-1]
results = []
for idx in top_doc_indices:
doc_data = self.doc_embeddings[idx]
# Per ogni documento, trova i migliori frammenti
chunk_scores = [
np.dot(query_embedding, emb)
for emb in doc_data['chunk_embeddings']
]
best_chunk_idx = np.argmax(chunk_scores)
# Restituisce il contesto esteso attorno al miglior frammento
context_chunks = self._get_extended_context(
doc_data['chunks'],
best_chunk_idx
)
results.append({
'text': ''.join(context_chunks),
'score': doc_scores[idx],
'metadata': doc_data['metadata']
})
return results
def _get_extended_context(self, chunks: List[str],
center_idx: int) -> List[str]:
"""Ottieni il contesto esteso attorno al frammento rilevante"""
start = max(0, center_idx - 1)
end = min(len(chunks), center_idx + 2)
return chunks[start:end]
Casi d’uso e Prestazioni
LongRAG eccelle negli scenari in cui il contesto è fondamentale:
- Analisi di documenti legali: Contratti e brevi legali hanno spesso dipendenze che si estendono per decine di pagine
- Recupero di paper di ricerca: Comprendere la metodologia richiede sezioni coerenti, non paragrafi isolati
- Repository di codice: Funzioni e classi devono essere comprese nel contesto del loro modulo
Caratteristiche delle prestazioni:
- Latenza: Più alta a causa dell’elaborazione di grandi frammenti (2-5 volte più lento rispetto al RAG standard)
- Accuratezza: Miglioramento del 15-25% nei benchmark QA a lungo formato
- Memoria: Richiede 3-4 volte più memoria per le finestre di contesto
Self-RAG: Recupero Riflessivo
Principi Fondamentali
Self-RAG introduce un livello metacognitivo ai sistemi RAG. Invece di recuperare e generare ciecamente, il sistema riflette attivamente sui propri processi attraverso token di riflessione speciali:
Token Retrieve: Decide se il recupero è necessario per una determinata query Token Relevance: Valuta se i documenti recuperati sono effettivamente rilevanti Token Support: Verifica se la risposta generata è supportata dal contenuto recuperato Token Critique: Valuta la qualità complessiva della risposta generata
Componenti dell’Architettura
L’architettura Self-RAG consiste in tre fasi intrecciate:
class SelfRAGSystem:
def __init__(self, retriever, generator, critic):
self.retriever = retriever
self.generator = generator
self.critic = critic
def generate_with_reflection(self, query: str,
max_iterations: int = 3):
"""Genera risposta con autoriflessione"""
# Fase 1: Decide se è necessario il recupero
retrieve_decision = self.critic.should_retrieve(query)
if not retrieve_decision:
# Generazione diretta senza recupero
return self.generator.generate(query)
# Fase 2: Recupera e valuta la rilevanza
retrieved_docs = self.retriever.retrieve(query)
relevant_docs = []
for doc in retrieved_docs:
relevance_score = self.critic.assess_relevance(
query, doc
)
if relevance_score > 0.7: # Soglia
relevant_docs.append(doc)
if not relevant_docs:
# Fallback alla generazione senza recupero
return self.generator.generate(query)
# Fase 3: Genera e verifica il supporto
best_answer = None
best_score = -1
for _ in range(max_iterations):
# Genera risposta candidata
answer = self.generator.generate(
query, context=relevant_docs
)
# Valuta supporto e qualità
support_score = self.critic.check_support(
answer, relevant_docs
)
quality_score = self.critic.assess_quality(answer)
total_score = 0.6 * support_score + 0.4 * quality_score
if total_score > best_score:
best_score = total_score
best_answer = answer
# Arresto anticipato se è stata raggiunta un'alta qualità
if total_score > 0.9:
break
return {
'answer': best_answer,
'confidence': best_score,
'sources': relevant_docs,
'reflections': {
'retrieved': retrieve_decision,
'relevance': len(relevant_docs),
'support': support_score
}
}
Addestramento dei Meccanismi di Riflessione
Self-RAG richiede l’addestramento del componente critico per effettuare valutazioni affidabili. Questo tipicamente coinvolge:
- Affinamento supervisionato su dataset annotati con giudizi di rilevanza
- Apprendimento per rinforzo con ricompense per previsioni accurate
- Apprendimento contrastivo per distinguere affermazioni supportate da quelle non supportate
I token di riflessione possono essere implementati come:
- Token speciali nel vocabolario (come
[RETRIEVE],[RELEVANT]) - Teste di classificazione separate sul modello
- Modelli critici esterni (approccio ensemble)
Considerazioni per la Produzione
Quando si distribuisce Self-RAG in sistemi di produzione:
Compromessi di latenza: Ogni passo di riflessione aggiunge un sovraccarico di inferenza del 20-40%. Bilanciare la completezza con i requisiti di tempo di risposta.
Soglie di confidenza: Regolare le soglie di riflessione in base al caso d’uso. Le applicazioni legali o mediche richiedono una maggiore confidenza rispetto ai chatbot generali.
Monitoraggio: Tracciare le decisioni di riflessione per identificare modelli. Se il recupero è raramente necessario, si potrebbe beneficiare di un’architettura più semplice.
GraphRAG: Recupero Potenziato da Grafi della Conoscenza
Fondamento Concettuale
GraphRAG trasforma il problema del recupero dalla similarità vettoriale alla traversata di grafi. Invece di trovare frammenti di testo semanticamente simili, GraphRAG identifica sottografi rilevanti di entità e relazioni connesse.
Estrazione di Entità: Identificare entità nominate, concetti e i loro tipi Mappatura delle Relazioni: Estrarre relazioni tra entità (temporali, causali, gerarchiche) Costruzione del Grafo: Costruire un grafo della conoscenza con entità come nodi e relazioni come archi Recupero del Sottografo: Data una query, trovare sottografi connessi rilevanti
Pipeline di Costruzione del Grafo
Costruire un grafo della conoscenza da testo non strutturato coinvolve diverse fasi:
class GraphRAGBuilder:
def __init__(self, entity_extractor, relation_extractor):
self.entity_extractor = entity_extractor
self.relation_extractor = relation_extractor
self.graph = NetworkGraph()
def build_graph(self, documents: List[str]):
"""Costruisci un grafo della conoscenza dai documenti"""
for doc in documents:
# Estrai entità
entities = self.entity_extractor.extract(doc)
# Aggiungi entità come nodi
for entity in entities:
self.graph.add_node(
entity['text'],
entity_type=entity['type'],
context=entity['surrounding_text']
)
# Estrai relazioni
relations = self.relation_extractor.extract(
doc, entities
)
# Aggiungi relazioni come archi
for rel in relations:
self.graph.add_edge(
rel['source'],
rel['target'],
relation_type=rel['type'],
confidence=rel['score'],
evidence=rel['text_span']
)
def enrich_graph(self):
"""Aggiungi relazioni derivate e metadati"""
# Calcola l'importanza dei nodi (PageRank, ecc.)
self.graph.compute_centrality()
# Identifica comunità/cluster
self.graph.detect_communities()
# Aggiungi ordinamento temporale se sono disponibili timestamp
self.graph.add_temporal_edges()
Elaborazione delle Query con Grafi
Le query GraphRAG coinvolgono ragionamento multi-hop attraverso il grafo della conoscenza:
class GraphRAGRetriever:
def __init__(self, graph, embedder):
self.graph = graph
self.embedder = embedder
def retrieve_subgraph(self, query: str,
max_hops: int = 2,
max_nodes: int = 50):
"""Recupera sottografo rilevante per la query"""
# Identifica entità seme nella query
query_entities = self.entity_extractor.extract(query)
# Trova nodi corrispondenti nel grafo
seed_nodes = []
for entity in query_entities:
matches = self.graph.find_similar_nodes(
entity['text'],
similarity_threshold=0.85
)
seed_nodes.extend(matches)
# Espandi il sottografo tramite traversata
subgraph = self.graph.create_subgraph()
visited = set()
for seed in seed_nodes:
self._expand_from_node(
seed,
subgraph,
visited,
current_hop=0,
max_hops=max_hops
)
# Classifica i nodi per rilevanza
ranked_nodes = self._rank_subgraph_nodes(
subgraph, query
)
# Estrai e formatta il contesto
context = self._format_graph_context(
ranked_nodes[:max_nodes],
subgraph
)
return context
def _expand_from_node(self, node, subgraph, visited,
current_hop, max_hops):
"""Espandi ricorsivamente il sottografo"""
if current_hop >= max_hops or node in visited:
return
visited.add(node)
subgraph.add_node(node)
# Ottieni vicini
neighbors = self.graph.get_neighbors(node)
for neighbor, edge_data in neighbors:
# Aggiungi arco al sottografo
subgraph.add_edge(node, neighbor, edge_data)
# Espandi ricorsivamente
self._expand_from_node(
neighbor,
subgraph,
visited,
current_hop + 1,
max_hops
)
def _format_graph_context(self, nodes, subgraph):
"""Converti il sottografo in contesto testuale"""
context_parts = []
for node in nodes:
# Aggiungi contesto del nodo
context_parts.append(f"Entità: {node.text}")
context_parts.append(f"Tipo: {node.entity_type}")
# Aggiungi informazioni sulle relazioni
edges = subgraph.get_edges(node)
for edge in edges:
context_parts.append(
f"- {edge.relation_type} -> {edge.target.text}"
)
return "\n".join(context_parts)
Implementazione GraphRAG di Microsoft
GraphRAG di Microsoft adotta un approccio unico generando riassunti delle comunità:
- Costruisci il grafo iniziale dai documenti utilizzando l’estrazione di entità/relazioni basata su LLM
- Rileva comunità utilizzando l’algoritmo Leiden o simili
- Genera riassunti per ogni comunità utilizzando LLM
- Struttura gerarchica: Costruisci più livelli di astrazioni di comunità
- Momento della query: Recupera comunità rilevanti e attraversa verso entità specifiche
Questo approccio è particolarmente efficace per:
- Query esplorative (“Quali sono i temi principali in questo corpus?”)
- Ragionamento multi-hop (“Come è collegato A a C attraverso B?”)
- Analisi temporale (“Come sono evolute le relazioni di questa entità?”)
Analisi Comparativa
Quando Utilizzare Ogni Variante
Utilizza LongRAG quando:
- I documenti hanno una forte coerenza interna
- Le finestre di contesto del tuo LLM supportano input grandi (32K+)
- Le risposte alle query richiedono la comprensione di dipendenze a lungo raggio
- Stai lavorando con documenti strutturati (report, paper, libri)
Utilizza Self-RAG quando:
- Accuratezza e affidabilità sono critiche
- Hai bisogno di decisioni di recupero spiegabili
- I falsi positivi dal recupero irrilevante sono costosi
- La complessità delle query varia ampiamente (alcune richiedono recupero, altre no)
Utilizza GraphRAG quando:
- Il tuo dominio ha ricche relazioni tra entità
- Le query coinvolgono ragionamento multi-hop
- Le relazioni temporali o gerarchiche sono importanti
- Hai bisogno di comprendere le connessioni tra entità
Confronto delle Metriche di Prestazioni
| Metrica | RAG Standard | LongRAG | Self-RAG | GraphRAG |
|---|---|---|---|---|
| Tempo di Indicizzazione | 1x | 0.8x | 1.1x | 3-5x |
| Latenza Query | 1x | 2-3x | 1.4x | 1.5-2x |
| Utilizzo Memoria | 1x | 3-4x | 1.2x | 2-3x |
| Accuratezza (QA) | baseline | +15-25% | +20-30% | +25-40%* |
| Interpretabilità | Bassa | Media | Alta | Alta |
*I miglioramenti di GraphRAG sono altamente dipendenti dal dominio
Approcci Ibridi
I sistemi di produzione più potenti spesso combinano più tecniche:
LongRAG + GraphRAG: Utilizza la struttura del grafo per identificare cluster di documenti rilevanti, poi recupera documenti completi invece di frammenti
Self-RAG + GraphRAG: Applica meccanismi di riflessione alle decisioni di traversata del grafo (quali percorsi seguire, quando fermare l’espansione)
Pipeline a tre stadi: Usa GraphRAG per il recupero iniziale basato su entità → Self-RAG per il filtraggio della rilevanza → LongRAG per l’assemblaggio del contesto
Considerazioni di Implementazione
Modelli di Incorporamento
Diverse varianti RAG hanno requisiti di incorporamento diversi:
LongRAG: Ha bisogno di incorporamenti che funzionino bene sia a livello di documento che a livello di frammento. Considera modelli addestrati con apprendimento contrastivo su sequenze lunghe.
Self-RAG: Beneficia di incorporamenti che catturano sfumature semantiche per una valutazione della rilevanza fine.
GraphRAG: Richiede incorporamenti consapevoli delle entità. I modelli affinati su compiti di collegamento di entità performano meglio.
La scelta del modello di incorporamento impatta significativamente le prestazioni. Quando si lavora con modelli locali, strumenti come Ollama offrono un modo semplice per sperimentare con diversi modelli di incorporamento prima di impegnarsi in una distribuzione di produzione.
Strategie di Frammentazione Riconsiderate
La frammentazione di dimensioni fisse tradizionale è insufficiente per il RAG avanzato:
Frammentazione semantica: Spezza ai confini naturali (paragrafi, sezioni, cambi di argomento) Frammentazione ricorsiva: Crea frammenti gerarchici con relazioni genitore-figlio Finestra scorrevole: Usa frammenti sovrapposti per preservare il contesto ai confini Consapevole della struttura: Rispetta la struttura del documento (intestazioni markdown, tag XML, blocchi di codice)
Per implementazioni basate su Python, librerie come LangChain e LlamaIndex offrono supporto integrato per queste strategie di frammentazione.
Integrazione del Reranking
Il reranking migliora drasticamente la qualità del recupero in tutte le varianti RAG. Dopo il recupero iniziale, un modello di reranking specializzato ri-punteggia i risultati in base alle caratteristiche di interazione query-documento. Questo fornisce un significativo aumento di accuratezza (10-20%) con un impatto minimo sulla latenza quando integrato con giudizio.
Scalabilità per la Produzione
Pipeline di indicizzazione:
- Utilizza l’elaborazione distribuita (Ray, Dask) per grandi corpora di documenti
- Implementa l’indicizzazione incrementale per aggiornamenti in tempo reale
- Archivia incorporamenti in database vettoriali ottimizzati (Pinecone, Weaviate, Qdrant)
Ottimizzazione delle query:
- Metti in cache le query frequenti e i loro risultati
- Implementa il instradamento delle query (diverse varianti RAG per diversi tipi di query)
- Utilizza la ricerca del vicino più prossimo approssimato per una scalabilità sub-lineare
Monitoraggio:
- Traccia i punteggi di rilevanza del recupero
- Monitora le decisioni di riflessione in Self-RAG
- Misura i percorsi e le profondità di traversata del grafo
- Registra i punteggi di confidenza e il feedback degli utenti
Applicazioni nel Mondo Reale
Ricerca nella Documentazione Tecnica
Un importante provider cloud ha implementato GraphRAG per la propria documentazione:
- Entità: endpoint API, parametri, codici di errore, nomi dei servizi
- Relazioni: dipendenze, compatibilità delle versioni, percorsi di migrazione
- Risultato: Riduzione del 35% dei ticket di supporto, tempi di risoluzione del 45% più rapidi
Discovery Legale
Un’azienda di legal tech ha combinato Self-RAG con LongRAG:
- Self-RAG filtra i documenti irrilevanti precocemente
- LongRAG preserva il contesto nei documenti trattenuti
- Gli avvocati esaminano il 60% in meno di falsi positivi
- La preservazione del contesto critico è migliorata dal 71% al 94%
Revisione della Letteratura di Ricerca
Motore di ricerca accademico che utilizza un approccio ibrido:
- GraphRAG identifica reti di citazioni e comunità di ricerca
- LongRAG recupera sezioni complete mantenendo il contesto della metodologia
- Miglioramento del 40% nella scoperta di paper rilevanti
- Riduzione del tempo per la revisione della letteratura da settimane a giorni
Argomenti Avanzati
RAG Multimodale
Estendere queste varianti per gestire immagini, tabelle e codice:
- Grounding visivo: Collega entità testuali a immagini nei documenti
- Comprensione delle tabelle: Analizza dati strutturati in formato grafo
- Analisi del codice: Costruisci grafi di dipendenze da codebase
RAG Adattivo
Selezione dinamica della strategia RAG in base alle caratteristiche della query:
- Classificatore di complessità della query
- Rilevatore del tipo di documento
- Ottimizzatore costi-benefici per la selezione della strategia
RAG che Preserva la Privacy
Implementare queste varianti con vincoli di privacy:
- Recupero federato attraverso silos di dati
- Privacy differenziale negli incorporamenti
- Ricerca di similarità cifrata
Per Iniziare
Avvio Rapido con Python
Per chi cerca di implementare queste tecniche, iniziare con una solida base Python è essenziale. L’ecosistema ricco di Python per l’apprendimento automatico lo rende la scelta naturale per lo sviluppo RAG.
Ecco un semplice punto di partenza per la sperimentazione:
# Installa le dipendenze
# pip install sentence-transformers faiss-cpu langchain
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
# Configurazione di base per sperimentare con frammenti lunghi
model = SentenceTransformer('all-MiniLM-L6-v2')
documents = [
# I tuoi documenti a lungo formato qui
]
# Crea incorporamenti
embeddings = model.encode(documents)
# Costruisci indice FAISS
dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(embeddings.astype('float32'))
# Query
query = "La tua domanda qui"
query_embedding = model.encode([query])
distances, indices = index.search(
query_embedding.astype('float32'), k=3
)
Selezione del Framework
LangChain: Migliore per il prototipazione rapida, integrazioni estese LlamaIndex: Ottimizzato per indicizzazione e recupero di documenti Haystack: Pronto per la produzione, forti astrazioni di pipeline Personalizzato: Quando hai bisogno di controllo totale e ottimizzazione
Framework di Valutazione
Implementa una valutazione rigorosa prima della distribuzione in produzione:
Metriche di recupero:
- Precision@K, Recall@K, MRR (Mean Reciprocal Rank)
- NDCG (Normalized Discounted Cumulative Gain)
Metriche di generazione:
- ROUGE, BLEU per similarità testuale
- BERTScore per similarità semantica
- Valutazione umana per l’assessment della qualità
Metriche end-to-end:
- Tasso di successo del compito
- Punteggi di soddisfazione dell’utente
- Percentili di latenza (p50, p95, p99)
Conclusione
Il panorama dei sistemi RAG si è evoluto significativamente oltre la semplice ricerca di similarità vettoriale. LongRAG, Self-RAG e GraphRAG affrontano ciascuno limitazioni specifiche degli approcci tradizionali:
LongRAG risolve il problema della frammentazione del contesto abbracciando finestre di contesto estese e una frammentazione minima. È la scelta di riferimento quando la coerenza del documento è importante e hai le risorse computazionali per gestire contesti grandi.
Self-RAG aggiunge una consapevolezza critica ai sistemi di recupero. Riflettendo sulle proprie decisioni, riduce i falsi positivi e migliora l’affidabilità, essenziale per applicazioni ad alto rischio dove l’accuratezza conta più della velocità.
GraphRAG sblocca il potere della rappresentazione della conoscenza strutturata. Quando il tuo dominio coinvolge relazioni complesse tra entità, il recupero basato su grafi può far emergere connessioni che la similarità vettoriale perde completamente.
Il futuro del RAG probabilmente coinvolgerà approcci ibridi che combinano i punti di forza di queste varianti. Un sistema di produzione potrebbe utilizzare GraphRAG per identificare cluster di entità rilevanti, Self-RAG per filtrare e validare i recuperi, e LongRAG per assemblare un contesto coerente per il LLM.
Man mano che i LLM continuano a migliorare e le finestre di contesto si espandono, vedremo emergere varianti RAG ancora più sofisticate. La chiave è comprendere i requisiti specifici del proprio caso d’uso—struttura dei documenti, modelli di query, richieste di accuratezza e vincoli computazionali—e selezionare la tecnica appropriata o la combinazione delle stesse.
L’ecosistema degli strumenti sta maturando rapidamente, con framework come LangChain, LlamaIndex e Haystack che offrono supporto sempre più sofisticato per questi schemi avanzati. Combinato con potenti runtime locali per LLM e modelli di incorporamento, non è mai stato così facile sperimentare e distribuire sistemi RAG di livello produzione.
Inizia dalle basi, misura le prestazioni rigorosamente ed evolve la tua architettura man mano che i requisiti lo dettano. Le varianti RAG avanzate trattate qui forniscono una roadmap per questa evoluzione.
Link Utili
- Reranking con modelli di incorporamento
- LLM e Output Strutturato: Ollama, Qwen3 & Python o Go
- Provider Cloud LLM
- Confronto LLM: Qwen3:30b vs GPT-OSS:20b
- Tutorial RAG passo-passo
- Confronto della frammentazione in RAG
- Confronto di database vettoriali per RAG
Riferimenti Esterni
- Microsoft GraphRAG: A Modular Graph-Based Retrieval-Augmented Generation System
- Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection
- LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs
- Retrieval-Augmented Generation for Large Language Models: A Survey
- FAISS: A Library for Efficient Similarity Search
- Documentazione LangChain: Tecniche RAG Avanzate
- HuggingFace: Sentence Transformers for Embedding Models
- RAG Survey: A Comprehensive Analysis of Retrieval Augmented Generation