LangChain本地RAG私有知识库住宅服务器部署教程
为什么要在住宅服务器部署本地 RAG 知识库
很多人想把公司文档、个人笔记、电子书整理成一个能搜索问答的私有知识库。
如果直接调用云端 API,数据会上传第三方,存在隐私风险。
而 LangChain 本地 RAG 私有知识库 完全在本地运行,数据不出屋。
用家里的旧迷你主机或 NAS 搭建一台住宅服务器,就能跑起来。
本文从零开始,手把手带你完成整套部署。
准备一台能跑的住宅服务器
硬件最低要求:4 核 CPU、8GB 内存、40GB 空闲硬盘。
如果运行 7B 参数的模型(如 llama3),建议 16GB 内存以上。
推荐系统为 Ubuntu 22.04 LTS(Debian 12 也可)。
你需要先装好 Docker 和 Docker Compose:
# 安装 Docker
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# 退出 SSH 重新登录,让用户组生效
接着安装 Python 3.10+(推荐 3.11)和 pip:
sudo apt update
sudo apt install python3.11 python3.11-venv python3-pip -y
搭建本地模型与向量数据库
本地 RAG 需要两个模型:嵌入模型(把文本转成向量)和 生成模型(回答问题)。
用 Ollama 一键管理:
# 用 Docker 启动 Ollama
docker run -d -v /mnt/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 拉取轻量嵌入模型(约 500MB)
docker exec -it ollama ollama pull nomic-embed-text
# 拉取对话模型(以 qwen2:7b 为例)
docker exec -it ollama ollama pull qwen2:7b
向量数据库选择 ChromaDB,轻量且兼容 LangChain。
同样用 Docker 启动:
docker run -d -p 8000:8000 --name chromadb chromadb/chroma:latest
编写 LangChain 检索问答代码
创建一个项目目录并安装依赖:
mkdir ~/langchain-rag && cd ~/langchain-rag
python3.11 -m venv venv
source venv/bin/activate
pip install langchain langchain-community chromadb sentence-transformers pdfplumber
新建 app.py,实现从 PDF/文本文件加载、向量化、检索并回答的流程:
import os
from langchain_community.document_loaders import PDFPlumberLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
# 1. 加载文档(支持 PDF 和纯文本)
loader = PDFPlumberLoader("/path/to/your/doc.pdf") # 替换为你的文件
docs = loader.load()
# 2. 切分文本
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = splitter.split_documents(docs)
# 3. 生成向量并存入 Chroma
embed = OllamaEmbeddings(model="nomic-embed-text", base_url="http://localhost:11434")
vectordb = Chroma.from_documents(splits, embed, persist_directory="./chroma_db")
# 4. 创建问答链
llm = Ollama(model="qwen2:7b", base_url="http://localhost:11434")
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=vectordb.as_retriever())
# 5. 提问
question = "这篇文章主要讲了什么?"
result = qa.invoke({"query": question})
print(result["result"])
运行前把 /path/to/your/doc.pdf 换成你的文档实际路径。
第一次运行会下载 embedding 模型(约 500MB)。
运行命令:
python app.py
避坑指南与高频问题
- Ollama 端口无法连接:检查
docker ps确保 ollama 容器在运行,且端口正确映射。也可以在容器内测试:docker exec -it ollama curl http://localhost:11434/api/tags。 - 向量数据库报错“duplicate entry”:每次重新运行前删除
./chroma_db目录,或者换一个持久化路径。 - 内存不足导致 Ollama 崩溃:7B 模型至少需要 8GB 空闲内存,建议关闭其他容器或桌面环境。可以用
ollama pull qwen2:7b替代部分大模型。 - 中文回答质量差:选择对中文支持更好的模型(比如 Qwen2 系列),并确保文档内容为真实文本,而不是扫描图片。
验证效果与后续扩展
运行上述代码后,修改 question 变量测试不同问题。
如果返回的答案与文档内容吻合,说明 LangChain 本地 RAG 私有知识库已经成功搭建。
后续你可以:
- 通过 Gradio 或 Streamlit 编写一个简单的网页对话框。
- 批量导入多个文档,用文件夹加载器。
- 调整
chunk_size和chunk_overlap优化检索精度。 - 用 Nginx 反代将 API 暴露给内网其他设备。
遇到报错时优先检查模型是否已拉取、向量数据库是否正确持久化。
这篇 LangChain本地RAG私有知识库住宅服务器部署教程 提供的就是一套可复现的基线,你可以根据自己的知识库需求灵活调整。