家里那台飞牛 NAS 上跑着 QWen36(Qwen3.6-35B-A3B,MoE 架构,实际激活参数才 3B 出头),走的是 llama-server,监听在 39625 端口,对外暴露成 OpenAI 兼容的 API。但老实说,调了大半个月,我一直是用 curl 和脚本跟它对话——能用,但每次想让它帮我把一段长文总结一下、或者就着几份 PDF 问问问题,命令行就太憋屈了。
直到重新看了一眼 Open WebUI。
是什么
Open WebUI 是个自托管的 AI 前端,14.4 万星,完全能离线跑。它不自己出模型,而是当“操作台”:一头接 Ollama,一头接任何 OpenAI 兼容的 API(LM Studio、vLLM、Groq、OpenRouter 都行)。界面基本就是个本地版 ChatGPT,但数据、历史、模型全在你自己机器上。

为什么值得装
裸调 API 最大的问题是“没有外壳”。没有会话历史、没有随手贴文件做 RAG、没有多轮记忆、也没有给家里人开个只读账号这回事。Open WebUI 把这些全补齐了,而且:
- 本地 RAG:直接往知识库里拖文档,支持 9 种向量库,BM25 + 向量混合检索;
- 持久记忆:跨对话记住你的偏好;
- 套娃成 Agent:给模型包一层指令、工具和知识,就能变成专属助手;
- 细粒度权限:RBAC + 用户组,家里人共用一台 NAS 也不怕误删。
怎么接上我的 QWen36
装很简单。飞牛上我直接用 Docker:
docker run -d -p 3000:8080
-e OPENAI_API_KEY=sk-no-key-needed
-e OPENAI_API_BASE_URL=http://192.168.199.236:39625/v1
-v openwebui:/app/backend/data
--name openwebui --restart always
ghcr.io/open-webui/open-webui:main
关键就一行:把 OPENAI_API_BASE_URL 指到 NAS 上 llama-server 的 /v1。密钥栏 Open WebUI 不验真,随便填个占位串就行。启动后访问 3000 端口,新建一个模型,base url 填同一个,就能在浏览器里跟 QWen36 聊了。
如果本地还装了 Ollama,用官方那个捆绑镜像(:ollama 标签)能一套带走,但会顺带拉一份 Ollama 占 NAS 空间。我自己已经有 llama-server 了,就没必要。
v0.10.2 的两个小惊喜
前几天升到 v0.10.2(7 月 1 号发的),有两个点挺戳我:
- 思考流式显示:像 QWen 这种会吐 reasoning 的模型,思考过程现在能边出边看,而不是等半天憋一大段;
- 知识库文件夹上传:往知识库拖一整个文件夹,子目录结构会保留,不是全拍平成一堆散文件——对我这种按项目归档 PDF 的人很实用。
另外这版修了一堆升级时数据库迁移崩溃的坑,以及若干安全修复,生产环境建议跟。顺带一提,Open WebUI 生态里还有个 open-terminal / cptr,能在聊天里直接让 AI 写代码、跑命令、读输出再迭代,相当于把开发环境也搬进了对话框,有兴趣可以单独折腾。
有什么坑
- 许可证。它用的是自研的 Open WebUI License(基于 BSD-3-Clause,但要求保留 “Open WebUI” 品牌标识)。个人自托管完全没问题,但要是拿去改了壳对外提供服务,得留意品牌条款。
- 别裸端口暴露。3000 端口只在内网用,要出门访问就老老实实套一层反代加 HTTPS,或者直接走我之前部署的 Pangolin 之类的零信任网关。
- 存储。它本身不怎么吃资源,但历史会话和向量索引会涨,NAS 的存储要留余量,媒体文件别往里堆。
- 升级前备份 data 卷。虽然 v0.10.2 修了迁移崩溃,但任何大版本升级前先 docker volume 备份一下,省得哪天起不来。
说到底
14 万星的成熟度摆在那,装一次的成本就是一条 docker run。对我而言,它把“本地大模型”从一行 curl 变成了真正每天会打开用的东西——这才是本地 AI 该有的样子。