不想把代码和对话数据交给第三方?用 Ollama + Open WebUI 可以在本地搭建一套功能完整的 AI 助手,支持多模型管理、对话历史、RAG 文档问答。这篇文章记录完整的搭建过程。
为什么选择本地部署
三个理由:
- 隐私:公司内部代码、文档不适合传到外部 API。
- 成本:高频使用场景下,API 费用不低。本地有显卡的话边际成本几乎为零。
- 可控:不依赖外部服务可用性,可以自由选择和切换模型。
架构概述
整体架构很简单:
- Ollama:模型运行时,负责加载和推理 LLM(类似 Docker 管理容器,Ollama 管理模型)
- Open WebUI:Web 前端,提供 ChatGPT 风格的对话界面,支持多模型切换、RAG、用户管理
两者通过 HTTP API 通信,Open WebUI 调用 Ollama 的 /api/chat 接口。
第一步:安装 Ollama
Linux
curl -fsSL https://ollama.com/install.sh | sh
安装完成后 Ollama 会作为 systemd 服务自动启动,监听 localhost:11434。
macOS / Windows
去 ollama.com 下载安装包,双击安装即可。
验证安装
ollama --version
# ollama version 0.6.x
ollama list
# 空列表,还没有模型
第二步:下载模型
Ollama 的模型仓库类似 Docker Hub,用 pull 命令下载:
# 推荐的通用模型
ollama pull llama3.3:8b # Meta LLaMA 3.3 8B,通用能力均衡
ollama pull qwen2.5:14b # 通义千问 2.5 14B,中文最佳
ollama pull deepseek-r1:14b # DeepSeek R1 14B,推理能力强
ollama pull codellama:13b # 代码专用模型
# 查看已下载模型
ollama list
模型默认存储在 ~/.ollama/models。8B 模型约 5GB,14B 约 9GB,确保磁盘空间充足。
显存需求参考
| 模型大小 | 最低显存 | 推荐显存 |
|---|---|---|
| 7-8B | 6 GB | 8 GB |
| 13-14B | 10 GB | 12 GB |
| 30-34B | 20 GB | 24 GB |
| 70B | 40 GB+ | 48 GB+ |
没有独显也能跑,Ollama 会自动 fallback 到 CPU 推理,只是速度慢很多。8B 模型在纯 CPU 上大约 5-10 token/s。
快速测试
ollama run llama3.3:8b
# 进入交互模式,直接对话测试
>>> 用 Python 写一个快速排序
第三步:部署 Open WebUI
推荐用 Docker 部署,一行命令搞定:
docker run -d \
--name open-webui \
--restart always \
-p 3000:8080 \
-v open-webui-data:/app/backend/data \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
ghcr.io/open-webui/open-webui:main
几个关键参数:
-p 3000:8080:映射到本机 3000 端口OLLAMA_BASE_URL:指向 Ollama 服务地址。host.docker.internal是 Docker Desktop 提供的宿主机地址,Linux 上可能需要用--network host或宿主机实际 IP-v open-webui-data:/app/backend/data:持久化对话历史和配置
Linux 网络配置
Linux 上 host.docker.internal 可能不可用,有两种方案:
# 方案 A:host 网络模式
docker run -d \
--name open-webui \
--restart always \
--network host \
-v open-webui-data:/app/backend/data \
-e OLLAMA_BASE_URL=http://localhost:11434 \
-e PORT=3000 \
ghcr.io/open-webui/open-webui:main
# 方案 B:指定宿主机 IP
docker run -d \
--name open-webui \
--restart always \
-p 3000:8080 \
-v open-webui-data:/app/backend/data \
-e OLLAMA_BASE_URL=http://192.168.1.100:11434 \
ghcr.io/open-webui/open-webui:main
部署完成后访问 http://localhost:3000,首次访问需要注册管理员账号。
第四步:多模型管理
Open WebUI 界面顶部可以选择模型。所有通过 Ollama 下载的模型会自动出现在列表中。
自定义模型(Modelfile)
可以基于现有模型创建定制版本,比如一个专门写代码的助手:
# 创建 Modelfile
cat > Modelfile <<'EOF'
FROM llama3.3:8b
SYSTEM "You are an expert programmer. Always provide clean, well-commented code with error handling. Prefer Go and Rust. Respond in the same language as the user's query."
PARAMETER temperature 0.3
PARAMETER num_ctx 8192
EOF
# 创建自定义模型
ollama create code-assistant -f Modelfile
这个 code-assistant 模型会出现在 Open WebUI 的模型列表中,可以随时切换。
第五步:RAG 文档问答
Open WebUI 内置了 RAG(Retrieval Augmented Generation)功能,可以上传文档让模型基于文档内容回答问题。
上传文档
- 在对话界面点击
+按钮 - 选择「Upload Files」
- 支持 PDF、TXT、Markdown、DOCX 等格式
- 上传后文件会被自动分块、向量化,存入内置的向量数据库
创建知识库
对于经常查询的文档集合,可以创建知识库(Knowledge Base):
- 进入「Workspace」→「Knowledge」
- 创建新的知识库,比如「项目文档」
- 批量上传相关文档
- 对话时选择关联这个知识库
RAG 效果优化
几个提升 RAG 效果的配置(在 Admin → Settings → Documents 中):
- Chunk Size:默认 1500 字符,技术文档建议调到 1000
- Chunk Overlap:默认 100,建议调到 200
- Top K:检索返回的块数,默认 4,复杂问题可调到 6-8
- Embedding Model:默认使用 Ollama 的 embedding 模型,可以在 Ollama 中额外下载
nomic-embed-text
ollama pull nomic-embed-text
GPU 加速配置
NVIDIA GPU
Ollama 自动检测 NVIDIA GPU(需要安装 NVIDIA Container Toolkit):
# 安装 NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart ollama
验证 GPU 是否被使用:
ollama ps
# 应该看到模型加载到 GPU
nvidia-smi
# 应该看到 ollama 进程占用显存
日常使用建议
- 模型选择策略:日常对话用 8B 模型(快),需要深度分析时切 14B。代码问题用
codellama或配置了编程 system prompt 的定制模型。 - 对话管理:Open WebUI 支持文件夹分类对话,建议按项目或主题分组。
- 快捷键:
/可以快速切换模型,@可以引用知识库。 - API 集成:Open WebUI 兼容 OpenAI API 格式,可以在其他工具中配置
http://localhost:3000/api作为 endpoint。
这套方案跑起来之后体验非常好,除了最顶尖的推理任务需要调用云端大模型,日常 80% 的场景本地模型完全够用。