Kunskapsgrafer och graph-RAG
Kunna kombinera graftraversering med retrieval — som plattformens egen kunskapsgraf.
Förkunskaper
Intuition
Vanlig RAG hämtar oberoende textbitar. Det fungerar dåligt för frågor som kräver att man följer samband:
- «Vad behöver jag kunna innan jag börjar med LoRA?» → kräver traversering av förkunskapskedjan.
- «Vilka projekt påverkas om den här källan ändras?» → kräver beroendegrafen.
- «Sammanfatta allt vi vet om X» → kräver aggregering över många dokument.
Graph-RAG kombinerar två steg: hitta ingångsnoder med vektorsök, och traversera grafen därifrån för att samla sammanhanget.
AI-grafen är i sig ett exempel: (:KnowledgeNode)-[:REQUIRES]->(:KnowledgeNode) plus embeddings över källtexter. Lärvägen är en graftraversering; förklaringarna hämtas med vektorsök.
Kod
def graph_rag(fraga, vektorindex, graf, k_ingangar=3, djup=2, max_noder=15):
"""1) hitta ingångsnoder semantiskt 2) expandera i grafen 3) bygg kontext"""
ingangar = [t["node_slug"] for t in vektorindex.search(fraga, k=k_ingangar)]
besokta, kant = set(ingangar), list(ingangar)
for _ in range(djup):
nasta = []
for slug in kant:
for granne in graf.grannar(slug, relationer=("REQUIRES", "TEACHES")):
if granne not in besokta and len(besokta) < max_noder:
besokta.add(granne); nasta.append(granne)
kant = nasta
# Sortera topologiskt så kontexten följer inlärningsordningen
ordning = graf.topologisk(besokta)
delar = []
for slug in ordning:
n = graf.nod(slug)
delar.append(f"### {n['titel']} (nivå {n['niva']})\nFörkunskaper: {', '.join(n['requires']) or '—'}\n{n['sammanfattning']}")
return "\n\n".join(delar), ordning
kontext, vag = graph_rag("Vad behöver jag kunna innan LoRA?", index, graf)
# vag: ['vektorer', 'matriser', 'matrisfaktorisering', 'neuronnat', ..., 'lora']
Kostnaden är byggandet. En kunskapsgraf kräver entiteter och relationer som är korrekta — vilket betyder redaktionellt arbete eller LLM-extraktion med granskning. Microsofts GraphRAG extraherar entiteter och bygger community-sammanfattningar automatiskt, vilket kostar många LLM-anrop över hela korpusen.
Välj graph-RAG när: relationerna redan finns strukturerade (som här), eller när frågorna systematiskt kräver flersteg och aggregering. Välj vanlig RAG när: frågorna besvaras av enskilda passager — vilket är de flesta.
Behärskning innebär
- Kombinerar graftraversering med vektorsökning
- Vet när graph-RAG slår vanlig RAG
- Bedömer kostnaden för att bygga grafen
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — From Local to Global: A Graph RAG Approach to Query-Focused Summarization — arXiv (öppen åtkomst; licens per artikel)
- Neo4j — Graph data modeling — fri läsning