Hermes Agent 实战 09|接入 OpenWebUI:把每个 Profile 暴露成一个「模型」原创
# 接入 OpenWebUI:把每个 Profile 暴露成一个「模型」
系列第 09 篇。命令行和 Telegram 之外,我想要一个统一的网页聊天界面来调度所有 Profile。思路很简单:Hermes 的网关本身就是 OpenAI 兼容的,把每个 Profile 当成一个「模型」接进 OpenWebUI 就行。这篇讲怎么接、怎么用 Kong 反代到公网,以及 Kong 那几个能让你怀疑人生的静默杀手。
# 1. 核心思路:Profile = 一个 OpenAI 兼容模型
Hermes 的 gateway run(api_server 模式)暴露的是标准的 /v1/chat/completions + /v1/models。OpenWebUI 只要能连 OpenAI 兼容端点,就能把它当模型用。
# 每个 Profile 网关监听一个端口,自报一个模型名
curl -s http://<host>:8713/v1/models | jq -r '.data[].id'
# → hermes-default
2
3
模型名由网关的 API_SERVER_MODEL_NAME 决定(见第 03 篇的 drop-in)。所以「把所有 Profile 接进 OpenWebUI」= 给每个 Profile 起一个网关、各报一个模型名、在 OpenWebUI 里把它们登记成多个 OpenAI 连接。
# 2. 在 OpenWebUI 里登记
OpenWebUI → 设置 → 连接 → 加一个 OpenAI 兼容连接:
Base URL : http://<host>:8713/v1
API Key : <网关侧设的 key,没有就随便填>
2
连上后,模型下拉里就会出现 hermes-default、hermes-superdba、hermes-freqtrade…… 选哪个,就是在跟哪个 Profile 对话。一个浏览器界面,调度整支「数字员工队伍」。
# 2.1 一个真实小坑:重复的模型
我接 OpenWebUI 时遇到过「怎么冒出来三个一样的模型」。根因通常是同一个上游被登记了多次(多个连接指向同一端点,或上游和反代各报一遍)。排查就一句话:把每个 OpenWebUI 连接的 Base URL 列出来去重,确认一个 Profile 只有一条入口。
# 3. 用 Kong 反代到公网
要从外网访问,我在前面放了 Kong 做反向代理 + 路由。Kong 很强,但它的坑几乎全是静默的——不报错,就是不通,专治各种「配置看着对就是不工作」。这几个我都真实踩过:
# 3.1 连接池耗尽 / keepalive 的「30 分钟神话」
Kong 到上游的连接复用有讲究。连接池配小了会静默耗尽,表现为间歇性超时,不报明确错误。还有个反直觉的点:keepalive 不是配了就一劳永逸——空闲超时一到连接就被回收,你以为「保活了 30 分钟」其实早断了。长连接、SSE 流式这类场景尤其要把 keepalive / 连接池调对。
# 3.2 缺证书的静默失败
上游走 HTTPS 时,少一张证书会让 Kong 直接静默连不上——日志里不一定有醒目报错。给 ComfyUI 配上游时我就栽在这:路由、服务全对,就是不通,最后是上游证书没配齐。
# 3.3 端口与网络隔离
Kong 跑在容器里时,「上游地址」要用容器网络里能解析到的地址,不是你在宿主机上看到的那个。端口映射、Docker 网络隔离、回环地址,每一样都能让「看着对」的配置不通。排查 Kong 上游永远先问一句:Kong 这个进程站在它的位置,真的能 reach 到这个上游地址吗?
# 4. 一个绕不开的批准问题
通过 OpenWebUI 调 Hermes 时,可能每个操作都弹批准,很烦。这和第 06 篇的 cron 批准是一体两面:交互式会话里批准是保护,但在某些自动化/无人场景下它会挡路。处理方式取决于你的安全取舍——把信任的操作加进 command_allowlist,或对特定平台调整 approvals.mode,但别图省事全关,那等于把安全护栏整个拆掉。
# 5. 可复现 checklist
- 每个 Profile 起一个 api_server 网关,用
API_SERVER_MODEL_NAME给它一个清晰模型名。 - 在 OpenWebUI 登记成多个 OpenAI 连接,一个 Profile 一条 Base URL,避免重复模型。
- Kong 反代:keepalive / 连接池按长连接场景调;上游 HTTPS 配齐证书;上游地址用 Kong 能 reach 的那个。
- Kong 排障默认怀疑「静默不通」——它很少给你醒目报错。
- 批准策略按场景调,加白名单而不是全关。
下一篇讲一件长期维护里最容易翻车的事——升级:怎么合并上游更新又不丢本地补丁,以及那个被合并冲掉了三次的 SSH 泄漏修复的完整复盘,还有怎么把修复反哺给开源项目。