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 前端。