Knowledge Graph

Visualize the relationships between your research sources, insights, recommendations, and documents.

Overview

The Knowledge Graph provides a visual map of your entire research context. It renders research sources, insights, recommendations, documents, and LLM-extracted entities as nodes, and their relationships as edges — letting you see at a glance how raw user voice flows through to product decisions. The graph uses clustering to group related insights and highlights cross-cutting themes.

The Knowledge Graph requires the has_research_graph feature, available on Growth plans and above.

How It Works

Fetching the Graph

GET /api/graph/{workspace_id}

Returns the complete graph for a workspace with all non-archived entities.

Optional query parameters:

ParameterDescription
source_typesComma-separated filter (e.g. interview,survey)
node_typesComma-separated node types to include: research_source, insight, recommendation, document
min_severityMinimum insight severity: low, medium, high, critical

The response contains four sections:

{
  "nodes": [...],
  "edges": [...],
  "clusters": [...],
  "stats": { ... }
}

Node Types

Each node represents a workspace entity:

Node TypeSourceKey Fields
research_sourceUploaded filessource_type, processing_status
insightSynthesized findingsinsight_type, severity, frequency
recommendationGenerated featuresstatus, impact_score, effort
documentDrafted docsdocument_type, status

Edge Types

Edges represent the actual data relationships stored in Praxiom:

EdgeDirectionMeaning
derived_fromInsight → Research SourceInsight was extracted from this source
addressesRecommendation → InsightRecommendation addresses this insight
generated_fromDocument → RecommendationDocument was drafted from this recommendation
referencesDocument → InsightDocument cites this insight

Clusters

The graph groups related insights into clusters using a union-find algorithm. Two insights are grouped together when they share at least one research source. Clusters include both the insights and their shared source nodes.

Each cluster has:

  • A descriptive label based on the dominant insight type (e.g. "Pain Points (4 insights)")
  • A distinct color from an 8-color palette (indigo, violet, amber, cyan, emerald, rose, blue, pink)

Node Detail

Drill into any node with GET /api/graph/{workspace_id}/node/{node_id}.

This returns the full entity details plus a list of connected_nodes — every directly linked node with its type, label, and relationship type. This powers the detail panel in the graph UI.

For example, clicking an insight node reveals:

  • The research sources it was derived from
  • Any recommendations that address it
  • Any documents that reference it

Graph Statistics

The stats object in the graph response provides a quick health check:

FieldDescription
total_nodesTotal entities in the graph
total_edgesTotal relationships
source_countNumber of research sources
insight_countNumber of insights
recommendation_countNumber of recommendations
document_countNumber of documents

LLM Entity Extraction

Beyond the standard workspace entities (sources, insights, recommendations, documents), Praxiom automatically extracts semantic entities from your research using Claude Haiku.

Extracted Entity Types

Entity TypeDescriptionExample
personNamed individuals mentioned in research"Sarah Chen, VP Product"
pain_pointSpecific user problems identified"Cannot export reports to PDF"
featureProduct features or capabilities"Real-time collaboration"
workflowUser workflows or processes"Monthly reporting cycle"
themeCross-cutting themes"Data portability concerns"
decisionProduct or business decisions"Migrate to microservices"
competitorCompeting products or companies"Notion, Confluence"

Relationship Types

Extracted entities are connected with typed relationships:

RelationshipDirectionMeaning
experiencesPerson → Pain PointUser experiences this problem
requestsPerson → FeatureUser requests this capability
has_themeInsight → ThemeInsight belongs to this theme
contradictsEntity → EntityTwo entities present conflicting information
enablesFeature → WorkflowFeature enables this workflow
competes_withCompetitor → FeatureCompetitor offers this capability
synthesized_fromEntity → SourceEntity was extracted from this source

Extraction Process

  1. When insights are synthesized, Praxiom runs an LLM extraction pass using Claude Haiku
  2. Entities are extracted with a confidence score and normalized name (for deduplication)
  3. If LLM extraction fails, a keyword fallback extracts entities using pattern matching
  4. Duplicate entities (by normalized name) are merged, keeping the highest-confidence version

Graph Layout and Performance

The graph uses a spatial grid layout for rendering large workspaces efficiently:

  • Nodes are positioned using a force-directed algorithm with spatial grid acceleration
  • A ZoomContext provides smooth pan/zoom across the entire graph
  • Connected nodes are paginated (loaded on demand when drilling into a node)
  • Edges use React.memo to prevent unnecessary re-renders
  • Backend queries use composite indexes on workspace_id + entity_type for fast filtering
  • N+1 query issues are eliminated with eager loading of connected nodes

These optimisations ensure the graph remains responsive even with hundreds of nodes and thousands of edges.


Key Concepts

  • Filtering lets you focus the graph on specific source types or severity levels, reducing visual noise for large workspaces.
  • Clusters reveal hidden patterns — when multiple insights cluster together through shared sources, it often indicates a systemic issue worth prioritizing.
  • Traceability is the graph's core value: you can trace any product decision (document) back through the recommendation, insights, and original user research that justified it.
  • Entity extraction adds a semantic layer on top of the structural graph — surfacing people, pain points, features, and themes that cut across multiple sources and insights.

What's Next

Was this helpful?