在隐私敏感的企业场景中,完全离线的 RAG(Retrieval-Augmented Generation)管道已成为构建私有 AI 应用的核心方案。传统云端 RAG 依赖 OpenAI 或其他 API,不仅引入数据泄露风险,还受网络延迟和费用制约。Docker 容器化 Llama3 的离线 RAG 系统,通过 Ollama 运行本地 LLM、mxbai-embed-large 生成嵌入、ChromaDB 持久化向量存储,以及 Streamlit 前端,实现一键部署的端到端管道。该方案零云依赖,支持 NVIDIA GPU 加速,确保敏感文档(如 PDF、技术手册)在本地安全处理。
系统架构采用微服务设计,四大组件通过 Docker Compose 隔离运行:Ollama 服务托管 Llama3 8B 模型(推理引擎);嵌入服务使用 mxbai-embed-large(1344 维向量,检索精度高);ChromaDB 作为向量数据库,支持持久化索引;Streamlit 后端处理文档摄入(自动分块、向量化)和聊天查询(RAG 检索 + 生成)。文档上传后,系统自动解析 PDF/TXT/MD,chunk 大小默认 512 token、重叠 50 token,确保语义完整性。检索时,top-k=5 片段注入提示,提升生成准确率达 30%以上。
部署过程极简:克隆仓库后,编辑 docker-compose.yml 配置 GPU(若有 NVIDIA Docker),执行 docker-compose up -d。首次启动需拉取模型(~5GB),后续离线运行。关键参数清单如下:
硬件要求与资源分配:
- RAM:16GB+ 系统内存(Ollama 独占 10GB)。
- GPU:RTX 3060(8GB VRAM)推荐;CPU 模式下响应延迟 5-10s/查询。
- 存储:50GB+ SSD(模型 + 向量索引)。
docker-compose.yml 核心配置(可落地模板):
services:
ollama:
image: ollama/ollama:latest
ports: ["11434:11434"]
volumes: ['./ollama:/root/.ollama']
environment:
- OLLAMA_HOST=0.0.0.0
- NVIDIA_VISIBLE_DEVICES=all
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
streamlit:
build: .
ports: ["8501:8501"]
depends_on: [ollama, chromadb]
environment:
- OLLAMA_URL=http://ollama:11434
- CHROMA_URL=http://chromadb:8000
拉取模型:docker exec -it <ollama-container> ollama pull llama3:8b 和 ollama pull mxbai-embed-large。
RAG 管道参数调优清单:
- 文档分块:chunk_size=512, chunk_overlap=50(平衡召回与噪声)。
- 嵌入生成:normalize_embeddings=True,batch_size=32(GPU 加速下)。
- 检索阈值:similarity_top_k=5, score_threshold=0.7(过滤低相关片段)。
- 生成参数:temperature=0.1(确定性输出),max_tokens=1024,top_p=0.9。
- 会话管理:history_length=10(上下文窗口控制内存)。
监控要点:使用 nvidia-smi 观察 GPU 利用率(目标 80%+);Docker stats 检查容器 CPU/RAM(Ollama <80%);日志中检索命中率(>0.8 为优)。性能瓶颈常见于嵌入生成(大文档时并行化)和检索(索引重建用 chroma.delete_collection)。
风险与缓解:
- 内存溢出:Llama3 8B VRAM 峰值 12GB,超限 fallback 到 CPU(环境变量 OLLAMA_NUM_GPU=0)。
- 检索漂移:定期重索引(脚本 cron 每周),或 hybrid 搜索(BM25 + 向量)。
- 回滚策略:纯 LLM 模式(禁用 RAG),或切换轻量模型如 Phi-3。
实际落地案例:在工业 IoT 场景,上传 Modbus 协议手册后,系统准确回答调试参数,避免云端泄露。该管道扩展性强,可集成 MQTT 日志实时摄入。
资料来源:
(本文约 950 字)