个人知识库问答机器人

一个面向个人笔记与文档的本地 RAG 问答应用。通过 LangChain 构建索引流程,使用 Chroma 作为向量数据库,并通过 Streamlit 提供交互式聊天界面,实现语义检索与自然语言问答。

技术栈

LangChain Chroma Streamlit OpenAI Embeddings Python

核心功能

  • 1 自动读取本地 Markdown、PDF 与 TXT 笔记文件,进行文本清洗与分块。
  • 2 使用 Embedding 模型将文本块向量化,并持久化到本地 Chroma 数据库。
  • 3 基于用户提问进行语义相似度检索,召回最相关的若干文本片段。
  • 4 将检索结果作为上下文注入 Prompt,由 LLM 生成带引用来源的回答。
  • 5 Streamlit 界面支持多轮对话、历史记录查看与重新索引操作。

实现亮点

可插拔的文档加载器

将文档解析、分块、嵌入、存储各阶段抽象为独立模块,支持通过配置文件切换不同的 Embedding 模型与向量数据库,方便后续对比实验。

引用溯源

在生成回答的同时,界面会展示该回答所依据的原始文本片段及来源文件名,帮助用户快速验证答案的可靠性。

遇到的挑战

分块策略对召回质量影响很大。最初采用固定长度分块时,经常出现代码块被截断、上下文丢失的问题。后来引入按标题与代码边界进行语义分块,并结合重叠窗口,召回准确率明显提升。

另一个挑战是控制幻觉:当检索结果不足时,模型倾向于“脑补”答案。通过显式要求在上下文中找不到答案时回复“不知道”,并提供相似片段给用户参考,有效降低了幻觉风险。

后续计划

  • 接入本地开源 Embedding 与 LLM,实现完全离线的知识库问答。
  • 引入重排序(Rerank)模型,对初步召回结果做二次精排。
  • 支持多知识库切换与标签过滤,满足笔记分类检索需求。