[{"data":1,"prerenderedAt":242},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fdeveloping-a-graphrag-research-chatbot-with-neo4j":63,"\u002Fblog\u002Fdeveloping-a-graphrag-research-chatbot-with-neo4j-surround":237},[4,50],{"title":5,"path":6,"stem":7,"children":8,"page":49},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45],{"title":10,"path":11,"stem":12},"Analyzing a Healthcare Knowledge Graph with Cypher and Graph Data Science","\u002Fblog\u002Fanalyzing-a-healthcare-knowledge-graph-with-cypher-and-gds","blog\u002Fanalyzing-a-healthcare-knowledge-graph-with-cypher-and-gds",{"title":14,"path":15,"stem":16},"My First AWS Adventure: Building a Sentiment Analysis System on a Budget","\u002Fblog\u002Faws-sentiment-analysis-journey","blog\u002Faws-sentiment-analysis-journey",{"title":18,"path":19,"stem":20},"Building a Hybrid Movie Recommender with Neo4j and Graph Data Science","\u002Fblog\u002Fbuilding-a-hybrid-movie-recommender-with-neo4j-and-gds","blog\u002Fbuilding-a-hybrid-movie-recommender-with-neo4j-and-gds",{"title":22,"path":23,"stem":24},"Designing and Building a Neo4j Knowledge Graph from Relational Data","\u002Fblog\u002Fdesigning-and-building-a-neo4j-knowledge-graph-from-relational-data","blog\u002Fdesigning-and-building-a-neo4j-knowledge-graph-from-relational-data",{"title":26,"path":27,"stem":28},"Developing a GraphRAG Research Chatbot with Neo4j","\u002Fblog\u002Fdeveloping-a-graphrag-research-chatbot-with-neo4j","blog\u002Fdeveloping-a-graphrag-research-chatbot-with-neo4j",{"title":30,"path":31,"stem":32},"From Code to Insights: My Journey from Software Development to Data Analytics","\u002Fblog\u002Ffrom-code-to-insights-journey","blog\u002Ffrom-code-to-insights-journey",{"title":34,"path":35,"stem":36},"Predicting Hospital Readmissions: A Machine Learning Journey","\u002Fblog\u002Fhospital-readmissions","blog\u002Fhospital-readmissions",{"title":38,"path":39,"stem":40},"My First Steps into Graph Databases: Learning Neo4j Fundamentals","\u002Fblog\u002Fneo4j-graph-databases-fundamentals","blog\u002Fneo4j-graph-databases-fundamentals",{"title":42,"path":43,"stem":44},"Building a Serverless ETL Pipeline on AWS: From Raw Data to Interactive Dashboards","\u002Fblog\u002Fserverless-etl-pipeline-aws","blog\u002Fserverless-etl-pipeline-aws",{"title":46,"path":47,"stem":48},"From Traffic Violations to Safety Culture: My Data Analytics Framework","\u002Fblog\u002Ftraffic-violation-analytics-framework","blog\u002Ftraffic-violation-analytics-framework",false,{"title":51,"path":52,"stem":53,"children":54,"page":49},"Publications","\u002Fpublications","publications",[55,59],{"title":56,"path":57,"stem":58},"PCT-led early warning vital sign escalation","\u002Fpublications\u002Fpct-led-early-warning-escalation","publications\u002Fpct-led-early-warning-escalation",{"title":60,"path":61,"stem":62},"Reducing Phlebotomy Redraws Through Pre-Analytic SOPs: Training, Fidelity, and Outcome Metrics from a Community Hospital","\u002Fpublications\u002Freducing-phlebotomy-redraws-pre-analytic-sops","publications\u002Freducing-phlebotomy-redraws-pre-analytic-sops",{"id":64,"title":26,"author":65,"body":69,"date":222,"description":223,"extension":224,"image":225,"meta":226,"minRead":233,"navigation":234,"path":27,"seo":235,"stem":28,"__hash__":236},"blog\u002Fblog\u002Fdeveloping-a-graphrag-research-chatbot-with-neo4j.md",{"name":66,"avatar":67},"Peter Mangoro",{"src":68,"alt":66},"\u002Fprofile.jpg",{"type":70,"value":71,"toc":212},"minimark",[72,76,81,84,102,106,109,123,127,130,147,150,154,181,185,188,191,195],[73,74,75],"p",{},"This project started with a simple question: how do we make an LLM answer from a research corpus without hallucinating? The answer was to combine graph structure, semantic retrieval, and strict evidence grounding.",[77,78,80],"h2",{"id":79},"team-context","Team Context",[73,82,83],{},"This work was built collaboratively. Team members included:",[85,86,87,90,93,96,99],"ul",{},[88,89,66],"li",{},[88,91,92],{},"Bekithemba Nkomo",[88,94,95],{},"Masheia Dzimba",[88,97,98],{},"Tafadzwa",[88,100,101],{},"Sharman",[77,103,105],{"id":104},"project-focus","Project Focus",[73,107,108],{},"The chatbot is designed for Q&A over a PDF corpus using a GraphRAG pattern:",[85,110,111,114,117,120],{},[88,112,113],{},"papers and chunks are stored in Neo4j",[88,115,116],{},"chunks are embedded for vector retrieval",[88,118,119],{},"graph relationships support structured filtering (gene, author, topic paths)",[88,121,122],{},"LLM answers are generated from retrieved evidence with citations",[77,124,126],{"id":125},"what-i-built","What I Built",[73,128,129],{},"I implemented and documented an end-to-end workflow across ingestion and serving:",[85,131,132,135,138,141,144],{},[88,133,134],{},"extraction pipeline (PDF -> structured JSON)",[88,136,137],{},"graph schema and ingestion into Neo4j",[88,139,140],{},"embedding generation and vector indexing",[88,142,143],{},"retrieval routing (semantic, gene-focused, author-focused, aggregates)",[88,145,146],{},"streaming chat outputs with trace\u002Fprogress support in UI",[73,148,149],{},"I also maintained architecture and operations guides to make the system reproducible for others.",[77,151,153],{"id":152},"key-findings","Key Findings",[85,155,156,163,169,175],{},[88,157,158,162],{},[159,160,161],"strong",{},"Graph + vector hybrid retrieval"," is much stronger than either strategy alone for research Q&A.",[88,164,165,168],{},[159,166,167],{},"Routing matters",": classifying query intent before retrieval avoids noisy context.",[88,170,171,174],{},[159,172,173],{},"Grounded citations"," significantly improve trust in responses.",[88,176,177,180],{},[159,178,179],{},"Operational clarity"," (envs, run order, schema contracts) is as important as model quality for team maintainability.",[77,182,184],{"id":183},"lessons-learned","Lessons Learned",[73,186,187],{},"The biggest lesson was that building a useful chatbot is mostly systems engineering, not just prompt writing. Data contracts, ingestion repeatability, retrieval quality, and traceability determine whether answers stay reliable over time.",[73,189,190],{},"I also learned the value of documenting architecture in plain language so both technical and non-technical collaborators can contribute effectively.",[77,192,194],{"id":193},"skills-i-gained","Skills I Gained",[85,196,197,200,203,206,209],{},[88,198,199],{},"GraphRAG architecture design",[88,201,202],{},"Neo4j schema design and graph ingestion pipelines",[88,204,205],{},"Retrieval orchestration (route-based + tool-based patterns)",[88,207,208],{},"Streaming response UX with retrieval traceability",[88,210,211],{},"Technical documentation for long-lived project maintenance",{"title":213,"searchDepth":214,"depth":214,"links":215},"",2,[216,217,218,219,220,221],{"id":79,"depth":214,"text":80},{"id":104,"depth":214,"text":105},{"id":125,"depth":214,"text":126},{"id":152,"depth":214,"text":153},{"id":183,"depth":214,"text":184},{"id":193,"depth":214,"text":194},"2026-04-10","How I built a GraphRAG-style research assistant that combines Neo4j graph retrieval, vector search, and grounded LLM answers with citations.","md","\u002Fblog\u002FgraphDatabase\u002Fnode-properties.svg",{"tags":227},[228,229,230,231,232],"Neo4j","GraphRAG","LLM","Vector Search","Knowledge Graph",10,true,{"title":26,"description":223},"Ani_TNF3fWx035ifoWp7LMKRls3G2kPh5f1_0B7jWnw",[238,240],{"title":22,"path":23,"stem":24,"description":239,"children":-1},"How I modeled a Chinook-style music dataset as a property graph, loaded it in the right dependency order, and validated it with Cypher queries.",{"title":30,"path":31,"stem":32,"description":241,"children":-1},"How my background in software development shaped my approach to data analytics, the projects that defined my transition, and the lessons learned along the way.",1777326107703]