本地LLM部署实战:使用Ollama + Open WebUI搭建私有AI助手
痛点的开始:ChatGPT很好用,但你舍得把数据交给它吗?
ChatGPT 很好用,这没人否认。但当你准备把公司内部代码、客户数据、或者个人笔记喂给云端 AI 时,心里总会咯噔一下:
- 数据会不会被拿去训练?
- 隐私条款哪天变了我都不知道
- 用的越多,依赖性越强
- API 调用量上来后,账单越来越贵
你开始想:能不能在本机跑一个大模型? 就放在自己的电脑或服务器上,性能足够用,数据完全本地,不联网也能用。
答案是:可以,而且比你想的简单得多。
这篇文章带你用 Ollama + Open WebUI 在 Docker 中部署一套完整的本地 LLM 方案。从拉取模型、管理对话、到进阶配置,10 分钟上手。
Ollama 是什么?
Ollama 是一个开源工具,专为本地运行大语言模型而设计。它能让你像拉 Docker 镜像一样拉取模型:
ollama pull llama3.2ollama pull qwen2.5ollama pull deepseek-r1然后一条命令启动交互式对话:
ollama run llama3.2它把模型下载、量化、推理、API 服务全部打包成了一个命令行工具。底层用了 llama.cpp,但你不必关心这些——拿来就用。
Ollama 的核心优势
| 特性 | Ollama | 其他方案(vLLM / llama.cpp 裸用) |
|---|---|---|
| 安装复杂度 | 一键安装 | 需要编译、配环境 |
| 模型管理 | ollama pull/push | 手动下载、转换格式 |
| API 兼容 | 兼容 OpenAI API | 需额外适配 |
| GPU 加速 | 自动检测 | 需手动配置 CUDA |
| 模型量化 | 自动选择最优量化 | 需了解 GGUF、GPTQ 等格式 |
Open WebUI 是什么?
Ollama 自带命令行交互,但大多数人还是习惯 Web 界面——像 ChatGPT 那样有一个对话框、有历史记录、能传文件。
Open WebUI 就是干这个的。它是一个功能丰富的 AI 对话前端,支持:
- 多模型切换
- 对话历史管理
- 文档上传(RAG 检索增强生成)
- 用户权限管理
- 深色/浅色主题
- Markdown / 代码高亮
部署后打开浏览器,就是一个私有的 ChatGPT。
第一步:Docker Compose 部署(推荐)
最推荐的方案是 Docker Compose 一键部署 Ollama + Open WebUI:
version: "3.8"
services: ollama: image: ollama/ollama:latest container_name: ollama ports: - "11434:11434" volumes: - ollama_data:/root/.ollama environment: - OLLAMA_KEEP_ALIVE=24h # 模型保持加载,避免频繁加载卸载 deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] restart: unless-stopped
open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui ports: - "3000:8080" volumes: - open-webui_data:/app/backend/data environment: - OLLAMA_BASE_URL=http://ollama:11434 - WEBUI_SECRET_KEY=your-secret-key-here depends_on: - ollama restart: unless-stopped
volumes: ollama_data: open-webui_data:启动命令
docker compose up -d启动后访问 http://localhost:3000,注册第一个账号(自动成为管理员),就可以选择模型开始对话了。
注意:如果没有 NVIDIA GPU,删除
deploy.resources部分即可。Ollama 会自动 fallback 到 CPU 推理,速度会慢一些。
第二步:拉取模型
Open WebUI 启动后,界面里可能还没有模型。你需要先让 Ollama 下载模型。
方式一:通过命令行
# 进入 Ollama 容器docker exec -it ollama ollama pull qwen2.5:7b
# 或直接在本机执行(如果本机也装了 Ollama CLI)ollama pull llama3.2:3b方式二:通过 Open WebUI 管理页面
在 http://localhost:3000/admin/settings → Models 页面,可以直接填写模型名称来拉取。
推荐模型一览
| 模型 | 参数量 | 显存需求(4-bit 量化) | 适合场景 |
|---|---|---|---|
qwen2.5:7b | 7B | ~6 GB | 中文最强,日常对话、代码 |
llama3.2:3b | 3B | ~3 GB | 英文回答、轻量部署 |
llama3.1:8b | 8B | ~7 GB | 英文优秀,综合能力最强 |
deepseek-r1:7b | 7B | ~6 GB | 推理能力强,数学/逻辑 |
gemma2:9b | 9B | ~8 GB | Google 出品,多语言 |
qwen2.5:0.5b | 0.5B | ~1 GB | 极致轻量,树莓派可跑 |
mistral:7b | 7B | ~6 GB | 英文基础好,生态完善 |
phi3:3.8b | 3.8B | ~4 GB | 微软出品,小而强 |
显存不够可以跑 CPU 模式,7B 模型用 16GB 内存也能跑,就是慢点(每秒 5-10 token)。
第三步:在 Open WebUI 中开始对话
模型拉取完成后,在 Open WebUI 界面中:
- 点击左上角的模型选择器
- 选择你拉取的模型(比如
qwen2.5:7b) - 输入你的问题,点击发送
你会得到一个完全本地、完全免费、无任何隐私风险的 AI 对话体验。
而且 Open WebUI 支持文档上传——你可以上传 PDF、Word、TXT 文件,AI 会自动读取内容并基于文档回答。这就是最简单的 RAG(检索增强生成)。
进阶配置
1. 多模型同时运行
Ollama 允许同时加载多个模型(只要显存够)。不同的对话可以选择不同的模型:
- 日常聊天 →
qwen2.5:0.5b(快、省资源) - 代码编写 →
qwen2.5:7b(性能强) - 逻辑推理 →
deepseek-r1:7b(推理链)
2. 配置模型下载代理
如果你在国内拉取模型比较慢,可以配置代理:
environment: - OLLAMA_HOST=0.0.0.0 - HTTP_PROXY=http://your-proxy:7890 - HTTPS_PROXY=http://your-proxy:7890或者在容器启动后手动设置:
docker exec -it ollama bashexport HTTP_PROXY=http://host.docker.internal:7890ollama pull qwen2.5:7b3. 暴露外部访问
如果你想在局域网内其他设备上访问:
# 配置 Open WebUIenvironment: - WEBUI_SECRET_KEY=your-secure-key-here - OLLAMA_BASE_URL=http://192.168.1.100:11434 # 改成你服务器 IP - WEBUI_HOST=0.0.0.0然后其他设备通过 http://192.168.1.100:3000 访问。
4. 自定义模型(Modelfile)
Ollama 支持通过 Modelfile 创建自定义模型。比如创建一个”只讲中文的助手”:
FROM qwen2.5:7b
# 设置系统提示词SYSTEM "你是一个中文AI助手,只能使用中文回答。你知识渊博、回答简洁。"
# 设置参数PARAMETER temperature 0.7PARAMETER top_p 0.9然后构建:
ollama create my-chinese-assistant -f ./Modelfile5. 与现有应用集成
Ollama 兼容 OpenAI API 格式,所以任何支持 OpenAI 的应用都可以无缝切换到本地模型。
Python 示例:
from openai import OpenAI
client = OpenAI( base_url="http://localhost:11434/v1", api_key="ollama" # Ollama 不校验 API Key)
response = client.chat.completions.create( model="qwen2.5:7b", messages=[{"role": "user", "content": "你好!"}])print(response.choices[0].message.content)JavaScript 示例:
import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'http://localhost:11434/v1', apiKey: 'ollama',});
const response = await client.chat.completions.create({ model: 'qwen2.5:7b', messages: [{ role: 'user', content: '你好!' }],});console.log(response.choices[0].message.content);这意味着你可以用 Cursor、Continue.dev、Any-LLM 等工具连接你的本地 Ollama,实现 AI 编程助手本地化。
6. GPU vs CPU 性能对比
| 配置 | 模型 | 生成速度 | 适用性 |
|---|---|---|---|
| RTX 4090 (24GB) | qwen2.5:7b | ~80 token/s | 🟢 流畅 |
| RTX 3060 (12GB) | qwen2.5:7b | ~40 token/s | 🟢 可用 |
| 仅 CPU (32GB RAM) | qwen2.5:7b | ~6 token/s | 🟡 可忍受 |
| 仅 CPU (16GB RAM) | llama3.2:3b | ~12 token/s | 🟢 流畅 |
| 树莓派 5 | qwen2.5:0.5b | ~4 token/s | 🟡 慢但能用 |
三步走:从零到私有 ChatGPT 的完整流程
如果你觉得有点乱,这里给你一条清晰的路线图:
第一步:准备环境
- 一台有 Docker 的 Linux 服务器(或你的 Windows/Mac 笔记本)
- 至少 8GB+ 内存(16GB 以上体验更好)
- 有 NVIDIA GPU 是加分项,没有也别急
第二步:部署核心服务
- 按本文的 Docker Compose 配置启动 Ollama 和 Open WebUI
- 访问
http://localhost:3000,注册管理员账号
第三步:拉取模型,开始使用
- 先拉一个轻量模型
ollama pull qwen2.5:7b - 在 Open WebUI 中选择模型,开始对话
- 体验满意后,再拉更多模型备用
从零到能用,10 分钟以内。这是本地 LLM 的黄金时代——部署门槛已经低到任何开发者都能轻松上手。
Open WebUI 的高级玩法
多用户管理
Open WebUI 支持多用户注册,适合团队共享一台 AI 服务器:
- 管理员可以创建用户、分配权限
- 每个用户的对话历史互相隔离
- 你可以在设置中开启”允许注册”开关
如果只自己用,注册一个账号就够了,关闭开放注册更安全。
RAG:让你的本地 AI 能读文档
Open WebUI 支持 RAG(检索增强生成),让 AI 能基于你上传的文档回答问题。默认使用内置的轻量嵌入模型,你也可以配置接入 Ollama 上的嵌入模型:
# Docker Compose 中配置environment: - RAG_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 - RAG_TOP_K=5 # 检索前 K 个相关片段上传 PDF、Word 或 TXT 文件后,AI 会自动索引内容。你可以问”这份合同第四条是什么”,AI 会从文档中提取答案——数据全程不外泄。
自定义主题和模型参数
在 Open WebUI 的设置中,你可以:
- 修改系统提示词:让 AI 扮演特定角色(翻译助手、代码审查员、写作伙伴)
- 调整推理参数:Temperature(创造力)、Top P(多样性)、Max Tokens(回复长度)
- 切换界面主题:深色/浅色模式,跟随系统
生产环境部署建议
如果你要把 Ollama + Open WebUI 放到生产环境(团队共享或对外服务),注意以下几点:
1. 使用反向代理
# 在 Nginx 或 Caddy 后面services: caddy: image: caddy:2-alpine ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile environment: - DOMAIN=ai.yourdomain.comCaddyfile:
ai.yourdomain.com { reverse_proxy open-webui:8080}2. 配置 HTTPS
用 Caddy 会自动申请 Let’s Encrypt 证书,无需手动管理。
3. 资源限制
防止某个模型把服务器吃满:
services: ollama: deploy: resources: limits: memory: 16G reservations: memory: 8G4. 定期备份
备份 Open WebUI 的数据目录(对话历史和用户数据):
# 简单的 tar 备份tar -czf open-webui-backup-$(date +%Y%m%d).tar.gz \ /path/to/open-webui/data常见问题(FAQ)
Q:部署后 Open WebUI 页面打不开怎么办?
A:检查 Docker 是否正常运行:docker compose ps。确保 3000 端口没有被占用。查看日志:docker compose logs open-webui。
Q:拉取模型太慢了,有没有办法离线导入?
A:可以在有网络的环境下载好 GGUF 格式模型文件,放到 ~/.ollama/models/blobs/ 目录下,然后创建 Modelfile 导入。或者直接用国内的镜像源下载。
Q:显存不够怎么办?
A:三个方案:1)用更小的模型(qwen2.5:0.5b 或 llama3.2:3b);2)开启 CPU offloading(部分层跑 CPU);3)纯 CPU 模式(慢点但能用)。7B 模型 4-bit 量化需要约 6GB 显存。
Q:Open WebUI 有没有中文界面?
A:有的,Open WebUI 支持多语言,在设置里切换为中文即可。
Q:我可以同时跑多个模型吗?
A:显存够就可以。Ollama 允许多个模型同时加载,Open WebUI 也可以在不同对话中使用不同模型。
Q:Ollama 和开源模型可以用来写商业代码吗?
A:大多数开源模型使用宽松许可(Apache 2.0 / MIT / Llama 2 Community License),可以商用。但建议检查具体模型的 LICENSE 文件。
Q:和 ChatGPT 比起来,本地模型的效果差多少?
A:7B 级别的模型在简单任务(翻译、摘要、问答)上表现已经相当不错。但在复杂推理、长上下文、创意写作等方面,和 GPT-4 还有差距。好消息是模型进步极快,每个季度都有新的突破。
总结
用 Ollama + Open WebUI 部署本地 LLM 的优势很清晰:
- 隐私安全:数据不出本机,100% 本地运行
- 零成本:没有 API 费用,一次部署永久使用
- 高度可控:自由选择模型、自定义提示词、微调参数
- 无需联网:断网也能用,出差也不影响
部署指南到这里就结束了。你只需要一个 docker compose up -d,10 分钟就能拥有一个私有 ChatGPT。不要再犹豫数据安全问题了——把你的 AI 放在自己的服务器上,才是真正的掌控。
而随着模型能力的持续提升(今年的 7B 模型已经比去年的 70B 还强),本地 LLM 的意义只会越来越大。现在部署,就是跑在趋势的前面。
延伸阅读
- Docker 换源避坑指南 — 部署前的必备准备
- Nginx Proxy Manager 反代面板 — 统一管理所有服务的访问入口
- Stirling PDF 自建 PDF 工具箱 — 30多种PDF处理工具合一
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!