Docker+Ollama+LangChain:从零搭建企业级“隐私优先”本地 RAG 知识库 (附源码)
第三阶段结束了!Ollama:把大模型请回了家。🏠Docker:把应用装进了集装箱。📦RAG 实战:结合两者,打造了隐私安全的企业级助手。🛡️💡飞哥毕业设计请将这 5 周的所有代码整合,构建一个完整的 “企业级数据分析助手”:用户登录 -> 上传 Excel -> 后端存向量库 -> 用户提问 -> Agent 写 Pandas/SQL 代码分析数据 -> 前端流式展示结果。完成这个,你就

作者:飞哥(一个喜欢讲故事的全栈开发者,擅长把复杂的代码翻译成“人话”)
难度:⭐⭐⭐⭐
关键词:Ollama, Llama 3, Docker, Docker Compose, RAG, LoRA
大家好,我是飞哥!👋
经过前几周的努力,我们写了 FastAPI 后端、Vue 前端,还连了 Milvus 数据库。
但现在的痛点是:代码在你电脑上能跑,发给同事/老板/服务器,立马报错。“缺环境”、“版本不对”、“连不上库”… 🤯
而且,很多企业(包括你们公司)对数据隐私极其敏感。制度文档、财务报表这些数据,绝对不能传给云端的大模型(如 GPT、DeepSeek)。🚫
今天这节课,我们将解决这两个核心问题:
- 数据隐私:教你用 Ollama 在本地笔记本上跑开源大模型(Llama 3),让数据不出公司大门。🔒
- 环境一致性:用 Docker 把你的应用、数据库、甚至大模型配置打包成一个“集装箱”,走到哪运行到哪!🚢
📦 准备工作
1. 硬件要求
本地跑大模型对电脑配置有一定要求:
- 内存 (RAM):跑 8B 模型(如 Llama 3),至少 8GB,推荐 16GB 体验更丝滑。
- 显卡 (GPU):
- Mac 用户:M1/M2/M3 芯片直接跑,速度起飞!🚀
- Windows/Linux:最好有 NVIDIA 显卡 (6GB+ 显存)。如果是纯 CPU 跑,可能会像老牛拉车一样慢… 🐢
- 硬盘:模型文件大概 4-5GB,留点空间就行。
2. 软件安装
- Docker Desktop: 必须安装。
- Ollama: 去官网 ollama.com 下载。
第一步:本地大模型 (Ollama & Llama 3) 🦙
在做应用之前,我们先得有一个“大脑”。Ollama 是目前最简单的本地大模型运行工具。
1. 为什么要本地跑?
想象一下,你是个顶级大厨(AI 应用),但每次炒菜都要把食材(数据)寄到美国去加工再寄回来(云端 API)。不仅慢,而且秘方容易泄露。
本地跑模型,就是把米其林大厨请到你自己家厨房。虽然他可能没云端那个“厨神”懂得多,但胜在安全、免费、随叫随到。
2. 跑起来!
安装好 Ollama 后,打开终端,输入一行命令:
ollama run llama3
首次运行会自动下载模型(约 4.7GB)。下载完成后,你就可以直接在终端跟它聊天了!
试试问它:Send a message (/? for help) -> 你好,请介绍一下你自己。
3. API 调用
Ollama 最棒的地方在于它提供了兼容 OpenAI 的 API。这意味着我们之前的代码几乎不用改!
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="llama3",
base_url="http://localhost:11434/v1", # 指向本地 Ollama
api_key="ollama" # 随便填
)
第二步:实战演练——全本地隐私版“公司制度助手” 🏗️
现在我们有了本地大脑,接下来要打造一个完整的RAG(检索增强生成)应用。
我们将构建一个 “公司制度聊天助手”,它能读取 PDF/TXT 格式的员工手册,存入本地向量库,然后用本地 Llama 3 回答问题。全程无需联网,数据绝对安全!
1. 架构设计 (The Big Picture)
这次我们不只是写 Python 代码,我们要像架构师一样思考。我们需要编排以下服务:
- App (FastAPI + Vue): 我们的业务逻辑和界面。
- VectorDB (Milvus): 存储制度文档的向量(包含 Etcd 和 MinIO 两个小弟)。
- LLM (Ollama): 运行在宿主机(你的电脑)上,通过 Docker 网络提供智力支持。
2. Docker 配置详解 (核心考点) 📝
很多同学听到 Docker 就头大。其实,你只需要搞懂三个核心文件,它们就像做菜一样简单:
requirements.txt(食材清单) 🛒:告诉 Docker 你的 Python 项目需要哪些库(FastAPI, LangChain 等)。Dockerfile(烹饪指南) 🍳:告诉 Docker 怎么把这些食材加工成一道菜(构建镜像)。docker-compose.yml(宴席菜单) 🍱:告诉 Docker 这道菜和那道菜(数据库、应用)怎么一起上桌(服务编排)。
(1) requirements.txt:食材清单
在项目根目录下,列出所有依赖库。为了让你知道它们是干嘛的,飞哥特意加了注释(实际文件中不需要写注释):
fastapi # 🚀 Web 框架:就像餐厅的“前台”,负责接待客人的点单(请求)
uvicorn # 🦄 服务器:就像餐厅的“传菜员”,把前台的单子传给后厨,并把菜端给客人
langchain # 🦜 大模型管家:就像“厨师长”,指挥各种模型和工具干活
langchain-community # 🏘️ 社区插件包:像“调料大全”,里面有各种第三方工具的适配器
langchain-openai # 🧠 OpenAI 适配器:专门负责跟 OpenAI 接口(包括兼容它的 Ollama)沟通
langchain-huggingface # 🤗 HuggingFace 适配器:用来加载开源的 Embedding 模型
pymilvus # 🗄️ 向量库客户端:就像“档案管理员”,帮我们存取向量数据
python-multipart # 📦 文件上传助手:专门处理文件上传的,没它你传不了 PDF
python-dotenv # 🔑 环境变量管家:负责从 .env 文件里偷偷读取你的 API Key,不让别人看见
sentence-transformers # 🔡 向量化工具:把文字变成数字向量的“翻译官”
(2) Dockerfile:烹饪指南
这是制作“集装箱”的说明书。我们看看它是怎么写的:
# 1. 选底座:基于 Python 3.10 轻量版 (使用 DaoCloud 镜像加速)
FROM docker.m.daocloud.io/library/python:3.10-slim
WORKDIR /app
# 2. 搬食材:复制依赖文件并安装
# (先复制 requirements.txt 利用缓存)
COPY requirements.txt .
# 使用阿里云源加速下载 (清华源偶尔不稳定)
RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 3. 搬厨具和秘方:复制代码
COPY . .
# 4. 开窗口:暴露 8000 端口
EXPOSE 8000
# 5. 开火:启动服务
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
(3) docker-compose.yml:宴席菜单
这是指挥家。我们不仅要启动 App,还要启动 Milvus。
version: '3.8'
services:
# 1. 我们的 AI 应用
app:
build: . # 使用当前目录的 Dockerfile 构建镜像
ports:
- "8000:8000"
# 🔥 关键点:让 Docker 容器能访问宿主机 (你的电脑) 上的 Ollama
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- LLM_TYPE=ollama
# 容器内访问宿主机地址要用 host.docker.internal
- OLLAMA_BASE_URL=http://host.docker.internal:11434/v1
- MILVUS_HOST=milvus-standalone
depends_on:
- milvus-standalone
# 2. Milvus 向量库 (生产级三件套)
milvus-standalone:
# 使用国内 DaoCloud 镜像加速,拒绝下载卡顿!
image: docker.m.daocloud.io/milvusdb/milvus:v2.3.0
# ... (省略 Etcd 和 MinIO 配置) ...
飞哥敲黑板:
extra_hosts: 这是打通 Docker 容器与宿主机的“传送门”。没有它,容器里的代码找不到你电脑上跑的 Ollama。image: docker.m.daocloud.io/...: 这是一个避坑指南。国内拉取 Docker Hub 官方镜像经常超时,加上这个前缀使用 DaoCloud 镜像源,速度起飞!✈️
3. 核心代码逻辑 (main.py)
我在代码里做了一个灵活的开关。你可以通过环境变量切换是用云端的 DeepSeek 还是本地的 Ollama。
# main.py 片段
LLM_TYPE = os.getenv("LLM_TYPE", "ollama")
if LLM_TYPE == "deepseek":
# ... DeepSeek 配置 ...
else:
# Ollama 配置
ollama_url = os.getenv("OLLAMA_BASE_URL", "http://host.docker.internal:11434/v1")
llm = ChatOpenAI(
model="llama3",
base_url=ollama_url,
api_key="ollama",
)
print(f"🦙 使用模型: Ollama Llama3 ({ollama_url})")
第三步:动手跑起来!🚀
飞哥已经为你准备好了所有代码(在 PythonDemo/Week12_Capstone 目录)。现在,见证奇迹的时刻到了。
1. 确保 Ollama 在运行
在终端里跑一下,确保模型已就绪:
ollama list
# 应该能看到 llama3:latest
如果你没下载,先运行 ollama run llama3。
2. 一键启动应用
进入项目目录,召唤神龙:
cd PythonDemo/Week12_Capstone
docker-compose up -d
Docker 会自动下载镜像、构建应用、启动服务。第一次可能需要几分钟(取决于网速),去喝杯咖啡吧。☕️
3. 验证是否成功 (Health Check) 🩺
别光看着终端不报错就以为好了,我们要像医生一样检查一下:
- 查状态:
你应该看到 4 个容器 (App, Milvus, Etcd, MinIO) 都在docker psUp状态。 - 看日志:
如果你看到docker logs -f week12_capstone-app-1🦙 使用模型: Ollama Llama3和Application startup complete,恭喜你,起飞成功!🎉
4. 体验你的私人助手
- 打开浏览器访问:
http://localhost:8000/static/index.html - 上传文档:点击右上角上传
data/policy.txt(我已经帮你准备好了一份示例制度)。 - 提问:
- “出差补贴怎么算?”
- “迟到扣多少钱?”
- 观察:你会发现回答生成的速度取决于你的电脑性能,但数据完全没有离开过你的电脑!
运行效果:
进阶彩蛋:LoRA 微调 (概念篇) 🧠
如果你发现 Llama 3 虽然聪明,但不懂你们公司的“黑话”(比如“及第行”是啥,“飞哥”是谁),光靠 RAG 不够,还得微调 (Fine-tuning)。
- 全量微调:太贵 💸,像重写整本书。
- LoRA (Low-Rank Adaptation):像记便利贴 📝。我们不改动模型原本的千亿参数,只在旁边贴一层很薄的“修正参数”。
- 优点:显存占用极低(消费级显卡能跑),训练速度快。
- 工具推荐:
LLaMA-Factory。这是目前最火的微调工具,提供了 WebUI 界面。- 下载代码:
git clone https://github.com/hiyouga/LLaMA-Factory.git - 安装依赖:
pip install -r requirements.txt - 启动界面:
llamafactory-cli webui - 打开浏览器,上传你的 Excel/JSON 数据集,点击“开始训练”!🚀
- 下载代码:
附录:Docker 常用命令速查表 (Cheat Sheet) 📄
飞哥为你整理了最常用的命令,建议截图保存!📸
| 命令 | 作用 | 场景 |
|---|---|---|
docker ps |
查看正在运行的容器 | 每天都要用,看服务活没活着 |
docker ps -a |
查看所有容器(包括挂掉的) | 排查为什么服务起不来 |
docker logs -f <ID> |
实时查看容器日志 | 排错神器!程序报错全看它 |
docker stop <ID> |
停止容器 | 想让服务休息一下 |
docker rm <ID> |
删除容器 | 容器配置错了,删了重来 |
docker rmi <ImageID> |
删除镜像 | 清理磁盘空间 |
docker build -t <Name> . |
构建镜像 | 修改了 Dockerfile 后重新打包 |
docker-compose up -d |
后台启动所有服务 | 大招!一键部署整个系统 |
docker-compose down |
停止并删除所有服务 | 下班关机,一键清理 |
docker exec -it <ID> bash |
进入容器内部 | 就像 SSH 远程登录一样,进去改文件 |
总结 📚
第三阶段结束了!回顾一下我们做了什么:
- Ollama:把大模型请回了家。🏠
- Docker:把应用装进了集装箱。📦
- RAG 实战:结合两者,打造了隐私安全的企业级助手。🛡️
💡 飞哥毕业设计:
请认真学习飞哥最近几篇文章将所有代码整合,构建一个完整的 “企业级数据分析助手”:
用户登录 -> 上传 Excel -> 后端存向量库 -> 用户提问 -> Agent 写 Pandas/SQL 代码分析数据 -> 前端流式展示结果。
完成这个,你就是一名合格的 AI 全栈工程师了!🎓
🎁 粉丝福利:获取完整源码
本教程的 完整源代码(包含 Docker 配置、Vue 前端、FastAPI 后端)已打包好,可以直接运行!
我用夸克网盘给你分享了「Week12_Capstone.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/dd623ACCiC😕 链接:https://pan.quark.cn/s/31b4766519b5
创作不易,记得👇关注飞哥👇 ,点赞、收藏哦~~,下篇见👋
更多推荐


所有评论(0)