Open WebUI 接本地混元:让自托管界面用上 hy4
把本地跑的混元 hy4 接进 Open WebUI:Docker 部署、连接本地 Ollama 或 llama.cpp 端点、启用模型、管理员模型列表配置、局域网访问与鉴权,以及界面配置和 Docker 环境变量两种方式的对照与排错。
Open WebUI 接本地混元:让自托管界面用上 hy4
Open WebUI 是最流行的自托管 AI 界面,接本地模型的路径也最短:它的原生支持就是为 Ollama 设计的,接 llama.cpp 只需要填一个 OpenAI 兼容地址。当你的本地模型是混元 hy4 时,这条路的效果是对话记录、模型权重、全部数据都留在你自己的机器上,同时拥有一个接近 ChatGPT 的界面。本文给完整配置与排错。
30 秒版本
Docker 起 Open WebUI → 在 Admin Settings → Connections 里加一个 OpenAI 连接,Base URL 填 http://host.docker.internal:8080/v1(指向 llama.cpp)或直接用内置的 Ollama 连接 → 到 Models 处启用 hy4-local → 开聊。注意容器里不能用 127.0.0.1。
方案一:直接用 Ollama(最省事)
Open WebUI 内置 Ollama 连接,填个地址就行:
docker run -d -p 3000:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
进入 http://localhost:3000,注册第一个账号(第一个注册的用户自动成为管理员),然后:
确认 Ollama 在跑
在宿主机执行ollama list,确认能看到 hy4-local;没有就先ollama create hy4-local -f Modelfile。检查连接状态
进入 Admin Settings → Connections,能看到 Ollama 连接显示为已连接。启用模型
到 Admin Settings → Models,找到 hy4-local 并打开启用开关。开始对话
新建对话,在模型下拉里选择 hy4-local。
127.0.0.1 在容器里是容器自己
最常见的失败:把 OLLAMA_BASE_URL 填成 http://127.0.0.1:11434,界面显示未连接。容器里的 127.0.0.1 指向容器网络自身,不是宿主机。用 host.docker.internal;如果你的 Docker 版本不解析这个域名,就在启动时加 --add-host=host.docker.internal:host-gateway。
方案二:接 llama.cpp 服务
如果你用 llama-server 起服务(而不是 Ollama),就在 Open WebUI 里加一个 OpenAI 连接:
确认 llama-server 在跑
宿主机执行./llama-server -m ./Q4_K_M.gguf --host 0.0.0.0 --port 8080 --ctx-size 32768 --jinja,注意监听 0.0.0.0 而不是 127.0.0.1,否则容器访问不到。新增 OpenAI 连接
Admin Settings → Connections → OpenAI,点添加,Base URL 填 http://host.docker.internal:8080/v1,API Key 填任意占位值。手动添加模型
如果模型列表拉取失败,在 Admin Settings → Models 里手动添加模型名,与 llama-server 启动时使用的名称保持一致。验证并启用
回到模型列表启用它,新建对话测试。
为什么推荐 llama-server 而不是 vLLM 接 Open WebUI
llama-server 的模型名不强制校验、显存占用低、启动快,最适合做个人或小团队的本地界面。vLLM 更适合高并发服务,但它的模型列表是严格校验的,接界面时模型名必须完全一致。两者都能用,按你的并发量选。
方案三:环境变量配置(容器部署)
容器部署时用环境变量注入,配置更稳定:
docker run -d -p 3000:8080 \
-e OPENAI_API_BASE_URL="http://host.docker.internal:8080/v1" \
-e OPENAI_API_KEY="ollama" \
-e OLLAMA_BASE_URL="http://host.docker.internal:11434" \
-e WEBUI_AUTH=true \
-v open-webui:/app/backend/data \
--add-host=host.docker.internal:host-gateway \
--name open-webui \
ghcr.io/open-webui/open-webui:main
环境变量名以你部署版本的官方文档为准
Open WebUI 的环境变量名在不同版本间调整过(例如 OPENAI_API_BASE_URL 与 OPENAI_API_BASE 的历史差异)。本文给的是当前常见写法,落地前对一下你所用版本的官方文档。
配置对照表
| 场景 | 服务端 | Open WebUI 侧配置 | Base URL |
|---|---|---|---|
| 最省事 | Ollama | 内置 Ollama 连接 | http://host.docker.internal:11434 |
| 参数可调 | llama.cpp | 新增 OpenAI 连接 | http://host.docker.internal:8080/v1 |
| 云端模型 | EXAIV 云端 | 新增 OpenAI 连接 | https://exaiv.com/api/ai/v1 |
| 混用 | 两者都有 | 两个连接都加 | 分别按上面填 |
本地与云端可以共存
Open WebUI 支持同时添加多个连接。在模型下拉里,本地 hy4 和云端模型会并排出现,你可以按任务敏感度手动切换。这往往比「全部走本地」或「全部走云端」更实用。
局域网与公网访问
默认情况下 Open WebUI 只监听容器内的 8080,通过 -p 3000:8080 映射到宿主机。想让局域网其他设备访问:
docker run -d -p 3000:8080 \
-e WEBUI_AUTH=true \
-e WEBUI_URL=http://192.168.1.10:3000 \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:main
暴露到公网前先做这三件事
第一,打开 WEBUI_AUTH 并给所有账号设强密码,Open WebUI 默认的第一个账号无密码即管理员。第二,不要把你的 Ollama 端口直接暴露到公网——它没有鉴权,任何人都能消耗你的算力。第三,如果必须公网访问,在前面加一层反向代理做 TLS 与访问控制。
排错
| 现象 | 原因 | 处理 |
|---|---|---|
| Ollama 连接显示未连接 | 容器里用了 127.0.0.1 | 换 host.docker.internal,并加 host-gateway 映射 |
| 模型列表是空的 | 服务没起或路径写错 | curl 宿主机端口验证,再用界面手动添加模型名 |
| 回答乱码 | 聊天模板不对 | 按模型卡改 TEMPLATE / --jinja |
| 回答很慢 | 模型在 CPU 上跑 | 确认 GPU 生效,或用更小的量化档 |
| 首次打开很慢 | 模型加载进内存 | 正常现象 |
| 界面一直转圈 | 上下文过大导致 OOM | 调小 num_ctx 或换更小量化 |
| 多用户时互相串话 | 会话存储共享配置问题 | 检查数据卷挂载与用户权限设置 |
FAQ
Open WebUI 接本地模型和接云端模型,配置有区别吗?
为什么模型列表拉不到?
容器里为什么不能用 127.0.0.1?
Open WebUI 可以和云端模型一起用吗?
混元能通过 EXAIV 云端调用吗?
相关阅读
- hy4 Ollama 接入 — 把本地混元接进 Dify / Cursor 等工具
- Open WebUI 接入 EXAIV — 接云端模型的配置(与本文是两条不同路径)
- hy4 GGUF 本地部署实操 — 起服务之前的量化与显存准备
- Dify 接入 EXAIV — 另一种自托管应用平台的接法
- hy4 本地 RAG 实战 — 让本地模型接知识库
- 腾讯混元全系盘点 — 混元所有产品线一次摊开
数据来源
环境变量名与配置项以你所用版本的官方文档为准,本文以采样时状态为准。