[{"data":1,"prerenderedAt":720},["ShallowReactive",2],{"blog-knowledge-graph-extraction-llm-de":3},{"slug":4,"published":5,"updated":6,"minutes":7,"category":8,"tags":9,"keywords":15,"about":26,"sources":36,"cover":73,"og":74,"expertise":75,"locales":76,"lang":78,"title":80,"description":81,"coverAlt":82,"metaTitle":83,"takeaways":84,"faq":90,"toc":106,"blocks":137,"others":465},"knowledge-graph-extraction-llm","2026-09-25","2026-10-12",8,"rag",[10,11,12,13,14],"Knowledge graphs","GraphRAG","Entity resolution","RAG","Neo4j",[16,17,18,19,20,21,22,23,24,25],"knowledge graph extraction with LLMs","GraphRAG indexing","entity resolution knowledge graph","triple extraction prompt","ontology design for LLM extraction","entity deduplication embeddings","knowledge graph provenance","incremental knowledge graph updates","GraphRAG cost","Neo4j SimpleKGPipeline",[27,30,33],{"name":28,"url":29},"Knowledge graph","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnowledge_graph",{"name":31,"url":32},"Record linkage","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRecord_linkage",{"name":34,"url":35},"Ontology (information science)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOntology_%28information_science%29",[37,40,43,46,49,52,55,58,61,64,67,70],{"title":38,"url":39},"Microsoft GraphRAG: default dataflow","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgraphrag\u002Fblob\u002Fmain\u002Fdocs\u002Findex\u002Fdefault_dataflow.md",{"title":41,"url":42},"Microsoft GraphRAG on GitHub","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgraphrag",{"title":44,"url":45},"Microsoft Research: LazyGraphRAG (Nov 2024)","https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fblog\u002Flazygraphrag-setting-a-new-standard-for-quality-and-cost\u002F",{"title":47,"url":48},"Microsoft Research: GraphRAG auto-tuning (Sep 2024)","https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fblog\u002Fgraphrag-auto-tuning-provides-rapid-adaptation-to-new-domains\u002F",{"title":50,"url":51},"neo4j-graphrag-python on GitHub","https:\u002F\u002Fgithub.com\u002Fneo4j\u002Fneo4j-graphrag-python",{"title":53,"url":54},"Neo4j GraphRAG: knowledge graph builder guide","https:\u002F\u002Fneo4j.com\u002Fdocs\u002Fneo4j-graphrag-python\u002Fcurrent\u002Fuser_guide_kg_builder.html",{"title":56,"url":57},"Splink on GitHub","https:\u002F\u002Fgithub.com\u002Fmoj-analytical-services\u002Fsplink",{"title":59,"url":60},"Google LangExtract on GitHub","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Flangextract",{"title":62,"url":63},"KGGen (arXiv 2502.09956)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.09956",{"title":65,"url":66},"GraphEval (arXiv 2407.10793)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2407.10793",{"title":68,"url":69},"Zep temporal knowledge graph (arXiv 2501.13956)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.13956",{"title":71,"url":72},"Kùzu on GitHub","https:\u002F\u002Fgithub.com\u002Fkuzudb\u002Fkuzu","\u002Fimages\u002Fblog\u002Fknowledge-graph-extraction-llm\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fknowledge-graph-extraction-llm\u002Fog.jpg","ai-engineer",[77,78,79],"en","de","hu","Wissensgraphen mit LLMs extrahieren: Ontologie, Entitätsauflösung, Herkunft","Einen Wissensgraphen mit LLMs bauen: kleine Ontologie, Extraktionsprompts, Entitätsauflösung, Herkunft, inkrementelle Updates, Evaluierung und Speicher.","Knoten verlassen einen Seitenstapel und bilden ein Netz, in dem zwei Kreise verschmelzen.","Wissensgraphen mit LLMs extrahieren · Balázs Csorba",[85,86,87,88,89],"Einen Graphen mit einem LLM zu bauen heißt parsen, chunken, extrahieren, auflösen und laden; Ontologie und Entitätsauflösung entscheiden über die Qualität weit mehr als das Modell.","Das Schema bestimmt die Größe des Graphen: Auf einem Podcast-Korpus erzeugte der Standardprompt von GraphRAG 1.796 Entitäten, automatisch angepasste Prompts 4.896.","Die eingebaute Auflösung von GraphRAG ist ein exakter Abgleich von Titel und Typ; echte Korpora brauchen unscharfen oder Embedding-Abgleich plus LLM- oder menschliche Entscheidung für unsichere Paare.","Halten Sie an jedem Knoten und jeder Kante die Quelltexteinheit fest, damit Sie prüfen, löschen und nur Geändertes neu extrahieren können, statt den ganzen Graphen neu zu bauen.","Volles GraphRAG-Indexieren ist teuer: Microsoft beziffert das Indexieren von LazyGraphRAG auf 0,1 Prozent davon, also prüfen Sie, ob sich ein Graph lohnt, bevor Sie für die Extraktion zahlen.",[91,94,97,100,103],{"q":92,"a":93},"Wie baut man einen Wissensgraphen mit einem LLM?","Teilen Sie Dokumente in Texteinheiten, lassen Sie ein LLM aus jeder Einheit Entitäten und Beziehungen gegen ein festgelegtes Schema extrahieren, führen Sie die Entitäten zusammen und deduplizieren Sie sie, und laden Sie das Ergebnis in einen Graphspeicher, mit einem Verweis von jedem Knoten und jeder Kante auf den Quelltext. Schema und Deduplizierung entscheiden den Großteil der Qualität.",{"q":95,"a":96},"Was ist Entitätsauflösung in einem Wissensgraphen?","Die Entscheidung, welche extrahierten Erwähnungen dieselbe reale Entität meinen, etwa „Siemens AG“, „Siemens“ und „der Münchner Lieferant“. Die Optionen reichen vom exakten Namensabgleich über unscharfe und Embedding-Ähnlichkeit bis zur Entscheidung unsicherer Paare durch ein LLM oder einen Menschen. Ohne sie füllt sich der Graph mit doppelten Knoten.",{"q":98,"a":99},"Was kostet das Indexieren mit GraphRAG?","Microsoft nennt keinen absoluten Preis, nur relative Zahlen: Das Indexieren mit LazyGraphRAG kostet etwa so viel wie Vektor-RAG und 0,1 Prozent des vollen GraphRAG-Indexierens. Volles Indexieren macht mehrere LLM-Aufrufe pro Texteinheit, messen Sie es also an einer Stichprobe Ihres Korpus, bevor Sie alles indexieren.",{"q":101,"a":102},"Sollte das LLM das Schema selbst erfinden?","Beginnen Sie mit einer kleinen, festen Ontologie der Entitäts- und Beziehungstypen, die Sie tatsächlich abfragen, und lassen Sie das LLM sie füllen. Freie Extraktion erzeugt viele Typen und beinahe doppelte Beziehungen, die schwer abzufragen sind. Die Neo4j-Pipeline kann ein Schema einmal aus dem Text ableiten und dann für jeden Chunk wiederverwenden.",{"q":104,"a":105},"Wie hält man einen Wissensgraphen aktuell?","Speichern Sie Quelltexteinheit und Dokument-ID an jedem Knoten und jeder Kante, extrahieren Sie nur neue oder geänderte Dokumente und lösen Sie neue Entitäten gegen den bestehenden Graphen auf, statt ihn neu zu bauen. Die Resolver von Neo4j akzeptieren eine Filterabfrage, sodass Wiederholungen nur nicht aufgelöste Entitäten berühren.",[107,110,113,116,119,122,125,128,131,134],{"id":108,"title":109},"what-it-takes-to-build-one","Was der Aufbau braucht",{"id":111,"title":112},"start-with-a-minimal-ontology","Mit einer kleinen Ontologie beginnen",{"id":114,"title":115},"the-extraction-step-in-practice","Der Extraktionsschritt in der Praxis",{"id":117,"title":118},"entity-resolution-and-deduplication","Entitätsauflösung und Deduplizierung",{"id":120,"title":121},"provenance-and-incremental-updates","Herkunft und inkrementelle Updates",{"id":123,"title":124},"cost","Was es kostet",{"id":126,"title":127},"evaluating-extraction-quality","Extraktionsqualität bewerten",{"id":129,"title":130},"storage-choices","Speicherwahl",{"id":132,"title":133},"a-build-checklist","Eine Checkliste für den Aufbau",{"id":135,"title":136},"sources","Quellen",[138,146,160,163,171,177,183,186,187,194,213,214,219,231,234,236,237,245,256,259,270,271,274,290,293,294,301,305,306,316,319,322,323,388,395,398,399,418,426,427],{"type":139,"content":140},"paragraph",[141,145],{"tag":142,"children":143},"strong",[144],"Wissensgraphen mit LLMs extrahieren"," heißt, unstrukturierte Dokumente in Entitäten und typisierte Beziehungen zu verwandeln, die eine Graphabfrage oder ein GraphRAG-System nutzen kann. Der Extraktionsaufruf ist der leichte Teil; jedes fähige Modell liefert plausible Tripel. Ob der Graph nützlich ist, entscheidet alles darum herum: ein Schema, das klein genug zum Abfragen ist, eine Entitätsauflösung, die denselben Lieferanten in drei Schreibweisen zusammenführt, Herkunftsangaben, die jede Kante auf einen Satz zurückführen, und ein Kostenmodell, das eine erneute Extraktion übersteht.",{"type":139,"content":147},[148,149,154,155,159],"Dieser Artikel behandelt die Aufbauseite: eine kleine Ontologie, den Extraktionsschritt, Entitätsauflösung, Herkunft und inkrementelle Updates, Evaluierung und Speicher. Ob Sie überhaupt einen Graphen statt Vektorsuche brauchen, diskutiert ",{"tag":150,"to":151,"children":152},"link","\u002Fblog\u002Fgraphrag-knowledge-graph-rag",[153],"GraphRAG gegen Vektor-RAG",", und Microsofts Werkzeug bespricht ",{"tag":150,"to":156,"children":157},"\u002Fblog\u002Fgraphrag",[158],"die GraphRAG-Besprechung"," vollständig. Versionen und Zahlen gelten Stand Oktober 2026.",{"type":161,"level":162,"id":108,"text":109},"heading",2,{"type":139,"content":164},[165,166,170],"Jeder mit einem LLM gebaute Graph folgt derselben Pipeline: Dokumente parsen, in Texteinheiten teilen, pro Einheit Entitäten und Beziehungen extrahieren, Dubletten zusammenführen und auflösen und das Ergebnis laden. Der Standard-Datenfluss von Microsoft GraphRAG ist eine klare Referenz: Texteinheiten zu 1.200 Tokens, Extraktion pro Einheit, Zusammenführen von Entitäten mit identischem Titel und Typ, zusammengefasste Beschreibungen, optionale Extraktion von Behauptungen, dann Community-Erkennung und Berichte (",{"tag":167,"href":39,"children":168},"a",[169],"GraphRAG-Datenfluss","). Jedes extrahierte Element verweist auf die Texteinheiten und liefert so „die Herkunft zurück zum ursprünglichen Quelltext“.",{"type":172,"src":173,"alt":174,"wide":175,"caption":176},"image","\u002Fimages\u002Fblog\u002Fknowledge-graph-extraction-llm\u002Fdiagram-4.webp","Pipeline zum Aufbau eines Wissensgraphen Fünf Schritte von links nach rechts: Dokumente werden in Texteinheiten mit Herkunfts-ID geteilt; ein LLM extrahiert pro Einheit Entitäten und Beziehungen gegen ein festes Schema; extrahierte Elemente werden zusammengeführt und ihre Beschreibungen zusammengefasst; die Entitätsauflösung gleicht Dubletten ab, zuerst exakt, dann unscharf oder per Embedding, unsichere Paare entscheidet ein LLM oder ein Mensch; und der bereinigte Graph wird mit Quell-IDs an jedem Knoten und jeder Kante geladen.",true,"Über die Qualität wird an zwei Stellen entschieden: beim Schema vor der Extraktion und bei der Entitätsauflösung vor dem Laden.",{"type":139,"content":178},[179,180,182],"Zwei Schritte entscheiden über den Großteil der Qualität: die Ontologie, die festlegt, was extrahiert werden kann, und die Entitätsauflösung, die festlegt, ob das Ergebnis ein Graph ist oder ein Haufen beinahe doppelter Knoten. Das Extraktionsmodell zählt weniger als beide. GraphRAG selbst ist inzwischen weitgehend im Wartungsmodus; die README beschreibt es als Demonstration statt offiziell unterstütztes Angebot und warnt, dass Indexieren teuer sein kann (",{"tag":167,"href":42,"children":181},[11],").",{"type":139,"content":184},[185],"Ein Graph lohnt sich, wenn die Fragen Beziehungen betreffen statt Textstellen: welche Lieferanten nach einer bestimmten Norm zertifizierte Teile liefern, welche Verträge auf eine zurückgezogene Vorschrift verweisen, welche Werke ein Bauteil gemeinsam nutzen. Vektorsuche beantwortet „finde ähnlichen Text“; ein Graph beantwortet „folge diesen Verbindungen“. Stellen Ihre Nutzer überwiegend die erste Art von Frage, bringt der Extraktionsaufwand unten wenig.",{"type":161,"level":162,"id":111,"text":112},{"type":139,"content":188},[189,190,193],"Beginnen Sie mit den wenigen Entitäts- und Beziehungstypen, die Sie tatsächlich abfragen, denn das Schema bestimmt Größe und Nutzen des Graphen. Microsofts Beitrag zum Auto-Tuning zeigt, wie stark: Auf demselben Podcast-Korpus mit GPT-4-Turbo erzeugte der nachrichtenorientierte Standardprompt von GraphRAG 1.796 Entitäten, 2.851 Beziehungen und 352 Communities, auf die Domäne abgestimmte Prompts dagegen 4.896, 8.210 und 1.027 (",{"tag":167,"href":48,"children":191},[192],"Auto-Tuning","). Mehr ist nicht automatisch besser; es ist nur besser, wenn die zusätzlichen Entitäten solche sind, die Ihre Fragen brauchen.",{"type":139,"content":195},[196,197,201,202,205,206,209,210,212],"Das offizielle GraphRAG-Paket von Neo4j macht das Schema explizit: Knotentypen, Beziehungstypen und erlaubte Muster wie ",{"tag":198,"children":199},"code",[200],"(\"Supplier\",\"SUPPLIES\",\"Product\")",". Mit ",{"tag":198,"children":203},[204],"schema=\"EXTRACTED\"",", dem Standard, leitet ein LLM einmal ein Schema aus dem Text ab und nutzt es für jeden Chunk; mit ",{"tag":198,"children":207},[208],"schema=\"FREE\""," gibt es gar keine Bindung (",{"tag":167,"href":54,"children":211},[14],"). Für die Produktion schreiben Sie das Schema selbst, halten es unter Versionskontrolle und behandeln eine Änderung als Migration. Mein Jira-MCP-Server folgt demselben Prinzip von der anderen Seite: Ein Modell mit einer kleinen, typisierten Oberfläche aus 20 Werkzeugen hört auf zu raten.",{"type":161,"level":162,"id":114,"text":115},{"type":139,"content":215},[216,217,182],"Der Extraktionsschritt ist ein LLM-Aufruf pro Texteinheit, der Entitäten und Beziehungen in einem strukturierten Format liefert, manchmal gefolgt von zusätzlichen Durchläufen für das, was der erste übersehen hat. Nutzen Sie strukturierte Ausgabe, wo der Anbieter sie unterstützt: Die Neo4j-Pipeline prüft Ergebnisse gegen ein Pydantic-Graphmodell, wenn das Modell strukturierte Ausgabe bietet, statt JSON nachträglich zu reparieren, und ihr Graph-Pruner verwirft Knoten und Beziehungen, die das Schema verletzen oder keine Eigenschaften haben (",{"tag":167,"href":54,"children":218},[14],{"type":139,"content":220},[221,222,225,226,230],"Die Bindung an den Quelltext ist die zweite Absicherung. Googles LangExtract ordnet jede Extraktion ihrer genauen Zeichenspanne im Quelltext zu, und eine Extraktion, die das Modell in der Eingabe nicht finden kann, erhält kein Zeichenintervall und soll verworfen werden (",{"tag":167,"href":60,"children":223},[224],"LangExtract","). Diese eine Regel entfernt die meisten erfundenen Beziehungen. Dasselbe Muster gilt für Produktdaten, wo ein Wert ohne Quellspanne nicht in den Katalog gelangen sollte, siehe ",{"tag":150,"to":227,"children":228},"\u002Fblog\u002Fllm-product-data-enrichment",[229],"Produktdatenanreicherung mit LLMs",".",{"type":139,"content":232},[233],"Die Chunk-Größe zählt mehr, als es aussieht. Kleinere Einheiten geben dem Modell pro Aufruf weniger zu lesen und erhöhen tendenziell den Recall von Entitäten, trennen aber Beziehungen, deren beide Enden in verschiedenen Absätzen stehen; größere Einheiten halten diese zusammen und kosten pro Aufruf mehr. Der GraphRAG-Standard von 1.200 Tokens ist ein vernünftiger Start; passen Sie ihn erst an, nachdem Sie in einer Stichprobe Ihrer Dokumente gemessen haben, wie viele Beziehungen Einheitsgrenzen überschreiten.",{"type":198,"code":235},"# Sketch with neo4j-graphrag: fixed schema, extraction, then resolution limited to new entities\nfrom neo4j_graphrag.experimental.pipeline.kg_builder import SimpleKGPipeline\nfrom neo4j_graphrag.experimental.components.resolver import SinglePropertyExactMatchResolver\n\nschema = {\n    \"node_types\": [\"Supplier\", \"Product\", \"Standard\", \"Plant\"],\n    \"relationship_types\": [\"SUPPLIES\", \"COMPLIES_WITH\", \"PRODUCED_AT\"],\n    \"patterns\": [(\"Supplier\", \"SUPPLIES\", \"Product\"),\n                 (\"Product\", \"COMPLIES_WITH\", \"Standard\"),\n                 (\"Product\", \"PRODUCED_AT\", \"Plant\")],\n}\npipeline = SimpleKGPipeline(llm=llm, driver=driver, embedder=embedder, schema=schema, from_pdf=False)\nawait pipeline.run_async(text=document_text)            # chunks keep their ids in the lexical graph\n\nresolver = SinglePropertyExactMatchResolver(driver, filter_query=\"WHERE NOT entity:Resolved\")\nawait resolver.run()                                    # only touches entities from this run",{"type":161,"level":162,"id":117,"text":118},{"type":139,"content":238},[239,240,242,243,182],"Die Entitätsauflösung entscheidet, ob „Siemens AG“, „Siemens“ und „der Münchner Lieferant“ ein Knoten werden oder drei. Die eingebaute Logik von GraphRAG führt nur Entitäten mit identischem Titel und Typ zusammen (",{"tag":167,"href":39,"children":241},[169],"), was für eine Demo genügt und für echte Korpora nicht. Das Paket von Neo4j bietet drei Resolver: exakten Abgleich auf einer Eigenschaft, semantischen Abgleich mit spaCy-Embeddings und Kosinusähnlichkeit sowie unscharfen Abgleich mit RapidFuzz, schneller und weniger präzise (",{"tag":167,"href":54,"children":244},[14],{"type":139,"content":246},[247,248,251,252,230],"Am besten funktioniert ein Stufenansatz: exakte Treffer automatisch zusammenführen, unscharfe und Embedding-Treffer über einer Schwelle vorschlagen und das unsichere Mittelfeld mit dem Kontext beider Kandidaten an ein LLM oder einen Menschen geben. Für Entitäten mit mehreren strukturierten Feldern ist die probabilistische Datensatzverknüpfung von Splink ausgereift und verknüpft etwa eine Million Datensätze auf einem Laptop in rund einer Minute, aber die README hält fest, dass sie nicht für eine einzelne Spalte mit einem „Bag of Words“ gedacht ist, Entitätsknoten nur mit Namen liegen also außerhalb ihrer Stärke (",{"tag":167,"href":57,"children":249},[250],"Splink","). Dasselbe Abgleichproblem tritt in Produktkatalogen auf, siehe ",{"tag":150,"to":253,"children":254},"\u002Fblog\u002Fpim-data-quality-llm",[255],"PIM-Datenqualität mit LLMs",{"type":139,"content":257},[258],"Blocking hält die Auflösung bezahlbar. Jede Entität mit jeder anderen zu vergleichen wächst quadratisch, gruppieren Sie Kandidaten also zuerst nach einem günstigen Schlüssel wie Entitätstyp plus normalisiertem Namenspräfix oder nach nächsten Nachbarn im Embedding-Raum und vergleichen Sie nur innerhalb dieser Gruppen. Legen Sie die Schwelle dann an einer gelabelten Stichprobe von Paaren fest statt nach Gefühl, denn der richtige Schnitt ist für Firmennamen, Produktcodes und Personen verschieden.",{"type":260,"variant":261,"title":262,"body":263},"callout","warn","Resolver ersetzen Knoten",[264],[265,266,269],"Die Resolver von Neo4j ersetzen die von der Pipeline geschriebenen Knoten, Auflösung ist also kein reiner Leseschritt. Führen Sie sie wiederholbar aus: aufgelöste Entitäten markieren, eine Filterabfrage wie ",{"tag":198,"children":267},[268],"WHERE NOT entity:Resolved"," übergeben, damit Wiederholungen nur neue berühren, und die ursprünglichen Erwähnungen mit ihren Texteinheiten behalten, damit eine falsche Zusammenführung rückgängig gemacht werden kann.",{"type":161,"level":162,"id":120,"text":121},{"type":139,"content":272},[273],"Herkunftsangaben sind das Rückgrat, das einen Graphen wartbar macht. Halten Sie Texteinheits-ID und Dokument-ID an jedem Knoten und jeder Kante fest, damit eine Antwort ihren Satz zitieren, ein gelöschtes Dokument genau seine Beiträge entfernen und ein geändertes Dokument neu extrahiert werden kann, ohne den Rest zu berühren. Die Texteinheiten von GraphRAG und der lexikalische Graph von Neo4j, der Chunks mit den daraus extrahierten Entitäten verbindet, liefern beide diese Struktur.",{"type":139,"content":275},[276,277,281,282,285,286,230],"Einen dokumentierten inkrementellen Indexiermodus konnte ich in der aktuellen GraphRAG-Doku nicht bestätigen; dokumentiert ist, einen eigenen Graphen mitzubringen und darauf nur die Community-Workflows auszuführen (",{"tag":167,"href":278,"children":279},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fgraphrag\u002Fblob\u002Fmain\u002Fdocs\u002Findex\u002Fbyog.md",[280],"BYOG","). In der Praxis heißt inkrementell, nur neue oder geänderte Dokumente zu extrahieren und ihre Entitäten gegen den bestehenden Graphen aufzulösen. Graphen, die Fakten über die Zeit verfolgen, ergänzen pro Kante ein Gültigkeitsfenster; Zeps Engine Graphiti pflegt historische Beziehungen auf diese Weise für Agenten-Gedächtnis (",{"tag":167,"href":69,"children":283},[284],"Zep-Paper","), beschrieben in ",{"tag":150,"to":287,"children":288},"\u002Fblog\u002Fzep",[289],"der Zep-Besprechung",{"type":139,"content":291},[292],"Neuextraktion ist der Kostenpunkt, den man einplanen muss. Eine Änderung am Schema oder am Extraktionsprompt entwertet jedes unter dem alten erzeugte Tripel; versionieren Sie Prompts also wie Code, halten Sie die Prompt-Version an jedem extrahierten Element fest und planen Sie eine vollständige Neuextraktion als Migration statt als Überraschung.",{"type":161,"level":162,"id":123,"text":124},{"type":139,"content":295},[296,297,300],"Microsoft veröffentlicht für GraphRAG keinen absoluten Preis pro Dokument, nur relative Zahlen, und die sind groß. LazyGraphRAG-Indexieren kostet etwa so viel wie Vektor-RAG und 0,1 Prozent des vollen GraphRAG-Indexierens, und LazyGraphRAG-Abfragen kosten bei vergleichbarer Qualität mehr als 700-mal weniger als die globale Suche von GraphRAG (",{"tag":167,"href":45,"children":298},[299],"LazyGraphRAG","). Die praktische Regel: eine repräsentative Stichprobe extrahieren, Tokens pro Dokument selbst messen und hochrechnen, bevor Sie sich auf den ganzen Korpus festlegen.",{"type":172,"src":302,"alt":303,"wide":175,"caption":304},"\u002Fimages\u002Fblog\u002Fknowledge-graph-extraction-llm\u002Fdiagram-26.webp","Relative Kosten für Aufbau und Abfrage eines Graphen Vier horizontale Balken relativ zum Indexieren mit LazyGraphRAG. Vektor-RAG-Indexieren kostet etwa so viel wie LazyGraphRAG-Indexieren, dargestellt als eine Einheit. Volles GraphRAG-Indexieren kostet etwa das Tausendfache, da LazyGraphRAG 0,1 Prozent davon ist. Auf der Abfrageseite kostet die globale Suche von GraphRAG mehr als das 700-Fache einer LazyGraphRAG-Abfrage vergleichbarer Qualität. Ein Hinweis besagt, dass ein Prompt- oder Schemawechsel die Extraktionskosten erneut fällig macht.","Relative Kosten aus Microsofts Beitrag zu LazyGraphRAG, logarithmisch dargestellt; ein absoluter Preis pro Dokument ist nicht veröffentlicht.",{"type":161,"level":162,"id":126,"text":127},{"type":139,"content":307},[308,309,312,313,182],"Extraktionsqualität ist ein offenes Forschungsproblem, kein gelöstes. Die Autoren von KGGen halten fest, dass automatisch extrahierte Graphen von fragwürdiger Qualität sind und menschlich erstellte Vergleichsgraphen selten; sie ergänzen Entitäts-Clustering gegen dünn besetzte Graphen und veröffentlichen den Benchmark MINE für die Extraktion von Text zu Graph (",{"tag":167,"href":63,"children":310},[311],"KGGen","). GraphEval stellt Inhalte als Tripel dar, um wahrscheinliche Halluzinationen auf Tripelebene zu finden (",{"tag":167,"href":66,"children":314},[315],"GraphEval",{"type":139,"content":317},[318],"Für den eigenen Graphen funktioniert ein einfaches Protokoll: pro Lauf 50 Tripel ziehen, von einem Menschen jeweils als richtig, falsch oder nicht durch die Quellspanne gedeckt markieren lassen und diese Präzision über Prompt- und Schemaversionen verfolgen. Ein LLM-Richter kann vorsortieren, aber kalibrieren Sie ihn zuerst gegen die menschlichen Labels. Protokollieren Sie pro Lauf die Zahl der Entitäten, Beziehungen, Zusammenführungen, verworfenen ungedeckten Tripel und die Prompt-Version, damit ein plötzlicher Sprung sichtbar wird.",{"type":139,"content":320},[321],"Bewerten Sie den Graphen auch an den Fragen, für die er existiert. Schreiben Sie zehn bis zwanzig Beziehungsfragen mit bekannten Antworten, führen Sie sie nach jedem Neuaufbau über Ihre Graphabfragen oder die GraphRAG-Suche aus und vergleichen Sie. Die Tripelpräzision zeigt, ob die Extraktion stimmt; die Genauigkeit bei den Fragen zeigt, ob Schema und Auflösung einen Graphen erzeugt haben, der beantworten kann, wofür Sie ihn gebaut haben.",{"type":161,"level":162,"id":129,"text":130},{"type":324,"head":325,"rows":336},"table",[326,328,330,332,334],[327],"Komponente",[329],"Rolle",[331],"Lizenz",[333],"Herkunft",[335],"Entitätsauflösung",[337,348,359,368,377],[338,340,342,344,346],[339],"Microsoft GraphRAG 3.3",[341],"volle Pipeline, Wartungsmodus",[343],"MIT",[345],"Texteinheiten",[347],"exakt Titel und Typ",[349,351,353,355,357],[350],"neo4j-graphrag",[352],"modularer KG-Builder",[354],"Apache-2.0",[356],"lexikalischer Graph",[358],"exakt, spaCy-semantisch, unscharf",[360,361,363,364,366],[224],[362],"gebundene Extraktion",[354],[365],"Zeichenspannen",[367],"keine eingebaut",[369,370,372,373,375],[250],[371],"Datensatzverknüpfung",[343],[374],"k. A.",[376],"probabilistisch, mehrere Felder",[378,380,382,384,386],[379],"Neo4j, Kùzu, NetworkX",[381],"Graphspeicher",[383],"unterschiedlich; Kùzu archiviert",[385],"als Eigenschaften",[387],"über Ihre Pipeline",{"type":139,"content":389},[390,391,394],"Beim Speicher ist Neo4j die übliche Serverwahl und das Ziel des offiziellen GraphRAG-Pakets. Kùzu, eine MIT-lizenzierte eingebettete Graphdatenbank, die für lokale Pipelines attraktiv war, wurde archiviert, und die README kündigt an, dass das Team an etwas Neuem arbeitet (",{"tag":167,"href":72,"children":392},[393],"Kùzu","), beginnen Sie darauf also nichts Neues. Für kleine Graphen oder Experimente reicht NetworkX im Speicher mit Parquet-Dateien auf der Platte, und GraphRAG selbst schreibt Parquet-Tabellen, die sich in jedes davon laden lassen.",{"type":139,"content":396},[397],"Welchen Speicher Sie auch wählen, halten Sie die extrahierten Entitäten und Beziehungen als einfache Dateien daneben, mit Prompt-Version und Quell-IDs. Dieser Export erlaubt es, den Speicher neu aufzubauen, die Engine zu wechseln oder die Auflösung erneut auszuführen, ohne die Extraktion noch einmal zu bezahlen.",{"type":161,"level":162,"id":132,"text":133},{"type":400,"ordered":175,"items":401},"list",[402,404,406,408,410,412,414,416],[403],"Ein kleines Schema aus den Fragen schreiben, die Sie stellen werden, und versionieren.",[405],"Extraktionsprompts wie Code versionieren und die Version an jedem Element festhalten.",[407],"Strukturierte Ausgabe nutzen und Tripel ohne Quellspanne verwerfen.",[409],"Entitäten stufenweise auflösen und die ursprünglichen Erwähnungen behalten.",[411],"Texteinheits- und Dokument-IDs an jedem Knoten und jeder Kante halten.",[413],"Präzision an 50 gezogenen Tripeln pro Lauf messen.",[415],"Extraktion an einer Stichprobe bepreisen, bevor der ganze Korpus indexiert wird.",[417],"Nur neue oder geänderte Dokumente extrahieren und gegen den bestehenden Graphen auflösen.",{"type":139,"content":419},[420,421,425],"Wenn Sie einen Wissensgraphen aus Dokumenten aufbauen und er auch nach der ersten Demo sauber bleiben soll, sehen Sie sich meine ",{"tag":150,"to":422,"children":423},"\u002Fexpertise\u002Fai-engineer",[424],"KI-Engineering-Arbeit"," an.",{"type":161,"level":162,"id":135,"text":136},{"type":400,"ordered":175,"items":428},[429,432,435,438,441,444,447,450,453,456,459,462],[430],{"tag":167,"href":39,"children":431},[38],[433],{"tag":167,"href":42,"children":434},[41],[436],{"tag":167,"href":45,"children":437},[44],[439],{"tag":167,"href":48,"children":440},[47],[442],{"tag":167,"href":51,"children":443},[50],[445],{"tag":167,"href":54,"children":446},[53],[448],{"tag":167,"href":57,"children":449},[56],[451],{"tag":167,"href":60,"children":452},[59],[454],{"tag":167,"href":63,"children":455},[62],[457],{"tag":167,"href":66,"children":458},[65],[460],{"tag":167,"href":69,"children":461},[68],[463],{"tag":167,"href":72,"children":464},[71],[466,541,601,659],{"slug":467,"published":468,"minutes":469,"category":8,"tags":470,"keywords":475,"about":488,"sources":498,"cover":535,"og":536,"expertise":75,"locales":537,"lang":78,"title":538,"description":539,"coverAlt":540},"embedding-model-selection-2026","2026-10-17",9,[471,13,472,473,474],"Embeddings","MTEB","Vector search","Model selection",[476,477,478,479,480,481,482,483,484,485,486,487],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[489,492,495],{"name":490,"url":491},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":493,"url":494},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":496,"url":497},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[499,502,505,508,511,514,517,520,523,526,529,532],{"title":500,"url":501},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":503,"url":504},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":506,"url":507},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":509,"url":510},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":512,"url":513},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":515,"url":516},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":518,"url":519},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":521,"url":522},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":524,"url":525},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":527,"url":528},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":530,"url":531},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":533,"url":534},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[77,78,79],"Embedding-Modell wählen 2026: Leaderboards, Kosten und ein Vergleichstest mit eigenen Daten","Wie man 2026 ein Embedding-Modell für RAG wählt: was MTEB und RTEB aussagen, API oder offene Gewichte, Preise, Dimensionen und ein einwöchiger Vergleichstest.","Drei Säulen aus gestapelten Blöcken, die mittlere am höchsten, jede mit kurzem Balken und weiter Klammer.",{"slug":542,"published":468,"minutes":543,"category":8,"tags":544,"keywords":548,"about":560,"sources":570,"cover":595,"og":596,"expertise":75,"locales":597,"lang":78,"title":598,"description":599,"coverAlt":600},"contextual-retrieval-late-chunking",10,[13,545,471,546,547],"Chunking","Contextual retrieval","Late chunking",[549,550,551,552,553,554,555,556,557,558,559],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[561,564,567],{"name":562,"url":563},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":565,"url":566},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":568,"url":569},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[571,574,577,580,583,586,589,592],{"title":572,"url":573},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":575,"url":576},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":578,"url":579},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":581,"url":582},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":584,"url":585},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":587,"url":588},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":590,"url":591},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":593,"url":594},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[77,78,79],"Contextual Retrieval und Late Chunking: RAG-Chunks ihren Kontext zurückgeben","Chunks verlieren ihr Dokument. Wie Contextual Retrieval, Late Chunking und kontextuelle Embeddings das beheben, was sie kosten, wann man verzichtet.","Vier lose Quadrate, unten von einer breiten Klammer gebündelt und je nach oben mit einer großen Fläche verbunden.",{"slug":602,"published":468,"minutes":469,"category":8,"tags":603,"keywords":607,"about":620,"sources":628,"cover":653,"og":654,"expertise":75,"locales":655,"lang":78,"title":656,"description":657,"coverAlt":658},"rag-access-control-permissions",[13,604,605,606,473],"Access control","Security","Multi-tenancy",[608,609,610,611,612,613,614,615,616,617,618,619],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[621,624,627],{"name":622,"url":623},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":625,"url":626},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":562,"url":563},[629,632,635,638,641,644,647,650],{"title":630,"url":631},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":633,"url":634},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":636,"url":637},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":639,"url":640},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":642,"url":643},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":645,"url":646},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":648,"url":649},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":651,"url":652},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[77,78,79],"Zugriffskontrolle für RAG: berechtigungsbewusstes Retrieval ohne Datenlecks","Wie RAG-Assistenten Dokumente preisgeben und wie man das stoppt: ACLs an jedem Chunk, Vorfilter, Row-Level Security in pgvector, Rechte-Sync und Lecktests.","Sieben Karten in einer Reihe, sechs mit Schloss, eine leere Karte schickt einen Pfeil nach außen.",{"slug":660,"published":468,"minutes":543,"category":8,"tags":661,"keywords":666,"about":678,"sources":686,"cover":713,"og":714,"expertise":715,"locales":716,"lang":78,"title":717,"description":718,"coverAlt":719},"rag-product-catalog-pim-data",[13,662,663,664,665],"PIM","Product data","B2B e-commerce","Metadata filtering",[667,668,669,670,671,672,673,674,675,676,677],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[679,682,683],{"name":680,"url":681},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":562,"url":563},{"name":684,"url":685},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[687,690,693,696,698,701,704,707,710],{"title":688,"url":689},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":691,"url":692},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":694,"url":695},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":697,"url":685},"ETIM International: Classification",{"title":699,"url":700},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":702,"url":703},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":705,"url":706},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":708,"url":709},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":711,"url":712},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[77,78,79],"RAG über Produktkataloge: aus PIM-Daten Antworten machen, die halten","Produktdaten sind strukturiert, Chunking wie bei PDFs scheitert. So serialisiert man PIM-Attribute, leitet Spezifikationsfragen an Filter und bleibt exakt.","Ein Rahmen aus neun Feldern mit kleinen Symbolen, darunter ein Trichter zu einer einzelnen Karte.",1792342714804]