本地 RAG 部署完全指南
什么是 RAG?
RAG = Retrieval-Augmented Generation
简单来说:先从知识库检索相关文档,再让 LLM 根据检索结果生成答案。
用户问题 → 检索相似文档 → 拼接进Prompt → LLM生成答案
为什么本地部署 RAG?
| 优势 | 说明 |
|---|---|
| 🔒 隐私安全 | 数据不离开本地 |
| 💰 成本为零 | 无需API费用 |
| 🌐 离线可用 | 无需互联网 |
| ⚙️ 可定制 | 完全控制模型和数据 |
推荐的本地 RAG 方案
方案一:Ollama + LangChain(推荐入门)
最低配置: N100 + 8GB RAM
第一步:安装 Ollama
# Linux/Mac
curl -fsSL https://ollama.ai/install.sh | sh
# Windows: 下载安装包
# https://ollama.ai/download
第二步:拉取模型
ollama pull qwen3.5:0.8b # 轻量,适合N100
ollama pull llama3.2 # 英文为主
ollama pull qwen2.5:3b # 中英文,资源占用中等
第三步:安装依赖
pip install langchain langchain-ollama langchain-community
pip install chromadb # 向量数据库
pip install beautifulsoup4 # 网页解析
第四步:基础 RAG 脚本
from langchain_community.document_loaders import WebLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_ollama import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain_ollama import ChatOllama
# 1. 加载文档(可以是网页、PDF、TXT)
loader = WebLoader(["https://example.com/article"])
docs = loader.load()
# 2. 分块处理
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = splitter.split_documents(docs)
# 3. 生成向量并存入向量数据库
embeddings = OllamaEmbeddings(model="qwen3.5:0.8b")
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./vector_db")
# 4. 构建检索链
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 5. 问答
llm = ChatOllama(model="qwen3.5:0.8b", temperature=0.7)
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
# 提问
result = qa_chain.invoke({"query": "这篇文章的主要内容是什么?"})
print(result["result"])
方案二:RAGFlow(生产级,推荐中文)
最低配置: 4GB RAM + Docker
安装步骤
# 克隆项目
git clone https://github.com/infiniflow/ragflow.git
cd ragflow
# 启动(Docker 环境)
docker compose up -d
# 访问界面
# http://localhost:9380
特点
- 🌐 中文界面友好
- 📄 支持 PDF, Word, TXT, Markdown
- 🎨 可视化知识库管理
- 🔍 多种检索算法
方案三:Dify(工作流自动化)
最低配置: 2GB RAM + Docker
# 安装
docker run -itd --name dify \
-p 80:80 \
-v ~/dify/data:/data \
dify/dify-aio:latest
# 访问
# http://localhost:80
Dify vs RAGFlow
| 特性 | RAGFlow | Dify |
|---|---|---|
| 定位 | 知识库问答 | 工作流自动化 |
| 中文优化 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 上手难度 | 简单 | 中等 |
| 定制性 | 一般 | 灵活 |
N100 (8GB RAM) 推荐配置
硬件:N100 + 8GB RAM + 256GB SSD
系统:Windows 11 或 Ubuntu Server
资源分配:
├── Ollama (Qwen3.5 0.8B): ~2GB RAM
├── ChromaDB: ~1GB RAM
├── 操作系统: ~3GB RAM
└── 剩余: ~2GB RAM (缓冲)
推荐的模型组合
| 模型 | 用途 | 显存/内存 |
|---|---|---|
| Qwen3.5 0.8B | 轻量问答 | 2GB |
| Qwen2.5 3B | 中等复杂度 | 4GB |
| Phi-3.5 3B | 英文为主 | 4GB |
RAG 优化技巧
1. 更好的分块策略
# 按段落分块,比固定长度更好
from langchain.text_splitter import MarkdownTextSplitter
splitter = MarkdownTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
2. 混合检索
from langchain.retrievers import EnsembleRetriever
# 关键词检索 + 向量检索 混合
retriever = EnsembleRetriever(
retrievers=[keyword_retriever, vector_retriever],
weights=[0.3, 0.7]
)
3. 查询改写
# 将用户问题改写后再检索,效果更好
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
template="""基于以下问题,改写成一个完整的检索查询:
问题:{question}
改写后:""",
input_variables=["question"]
)
常见问题
Q: N100 能跑多大的模型?
A: 推荐 0.8B-3B 参数模型,更大的模型建议用 7B+ 但需要更多内存。
Q: 向量数据库占用多少空间?
A: 取决于文档量,一般 1万字文档 ~1MB 向量存储。
Q: 可以用 GPU 加速吗?
A: N100 没有独立GPU,但 Ollama 会用 CPU 推理,速度较慢但能用。
Q: 支持中文吗?
A: 是的,使用 qwen 系列模型中文支持很好。
下一步
- 先用 Ollama 跑通基础 RAG → 最简单
- 然后试 RAGFlow → 中文友好
- 最后 Dify → 复杂工作流
最后更新:2026-04-11