搭建基于 LLM 的个人知识库
近期,基于大语言模型(LLM)结合外挂知识库的问答系统备受关注。为了有效利用本地沉淀的笔记与文档,本文旨在通过 LLM 的推理和归纳能力,搭建一个私有化的个人知识库系统,实现知识的检索与复用。
基于 LangChain 框架结合 ChatGLM3 大模型,本文详细阐述了构建本地私有化知识库的技术方案。通过检索增强生成(RAG)技术,利用向量数据库存储文档片段,实现了对本地文档的精准检索与问答。教程涵盖环境配置、模型下载、参数调整及实战部署步骤,并提供了常见问题排查指南,旨在帮助开发者低成本实现企业级知识管理系统的私有化落地。

近期,基于大语言模型(LLM)结合外挂知识库的问答系统备受关注。为了有效利用本地沉淀的笔记与文档,本文旨在通过 LLM 的推理和归纳能力,搭建一个私有化的个人知识库系统,实现知识的检索与复用。
在介绍具体方案前,我们需要理解大语言模型(如 ChatGPT)的特性:
然而,通用模型的训练数据存在截止时间(例如截止至 2022 年),无法直接获取最新的私有数据。若直接将大量数据作为 Prompt 输入,受限于 Token 长度限制,不仅成本高昂,且效果不佳。因此,我们需要一种机制,仅将和问题最相关的内容提取出来作为上下文输入。
这本质上是一个搜索引擎的工作流程:
这个存储了文档内容的数据库即为外挂知识库。其核心处理流程包括:

MarkdownTextSplitter,负责将长文本按段落或字符数切分,避免超出上下文窗口。shibing624/text2vec-base-chinese,用于将中文文本映射为向量空间中的点。FAISS,用于高效存储和检索高维向量。目前主流的开源及商业化方案主要分为以下几类:
ChatGPT + Fine-tune(微调):
开源 LLM + 微调:
LangChain + 开源 LLM(RAG 架构):
综合考量成本、安全性与实施难度,本文选择方案 3,即结合 LangChain 框架与开源大模型(ChatGLM3),构建不依赖外部 API 的私有化知识库。
建议使用配置较好的云服务或本地服务器,确保具备足够的 GPU 显存(建议 16GB 以上)。推荐使用 Docker 容器化部署以简化依赖管理,或直接使用 Python 虚拟环境。
基础依赖检查:
由于 Hugging Face 下载速度不稳定,建议从 ModelScope 下载模型权重。
# /mnt/workspace/
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git
选择适合中文场景的 BGE 系列向量模型。
# /mnt/workspace/
git clone https://www.modelscope.cn/Jerry0/text2vec-bge-large-chinese.git
这是基于 LangChain 思想实现的本地知识库问答应用,提供开箱即用的解决方案。
# /mnt/workspace/
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
cd Langchain-Chatchat
# 切换到稳定分支 v0.2.2,master 分支可能需要更高版本的 Python
# 注意:不同版本依赖差异较大,建议锁定版本
git checkout origin v0.2.2
# 初始化依赖
# 提前锁定关键依赖版本以避免冲突
# streamlit-chatbox==1.1.7
# openai==0.28.1
pip install -r requirements.txt
pip install -r requirements_api.txt
pip install -r requirements_webui.txt
# 初始化配置文件
mkdir -p configs
cp configs/model_config.py.example configs/model_config.py
cp configs/server_config.py.example configs/server_config.py
编辑 configs/model_config.py,指定本地模型路径。
embedding_model_dict = {
# ... 其他配置
# 替换为刚刚下载的向量库路径
"text2vec-base": "/mnt/workspace/text2vec-bge-large-chinese",
}
llm_model_dict = {
# ... 其他配置
# 增加如下配置
"chatglm3-6b": {
"local_model_path": "/mnt/workspace/chatglm3-6b",
"api_base_url": "",
"api_key": ""
},
}
# 默认向量模型
EMBEDDING_MODEL = "text2vec-base"
# 默认 LLM 模型
LLM_MODEL = "chatglm3-6b"
启动服务:
python startup.py -a
当看到服务启动成功的提示时,即可在浏览器访问对应链接。

首先测试不带知识库的纯对话能力,验证模型加载是否正常。

导入本地文档(PDF, TXT, Markdown 等),创建知识库后切换至问答模式。



系统能够结合已有资料和本地知识库进行整合回答,并标注资料来源。

整体验证表明,该方案在检索本地文档并进行总结归纳方面表现良好。但在涉及复杂代码生成或逻辑推理任务时,准确率仍有提升空间。因此,该方案最适合用于文档检索、知识问答及资料整理场景。
如果运行过程中出现 OOM(Out Of Memory)错误,可以尝试以下优化:
max_tokens 参数。chunk_size 和 chunk_overlap。过大的切片会导致信息丢失,过小则导致上下文断裂。建议根据文档类型尝试 500-1000 字区间。上传文档前,建议先进行预处理,去除页眉页脚、乱码及无关广告信息,这能大幅提升向量化后的检索质量。
本次实践展示了本地部署 LLM + 外挂知识库的完整流程。对于企业内部而言,这种私有化部署方式解决了数据泄露顾虑,同时激活了沉睡的历史文档资产。相比传统的人工检索,基于 LLM 的知识库能提供语义层面的理解与归纳。
未来随着多模态大模型的发展,知识库的应用场景将进一步扩展,例如支持图片、表格等非结构化数据的深度分析。开发者可根据实际业务需求,持续优化模型选型与检索策略,构建更高效的企业级智能助手。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online