<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n" -->

---
title: Making the Knowledge Layer a Graph You Actually Traverse
description: A follow-up to a prior deployed RAG-plus-knowledge-layer project replaces a keyword-based query router with an always-fused retrieval pipeline that runs...
canonical: https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Making the Knowledge Layer a Graph You Actually Traverse | daily.dev
og:description: A follow-up to a prior deployed RAG-plus-knowledge-layer project replaces a keyword-based query router with an always-fused retrieval pipeline that runs...
og:url: https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n
og:image: https://api.daily.dev/og/posts/SZwWqn11n.png
og:image:alt: Making the Knowledge Layer a Graph You Actually Traverse
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Making the Knowledge Layer a Graph You Actually Traverse

**[Towards Data Science](https://daily.dev/sources/tds)** · 41 min read · 0 upvotes · 0 comments

## Summary

A follow-up to a prior deployed RAG-plus-knowledge-layer project replaces a keyword-based query router with an always-fused retrieval pipeline that runs semantic search and graph traversal on every query. The redesign adds bitemporal validity windows to graph edges (enabling as-of, timeline, and diff queries), moves contradiction detection from manual curation to automatic detection at ingest time, and introduces a two-threshold entity-resolution pipeline with embedding similarity and LLM adjudication. Measured on a synthetic insurance corpus, alias-only resolution produced 149 extracted concepts against 19 canonical ones; the new resolver cut that to 120. An ablation on a small golden query set found search-only and fused recall tied at this corpus scale, while the fused pipeline added an average of 10 relational paths per bundle that search-only retrieval could not produce. The stack adds Cosmos DB for Apache Gremlin as a second engine alongside Azure AI Search, with a change-feed-driven projection worker keeping both derived from a single system of record.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://towardsdatascience.com/making-the-knowledge-layer-a-graph-you-actually-traverse>

## Questions this post answers

### Why did my LLM-based entity extraction create way more concept nodes than my curated knowledge graph expects?

Alias-only entity resolution fails to merge synonyms nobody explicitly declared, causing severe fragmentation. In one live deployment, alias-based matching produced 149 machine-extracted concept nodes against 19 curated canonical concepts, a roughly 7x fragmentation factor, because synonyms like ACV, cash settlement basis, and depreciated value were never declared as aliases and so each became a separate node.

_Anyone debugging graph fragmentation in a RAG pipeline can track resolution techniques like this on daily.dev._

### How can I make contradiction detection in a knowledge graph automatic instead of manually curating conflicts?

Add validity windows to every relationship edge and run a check at ingest time comparing each new fact against currently-valid edges on the same subject vertex. If two current edges come from different authorities and neither claims to supersede the other, the system opens an unresolved contradiction object with both statements, sources, dates, and an accountable owner, rather than picking a side automatically.

_Teams designing conflict-aware knowledge systems can follow this kind of bitemporal edge pattern on daily.dev._

### Does adding graph traversal actually improve retrieval quality in a RAG system compared to search-only retrieval?

On a small eight-question golden set over a twenty-one document corpus, fused retrieval and search-only retrieval both hit 0.75 recall, making the recall comparison inconclusive at that scale, but fused retrieval surfaced an average of ten documented, time-valid relationship paths per bundle versus zero for search-only, showing the graph's measurable contribution was relational grounding rather than recall.

_Engineers weighing whether graph traversal is worth the cost in their retrieval stack can find ablation results like this on daily.dev._

## Similar posts on daily.dev

- [Designing a Persistent Knowledge Layer That Refuses to Guess](https://daily.dev/posts/designing-a-persistent-knowledge-layer-that-refuses-to-guess-0ecjc6hct) · Towards Data Science · 0 upvotes · 0 comments
- [Knowledge graph RAG: structured retrieval for AI agents](https://daily.dev/posts/knowledge-graph-rag-structured-retrieval-for-ai-agents-k6cymxiik) · Redis · 1 upvotes · 0 comments
- [Knowledge Graphs Meet RAG: A Practical Integration Guide](https://daily.dev/posts/knowledge-graphs-meet-rag-a-practical-integration-guide-l610mpm66) · BigData Boutique blog · 3 upvotes · 0 comments
- [GraphRAG: How AI Answers Questions Hidden Across Many Documents](https://daily.dev/posts/graphrag-how-ai-answers-questions-hidden-across-many-documents-y6prjknjz) · ByteByteGo · 7 upvotes · 1 comments
- [Stop Giving Your AI Agent a Search Box and Start Giving It Typed Tools, Hard Bounds, and a Gate It Cannot Talk Past](https://daily.dev/posts/stop-giving-your-ai-agent-a-search-box-and-start-giving-it-typed-tools-hard-bounds-and-a-gate-it-c-aj9ml0uw7) · Towards Data Science · 0 upvotes · 0 comments

---

Tags: [#azure](https://daily.dev/tags/azure), [#rag](https://daily.dev/tags/rag), [#cosmos-db](https://daily.dev/tags/cosmos-db)

[View this post on daily.dev](https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Making the Knowledge Layer a Graph You Actually Traverse","url":"https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n"},"datePublished":"2026-08-20T13:01:11.945Z","dateModified":"2026-09-14T07:55:22.718Z","description":"A follow-up to a prior deployed RAG-plus-knowledge-layer project replaces a keyword-based query router with an always-fused retrieval pipeline that runs...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e7fb7c46cecf4f2076273921f09f1392?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e7fb7c46cecf4f2076273921f09f1392?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Towards Data Science","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Towards Data Science","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/tds","url":"https://daily.dev/sources/tds"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"azure,rag,cosmos-db","timeRequired":"PT41M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Towards Data Science","item":"https://daily.dev/sources/tds"},{"@type":"ListItem","position":3,"name":"Making the Knowledge Layer a Graph You Actually Traverse"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/making-the-knowledge-layer-a-graph-you-actually-traverse-szwwqn11n#faq","mainEntity":[{"@type":"Question","name":"Why did my LLM-based entity extraction create way more concept nodes than my curated knowledge graph expects?","acceptedAnswer":{"@type":"Answer","text":"Alias-only entity resolution fails to merge synonyms nobody explicitly declared, causing severe fragmentation. In one live deployment, alias-based matching produced 149 machine-extracted concept nodes against 19 curated canonical concepts, a roughly 7x fragmentation factor, because synonyms like ACV, cash settlement basis, and depreciated value were never declared as aliases and so each became a separate node. Anyone debugging graph fragmentation in a RAG pipeline can track resolution techniques like this on daily.dev."}},{"@type":"Question","name":"How can I make contradiction detection in a knowledge graph automatic instead of manually curating conflicts?","acceptedAnswer":{"@type":"Answer","text":"Add validity windows to every relationship edge and run a check at ingest time comparing each new fact against currently-valid edges on the same subject vertex. If two current edges come from different authorities and neither claims to supersede the other, the system opens an unresolved contradiction object with both statements, sources, dates, and an accountable owner, rather than picking a side automatically. Teams designing conflict-aware knowledge systems can follow this kind of bitemporal edge pattern on daily.dev."}},{"@type":"Question","name":"Does adding graph traversal actually improve retrieval quality in a RAG system compared to search-only retrieval?","acceptedAnswer":{"@type":"Answer","text":"On a small eight-question golden set over a twenty-one document corpus, fused retrieval and search-only retrieval both hit 0.75 recall, making the recall comparison inconclusive at that scale, but fused retrieval surfaced an average of ten documented, time-valid relationship paths per bundle versus zero for search-only, showing the graph's measurable contribution was relational grounding rather than recall. Engineers weighing whether graph traversal is worth the cost in their retrieval stack can find ablation results like this on daily.dev."}}]}
```

