Back openDesk Edu for a sovereign, open-source education — every vote counts.
Vote nowThe graph is beautiful, complete, and authoritative. And the RAG answers are worse than a plain vector index. This is the most common and most demoralizing outcome of a GraphRAG build: the knowledge graph stores everything correctly but retrieves nothing usefully. The cause is almost never effort — it's that the schema was designed for storage, not for retrieval.
When you model a graph the way you store data, you optimize for canonical correctness: every fact stored once, normalized, no redundancy. That is a great data model and a poor retrieval model. Retrieval is not about where a fact belongs; it's about how fast and how fully an LLM can reach the facts it needs to answer a question, in the order it needs them.
A vector store answers a question by semantic similarity to a chunk. A graph answers by traversal from a starting node. If your schema has no natural entry point for the question ("which vendor does Tobi's team depend on for compute?"), your retrieval has to start somewhere unhelpful and traverse a long, indirect path — or give up.
Before touching the schema, collect the actual questions the system must answer, then ask what path through the graph answers each one. That transforms modeling into a design exercise with a target:
(:Team)-[:DEPENDS_ON]->(:Vendor)) even though it's redundant with a
longer path. Redundancy is a feature when its purpose is retrieval speed.RELATED_TO. A generic edge
means the LLM must infer semantics at query time. A DEPENDS_ON,
AUTHORED_BY, PURCHASED_FROM edge lets you navigate by meaning and
keeps generated traversal cheap and correct.When retrieval underperforms, walk this list before tuning embeddings:
Storage-first instincts resist a shortcut edge that duplicates a traversal. Retain them anyway: a retrieval-tuned graph is allowed, even encouraged, to be slightly denormalized if it shortens the path from a question to its answer. The rule is simple — canonical data lives in the durable layer; the retrieval graph adds the shortcuts that make answers reachable.
Judge the schema by the answers, not by pedigree. Build a small golden set of the top questions, run your RAG against both the old schema and the new, and compare. If the graph still doesn't beat a vector-only baseline on answers that need joined facts, the schema hasn't been tuned for retrieval yet.
The difference between a storage-first and a retrieval-first schema is the difference between a museum and a map: one catalogues everything accurately, the other helps you actually get somewhere. Model for the questions, add typed shortcuts, keep answers one hop away — and your graph stops being a beautiful liability and starts winning the retrieval battles it was built for.