从零搭建生产级 RAG(检索增强生成)私有知识库。解决大模型三大痛点:幻觉、知识过时、私有数据无法接入。
一句话理解 RAG:给大模型配一个专属图书馆——先查资料,再回答问题。
适用场景:企业内部文档问答、客服知识库、合同审查、设备运维、新人培训答疑
读取 references/environment.md 获取完整环境配置。
cd scripts
docker-compose up -d
启动服务:Milvus(向量库)、Ollama(本地大模型)、MinIO(对象存储)
# 验证服务
docker-compose ps
# 拉取模型(推荐 qwen2.5:7b)
ollama pull qwen2.5:7b
读取 references/document-parsing.md 获取多格式解析详解。
支持格式:
| 格式 | 解析库 | 注意事项 |
|---|---|---|
| :--- | :--- | :--- |
| PyMuPDF / pdfplumber | 扫描件需OCR | |
| Word (.docx) | python-docx | 表格需特殊处理 |
| Excel (.xlsx) | openpyxl / pandas | 多Sheet遍历 |
| Markdown | 原生解析 | 保留标题层级 |
| TXT | 原生解析 | 自动检测编码 |
| 图片 | OCR (PaddleOCR) | 提取图中文字 |
读取 references/chunking-strategy.md 获取分块策略详解。这是决定检索准确率的关键环节。
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 推荐配置(中文场景)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=512, # 每块512字符
chunk_overlap=64, # 重叠64字符,保持语义连贯
separators=["\n\n", "\n", "。", ",", " ", ""],
length_function=len,
)
chunks = text_splitter.split_documents(documents)
分块策略速查:
| 场景 | chunk_size | chunk_overlap | 策略 |
|---|---|---|---|
| :--- | :---: | :---: | :--- |
| 制度文档 | 256 | 50 | 小分块+按章节 |
| 技术文档 | 512 | 64 | 标准配置 |
| 长文报告 | 1024 | 128 | 大分块+语义分割 |
| FAQ | 128 | 0 | 按QA对分割 |
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Milvus
# 使用 BGE 中文 Embedding 模型(C-MTEB榜首)
embeddings = HuggingFaceEmbeddings(
model_name="BAAI/bge-large-zh-v1.5",
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': True}
)
# 存入 Milvus
vector_store = Milvus.from_documents(
documents=chunks,
embedding=embeddings,
collection_name="my_knowledge_base",
connection_args={"host": "localhost", "port": "19530"},
)
读取 references/retrieval-strategies.md 获取检索策略详解。
推荐:混合检索(BM25 + 向量 + Rerank)
from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever
# BM25 关键词检索
bm25_retriever = BM25Retriever.from_documents(chunks, k=5)
# 向量语义检索
vector_retriever = vector_store.as_retriever(search_kwargs={"k": 5})
# 混合检索
ensemble_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, vector_retriever],
weights=[0.3, 0.7] # 向量权重更高
)
# Rerank 重排(提升准确率)
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.document_compressors import BgeRerank
compressor = BgeRerank(model="BAAI/bge-reranker-large", top_n=3)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=ensemble_retriever
)
from langchain.chains import RetrievalQA
from langchain_community.llms import Ollama
llm = Ollama(model="qwen2.5:7b", temperature=0.1)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=compression_retriever,
return_source_documents=True,
verbose=True
)
# 提问
result = qa_chain({"query": "公司的年假政策是什么?"})
print(result['result'])
print("参考来源:", [doc.metadata for doc in result['source_documents']])
读取 references/graphrag-guide.md 了解 GraphRAG 原理和实现。
GraphRAG 在传统 RAG 基础上增加知识图谱层,实现多跳推理和实体关系查询,是2026年企业级RAG的新标配。
| 方案 | Top-1准确率 | Top-3准确率 | 适用场景 |
|---|---|---|---|
| :--- | :---: | :---: | :--- |
| 纯向量检索 | 72% | 85% | 通用场景 |
| BM25+向量混合 | 81% | 91% | 含专有名词/缩写 |
| 混合+Rerank | 88% | 95% | 高精度要求 |
| GraphRAG | 92% | 97% | 多跳推理/复杂关系 |
| 场景 | 关键步骤 | 参考 |
|---|---|---|
| :--- | :--- | :--- |
| 内部制度问答 | Step 2-6 | PDF解析 + 小分块 |
| 合同审查 | Step 2-6 | Word解析 + 段落级分块 |
| 产品手册FAQ | Step 2-4 | 按QA对分割 |
| 多跳推理 | Step 7 | GraphRAG知识图谱 |
| 权限分级 | 见 references/rbac.md | Milvus Partition Key |
| 资源 | 路径 | 用途 |
|---|---|---|
| :--- | :--- | :--- |
| Docker环境 | scripts/docker-compose.yml | Milvus+Ollama+MinIO |
| 一键搭建脚本 | scripts/setup_rag.py | Python全流程自动化 |
| 环境说明 | references/environment.md | 环境要求与依赖 |
| 文档解析 | references/document-parsing.md | 多格式解析详解 |
| 分块策略 | references/chunking-strategy.md | 分块策略对比 |
| 检索策略 | references/retrieval-strategies.md | 混合检索+Rerank |
| GraphRAG | references/graphrag-guide.md | 知识图谱增强 |
| RBAC权限 | references/rbac.md | 权限分级方案 |
bge-large-zh-v1.5)ollama pull(内容由AI生成,仅供参考)
共 1 个版本