作者:飞哥(一个喜欢讲故事的全栈开发者,擅长把复杂的代码翻译成“人话”)
难度:⭐⭐⭐⭐
关键词:Ollama, Llama 3, Docker, Docker Compose, RAG, LoRA

大家好,我是飞哥!👋

经过前几周的努力,我们写了 FastAPI 后端、Vue 前端,还连了 Milvus 数据库。
但现在的痛点是:代码在你电脑上能跑,发给同事/老板/服务器,立马报错。“缺环境”、“版本不对”、“连不上库”… 🤯

而且,很多企业(包括你们公司)对数据隐私极其敏感。制度文档、财务报表这些数据,绝对不能传给云端的大模型(如 GPT、DeepSeek)。🚫

今天这节课,我们将解决这两个核心问题:

  1. 数据隐私:教你用 Ollama 在本地笔记本上跑开源大模型(Llama 3),让数据不出公司大门。🔒
  2. 环境一致性:用 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 配置) ...

飞哥敲黑板

  1. extra_hosts: 这是打通 Docker 容器与宿主机的“传送门”。没有它,容器里的代码找不到你电脑上跑的 Ollama。
  2. 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) 🩺

别光看着终端不报错就以为好了,我们要像医生一样检查一下:

  1. 查状态
    docker ps
    
    你应该看到 4 个容器 (App, Milvus, Etcd, MinIO) 都在 Up 状态。
  2. 看日志
    docker logs -f week12_capstone-app-1
    
    如果你看到 🦙 使用模型: Ollama Llama3Application startup complete,恭喜你,起飞成功!🎉

4. 体验你的私人助手

  1. 打开浏览器访问:http://localhost:8000/static/index.html
  2. 上传文档:点击右上角上传 data/policy.txt(我已经帮你准备好了一份示例制度)。
  3. 提问
    • “出差补贴怎么算?”
    • “迟到扣多少钱?”
  4. 观察:你会发现回答生成的速度取决于你的电脑性能,但数据完全没有离开过你的电脑
    运行效果:

进阶彩蛋:LoRA 微调 (概念篇) 🧠

如果你发现 Llama 3 虽然聪明,但不懂你们公司的“黑话”(比如“及第行”是啥,“飞哥”是谁),光靠 RAG 不够,还得微调 (Fine-tuning)

  • 全量微调:太贵 💸,像重写整本书。
  • LoRA (Low-Rank Adaptation):像记便利贴 📝。我们不改动模型原本的千亿参数,只在旁边贴一层很薄的“修正参数”。
    • 优点:显存占用极低(消费级显卡能跑),训练速度快。
    • 工具推荐LLaMA-Factory。这是目前最火的微调工具,提供了 WebUI 界面。
      1. 下载代码:git clone https://github.com/hiyouga/LLaMA-Factory.git
      2. 安装依赖:pip install -r requirements.txt
      3. 启动界面:llamafactory-cli webui
      4. 打开浏览器,上传你的 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 远程登录一样,进去改文件

总结 📚

第三阶段结束了!回顾一下我们做了什么:

  1. Ollama:把大模型请回了家。🏠
  2. Docker:把应用装进了集装箱。📦
  3. RAG 实战:结合两者,打造了隐私安全的企业级助手。🛡️

💡 飞哥毕业设计
请认真学习飞哥最近几篇文章将所有代码整合,构建一个完整的 “企业级数据分析助手”:
用户登录 -> 上传 Excel -> 后端存向量库 -> 用户提问 -> Agent 写 Pandas/SQL 代码分析数据 -> 前端流式展示结果。

完成这个,你就是一名合格的 AI 全栈工程师了!🎓


🎁 粉丝福利:获取完整源码

本教程的 完整源代码(包含 Docker 配置、Vue 前端、FastAPI 后端)已打包好,可以直接运行!

我用夸克网盘给你分享了「Week12_Capstone.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/dd623ACCiC😕 链接:https://pan.quark.cn/s/31b4766519b5

创作不易,记得👇关注飞哥👇 ,点赞、收藏哦~~,下篇见👋

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐