opncrafter

Visualizing Knowledge Graphs

Dec 30, 2025 • 18 min read

GraphRAG is powerful but notoriously hard to debug. When your agent gives a wrong answer, is it because the knowledge graph is missing a relationship? Or because the Cypher query retrieved the wrong subgraph? Neo4j Bloom is a point-and-click visual explorer that lets you inspect your graph without writing Cypher, spot missing connections at a glance, and style nodes to highlight the data structures your RAG pipeline depends on.

1. What Neo4j Bloom Is (and Isn't)

Bloom is not a query editor — it's a visual exploration tool. Think of it like a database browser that shows you rows as interconnected nodes. Key differentiators:

  • Search Phrases: Natural-language-style queries like Person KNOWS Person instead of raw Cypher
  • Rule-based styling: Color nodes by label, size them by property value, highlight specific relationship types
  • Scene management: Save specific views of your graph for shareability and documentation
  • Not for: Bulk querying, data export, or production analytics — use Neo4j Browser or the Python driver for those

2. Accessing Bloom

# Option 1: Neo4j Aura (Cloud) — Bloom is built-in
# → Log in to console.neo4j.io
# → Open your database instance
# → Click "Explore" in the left sidebar

# Option 2: Neo4j Desktop (Local) — free for development
# → Download Neo4j Desktop at neo4j.com/download
# → Create a local database, click "Open" → Navigate to "Explore"

# Option 3: Browser-based via community server
# → Access at http://localhost:7474/browser/ (standard Neo4j Browser)
# → For full Bloom features, use Neo4j Desktop or Aura

# Connect credentials (same as Neo4j Browser)
# URI: bolt://localhost:7687 (local) or neo4j+s://xxx.databases.neo4j.io (Aura)
# Username: neo4j
# Password: (set during database creation)

3. How Search Phrases Work

Bloom analyzes your schema and generates Natural Language search patterns. Type words matching your node labels and relationship types, and Bloom auto-completes:

Search PhraseEquivalent CypherUse Case
Person KNOWS PersonMATCH (a:Person)-[:KNOWS]->(b:Person)Social network exploration
Document MENTIONS EntityMATCH (d:Document)-[:MENTIONS]->(e:Entity)RAG chunk relationship inspection
Chunk SIMILAR_TO ChunkMATCH (a:Chunk)-[:SIMILAR_TO]->(b:Chunk)Duplicate/redundant chunk detection
Company OWNS ProductMATCH (c:Company)-[:OWNS]->(p:Product)Product graph exploration

4. Styling Your RAG Graph

For GraphRAG pipelines, style by node role to make the graph structure immediately readable:

# Bloom Rule-Based Styling (configure in Bloom's "Style" panel):

# Node styling by label:
Document  → Large circle, BLUE (#3b82f6)
Chunk     → Medium circle, PURPLE (#7c3aed)
Entity    → Small circle, GREEN (#10b981) [for people/places/orgs extracted from text]
Topic     → Diamond shape, ORANGE (#f97316) [for topic clusters]

# Node sizing by property:
Size Chunk nodes by text_length property → larger = more content

# Relationship thickness:
HAS_CHUNK   → thin (structural)
SIMILAR_TO  → thick + labeled with score (semantic similarity, most important to visualize)
MENTIONS    → medium
CO_OCCURS   → dashed (less important)

# Caption labels on nodes:
Document → show 'filename' property
Entity   → show 'name' property
Chunk    → show first 50 chars of 'text' property

5. Debugging RAG with Bloom

Common GraphRAG debugging scenarios and how to investigate them in Bloom:

# Debugging Scenario 1: "Agent doesn't connect Apple and iPhone"
# Search: Entity MENTIONS Entity WHERE name = "Apple"
# → Look for missing edge to "iPhone" Entity
# → If edge missing: embedding pipeline didn't extract both as entities from the same chunk

# Debugging Scenario 2: "Two chunks about same topic but not connected"
# Search: Chunk SIMILAR_TO Chunk WHERE score > 0.8
# → If two related chunks have no SIMILAR_TO edge, your similarity threshold was too high
# → Fix: Rebuild graph with lower cosine similarity threshold

# Debugging Scenario 3: "Agent retrieves wrong context for a query"
# Run the query in Python, log which chunk IDs were retrieved
# In Bloom: search for those specific Chunk nodes by ID
# → Inspect their MENTIONS relationships — are they really about the topic?
# → If entities are missing: your NLP entity extractor needs improvement

# Cypher you can run in Neo4j Browser to check graph health:
MATCH (c:Chunk)
WHERE NOT (c)-[:SIMILAR_TO]->()
RETURN count(c) as isolated_chunks
# High count = graph is disconnected, clustering will be poor

6. Saving Scenes (Shareable Views)

Bloom's "Scene" feature saves the current graph view (node positions, zoom level, styling) as a named snapshot. Use this for:

  • Team documentation: Save a "Overview" scene showing top-level document structure
  • Bug reports: Save a scene showing the specific subgraph around a broken retrieval path
  • Demos: Pre-built scenes for stakeholder walkthroughs — click a scene, everything is positioned and styled perfectly
  • Performance baselines: Save a scene before and after adding new documents to compare graph growth

7. Bloom vs Neo4j Browser: When to Use Each

Neo4j Bloom

Visual exploration, graph debugging, stakeholder demos, schema understanding, quick path tracing between nodes

Neo4j Browser

Running Cypher queries, data import/export, bulk checks, performance profiling, checking query plans

Frequently Asked Questions

Is Bloom free?

Bloom is included with Neo4j Desktop (free for development), Neo4j Aura Free Tier, and as part of all Neo4j Aura paid plans. For self-hosted Neo4j Community Edition, Bloom requires a separate license — check neo4j.com/pricing for current plans.

Can Bloom handle large graphs (millions of nodes)?

Bloom is designed for exploration, not bulk rendering. For graphs with millions of nodes, use search phrases that return 50-200 node subgraphs rather than full graph views. The "Limit results" setting in Bloom's preferences controls the maximum nodes returned per search.

Conclusion

Bloom transforms GraphRAG debugging from pure Cypher spelunking to an interactive visual investigation. When your agent gives a wrong answer and you suspect it's a graph structure issue, being able to instantly visualize the connections around a specific document or entity node — styled by type and sized by relevance — makes the root cause obvious in seconds rather than hours of Cypher queries.

Continue Reading

👨‍💻
Written by

Vivek

AI Engineer

Full-stack AI engineer with 4+ years building LLM-powered products, autonomous agents, and RAG pipelines. I've shipped AI features to production for startups and worked hands-on with GPT-4o, LangChain, LlamaIndex, and the Vercel AI SDK. I started OpnCrafter to share everything I wish I had when learning — no fluff, just working code and real-world context.

GPT-4oLangChainNext.jsVector DBsRAGVercel AI SDK