公司代码不能贴给云端 API、订阅费按月涨、出差断网就抓瞎——这三件事把不少人推向了本地部署。对个人是隐私与钱包问题,对企业则多了合规这条硬约束:内部文档、客户数据一旦进了第三方日志,删除权和审计都说不清。但只有命令行交互的本地大模型,很难成为日常工具:你需要一个能开多窗口、传文档、切模型、留历史的工作台。
最流行的组合是两件套:Ollama 当本地推理引擎,Open WebUI 当 Web 前端。Ollama 的安装、量化与模型选择我们在此前的《Ollama 实战指南》里已经讲过,本文不再展开;这篇的重心是把 Open WebUI 接上去,半小时内得到一个全私有的 ChatGPT 式界面。以下所有命令与输出都在 Apple M4(32GB 内存,macOS + Docker)上实跑验证。
两件套现状(截至 2026-10-07)
Ollama 当前最新版本 v0.40.0,GitHub 约 18.2 万 star,覆盖 macOS / Windows / Linux。0.40 值得一提的变化是 Apple Silicon 上模型默认改用 MLX 引擎运行,M 系芯片的本地推理速度又有提升。模型库收录 500 多个模型,Qwen、Llama、Gemma、DeepSeek 等主流系列都有现成标签。
Open WebUI 当前最新版本 v0.11.4,GitHub 约 15.4 万 star,定位是「可自托管的 AI 界面」,同时支持 Ollama 和任意 OpenAI 兼容 API 作为后端。两个需要知道的现状:
- 镜像瘦身:v0.11.4 的 slim 镜像约 175MB,比上一版小了近 90%,首次拉取快了不少。
- 许可证变过:项目在 v0.6.5 及之前是标准 BSD-3-Clause;2025 年 4 月 19 日的 v0.6.6 起改用自定义的「Open WebUI License」——BSD 三条之上加了一条品牌保护:部署超过 50 用户(30 天滚动窗口)时不得移除或替换 Open WebUI 的品牌标识,官方称起因是冒名诈骗与山寨项目泛滥。该许可证因此不再被 OSI 认可为开源许可证。对个人和小团队(50 人以下)的日常使用没有影响,企业想改品牌做分发则需商业授权——选型时心里要有这根弦。
第一步:装 Ollama,拉一个小模型
macOS 直接从 ollama.com 下载安装即可,Linux 一行 curl -fsSL https://ollama.com/install.sh | sh。装完先拉个够用的小模型,官方库里 Qwen3 全家桶覆盖 0.6b 到 235b,日常问答推荐 4b——下载 2.5GB,原生支持 256K 上下文:
ollama pull qwen3:4b # 2.5GB,拉完 ollama list 可见
ollama run qwen3:4b "用一句话回答:什么是 RAG?"
qwen3 默认带思维链,终端里会先流式输出一段 <think> 推理再给正文。同一个问题的正文回答(经接口取回)是:「RAG(检索增强生成)是一种让大语言模型通过实时检索外部知识库来生成更准确回答的技术,旨在解决模型知识过时的问题。」命令行能用,但体验到此为止——该上前端了。
第二步:Docker 起 Open WebUI
官方推荐的默认姿势是「容器跑 WebUI、连宿主机上已有的 Ollama」:
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:main
三个参数的用意:-v open-webui:/app/backend/data 把账号、聊天记录、知识库全部存进 named volume,升级镜像不丢数据;--add-host=host.docker.internal:host-gateway 让容器内的 host.docker.internal 指向宿主机(Linux 上必需,macOS 的 Docker Desktop 原生支持,写上无害);宿主机 3000 端口被占时改左边的数字即可——本文实测就撞上了占用,换成了 -p 13000:8080。
另外两条路线按需选:想连另一台服务器上的 Ollama,加 -e OLLAMA_BASE_URL=http://<服务器IP>:11434;想省事一锅端(镜像内自带 Ollama),把镜像换成 :ollama 标签。
浏览器打开 http://localhost:13000,第一个注册的账号自动成为管理员,这是本机实测行为。连通性可以顺手验证一下:
# 宿主机上的 Ollama
curl -s http://127.0.0.1:11434/api/version
{"version":"0.40.0"}
# 容器内访问宿主机 Ollama
docker exec open-webui curl -s http://host.docker.internal:11434/api/version
{"version":"0.40.0"}
第三步:基础配置
进管理后台(管理员头像 → Admin Panel)把三件事定好:
- 默认模型:管理员设置里把
default模型设为qwen3:4b,新用户打开对话框就能直接用,不用面对一排下拉框。 - 知识库入口:顶栏 Workspace → Knowledge,在这里建知识集合、传文档,这是 RAG 的家。
- 账号策略:管理面板可以关闭自助注册(ENABLE_SIGNUP),小团队建议配好成员账号后关掉,避免同事的朋友顺手注册。权限之外,每次对话记录都只存在本机的 SQLite 里,这也是「私有工作台」区别于 SaaS 的核心价值:界面、模型、数据三层全部握在自己手里。
进阶玩法
多模型切换与对比。Open WebUI 的模型下拉框会把 Ollama 里所有已拉模型列出来,ollama pull 新模型后即时出现,无需重启。还支持在一条回复里同时 @ 两个模型并行生成,横向对比哪家答得好——本地模型选型时特别好用。
知识库(RAG)。在 Workspace → Knowledge 建一个集合、上传 PDF/Markdown/Word 后,聊天时输入 # 即可引用该集合,模型会基于检索到的片段作答。参数在管理面板可调,v0.11.4 的实测默认值是:切片 1000 字符、重叠 100、检索 top_k 3;向量化默认用内置的 sentence-transformers/all-MiniLM-L6-v2,纯本地跑,不出网。文档量大了再把 Embedding 换成多语言模型(如 bge-m3,Ollama 里就有)。
OpenAI 兼容 API 转发。Open WebUI 自身就是一个 OpenAI 兼容服务端,生成 API Key 后,其他工具(编辑器插件、自动化脚本)把 base URL 指向它即可复用全部模型和权限体系:
curl -X POST http://localhost:13000/api/chat/completions \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-d '{"model":"qwen3:4b","messages":[{"role":"user","content":"你好"}]}'
这里有个新版本才有的坑:API Key 功能默认关闭,而且 v0.11 起环境变量已从 ENABLE_API_KEY 改名为 ENABLE_API_KEYS(复数)——本文实测用旧变量名毫无反应,翻容器内源码才确认改名。已有数据卷还会记住首启时的配置,环境变量不再生效,稳妥做法是直接在 管理面板 → 设置 → General 里打开 Enable API Keys,再到 个人设置 → Account 生成 Key。实测调用返回标准 OpenAI 格式,带完整 usage 统计:qwen3:4b 在 M4 上加载 3 秒、生成约 32 token/s。
踩坑清单
- 拉模型慢或失败:本文写作机开着 TUN 模式代理,DNS 返回 fake-IP(198.18.x.x),
ollama pull直接触发 Ollama 的防 SSRF 校验而中断,报Error: redirect target not allowed: ...r2.cloudflarestorage.com resolves to non-public。解法:把*.ollama.ai、*.r2.cloudflarestorage.com加入代理直连规则,或临时关掉 TUN;也可以从 ModelScope 下载 GGUF 用 Modelfile 导入(见《Ollama 实战指南》)。 - 容器连不上宿主机 Ollama:Linux 上没有
--add-host=host.docker.internal:host-gateway就会报连接拒绝;Ollama 默认只监听 127.0.0.1,跨机器访问要用OLLAMA_HOST=0.0.0.0启动。 - 端口冲突:3000 是热门端口,撞了就换宿主侧端口(本文实测 13000),容器内部仍是 8080 不用动。
- 资源预算:按「模型文件体积 ≈ 内存占用」估算,qwen3:4b 约吃 3GB;16GB 内存建议止步 8b 级别,30b/70b 级别请交给带独显或统一内存更大的机器。
- 更新升级:
docker pull ghcr.io/open-webui/open-webui:main拉新镜像后,docker rm -f open-webui再重跑同一条docker run即可——数据在 volume 里,本文实测重建三次容器后账号与配置原样还在。顺手设-e WEBUI_SECRET_KEY=<openssl rand -hex 32 的输出>可避免重建后登录态失效。
边界在哪
这套组合的定位是个人与小团队:单机推理、吞吐有限,五十用户也是许可证给出的隐性红线。如果你的场景是多用户高并发(几十人同时用、生产级 SLA),就该把推理层换成 vLLM 或 SGLang 这类服务化引擎,做批处理与连续批调度,Open WebUI 只保留前端角色——引擎选型可以看站内的《vLLM 与 PagedAttention》与《SGLang 上手》。反过来说,5 到 20 人的团队共享一台 32GB 的 Mac mini 跑日常工作问答,这套方案的成本几乎只剩电费。
数据不出门、成本固定、断网可用——想清楚这三点是否是你的真实需求,然后半小时,工作台就是你的了。
参考资料
- Open WebUI Docs — Quick Start: https://docs.openwebui.com/getting-started/quick-start/
- open-webui/open-webui(GitHub README 与 Releases): https://github.com/open-webui/open-webui
- Open WebUI License 官方说明: https://docs.openwebui.com/license/
- A Quick Update: Open WebUI Moves to the Permissive BSD 3(GitHub Discussion #8467): https://github.com/open-webui/open-webui/discussions/8467
- Ollama 官网与模型库(qwen3 标签页): https://ollama.com/library/qwen3
- ollama/ollama Releases: https://github.com/ollama/ollama/releases
读者留言
COMMENTS 暂无还没有留言,来说第一句?