环境搭建与开发准备
建立可验证、可重建的开发环境
生命周期 · 阶段四 开发实现(前置) | 上游:系统设计(03)| 下游:入库流水线(05)、模块编码(07)
一、部署架构总览
最小可用的 RAG 私有化部署包含四类服务:
flowchart TB
APP["应用层
RAGFlow / Dify / 自研 LangChain 服务"]
APP --> B["模型服务
Ollama / vLLM / Embedding"]
APP --> C["向量库
Milvus / Qdrant"]
APP --> D["中间件
MySQL / Redis / MinIO / ES"]
style APP fill:#e8f4ff,stroke:#4a9eff
style B fill:#fff0f5,stroke:#e06fa8
style C fill:#f0fff4,stroke:#4abf60
style D fill:#fff8e1,stroke:#d4a017
二、基础环境准备
# 系统要求(单机验证环境)
# Linux 发行版、内存和 CPU 按组件官方要求及目标数据量选择;以下配置仅为示例
# 已安装 Docker 与 Docker Compose
docker --version # ≥ 20.10
docker compose version # ≥ v2.0
三、向量数据库部署(以 Milvus 为例)
# 下载官方 standalone 编排文件
wget https://github.com/milvus-io/milvus/releases/download/v2.4.x/milvus-standalone-docker-compose.yml -O docker-compose.yml
docker compose up -d
# 验证
docker compose ps # milvus-standalone 状态应为 healthy
轻量替代(Qdrant,单容器即可):
docker run -d -p 6333:6333 -v qdrant_data:/qdrant/storage qdrant/qdrant
curl http://localhost:6333/collections # 返回 JSON 即成功
四、模型服务部署
1. LLM(Ollama 本地部署)
# 安装 Ollama 后拉取模型
ollama pull qwen2.5:7b # 生成模型
ollama serve # 默认端口 11434
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "你好",
"stream": false
}'
生产高并发场景用 vLLM(需 GPU):
pip install vllm
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen2.5-7B-Instruct --port 8000
2. Embedding 模型
# 方案 A:sentence-transformers 进程内加载(中小规模)
pip install sentence-transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-large-zh-v1.5")
vectors = model.encode(["不良资产处置流程", "债权转让"], normalize_embeddings=True)
print(vectors.shape) # (2, 1024)
# 方案 B:TEI(Text Embeddings Inference)独立服务(大规模,GPU 加速)
docker run -d -p 8080:80 ghcr.io/huggingface/text-embeddings-inference:latest \
--model-id BAAI/bge-large-zh-v1.5
3. OCR(PaddleOCR)
pip install paddlepaddle paddleocr
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr("test_scan.pdf", cls=True)
for page in result:
for line in page:
print(line[1][0]) # 识别文本
五、应用层部署
方式 A:RAGFlow(开源一体化知识库示例)
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
docker compose -f docker-compose-CN.yml up -d
# 访问 http://localhost 即可使用 Web 界面配置知识库
方式 B:自研链路(LangChain 最小示例)
# pip install langchain langchain-community qdrant-client sentence-transformers
from langchain_community.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceBgeEmbeddings
from langchain_community.vectorstores import Qdrant
from langchain_community.llms import Ollama
# 1. 解析
docs = PyMuPDFLoader("操作手册.pdf").load()
# 2. 切片
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 3. 向量化 + 索引
embeddings = HuggingFaceBgeEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
vs = Qdrant.from_documents(chunks, embeddings, url="http://localhost:6333",
collection_name="kb_demo")
# 4. 检索 + 生成
qa_chain = vs.as_retriever(search_kwargs={"k": 5})
llm = Ollama(model="qwen2.5:7b")
context = "\n".join(d.page_content for d in qa_chain.invoke("抵押物处置流程是什么?"))
answer = llm.invoke(f"仅根据以下资料回答问题,无法回答请说不知道。\n资料:\n{context}\n\n问题:抵押物处置流程是什么?")
print(answer)
六、环境验证清单(Checklist)
| # | 验证项 | 方法 | 通过标准 |
|---|---|---|---|
| 1 | 向量库可用 | curl 健康检查接口 | 返回正常状态码 |
| 2 | LLM 服务可用 | 发送一条测试 prompt | 返回连贯中文回答 |
| 3 | Embedding 可用 | 编码两条相似/无关文本 | 相似文本余弦相似度显著更高 |
| 4 | OCR 可用 | 识别一张测试扫描件 | 关键字段识别正确 |
| 5 | 全链路打通 | 上传 1 份测试文档并提问 | 能返回带依据的回答 |
| 6 | 端口与防火墙 | 应用服务器互相 telnet | 全部连通 |
| 7 | GPU 利用(如有) | nvidia-smi | 驱动正常、推理时占用上升 |
七、配置管理要点
- 所有模型名、API 地址、向量库连接串配置化(env / 配置中心),不硬编码
- 区分 dev / test / prod 三套环境,test 环境数据与生产隔离
- 模型文件、向量库数据目录挂载持久卷,避免容器重建丢数据
- 关键服务配置健康检查与开机自启
本篇交付与下一步
本篇命令是环境验证样例。执行前应锁定组件版本并核对对应版本的官方安装文档;只有健康检查、持久化目录、模型调用和重启恢复都通过,环境才算就绪。下一步进入 05-文档预处理与入库流水线。