前言

Ollama 能让你在本地跑模型,但命令行聊天的体验毕竟有限。Open WebUI 是一个开源的 ChatGPT 风格前端,配合 Ollama 可以实现:

  • 和 ChatGPT 几乎一样的聊天界面
  • 多模型随时切换对比
  • 上传文档建知识库(RAG),让 AI 基于你的文件回答
  • 多用户管理(给团队用)
  • 对话记录搜索

这套组合部署在内网服务器上,就是团队自己的私有 AI 平台。


一、前提条件

  • 已安装 Ollama 并拉取了至少一个模型
  • 已安装 Docker(部署 Open WebUI 用)

验证 Ollama 运行中:

1
2
3
4
ollama list
# 应该能看到至少一个模型
curl http://localhost:11434/api/tags
# 返回模型列表 JSON

二、部署 Open WebUI

1
2
3
4
5
6
docker run -d \
--name open-webui \
--restart unless-stopped \
-p 3000:8080 \
-v open-webui-data:/app/backend/data \
ghcr.io/open-webui/open-webui:main

各参数说明:

参数 作用
-d 后台运行
--restart unless-stopped 开机自启、异常退出自动恢复
-p 3000:8080 宿主机 3000 端口映射到容器 8080
-v open-webui-data:/... 持久化对话记录和配置

浏览器打开 http://localhost:3000,首次需要创建一个管理员账号(这个账号存在本地数据库,不依赖外部服务)。


三、连接 Ollama

Open WebUI 默认会自动探测本机的 Ollama 服务。如果 Ollama 在另一台机器上,或者 Docker 容器访问不到宿主机网络:

Ollama 在本机但 Docker 容器内无法访问:

1
2
3
4
5
6
# 让 Ollama 监听所有网络接口
ollama serve
# 默认只监听 127.0.0.1,Docker 容器访问不到
# 需要设置环境变量
export OLLAMA_HOST=0.0.0.0
ollama serve

然后在 Open WebUI 管理员设置中,将 Ollama 地址改为 http://host.docker.internal:11434(Windows/Mac)或本机 IP。

Ollama 在另一台服务器上:

1
2
3
4
5
6
# 在 Ollama 服务器上
sudo systemctl edit ollama.service
# 添加:
# [Service]
# Environment="OLLAMA_HOST=0.0.0.0"
sudo systemctl restart ollama

然后在 Open WebUI 设置中填写 http://<服务器IP>:11434


四、核心功能

4.1 多模型切换

在对话界面顶部可以随时切换模型。Open WebUI 会自动读取 Ollama 中已安装的模型列表。

想加新模型直接在 Ollama 那边拉取,Open WebUI 自动识别:

1
2
ollama pull qwen2.5:14b
# Open WebUI 刷新后就能看到新模型

4.2 连接远程 API

除了 Ollama,Open WebUI 也能连接 OpenAI 兼容的远程 API:

在管理员面板 → 设置 → 外部连接:

  • API URL: https://api.deepseek.com/v1
  • API Key: sk-your-deepseek-key

这样就能在同一个界面对比本地模型和云端模型的效果。

4.3 RAG 知识库

这是 Open WebUI 最实用的功能之一——上传文档,让 AI 基于你的文件回答。

  1. 进入 Workspace → 知识库(Knowledge)
  2. 创建知识库,命名
  3. 上传文件(支持 PDF、TXT、Markdown、Word、Excel、图片中的文字)
  4. 系统自动对文档做切片和向量化
  5. 回到对话界面,在输入框上方选择这个知识库
  6. 提问时 AI 会自动从这个知识库检索相关内容

使用场景

  • 公司规章制度问答
  • 产品手册查询
  • 技术文档检索
  • 合同条款分析

五、用户与权限管理

管理员面板中管理用户:

角色 权限
管理员 全部权限:管理面板、用户管理、模型配置
用户 普通对话、创建知识库,不能改系统设置
待定 注册后需管理员审批才能用

生产环境部署时建议关闭开放注册,由管理员统一创建账号。


六、部署在公司内网的方案

1
2
3
4
5
6
7
8
9
10
11
12
# 服务器上启动 Ollama
export OLLAMA_HOST=0.0.0.0
ollama serve &

# 启动 Open WebUI
docker run -d \
--name open-webui \
--restart unless-stopped \
--network host \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
-v open-webui-data:/app/backend/data \
ghcr.io/open-webui/open-webui:main

--network host 让容器直接使用宿主机网络,减少网络问题。

然后公司所有人通过 http://<服务器IP>:8080 就能访问。

如果需要外网访问和 HTTPS,在前面加一层 Nginx 反向代理(参考之前的 Nginx 文章)。


七、数据管理

数据存在哪

Docker 数据卷 open-webui-data 包含了所有对话记录、用户账号、知识库。备份操作:

1
2
3
4
5
6
7
8
9
10
# 查看卷的实际位置
docker volume inspect open-webui-data

# 备份(打包带走)
docker run --rm -v open-webui-data:/data -v $(pwd):/backup alpine \
tar czf /backup/open-webui-backup.tar.gz -C /data .

# 恢复
docker run --rm -v open-webui-data:/data -v $(pwd):/backup alpine \
tar xzf /backup/open-webui-backup.tar.gz -C /data

对话导出

在 Open WebUI 的对话界面,每条对话可以导出为 Markdown 或 JSON 格式。


八、性能建议

  • 别把 Ollama 和 Open WebUI 挤在同一台低配机器上:两者分开部署,或用 GPU 服务器跑 Ollama、普通服务器跑 WebUI
  • 知识库大了之后,向量检索会变慢:考虑把 ChromaDB 换成 Milvus 或 Qdrant(后续版本支持)
  • 多人同时用大模型会排队:Ollama 默认单请求处理,设个排队提示让用户有预期

总的来说,这套组合是个人或小团队性价比最高的私有 AI 方案——不需要云服务订阅,数据完全在本地,功能上该有的也都有。