个人知识库系统的搭建思路
整理课程资料、项目文档和技术笔记,并通过检索增强生成提升资料利用效率。
为什么要搭知识库
笔记越记越多,但真正需要的时候经常找不到。用 Obsidian 记了一年多的笔记,搜索体验还行,但没法跨来源检索——书签、技术文档摘录、课程资料分散在不同地方。
最近在整理一套个人知识库系统,目标是把所有资料统一管理,并且让 AI 能基于这些资料回答问题。
技术方案
数据来源
知识库的内容来源主要是:
- Obsidian 的 Markdown 文件
- 浏览器书签导出
- 技术文档的摘录
- 博客文章
- 课程笔记
这些格式不统一,第一步是做数据清洗和格式化。
向量化存储
内容先经过分块处理,然后用 Embedding 模型转换成向量,存到向量数据库里:
原文 → 分块(chunking) → Embedding → 向量数据库
Embedding 模型选择的是 BGE 系列的中文模型,在中文语义理解上的效果比较好。向量数据库用的是 Qdrant,部署在本地 Docker 里,数据量不大的情况下性能完全够用。
检索增强生成(RAG)
检索流程:
- 用户提问
- 问题转成向量
- 在向量数据库中检索最相关的几个文档块
- 把检索到的内容和问题一起发给 LLM
- LLM 基于检索到的内容生成回答
# 简化的 RAG 流程
results = qdrant.search(query_vector, top_k=5)
context = "\n".join([r.payload["text"] for r in results])
answer = llm.generate(f"基于以下内容回答问题:\n{context}\n\n问题:{question}")实际效果
优点
- 对于自己记过的笔记内容,AI 能给出非常准确的回答
- 会引用具体的笔记来源,方便验证
- 比纯 LLM 问答靠谱很多
局限性
- 对于没记过的内容,AI 还是会编造看似合理但实际不存在的信息
- 分块策略对检索质量影响很大,太长太短都不行
- Embedding 模型对专业术语的理解还不够好
后续计划
- 把博客文章也导入知识库
- 试试多轮对话的支持
- 加一个简单的 Web 界面,方便日常使用
- 优化分块策略,提升检索精度
整个项目还在持续迭代中,等效果稳定了可能会写一篇更详细的技术文章。
相关推荐
互动