Avancerad RAG: En förklaring av LongRAG, Self-RAG och GraphRAG
LongRAG, Self-RAG, GraphRAG – nästa generations teknik
Retrieval-Augmented Generation (RAG) har utvecklats långt bortom enkel vektorbaserad likhetssökning. LongRAG, Self-RAG och GraphRAG representerar framkanten av dessa möjligheter.
[Moderna RAG-system](https://www.glukhov.org/sv/rag/ “RAG-tutorial: bygg retrieval-augmented generation-system med vektordatabaser, hybrid sökning, omrangering och webbsökning. Arkitektur, implementering och bästa praxis för produktion) måste hantera enorma dokument, förstå komplexa entitetsrelationer och mycket mer.
Den här fina bilden är genererad av AI-modellen Flux 1 dev.
Utvecklingen bortom grundläggande RAG
Traditionella RAG-system följer ett enkelt mönster: dela in dokument i bitar (chunks), mappa in dem till vektorer, hämta liknande bitar via cosinuslikhet och mata dem till en LLM. Även om detta är effektivt för många användningsområden, har detta tillvägagångssätt svårt med tre kritiska scenarier:
Att förstå skillnaden mellan sökning, djupsökning och djupforskning hjälper till att förklara varför avancerade RAG-varianters är nödvändiga för komplexa informationshämtning. För en djupare analys av dessa koncept, se Sökning vs Djupsökning vs Djupforskning.
- Långdistansberoenden: Viktig kontext kan sträcka sig över tusentals token över flera bitar
- Hämtningsförtroende: Systemet har inget sätt att bedöma om det hämtade innehållet faktiskt är relevant
- Relationskomplexitet: Vektorlikhet kan inte fånga intrikata kopplingar mellan entiteter
Avancerade RAG-varianters tar itu med dessa begränsningar genom specialiserade arkitekturer anpassade för specifika utmaningar.
LongRAG: Erofrar utökad kontext
Arkitekturöversikt
LongRAG tänker om chunking-strategin grundläggande genom att utnyttja LLM:er med utökade kontextfönster (32K, 100K eller till och med 1M token). Istället för att bryta dokumentet i små bitar på 512 token, använder LongRAG en hierarkisk approach:
Dokumentnivå-embedding: Hela dokumentet (eller mycket stora sektioner) bearbetas som en enhet. En dokumentnivå-embedding fångar den övergripande semantiska betydelsen, samtidigt som fulltexten bevaras för nedströms bearbetning.
Minimal fragmentering: När chunking är nödvändigt använder LongRAG mycket större bitar (4K-8K token) med betydande överlappning (20-30%). Detta bevarar narrativ flöde och minskar kontextfragmentering.
Kontextsammanställning: Vid hämtningstidpunkt returnerar LongRAG kompletta dokument eller stora sammanhängande sektioner snarare än spridda fragment. LLM:en får kontinuerlig kontext som bevarar strukturella och semantiska relationer.
Implementeringsstrategi
Här är en konceptuell implementering med Python och moderna inbäddningsmodeller:
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]:
"""Skapa överlappande stora bitar"""
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):
"""Indexera dokument med hierarkisk inbäddning"""
# Inbädda hela dokumentet
doc_embedding = self.model.embed(doc)
# Skapa stora bitar med överlappning
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]:
"""Hämta relevant långformat innehåll"""
query_embedding = self.model.embed(query)
# Poängsätt på dokumentnivå först
doc_scores = [
np.dot(query_embedding, doc['doc_embedding'])
for doc in self.doc_embeddings
]
# Hämta toppdokument
top_doc_indices = np.argsort(doc_scores)[-top_k:][::-1]
results = []
for idx in top_doc_indices:
doc_data = self.doc_embeddings[idx]
# För varje dokument, hitta bästa bitar
chunk_scores = [
np.dot(query_embedding, emb)
for emb in doc_data['chunk_embeddings']
]
best_chunk_idx = np.argmax(chunk_scores)
# Returnera utökad kontext runt bästa bit
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]:
"""Hämta utökad kontext runt relevant bit"""
start = max(0, center_idx - 1)
end = min(len(chunks), center_idx + 2)
return chunks[start:end]
Användningsfall och prestanda
LongRAG excellerar i scenarier där kontext är viktig:
- Analys av juridiska dokument: Kontrakt och juridiska sammanfattningar har ofta beroenden som sträcker sig över tiotals sidor
- Hämtning av forskningsartiklar: Att förstå metodologi kräver sammanhängande sektioner, inte isolerade stycken
- Kodarkiv: Funktioner och klasser måste förstås inom sin modulkontext
Prestadagegenskaper:
- Länsansvarighet: Högre på grund av bearbetning av stora bitar (2-5x långsammare än standard RAG)
- Noggrannhet: 15-25% förbättring på långformat QA-benchmarks
- Minnesanvändning: Kräver 3-4x mer minne för kontextfönster
Self-RAG: Reflekterande hämtning
Grundläggande principer
Self-RAG introducerar ett metakognitivt lager till RAG-system. Istället för att hämta och generera blindt, reflekterar systemet aktivt över sina egna processer genom specialiserade reflektionstoken:
Retrieve-token: Bestämmer om hämtning är nödvändig för en given förfrågan Relevance-token: Utvärderar om de hämtade dokumenten faktiskt är relevanta Support-token: Kontrollerar om det genererade svaret stöds av det hämtade innehållet Critique-token: Bedömer den övergripande kvaliteten på det genererade svaret
Arkitekturkomponenter
Self-RAG-arkitekturen består av tre växelverkande faser:
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):
"""Generera svar med självreflektion"""
# Fas 1: Bestäm om hämtning behövs
retrieve_decision = self.critic.should_retrieve(query)
if not retrieve_decision:
# Direkt generation utan hämtning
return self.generator.generate(query)
# Fas 2: Hämta och utvärdera relevans
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: # Tröskelvärde
relevant_docs.append(doc)
if not relevant_docs:
# Fallback till generation utan hämtning
return self.generator.generate(query)
# Fas 3: Generera och verifiera stöd
best_answer = None
best_score = -1
for _ in range(max_iterations):
# Generera kandidat-svar
answer = self.generator.generate(
query, context=relevant_docs
)
# Utvärdera stöd och kvalitet
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
# Tidig avslutning om hög kvalitet uppnåtts
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
}
}
Utbildning av reflektionsmekanismer
Self-RAG kräver utbildning av kritiker-komponenten för att göra pålitliga bedömningar. Detta innebär vanligtvis:
- Övervakad finjustering på datamängder annoterade med relevansbedömningar
- Förstärkningsinlärning med belöningar för noggranna förutsägelser
- Kontrastiv inlärning för att skilja mellan stödda och icke-stödda påståenden
Reflektionstoken kan implementeras som:
- Specialtoken i vokabulären (som
[RETRIEVE],[RELEVANT]) - Separata klassificeringshuvuden på modellen
- Externa kritikermodeller (ensemble-ansats)
Produktionsoverväganden
Vid implementering av Self-RAG i produktionssystem:
Länsansvarighetsavvägningar: Varje reflektionssteg lägger till 20-40% inferensöverhuvud. Balansera noggrannhet med krav på svarstid.
Förtroendetrösklar: Justera reflektionströsklar baserat på ditt användningsområde. Juridiska eller medicinska applikationer behöver högre förtroende än allmänna chattbotar.
Övervakning: Spåra reflektionsbeslut för att identifiera mönster. Om hämtning sällan behövs kan du dra nytta av en enklare arkitektur.
GraphRAG: Hämtning förbättrad med kunskapsgrafer
Konceptuell grund
GraphRAG transformerar hämtningsproblemet från vektorlikhet till grafförvandling. Istället för att hitta semantiskt liknande textbitar, identifierar GraphRAG relevanta undergrafer av kopplade entiteter och relationer.
Entitetsextraktion: Identifiera namngivna entiteter, koncept och deras typer Relationsmappning: Extrahera relationer mellan entiteter (temporala, orsakssammanhang, hierarkiska) Grafförsamling: Bygg en kunskapsgraf med entiteter som noder och relationer som kanter Undergrafhämtning: Givet en förfrågan, hitta relevanta sammanlänkade undergrafer
Grafförsamlingspipeline
Att bygga en kunskapsgraf från ostrukturerad text innebär flera steg:
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]):
"""Bygg kunskapsgraf från dokument"""
for doc in documents:
# Extrahera entiteter
entities = self.entity_extractor.extract(doc)
# Lägg till entiteter som noder
for entity in entities:
self.graph.add_node(
entity['text'],
entity_type=entity['type'],
context=entity['surrounding_text']
)
# Extrahera relationer
relations = self.relation_extractor.extract(
doc, entities
)
# Lägg till relationer som kanter
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):
"""Lägg till härledda relationer och metadata"""
# Beräkna nodvikt (PageRank, etc.)
self.graph.compute_centrality()
# Identifiera samhällen/kluster
self.graph.detect_communities()
# Lägg till temporala ordningar om tidsstämplar finns tillgängliga
self.graph.add_temporal_edges()
Förfråganbearbetning med grafer
GraphRAG-förfrågningar innebär multi-hop resonemang över kunskapsgrafen:
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):
"""Hämta relevant undergraf för förfrågan"""
# Identifiera fröentiteter i förfrågan
query_entities = self.entity_extractor.extract(query)
# Hitta matchande noder i grafen
seed_nodes = []
for entity in query_entities:
matches = self.graph.find_similar_nodes(
entity['text'],
similarity_threshold=0.85
)
seed_nodes.extend(matches)
# Expandera undergraf via förvandling
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
)
# Ranka noder efter relevans
ranked_nodes = self._rank_subgraph_nodes(
subgraph, query
)
# Extrahera och formatera kontext
context = self._format_graph_context(
ranked_nodes[:max_nodes],
subgraph
)
return context
def _expand_from_node(self, node, subgraph, visited,
current_hop, max_hops):
"""Expandera undergraf rekursivt"""
if current_hop >= max_hops or node in visited:
return
visited.add(node)
subgraph.add_node(node)
# Hämta grannar
neighbors = self.graph.get_neighbors(node)
for neighbor, edge_data in neighbors:
# Lägg till kant i undergraf
subgraph.add_edge(node, neighbor, edge_data)
# Expandera rekursivt
self._expand_from_node(
neighbor,
subgraph,
visited,
current_hop + 1,
max_hops
)
def _format_graph_context(self, nodes, subgraph):
"""Konvertera undergraf till textuell kontext"""
context_parts = []
for node in nodes:
# Lägg till nodkontext
context_parts.append(f"Entitet: {node.text}")
context_parts.append(f"Typ: {node.entity_type}")
# Lägg till relationsinformation
edges = subgraph.get_edges(node)
for edge in edges:
context_parts.append(
f"- {edge.relation_type} -> {edge.target.text}"
)
return "\n".join(context_parts)
Microsofts GraphRAG-implementering
Microsofts GraphRAG tar ett unikt tillvägagångssätt genom att generera sammanfattningar för samhällen:
- Bygg initial graf från dokument med LLM-baserad entitets-/relationsextraktion
- Detektera samhällen med Leiden-algoritm eller liknande
- Generera sammanfattningar för varje samhälle med LLM:er
- Hierarkisk struktur: Bygg flera nivåer av samhällsabstraktioner
- Hämtningstidpunkt: Hämta relevanta samhällen och förvandla till specifika entiteter
Detta tillvägagångssätt är särskilt effektivt för:
- Utforskande förfrågningar (“Vilka är huvudteman i denna korpus?”)
- Multi-hop resonemang (“Hur är A kopplad till C genom B?”)
- Temporalt analys (“Hur utvecklades denna entitets relationer?”)
Jämförande analys
När man ska använda varje variant
Använd LongRAG när:
- Dokument har stark intern sammanhållning
- Kontextfönster i din LLM stöder stora inmatningar (32K+)
- Svarsfrågor kräver förståelse för långdistansberoenden
- Du arbetar med strukturerade dokument (rapporter, artiklar, böcker)
Använd Self-RAG när:
- Noggrannhet och tillförlitlighet är kritiska
- Du behöver förklarbara hämtningsbeslut
- Falska positiva från irrelevant hämtning är kostsamma
- Förfrågan komplexitet varierar kraftigt (vissa behöver hämtning, andra inte)
Använd GraphRAG när:
- Din domän har rika entitetsrelationer
- Förfrågningar involverar multi-hop resonemang
- Temporala eller hierarkiska relationer är viktiga
- Du behöver förstå kopplingar mellan entiteter
Jämförelse av prestandamätningar
| Mätare | Standard RAG | LongRAG | Self-RAG | GraphRAG |
|---|---|---|---|---|
| Indexeringstid | 1x | 0.8x | 1.1x | 3-5x |
| Förfråganlänsansvarighet | 1x | 2-3x | 1.4x | 1.5-2x |
| Minnesanvändning | 1x | 3-4x | 1.2x | 2-3x |
| Noggrannhet (QA) | baslinje | +15-25% | +20-30% | +25-40%* |
| Förklarbarhet | Låg | Medel | Hög | Hög |
*GraphRAG-förbättringar är starkt domänberoende
Hybridmetoder
De mest kraftfulla produktionssystemen kombinerar ofta flera tekniker:
LongRAG + GraphRAG: Använd graffstruktur för att identifiera relevanta dokumentkluster, hämta sedan hela dokument snarare än fragment
Self-RAG + GraphRAG: Tillämpa reflektionsmekanismer på grafförvandlingsbeslut (vilka vägar ska följas, när ska expansion stoppas)
Trestegspipeline: Använd GraphRAG för initial entitetsbaserad hämtning → Self-RAG för relevansfiltrering → LongRAG för kontextsammanställning
Implementeringsoverväganden
Inbäddningsmodeller
Olika RAG-varianters har olika krav på inbäddningar:
LongRAG: Behöver inbäddningar som fungerar väl både på dokumentnivå och bitnivå. Överväg modeller tränade med kontrastiv inlärning på långa sekvenser.
Self-RAG: Dra nytta av inbäddningar som fångar semantiska nyanser för finjusterad relevansbedömning.
GraphRAG: Kräver entitetsmedvetna inbäddningar. Modeller finjusterade på entitetslänkningsuppgifter presterar bättre.
Valet av inbäddningsmodell påverkar prestanda avsevärt. När man arbetar med lokala modeller erbjuder verktyg som Ollama ett rakt framåt sätt att experimentera med olika inbäddningsmodeller innan man åtar sig en produktionssdeployment.
Chunking-strategier omprövade
Traditionell faststorleks chunking är otillräcklig för avancerad RAG:
Semantisk chunking: Dela vid naturliga gränser (stycken, sektioner, ämnesbyten) Rekursiv chunking: Skapa hierarkiska bitar med förälder-barn-relationer Glidande fönster: Använd överlappande bitar för att bevara kontext vid gränser Strukturmedveten: Respektera dokumentstruktur (markdown-rubriker, XML-taggar, kodblock)
För Python-baserade implementeringar erbjuder bibliotek som LangChain och LlamaIndex inbyggt stöd för dessa chunking-strategier.
Omrangeringsintegration
Omrangering förbättrar hämtningskvaliteten dramatiskt över alla RAG-varianters. Efter initial hämtning, återpoängsätter en specialiserad omrangeringsmodell resultaten baserat på förfrågan-dokument-interaktionsfunktioner. Detta ger en betydande noggrannhetsökning (10-20%) med minimal länsansvarighetpåverkan när det integreras med tanke.
Skalning till produktion
Indexeringspipeline:
- Använd distribuerad bearbetning (Ray, Dask) för stora dokumentkorpus
- Implementera inkrementell indexering för realtidsuppdateringar
- Lagra inbäddningar i optimerade vektordatabaser (Pinecone, Weaviate, Qdrant)
Förfråganoptimering:
- Cacha frekventa förfrågningar och deras resultat
- Implementera förfråganroutning (olika RAG-varianters för olika förfråganstyper)
- Använd approximativ närmaste grannsökning för sublinjär skalning
Övervakning:
- Spåra hämtningsrelevanspoäng
- Övervaka reflektionsbeslut i Self-RAG
- Mät grafförvandlingsvägar och djup
- Logga förtroendepoäng och användaråterkoppling
Verkliga tillämpningar
Sökning i teknisk dokumentation
En stor molnleverantör implementerade GraphRAG för sin dokumentation:
- Entiteter: API-endpunkter, parametrar, felkoder, tjänstenamn
- Relationer: Beroenden, versionskompatibiliteter, migrationsvägar
- Resultat: 35% minskning av supportärenden, 45% snabbare upplösningstid
Juridisk upptäckt
En juridisk teknikbolag kombinerade Self-RAG med LongRAG:
- Self-RAG filtrerar irrelevanta dokument tidigt
- LongRAG bevarar kontext i behållna dokument
- Advokater granskar 60% färre falska positiva
- Kritisk kontextbevaring förbättrades från 71% till 94%
Granskning av forskningslitteratur
Akademisk sökmotor som använder hybridapproach:
- GraphRAG identifierar citationnätverk och forskarsamhällen
- LongRAG hämtar hela sektioner som bevarar metodologikontext
- 40% förbättring i upptäckt av relevanta artiklar
- Minskad tid för litteraturgranskning från veckor till dagar
Avancerade ämnen
Multimodal RAG
Utvidgning av dessa varianters för att hantera bilder, tabeller och kod:
- Visuell grundläggning: Länka textentiteter till bilder i dokument
- Tabellförståelse: Parsa strukturerad data till grafformat
- Kodanalys: Bygg beroendgrafer från kodbas
Adaptiv RAG
Dynamisk val av RAG-strategi baserat på förfråganegenskaper:
- Förfrågan komplexitetsklassificerare
- Dokumenttypdetekterare
- Kostnadsfördelsoptimerare för strategival
Privatitetsskyddande RAG
Implementering av dessa varianters med privatitetsbegränsningar:
- Federerad hämtning över data-siloer
- Differentialprivatitet i inbäddningar
- Krypterad likhetssökning
Kom igång
Snabbstart med Python
För de som vill implementera dessa tekniker, att börja med en solid Python-grund är avgörande. Pythons rika ekosystem för maskininlärning gör det till det naturliga valet för RAG-utveckling.
Här är en enkel startpunkt för experiment:
# Installera beroenden
# pip install sentence-transformers faiss-cpu langchain
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
# Grundläggande uppsättning för experiment med långa bitar
model = SentenceTransformer('all-MiniLM-L6-v2')
documents = [
# Dina långformat dokument här
]
# Skapa inbäddningar
embeddings = model.encode(documents)
# Bygg FAISS-index
dimension = embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(embeddings.astype('float32'))
# Förfrågan
query = "Din fråga här"
query_embedding = model.encode([query])
distances, indices = index.search(
query_embedding.astype('float32'), k=3
)
Ramval
LangChain: Bäst för snabb prototypning, omfattande integrationer LlamaIndex: Optimerad för dokumentindexering och hämtning Haystack: Produktion redo, starka pipelineabstraktioner Anpassad: När du behöver full kontroll och optimering
Utvärderingsram
Implementera rigorös utvärdering innan produktionssdeployment:
Hämtningsmätningar:
- Precision@K, Recall@K, MRR (Medel Reciprocal Rank)
- NDCG (Normaliserad diskonterad kumulativ vinst)
Genereringsmätningar:
- ROUGE, BLEU för textlikhet
- BERTScore för semantisk likhet
- Mänsklig utvärdering för kvalitetsbedömning
End-to-end mätningar:
- Uppgiftstillgångsgrad
- Användarnöjdhetsscore
- Länsansvarighetspercentiler (p50, p95, p99)
Slutsats
Landskapet för RAG-system har mognat avsevärt bortom grundläggande vektorlikhetssökning. LongRAG, Self-RAG och GraphRAG adresserar specifika begränsningar hos traditionella tillvägagångssätt:
LongRAG löser kontextfragmenteringsproblemet genom att omfamna utökade kontextfönster och minimal chunking. Det är valet att gå till när dokumentkohärenser är viktigt och du har beräkningsresurser för att hantera stora kontexter.
Self-RAG lägger till kritisk självmedvetenhet till hämtningsystem. Genom att reflektera över sina egna beslut minskar det falska positiva och förbättrar tillförlitlighet – avgörande för högriskapplikationer där noggrannhet väger tyngre än hastighet.
GraphRAG låser upp kraften i strukturerad kunskapsrepresentation. När din domän involverar komplexa relationer mellan entiteter kan grafbaserad hämtning framkalla kopplingar som vektorlikhet helt missar.
Framtiden för RAG sannolikt involverar hybridmetoder som kombinerar styrkorna hos dessa varianters. Ett produktionssystem kan använda GraphRAG för att identifiera relevanta entitetskluster, Self-RAG för att filtrera och validera hämtningar, och LongRAG för att sammanställa sammanhängande kontext för LLM:en.
När LLM:er fortsätter att förbättras och kontextfönster expanderar, kommer vi att se ännu mer sofistikerade RAG-varianters dyka upp. Nyckeln är att förstå dina specifika användningskrav – dokumentstruktur, förfråganmönster, noggrannhetskrav och beräkningsbegränsningar – och välja rätt teknik eller kombination därav.
Verktygsekosystemet mognar snabbt, med ramverk som LangChain, LlamaIndex och Haystack som erbjuder alltmer sofistikerat stöd för dessa avancerade mönster. Kombinerat med kraftfulla lokala LLM-runtime och inbäddningsmodeller har det aldrig varit lättare att experimentera med och deploya produktionklass RAG-system.
Börja med grunderna, mät prestanda rigoröst och utveckla din arkitektur efterhand som kraven dikterar. De avancerade RAG-varianters som täcks här ger en vägkarta för den utvecklingen.
Användbara länkar
- Omrangering med inbäddningsmodeller
- LLM och strukturerad utdata: Ollama, Qwen3 & Python eller Go
- Moln LLM-leverantörer
- LLM-jämförelse: Qwen3:30b vs GPT-OSS:20b
- Steg-för-steg RAG-tutorial
- Chunking i RAG-jämförelse
- Jämförelse av vektordatabaser för RAG
Externa referenser
- Microsoft GraphRAG: Ett modulärt grafbaserat Retrieval-Augmented Generation-system
- Self-RAG: Att lära sig hämta, generera och kritisera genom självreflektion
- LongRAG: Förbättra Retrieval-Augmented Generation med långkontext LLM:er
- Retrieval-Augmented Generation för stora språkmodeller: En översikt
- FAISS: Ett bibliotek för effektiv likhetssökning
- LangChain-dokumentation: Avancerade RAG-tekniker
- HuggingFace: Sentence Transformers för inbäddningsmodeller
- RAG-översikt: En omfattande analys av Retrieval Augmented Generation