个人知识库问答机器人
一个面向个人笔记与文档的本地 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)模型,对初步召回结果做二次精排。
- 支持多知识库切换与标签过滤,满足笔记分类检索需求。