umbertogriffo/rag-chatbot
RAG (Retrieval-augmented generation) ChatBot that provides answers based on contextual information extracted from a collection of Markdown files.
What it solves
本專案提供一個本地、具對話感知的聊天機器人,能根據特定的 Markdown 檔案集合回答問題。它解決了從私人文件產生精確、具情境感知回應的問題,同時避免使用外部雲端 API,所有運算皆在本機完成。
How it works
系統使用結合 llama.cpp 進行本地 LLM 推論與 Chroma 作為向量資料庫的 Retrieval‑Augmented Generation(RAG)管線。
- Memory Building:將 Markdown 檔案以重新構築的
RecursiveCharacterTextSplitter切割成區塊,透過Sentence Transformers轉換為數值嵌入,並儲存於 Chroma。 - Incremental Indexing:為避免重新建構整個索引,系統使用雜湊值與 SQLite 映射表追蹤文件版本,只更新變更或新增的文件。
- Retrieval:使用者提問時,LLM 會先重寫查詢以提升檢索效果,系統再從向量庫中抓取最相關的區塊。
- Synthesis:為防止上下文溢位,系統提供兩種策略:"Create and Refine"(順序合成)或 "Hierarchical Summarization"(合併獨立答案)。
- Conversation Memory:聊天機器人會保存對話歷史,以在多輪互動中維持上下文。
Who it’s for
此工具適合想自行架設私人 AI 助手的使用者,能「閱讀」其 Markdown 格式的文件或個人筆記,並根據這些特定知識庫提供答案。
Highlights
- Local Execution:可在 CPU 或 GPU(CUDA/Metal)上執行,使用
llama.cpp的量化 GGUF 模型。 - Incremental Updates:文件變更時可有效更新向量索引,無需完整重建。
- Flexible Synthesis:支援多種策略以處理大量檢索到的上下文。
- Query Rewriting:透過提示 LLM 優化使用者問題,提升檢索準確度。
- Full Stack:包含 FastAPI 後端與具文件上傳功能的 React/TypeScript 前端。