
Open WebUI 容器启动后访问 http://127.0.0.1:3000设置管理员账户都没问题发第一条消息却弹出 500 Internal Error。原文的排障流程是让 Hermes 终端看日志结论经常是“模型未下载完”这个方向本身没问题但 500 还有一种更隐蔽的原因——Open WebUI 只是一个前端展示层真正向模型发请求的是 Hermes gateway当 gateway 上游的 Base URL 或 API Key 不对时页面拿不到模型响应就会统一显示成 500。要验证“改走 TaoToken 行不行”可以先打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 创建一把 API Key然后把 Hermes 的模型通道指过去再看 500 是否消失。1. 500 Internal Error 到底是谁的错Open WebUI 与 Hermes gateway 的分工很多人遇到 500 会先去翻 Open WebUI 的容器日志但 Open WebUI 本身不加载模型也不负责调用模型。它只是把网页上输入的内容打包成请求转交给 Hermes gateway再由 Hermes 根据.env里的配置去找上游模型 API。所以浏览器里的 500 可能发生在最后一跳也就是 Hermes 与模型服务之间的连接。1.1 一次聊天请求经过三层从点击“发送”到看到回复请求链路大致可以分成三层。第一层是 Open WebUI 容器它负责渲染聊天界面、保存会话记录不做模型推理第二层是 Hermes gateway监听http://127.0.0.1:8642接收 Open WebUI 传来的请求再按 OpenAI 兼容格式转发第三层是真正的模型 API由 Hermes 读取.env里的上游地址和 Key 去访问。原文的 docker run 命令里有一行OPENAI_API_BASE_URLhttp://host.docker.internal:8642/v1它把 Open WebUI 指向 Hermes 网关这一跳是 Docker 容器访问宿主机的内网通信通常不是 500 的根源。需要检查的是 Hermes 网关再往外拨号的那一跳.env里的模型 API 地址、API Key、模型 ID 是否还能正常返回内容。如果觉得抽象可以把聊天界面想成公司前台Hermes gateway 是内部电话总机模型 API 是你要拨通的合作方。前台看起来一切正常访客却一直听到忙音问题往往出在总机拨出去的号码或者对方不认你的工牌。500 出现在访客这边但责任不一定在 Open WebUI。1.2 什么情况值得怀疑模型通道而不是模型没下完沿用原文的思路先做一次日志自检让 Hermes 确认本地模型文件是否完整。如果结论是模型未下载完按原文操作补齐模型或跳过下载重新启动即可。真正需要怀疑模型通道的场景是模型文件没问题、Hermes 能正常启动但每次聊天都固定在几秒后报 500日志里停留在“连接上游失败”“上游认证失败”之类的信息。另一个明显特征是换浏览器、清 Cookie、重启容器都无效。这时候“改走 TaoToken 行不行”就不再是猜测而是一次可以对照的排障实验。TaoToken 只负责模型 API 通道不替 Hermes 分析日志它要验证的是Hermes 发出的那一次模型请求换成一个新的 Base URL 和 Key 后Open WebUI 是否就不再 500。2. 准备一把 TaoToken Key注册、创建 API Key、选模型 ID2.1 注册后创建 YOUR_API_KEY按原文的准备工作习惯先确认两件事Docker Desktop 正常运行一个 PowerShell 窗口可以执行hermes命令。除此之外还要准备本篇文章需要的第三样东西——TaoToken 的 API Key。打开 TaoToken 完成注册进入控制台创建 Key创建好之后先复制保存。本文统一用YOUR_API_KEY表示这把 Key它只应该出现在 Hermes 的.env这类后端配置文件里不要写进 Open WebUI 容器的启动命令也不要贴到任何会同步到前端的配置中。2.2 模型 ID 以模型广场当时列表为准创建好 Key 之后顺手在 TaoToken 的模型广场看一眼模型 ID。模型 ID 不要去社区帖子里凭记忆抄不同通道对外暴露的模型名可能不一样应该以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_content 模型广场当时列表为准。选定模型后把界面上的 ID 复制下来待会儿填进 Hermes 的.env。这里还要先分清两把 KeyOpen WebUI 容器里的OPENAI_API_KEY对应 Hermes 的API_SERVER_KEY它只证明“Open WebUI 有权限访问本机 Hermes 网关”而 TaoToken 的YOUR_API_KEY是 Hermes 访问真实模型时用的凭证。两把 Key 不在同一层不能互相替换。3. 改 Hermes 的 .env把上游模型通道切到 TaoToken3.1 定位 .env 文件路径照原文C:\Users\你的用户名\AppData\Local\hermes\.env。在资源管理器地址栏粘贴这个路径回车找到.env后右键用记事本打开。原文已经让你在文件末尾加过两行API_SERVER_ENABLEDtrue API_SERVER_KEYMyLocalKey123这两行继续保留它们是 Hermes 自己网关的身份配置。真正要动的是文件里与“模型 API 地址、API Key、模型 ID”相关的配置项。不同版本的 Hermes 对这三项的键名略有差异常见是OPENAI_API_BASE_URL、OPENAI_API_KEY、OPENAI_MODEL_ID如果你本机用的键名不同只要对应到 Base URL、API Key、模型 ID 三个含义改法是一样的。3.2 Base URL 填 https://taotoken.net/api不要带 /v1在.env末尾追加或替换下面几行OPENAI_API_BASE_URLhttps://taotoken.net/api OPENAI_API_KEYYOUR_API_KEY # 模型 ID 以模型广场当时列表为准填成页面显示的 ID保存前检查三件事。第一https://taotoken.net/api末尾没有/v1第二不要把官网首页地址复制进.env官网用于注册、看模型广场、看用量填进配置文件的一律是这个接口地址第三模型 ID 不要用示例值去模型广场复制真实的 ID。如果.env里本来就有旧的上游 Base URL直接替换成这一行不要同时保留两行否则 Hermes 可能读取先出现的那一个。保存时注意文件编码和原来保持一致记事本默认 UTF-8 一般可以直接用如果之前用其他编辑器保存过带 BOM 的.env重启网关时报解析错误就用记事本另存为 UTF-8 再试一次。4. 按原文流程重启网关并拉起 Open WebUI4.1 重新打开 PowerShell 启动网关保存.env后新开一个 PowerShell 窗口执行hermes gateway run -vv。看到终端出现http://127.0.0.1:8642 (model: hermes-agent)或API server running一类的提示说明网关已经拿到.env里新的上游配置。如果这一步在 Windows 上报兼容性错误按原文的老办法处理把完整日志粘贴到另一个 Hermes 交互终端让它自动分析并尝试修复。这个自检动作仍然属于 Hermes 自身的能力TaoToken 在这一步不会替你看日志它真正起作用的时间是网关启动后第一次向外发模型请求的那一刻。4.2 docker run 拉起 Open WebUI 容器网关启动成功后再执行一次原文里的容器启动命令保证 Open WebUI 指向的是本机网关docker run -d -p 3000:8080 \ -e OPENAI_API_BASE_URLhttp://host.docker.internal:8642/v1 \ -e OPENAI_API_KEYMyLocalKey123 \ --add-hosthost.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main这里的OPENAI_API_KEYMyLocalKey123是 Hermes 的API_SERVER_KEY不是 TaoToken 的 Key。镜像体积不小首次拉取需要耐心中途网络卡住就重试同一条命令Docker 会断点继续。若一直拉取失败检查 Docker Desktop 的镜像源或网络设置不要改动命令里的上游地址。4.3 在“管理连接”里添加 hermes-agent浏览器打开http://127.0.0.1:3000第一次进入按提示设置管理员账号用户名、邮箱、密码按自己习惯填。登录后如果左上角模型列表是空的点“管理连接”找到 OpenAI 接口在最右侧点齿轮进入编辑在“添加模型 ID”处输入hermes-agent。这个字符串是 Open WebUI 对 Hermes 网关的标识不是 TaoToken 的模型 IDTaoToken 的模型 ID 只出现在前面.env中。两层 ID 各管各的别在 Open WebUI 里填模型广场里的 ID也别在.env里填hermes-agent。5. 验证 500 是否消失两种测试别混淆5.1 先到模型对话单独验证 Key打开 模型对话页用同一把YOUR_API_KEY发一条消息。这一步是为了隔离问题如果模型对话能正常返回说明 Key、Base URL、模型 ID 三者是对的问题大概率出在 Hermes 没加载新配置如果模型对话也报错说明 Key 或模型 ID 不对先回控制台重新检查。模型对话页用到的接口与 Hermes 填的是同一套前面的验证结论可以直接搬过来。5.2 重发聊天并对照 Hermes 日志确认模型对话正常后回到 Open WebUI 刷新页面重发刚才触发 500 的消息。此时全链路是Open WebUI 只是前端展示Hermes gateway 从https://taotoken.net/api取模型结果再原样返回给浏览器。如果根因确实是模型通道改走 TaoToken 一般能解决如果根因是模型未下载完还是要回到原文日志自检的流程。如果仍报错优先查四类问题OPENAI_API_BASE_URL是否多写了/v1是否误把官网首页地址填进了.env是否把 Open WebUI 容器里的API_SERVER_KEY和 TaoToken 的YOUR_API_KEY混用模型 ID 是否和模型广场列表不一致。改完任何一项都需要重启hermes gateway run -vv必要时执行docker restart open-webui让容器重新读取环境变量。这次如果还报错就回到原文的老办法把新日志贴给 Hermes 终端自检让它判断是模型加载问题还是上游连通性问题。6. 跑通之后固定使用流程和 TaoToken 侧检查6.1 以后每次使用的固定流程原文最后总结的流程可以继续沿用先让 Hermes 终端把 Open WebUI 容器拉起来再开新 PowerShell 跑hermes gateway run -vv最后浏览器访问http://127.0.0.1:3000登录管理员账号。区别只在底层通道已经换成 TaoToken所以每次网关启动后TaoToken 侧会对应产生模型调用记录。如果要把这个通道用于长期编码任务可以顺手打开 Coding Plan 确认套餐是否够用再决定要不要升级。6.2 用量、新 Key 和下一处接入Key 的新建和用量记录在 控制台 API Keys 里排障时看调用是否成功比反复试聊天消息更直观。下一处想把同一把 Key 用到 Claude Code 时环境变量对照关系参考 Claude Code 接入文档配置里的 Base URL 仍然写https://taotoken.net/api避免和 Hermes 的.env混在一起。