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)流水线。

  1. Memory Building:Markdown 文件通过重新实现的 RecursiveCharacterTextSplitter 切分为块,使用 Sentence Transformers 转换为数值嵌入,并存入 Chroma。
  2. Incremental Indexing:为避免重新构建整个索引,系统利用哈希值和 SQLite 映射表追踪文档版本,仅更新已更改或新增的文档。
  3. Retrieval:用户提问时,LLM 首先重写查询以获得更好的检索效果,系统随后从向量库中获取最相关的块。
  4. Synthesis:为防止上下文溢出,系统提供两种策略:“Create and Refine”(顺序合成)或 “Hierarchical Summarization”(合并独立答案)。
  5. 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 前端。