本地AI助手:Ollama+Open WebUI搭建

不想把代码和对话数据交给第三方?用 Ollama + Open WebUI 可以在本地搭建一套功能完整的 AI 助手,支持多模型管理、对话历史、RAG 文档问答。这篇文章记录完整的搭建过程。

为什么选择本地部署

三个理由:

  1. 隐私:公司内部代码、文档不适合传到外部 API。
  2. 成本:高频使用场景下,API 费用不低。本地有显卡的话边际成本几乎为零。
  3. 可控:不依赖外部服务可用性,可以自由选择和切换模型。

架构概述

整体架构很简单:

  • 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)功能,可以上传文档让模型基于文档内容回答问题。

上传文档

  1. 在对话界面点击 + 按钮
  2. 选择「Upload Files」
  3. 支持 PDF、TXT、Markdown、DOCX 等格式
  4. 上传后文件会被自动分块、向量化,存入内置的向量数据库

创建知识库

对于经常查询的文档集合,可以创建知识库(Knowledge Base):

  1. 进入「Workspace」→「Knowledge」
  2. 创建新的知识库,比如「项目文档」
  3. 批量上传相关文档
  4. 对话时选择关联这个知识库

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 进程占用显存

日常使用建议

  1. 模型选择策略:日常对话用 8B 模型(快),需要深度分析时切 14B。代码问题用 codellama 或配置了编程 system prompt 的定制模型。
  2. 对话管理:Open WebUI 支持文件夹分类对话,建议按项目或主题分组。
  3. 快捷键/ 可以快速切换模型,@ 可以引用知识库。
  4. API 集成:Open WebUI 兼容 OpenAI API 格式,可以在其他工具中配置 http://localhost:3000/api 作为 endpoint。

这套方案跑起来之后体验非常好,除了最顶尖的推理任务需要调用云端大模型,日常 80% 的场景本地模型完全够用。