ConceptGraph AI
Course-aware GraphRAG that turns PDFs into searchable concept graphs, reranks evidence, and returns page-grounded answers.
- 8/10
- Expected page @5 · baseline
- 5/5
- Unsupported questions refused
- 15
- Baseline questions
What I was trying to solve.
Flat retrieval loses prerequisite relationships and course structure. ConceptGraph explores how semantic search and explicit concept relationships can work together without sacrificing provenance.




Follow the data.
A simplified processing flow. Each numbered stage feeds the next; storage and retrieval boundaries stay explicit.
- PDF extraction / bounded OCR
- Page-aware chunks → PostgreSQL
- Embeddings → Qdrant
- Concept extraction → Neo4j
- READY-gated vector candidates
- Graph relationship expansion
- Reranking
- Grounded answer
The constraints shaped the system.
Immutable course UUIDs align records across stores. PostgreSQL-backed leases and attempt fencing make a bounded, in-process worker restart-safe without adding a separate queue service. READY gating prevents partially ingested documents from entering retrieval; page and chunk provenance survive expansion and reranking.
Where the happy path ends.
An accepted upload is not a usable document. Partial graph extraction, provider rate limits, interrupted jobs, and cross-store deletion all need explicit states. Resumable section checkpoints, provider failover, attempt fencing, and upload-scoped cleanup make these failure paths inspectable.
Measured, with the caveats attached.
The résumé baseline contains 15 questions: 10 supported and 5 unsupported. It recovered the expected page in the top five for 8/10 supported questions, returned answers with citations for 6/10, and refused 5/5 unsupported questions. Average query time was 7.584 seconds. Citation presence is not citation correctness.
A separate provider-generated graph ablation on 6 September 2026 used 22 questions, three modes and one repeat (66 retrieval requests). Answer synthesis was excluded.
| Metric | Vector only | One hop | Two hop |
|---|---|---|---|
| Expected page @5 | 15/17 | 15/17 | 15/17 |
| Unsupported refused | 5/5 | 5/5 | 5/5 |
| Mean retrieval | 0.05s | 0.32s | 0.28s |
| p95 retrieval | 0.05s | 0.60s | 0.40s |
Provider quotas limited the graph to eight nodes and seven edges in one of three PDFs. No two-hop expansion terms were used. Equal scores do not demonstrate that graph traversal helps; complete graphs could behave differently. A small, single-run set does not establish general retrieval quality or answer faithfulness.
What exists today.
- A 15-question baseline recovered the expected source page in the top five for 8/10 supported questions and refused 5/5 unsupported questions.
- A separate 22-question retrieval ablation compares vector-only, one-hop, and two-hop modes; limited graph coverage prevents a claim of graph superiority.
- A shared, read-only reviewer demo exposes pre-uploaded course material. Reviewer authorization gates uploads and paid AI operations; this is not a multi-tenant SaaS.
What I would improve.
Expand graph coverage and the evaluation set, measure repeated-run variance, and improve multi-source coverage after evidence filtering. Retrieval hits alone do not establish answer faithfulness.