1. 为什么要在 Hermes WebUI 里接 TaoToken
Hermes WebUI 是 GitHub 上 nesquena/hermes-webui 这个项目提供的轻量级深色主题 Web 应用,它给 Hermes Agent 套了一层浏览器界面:左边会话导航、中间聊天区、右边工作区文件浏览器,凡是终端里能做的操作,网页里基本都能做。它最大的价值在于移动端——手机浏览器打开就能调用 Agent,不用一直守着 SSH 终端。但很多人卡在同一个地方:Hermes Agent 本身要配模型 Provider,而 WebUI 的 settings.json 里又有一层配置,两边字段对不上,手机端请求发出去就报 401 或者 model not found。
TaoToken 在这里扮演的角色是统一模型通道。它提供 OpenAI 兼容的 API 入口,你只要在 Hermes 的 provider 配置里把 base_url 指向https://taotoken.net/api,再把 API Key 填进去,Hermes Agent 和 WebUI 就都能走同一条通道。这样你不需要在 WebUI 里单独维护一套模型密钥,settings.json 里只保留通道字段和 UI 偏好,模型鉴权交给 Hermes 的 config.yaml 统一处理。
这篇面向的是已经在服务器上跑起 Hermes Agent、想通过手机浏览器调用 Agent 的开发者。我会给出 settings.json 的可复制骨架、TaoToken 的接入步骤,以及一次 curl 验证动作,目标是配置一次就能在手机端跑通 Agent 请求。整个过程不涉及任何网络工具,纯配置层面的事。
2. TaoToken 前置准备:Key 与通道地址
在动 settings.json 之前,先把 TaoToken 这边的两样东西拿到手:API Key 和通道地址。通道地址是固定的https://taotoken.net/api,这个不加任何查询参数,直接作为 OpenAI 兼容的 base_url 使用。API Key 需要你登录控制台创建。
打开控制台页面,路径是https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite,登录后在 API Keys 区域新建一个 Key。建议按用途命名,比如hermes-webui-mobile,方便以后区分是哪个端在用。创建完立刻复制,页面刷新后完整 Key 就不再显示了。
拿到 Key 之后,先别急着写进 Hermes 配置,用一条 curl 确认通道本身是通的。这一步能帮你排除掉 Key 本身的问题,后面如果 WebUI 报错,你就知道不是通道的锅。
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'返回里如果有choices字段和一段回复内容,说明 Key 和通道都正常。如果返回 401,检查 Key 有没有复制完整;如果返回 model not found,说明你填的模型名不在当前 Key 的可用范围内,换一个再试。这一步过了,再往下走。
关于模型选择,Hermes 支持 OpenAI、Anthropic、Google、DeepSeek 等多个 Provider,TaoToken 通道下你可以用常见的模型名。具体哪些模型可用,可以在模型对话页面里先试一下,路径是https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite,选好模型发一条消息,确认能出结果再写进配置。
3. settings.json 可复制骨架与字段说明
Hermes WebUI 的状态默认存在~/.hermes/webui/目录下,settings.json 就在这里面。这个文件管的是 UI 层偏好——主题、发送键、是否显示 CLI session、token 用量显示等。模型鉴权不在这里,而在 Hermes Agent 的 config.yaml 里。很多人搞混这两层,把 API Key 写进 settings.json,结果 WebUI 读不到,Agent 也读不到。
先看 settings.json 的骨架。下面这份可以直接复制,字段按需改:
{ "theme": "dark", "skin": "default", "send_key": "enter", "show_cli_sessions": true, "show_token_usage": true, "language": "zh", "default_model": "", "default_workspace": "~/workspace", "provider_channel": { "base_url": "https://taotoken.net/api", "api_key_env": "TAOTOKEN_API_KEY", "timeout_seconds": 120 }, "mobile": { "sidebar_overlay": true, "touch_target_min": 44 } }几个关键字段解释一下。provider_channel.base_url固定写https://taotoken.net/api,这是 TaoToken 的 OpenAI 兼容入口。api_key_env写的是环境变量名,不是 Key 本身——这样 Key 不会明文躺在 settings.json 里,手机端同步配置时也不会泄露。timeout_seconds给 120 秒,Agent 任务有时候跑得久,太短会中途断掉。mobile.sidebar_overlay控制移动端侧边栏是否以覆盖层滑入,touch_target_min是触控目标最小尺寸,44px 是移动端可用性的常见下限。
default_model留空是有意的,留空时 Hermes 会用当前 provider 的默认模型。如果你在 TaoToken 通道下想固定用某个模型,可以填上模型名,但要注意这个字段和 Hermes config.yaml 里的模型配置是两回事,WebUI 这边只是覆盖显示。
settings.json 改完之后,WebUI 需要重新加载配置。如果你是用ctl.sh起的服务,执行./ctl.sh restart就行。重启后打开页面,进设置面板确认字段生效。
4. Hermes Agent 侧的 TaoToken 接入配置
settings.json 只管 UI,真正让 Agent 走 TaoToken 通道的是 Hermes Agent 的 config.yaml。这个文件默认在$HERMES_HOME/config.yaml,POSIX 下通常是~/.hermes/config.yaml。你需要在这里配一个 OpenAI 兼容的 provider,把 base_url 指向 TaoToken。
先设置环境变量,把 Key 放进去,不要写死在配置文件里:
export TAOTOKEN_API_KEY="sk-你的Key"然后编辑 config.yaml,加入 provider 段:
providers: taotoken: type: openai_compatible base_url: https://taotoken.net/api api_key_env: TAOTOKEN_API_KEY models: - gpt-4o-mini - gpt-4o - claude-3-5-sonnet default_model: gpt-4o-mini default_provider: taotoken这里type写openai_compatible,因为 TaoToken 提供的是 OpenAI 兼容接口。api_key_env指向刚才设置的环境变量。models列表里放你确认可用的模型名,default_model选一个作为默认。
如果你是用start.sh或ctl.sh启动的,环境变量需要在启动前 export,或者写进.env文件。ctl.sh会读取.env,所以更稳妥的做法是把TAOTOKEN_API_KEY=sk-你的Key写进项目根目录的.env,然后./ctl.sh restart。
配置完成后,用 Hermes CLI 先验证一次,确认 Agent 侧通道通了:
hermes model这个命令会列出当前可用的 provider 和模型。如果taotoken出现在列表里,且默认模型正确,说明 Agent 侧配置生效。如果没出现,检查 config.yaml 的缩进——YAML 对缩进敏感,providers下的层级错一格就会解析失败。
5. 手机端调用验证:一次 curl 跑通 Agent 请求
配置都就位后,做一次端到端验证。先在服务器本地确认 WebUI 健康:
curl -s http://127.0.0.1:8787/health返回{"status":"ok"}之类的响应就说明 WebUI 服务正常。然后从手机浏览器访问。如果你是用 SSH 隧道,命令是:
ssh -N -L 8787:127.0.0.1:8787 user@你的服务器手机和电脑在同一网络下,或者用 Tailscale 组网,把服务器和手机加进同一网络,配置HERMES_WEBUI_HOST=0.0.0.0加HERMES_WEBUI_PASSWORD,然后手机访问http://服务器地址:8787。注意这里必须设密码,因为绑定到 0.0.0.0 意味着局域网内可访问。
手机浏览器打开后,进聊天界面发一条消息。如果 Agent 正常回复,说明整条链路通了:手机浏览器 → WebUI → Hermes Agent → TaoToken 通道 → 模型返回。
如果你想在手机端之外再用 curl 直接验证 Agent 的模型调用,可以走 WebUI 的 API 端点。不过更直接的方式是验证 TaoToken 通道本身在 Agent 配置下可用:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "用一句话说明你是什么模型"}], "max_tokens": 64 }'这次用的是环境变量里的 Key,和 Hermes 配置里引用的是同一个。如果这条 curl 通了,手机端 WebUI 也通了,那配置就是完整的。实测下来,最容易出问题的环节是环境变量没被ctl.sh读到,导致 Agent 启动时api_key_env解析为空,请求发出去就是 401。
6. 本篇常见错排查
401 Unauthorized:最常见。先确认.env里的TAOTOKEN_API_KEY有没有被ctl.sh加载。ctl.sh读取.env是在启动时,如果你改了.env没重启,旧进程还是用旧值。执行./ctl.sh restart再试。另外确认 Key 没有多余空格或换行。
model not found:config.yaml 里models列表写的模型名,和 TaoToken 通道实际可用的模型对不上。回到模型对话页面确认可用模型名,或者先用 curl 单独测一下那个模型名能不能通。
WebUI 页面能开但聊天无响应:检查~/.hermes/webui.log,ctl.sh logs --lines 100可以看最近日志。常见的是 Agent 侧 config.yaml 解析失败,日志里会有 YAML 报错。YAML 缩进用空格不用 Tab,层级对齐要严格。
手机端连不上:如果服务器绑的是 127.0.0.1,手机访问不到。要么用 SSH 隧道,要么改HERMES_WEBUI_HOST=0.0.0.0并设HERMES_WEBUI_PASSWORD。改完记得重启服务。
settings.json 改了不生效:WebUI 的 settings.json 是服务端存储加 localStorage 双写,改文件后需要重启服务,且浏览器要硬刷新清掉 localStorage 缓存。手机端尤其容易残留旧缓存,清一下浏览器数据再进。
请求超时:Agent 任务跑得久,timeout_seconds给太小会断。settings.json 里调到 120 或更高,同时确认反向代理(如果有)的超时也够长。
7. 下一步:长期编码与 Agent 场景
如果你只是偶尔在手机上问 Agent 几个问题,上面这套配置就够了。但如果你打算把 Hermes WebUI 当成日常编码和 Agent 调用的入口,尤其是让 Agent 跑长任务、调 Claude Code 或 Codex 做重活,那按量计费的通道在成本上不一定划算。这种场景更适合用 Coding Plan,路径是https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite,它面向的是长期、高频的编码和 Agent 调用。
接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,里面有完整的字段说明和示例。API Keys 管理在https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite,需要新建或轮换 Key 的时候去这里。官网入口是https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=。
配置这件事,一次做对后面就省心。我踩过的坑基本都集中在环境变量加载和 YAML 缩进上,你把这两处盯紧,手机端跑通 Agent 请求就是几分钟的事。