{"id":474,"date":"2026-01-26T17:02:58","date_gmt":"2026-01-26T17:02:58","guid":{"rendered":"https:\/\/www.draggoo.com\/kevin\/rag-chatbot\/"},"modified":"2026-01-26T17:02:58","modified_gmt":"2026-01-26T17:02:58","slug":"rag-chatbot","status":"publish","type":"page","link":"https:\/\/www.draggoo.com\/kevin\/rag-chatbot\/","title":{"rendered":"RAG Chatbot Case Study"},"content":{"rendered":"\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n\n<h1 class=\"wp-block-heading has-text-align-center\">RAG Chatbot System<\/h1>\n\n\n\n<p class=\"has-text-align-center has-large-font-size\">Production AI System for Context-Aware Responses<\/p>\n\n\n\n<div class=\"wp-block-columns has-light-gray-background-color has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<p class=\"has-text-align-center\"><strong>Role:<\/strong> Technical Product Owner &amp; Developer<\/p>\n\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<p class=\"has-text-align-center\"><strong>Type:<\/strong> Personal Project \/ Production System<\/p>\n\n<\/div>\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<p class=\"has-text-align-center\"><strong>Status:<\/strong> Live &amp; Serving Users<\/p>\n\n<\/div>\n\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Challenge<\/h2>\n\n\n\n<p>Traditional chatbots and even modern LLMs struggle to provide accurate, context-aware responses about proprietary or specialized data. Users asking questions about specific content receive generic answers that lack the depth and accuracy needed for meaningful engagement.<\/p>\n\n\n\n<p><strong>Key Problem:<\/strong> How do you enable an AI to provide accurate, contextual answers about your own data without the hallucinations and generic responses typical of base LLM models?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Solution<\/h2>\n\n\n\n<p>I designed and built a complete Retrieval-Augmented Generation (RAG) system from the ground up, implementing the full technology stack:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Technology Architecture<\/h3>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<h4 class=\"wp-block-heading\">Backend<\/h4>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FastAPI:<\/strong> High-performance Python API framework<\/li>\n<li><strong>Ollama:<\/strong> Local LLM inference engine<\/li>\n<li><strong>bge-m3:<\/strong> State-of-the-art embedding model<\/li>\n<li><strong>Qdrant:<\/strong> Vector database for semantic search<\/li>\n<\/ul>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<h4 class=\"wp-block-heading\">Infrastructure<\/h4>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Docker:<\/strong> Containerized deployment<\/li>\n<li><strong>Docker Compose:<\/strong> Multi-service orchestration<\/li>\n<li><strong>Nginx:<\/strong> Reverse proxy &amp; SSL termination<\/li>\n<li><strong>WordPress:<\/strong> Frontend integration<\/li>\n<\/ul>\n\n<\/div>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">How It Works<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Document Ingestion:<\/strong> Content is chunked and processed through the embedding model<\/li>\n<li><strong>Vector Storage:<\/strong> Embeddings are stored in Qdrant for efficient similarity search<\/li>\n<li><strong>Query Processing:<\/strong> User questions are embedded and matched against stored vectors<\/li>\n<li><strong>Context Retrieval:<\/strong> Most relevant document chunks are retrieved<\/li>\n<li><strong>Response Generation:<\/strong> LLM generates answers using retrieved context<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Results<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<h3 class=\"wp-block-heading has-text-align-center\">\u2705 Production Ready<\/h3>\n\n\n<p class=\"has-text-align-center\">Live system serving real users with context-aware responses<\/p>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<h3 class=\"wp-block-heading has-text-align-center\">\ud83c\udfaf Accurate Answers<\/h3>\n\n\n<p class=\"has-text-align-center\">Responses grounded in actual proprietary content, reducing hallucinations<\/p>\n\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n\n<h3 class=\"wp-block-heading has-text-align-center\">\ud83d\udd27 Full Stack<\/h3>\n\n\n<p class=\"has-text-align-center\">Complete end-to-end implementation demonstrating deep technical competency<\/p>\n\n<\/div>\n\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Key Takeaways<\/h2>\n\n\n\n<p>This project demonstrates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Practical AI Implementation:<\/strong> Not just theory\u2014a working production system<\/li>\n<li><strong>Full-Stack Capability:<\/strong> From infrastructure to API to frontend integration<\/li>\n<li><strong>Modern Tech Stack:<\/strong> Current, industry-relevant technologies<\/li>\n<li><strong>Product Thinking:<\/strong> Solving real user problems with AI capabilities<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"\/kevin\/\">Back to Home<\/a><\/div>\n\n\n<div class=\"wp-block-button is-style-outline is-style-outline--1\"><a class=\"wp-block-button__link wp-element-button\" href=\"\/kevin\/contact\/\">Contact Me<\/a><\/div>\n\n<\/div>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>RAG Chatbot System Production AI System for Context-Aware Responses Role: Technical Product Owner &amp; Developer Type: Personal Project \/ Production System Status: Live &amp; Serving Users The Challenge Traditional chatbots and even modern LLMs struggle to provide accurate, context-aware responses about proprietary or specialized data. Users asking questions about specific content receive generic answers that [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"class_list":["post-474","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.draggoo.com\/kevin\/wp-json\/wp\/v2\/pages\/474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.draggoo.com\/kevin\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.draggoo.com\/kevin\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/www.draggoo.com\/kevin\/wp-json\/wp\/v2\/comments?post=474"}],"version-history":[{"count":0,"href":"https:\/\/www.draggoo.com\/kevin\/wp-json\/wp\/v2\/pages\/474\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.draggoo.com\/kevin\/wp-json\/wp\/v2\/media?parent=474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}