用 Open WebUI 搭一个本地多模型 AI 工作台(私有化、可接 Ollama)
你是不是也想把自己的大模型「装」成一个像 ChatGPT 那样、还能多人共用、数据完全留在本机的 AI 工作台?Open WebUI 就是干这件事的开源项目:它给你一个漂亮的网页界面,背后既能接本机的 Ollama 模型,也能接任意 OpenAI 兼容的云端模型,还自带知识库、工具调用和 Agent 模式。本教程用 Docker 一条命令把整套环境跑起来,全程可复现。
先搞懂:Open WebUI 解决什么问题?
直接用 Ollama 在终端里聊天,体验很「硬核」:没有历史记录、不能上传文件、不能多人用。Open WebUI 在 Ollama 外面套了一层完整的产品壳——会话管理、模型切换、文件上传、网页搜索、知识库、多用户权限,全部开箱即用。一句话:Ollama 是发动机,Open WebUI 是把发动机装成整车的工厂。
| 方案 | 数据在哪 | 适合谁 |
|---|---|---|
| 纯 Ollama 终端 | 本机 | 只想本地跑模型、不在乎界面 |
| Open WebUI + Ollama | 本机(可切云端) | 要界面、要多人、要知识库 |
| 云端大模型网页 | 厂商服务器 | 不介意数据上云 |
Step 1:准备环境与端口
在你要部署的机器上安装好 Docker 与 Docker Compose,并确认以下端口未被占用:
· 3000 → Open WebUI 网页界面(对外访问端口)
· 11434 → Ollama 模型服务(内部通信)
· 建议系统内存 4GB 起步,拉 7B/8B 模型建议 8GB+,显存越大越好
Step 2:一条 docker-compose 起全套
新建一个目录,放下面这份 docker-compose.yml,然后 docker compose up -d 即可。它同时拉起 Ollama 和 Open WebUI 两个服务,并通过内网地址互联。
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "3000:8080"
environment:
# 指向同 compose 里的 Ollama 服务
- OLLAMA_BASE_URL=http://ollama:11434
# JWT 签名密钥,生产务必换成随机长字符串
- WEBUI_SECRET_KEY=change-this-to-a-random-64-char-string
# 关闭遥测,保护隐私
- SCARF_NO_ANALYTICS=true
- DO_NOT_TRACK=true
- ANONYMIZED_TELEMETRY=false
depends_on:
- ollama
volumes:
- open-webui_data:/app/backend/data
volumes:
ollama_data:
open-webui_data:
安全红线:WEBUI_SECRET_KEY 必须在启动前就设好,且用足够随机的字符串;暴露到公网时务必配合反向代理的 HTTPS 与访问控制,否则任何人都能用你的模型额度。单一用户内网使用可设 WEBUI_AUTH=False,但此选项一旦启动后无法改回,务必提前决定。
Step 3:创建管理员并拉一个模型
浏览器访问 http://你的机器IP:3000,最先注册的人自动成为管理员。进设置→模型,拉一个本地模型试跑:
# 进入 Ollama 容器拉取并运行模型(模型名以官方库为准)
docker exec -it ollama ollama pull qwen3:8b
docker exec -it ollama ollama run qwen3:8b
# 访问 http://机器IP:3000
# 1) 点 Sign Up 创建账号(最先注册者自动成为 admin)
# 2) 设置 → 模型,输入 qwen3:8b 点下载图标
# 3) 下拉选模型,开始聊天
Step 4:再接上云端模型(混合用)
Open WebUI 不排斥云端模型。在环境变量里加一行,就能同时用本地 Ollama 和任意 OpenAI 兼容端点(GPT、Claude 兼容代理等):
# 在 open-webui 服务的 environment 里追加
- OPENAI_API_BASE_URL=https://api.openai.com/v1
- OPENAI_API_KEY=sk-your-api-key
密钥安全:云端 Key 写进 compose 文件后,该文件不要提交到公开仓库,也不要截图外发。多人共用时建议由管理员在界面里单独配置,而不是明文落到磁盘。
Step 5:开启知识库问答(RAG)
这是最常用的增强:把产品手册、FAQ、内部文档传上去,模型回答时优先引用,而不是瞎编。
1. 左侧「知识库」→ 新建,把 PDF/Word/TXT/Markdown 拖进去
2. 保持默认切分设置,等索引完成
3. 新建聊天时,在「上下文」里关联这个知识库
4. 再问产品细节,模型会基于文档作答并附引用
Step 6:用工具与 Agent 模式
Open WebUI 内置工具:网页搜索、代码解释器、函数调用(Function Calling)。在模型设置里开启后,聊天框就能调用这些能力。
# 常见开关位置(以界面为准)
设置 → 模型 → 工具:开启 Web Search / Code Interpreter
新建对话时选「Agent」模式,可编排多步任务
最小权限:代码解释器会在沙箱里执行代码,务必确认运行环境隔离、不挂载敏感目录;联网搜索返回的内容要当「外部输入」对待,关键结论仍要人核对,避免被污染网页带偏。
Step 7:多人协作与数据备份
管理员面板可创建普通用户、分配权限;数据都存在挂载卷里,备份只要拷走卷即可。
# 备份(停服后拷贝卷目录)
docker compose stop
cp -r ./ollama_data ./ollama_data.bak
cp -r ./open-webui_data ./open-webui_data.bak
# 多人生产建议改用 PostgreSQL(在 open-webui 环境变量切换)
# 详见 Open WebUI 官方文档的 Database Configuration 一节
常见问题速查
| 现象 | 原因与解决 |
|---|---|
| 页面打不开 | 确认 3000 端口已映射且防火墙放行;看 docker compose logs open-webui |
| 模型下拉为空 | Ollama 没拉模型,或 OLLAMA_BASE_URL 配错容器名 |
| 知识库答非所问 | 文档切分太大/太小,调切分策略;或换更好的嵌入模型 |
| 想换模型名 | 以 Ollama 官方库实时模型名为准,旧名可能已下架 |