1. 为什么要把 Hermes、OpenRouter 和 Telegram 串成一条链路
如果你正在找一个能自建、能换模型、还能直接在手机上聊天的机器人方案,Hermes + OpenRouter + Telegram 这套组合值得认真看一下。Hermes 负责把消息接进来再转发出去,OpenRouter 提供 100 多个模型的统一调用入口,Telegram 则是你随手就能用的聊天窗口。三者拼起来,就是一个属于你自己的多模型对话机器人。
但真正动手时,很多人会卡在同一个地方:Key 太多、Base URL 太乱。OpenRouter 一个 Key,Telegram Bot 一个 Token,Hermes 自己还要配置模型来源,环境变量一多就容易写错。我试过把这几样东西分开管理,结果调试时来回切换配置文件,光找哪个 Key 对应哪个服务就花了不少时间。
这篇要讲的思路是:用 TaoToken 统一 Key 作为模型调用的入口,把 Base URL 收敛到一处,Hermes 只认这一个地址,OpenRouter 的模型名照常填。这样 Telegram Bot 收到的消息,经 Hermes 转发到统一入口,再落到具体模型上,回传链路清晰,排障也简单。
适合谁看:想自建多模型对话机器人、已经在用 Hermes 或准备接入 OpenRouter、希望把 Key 管理简化的开发者。下面从环境准备开始,一步步给出可复制的配置片段,最后用一条 curl 请求验证整条链路是否打通。
核心检索词先明确:Hermes 接入 OpenRouter、Telegram Bot 消息收发、TaoToken 统一 Key、Base URL 配置。这几个词会贯穿全文,你照着做就能跑通。
2. TaoToken 前置准备:统一 Key 与 Base URL 怎么拿
在动 Hermes 之前,先把模型调用的入口准备好。TaoToken 的作用是给你一个统一的 API 地址和 Key,Hermes 配置里只写这一个 Base URL,后面换模型、加模型都不用改地址。
第一步,打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册并登录。进入控制台后找到 API Keys 页面,新建一个 Key。这个 Key 只显示一次,复制后先存到安全的地方,后面环境变量里要用。
第二步,确认 Base URL。TaoToken 的 API 地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,配置时直接填这一串。Hermes 里凡是要求填 OpenRouter Base URL 的地方,都换成这个。
第三步,想好你要用哪个模型。OpenRouter 的模型名格式通常是厂商/模型,比如openrouter/elephant-alpha这类免费模型,或者anthropic/claude-3.5-sonnet这类付费模型。模型名在 Hermes 配置和验证请求里都会用到,先记下来。
这里有个容易踩的坑:有人把 TaoToken 的 Key 和 OpenRouter 官方 Key 混着填,结果请求发出去返回 401。记住,既然走统一入口,Hermes 里填的就是 TaoToken 的 Key,不是 OpenRouter 官网申请的 Key。两者不要同时出现在一个配置里。
环境变量建议单独放一个文件管理,比如项目根目录下的.env。模板如下,你可以直接复制:
# TaoToken 统一入口 TAOTOKEN_API_KEY=sk-你的TaoTokenKey TAOTOKEN_BASE_URL=https://taotoken.net/api # Telegram Bot TELEGRAM_BOT_TOKEN=123456789:AAHxxxxxxxxxxxxxxxx TELEGRAM_USER_ID=123456789 # 模型 OPENROUTER_MODEL=openrouter/elephant-alphaTelegram 的 Bot Token 和 user_id 下面会讲怎么拿。先把这份模板存好,等 Hermes 配置时直接引用。
如果你还没决定用哪个模型,可以先到模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 看看可用列表,挑一个免费的先跑通链路,再换付费模型。长期做编码或 Agent 的话,Coding Plan 页面 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 有更划算的方案,可以后面再研究。
3. 可复制配置:Hermes 的 settings 与 Telegram 环境变量
这一节是全文的核心,配置写对了,后面验证基本一次过。分三块:Hermes 的模型配置、Telegram Bot 的创建、以及把两者接起来的 Gateway 配置。
3.1 Hermes 模型配置片段
Hermes 的模型配置一般放在用户目录下的配置文件中,具体路径因版本而异,常见的是~/.hermes/config.toml或项目内的settings.json。下面给一份 TOML 片段,路径和字段名按你本地实际文件为准,字段值照抄:
[model] provider = "openrouter" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" default_model = "openrouter/elephant-alpha" [model.options] timeout = 60 max_retries = 2如果你用的是 JSON 格式的 settings,等价写法:
{ "model": { "provider": "openrouter", "base_url": "https://taotoken.net/api", "api_key": "${TAOTOKEN_API_KEY}", "default_model": "openrouter/elephant-alpha", "options": { "timeout": 60, "max_retries": 2 } } }关键点:base_url填 TaoToken 的地址,api_key引用环境变量,default_model填 OpenRouter 的模型名。三件套齐了,Hermes 才知道去哪调、用什么身份调、调哪个模型。
3.2 创建 Telegram Bot 并拿 Token
打开 Telegram,搜索@BotFather,发送/newbot。按提示输入机器人名称,再输入一个以bot结尾的唯一用户名。创建成功后,BotFather 会返回一串 Token,格式类似123456789:AAHxxxxxxxxxxxxxxxx。这串就是TELEGRAM_BOT_TOKEN,填进.env。
接着拿你的 user_id。搜索@userinfobot,给它发任意消息,它会返回你的数字 ID,比如Id: 123456789。这个填进TELEGRAM_USER_ID。为什么要 user_id?因为 Hermes 的 Gateway 通常需要知道允许哪些用户跟 Bot 对话,填上你自己的 ID 就能限定只有你能触发。
最后,给你的 Bot 发送/start。这一步必须做,否则 Bot 无法主动给你发消息,后面验证时会收不到回复。
3.3 Hermes Gateway 接入 Telegram
执行hermes setup,在菜单里进入Messaging Platforms (Gateway),勾选Telegram。按提示填入 Bot Token 和 user_id,保存后 Hermes 会自动重启 Gateway 服务。
配置完成后,Hermes 的 Gateway 配置里应该能看到类似这样的段落:
[gateway.telegram] enabled = true bot_token = "${TELEGRAM_BOT_TOKEN}" allowed_users = ["${TELEGRAM_USER_ID}"]到这里,三件套就齐了:Base URL 是 TaoToken 的,Key 是 TaoToken 的,Model ID 是 OpenRouter 的模型名。Telegram 的 Token 和 user_id 也各就各位。下一节验证整条链路。
4. 验证请求:一条 curl 打通 Hermes 到 OpenRouter 再回 Telegram
配置写完不代表通了,得实际发一条请求看结果。分两步:先用 curl 直接验证模型调用,再通过 Telegram 验证消息闭环。
4.1 curl 验证模型调用
这条命令直接打 TaoToken 的统一入口,确认 Key 和 Base URL 没问题:
curl -X POST "https://taotoken.net/api/v1/chat/completions" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openrouter/elephant-alpha", "messages": [ {"role": "user", "content": "用一句话说明你是什么模型"} ] }'如果返回里能看到choices数组,并且message.content有内容,说明模型调用链路是通的。这一步过了,Hermes 的模型配置基本没问题。
4.2 通过 Hermes 转发验证
在命令行执行hermes chat,直接输入一句话,比如「你好,测试一下」。如果 Hermes 能返回模型回复,说明 Hermes 到 TaoToken 的转发正常。
4.3 Telegram 端到端验证
给你的 Bot 发送hello。正常情况下,Hermes 的 Gateway 收到消息,转发到模型,再把回复发回 Telegram。你会在聊天窗口看到机器人的回复。
如果 Telegram 没反应,但hermes chat正常,问题多半在 Gateway 配置或 Bot Token 上。检查.env里的TELEGRAM_BOT_TOKEN是否完整,allowed_users里的 user_id 是否和你实际 ID 一致,以及是否给 Bot 发过/start。
整条链路验证成功的标志:Telegram 发消息 → Hermes 接收 → 调 TaoToken 入口 → 落到 OpenRouter 模型 → 回复回传 Telegram。四个环节缺一不可,任何一环断了都会表现为「没回复」。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
配置过程中最容易撞上的几类报错,这里逐个对照。
401 Unauthorized。最常见的原因是 Key 填错或没生效。检查.env里的TAOTOKEN_API_KEY是否完整复制,有没有多余空格。如果 Hermes 配置里直接写了 Key 而不是引用环境变量,确认没有把 OpenRouter 官方 Key 填进去。还有一种情况是环境变量没被加载,重启终端或重新 source 一下.env。
local proxy failed。这个报错通常出现在 Hermes 尝试连接 Base URL 时。先确认base_url填的是https://taotoken.net/api,没有多余路径或参数。再检查本机网络是否能正常访问该地址,可以用curl -I https://taotoken.net/api看返回状态。如果本机有额外的网络层配置,确认没有拦截这个域名。
reading choices 相关报错。这类报错一般是返回结构不符合预期,常见于模型名写错。比如把openrouter/elephant-alpha写成了elephant-alpha,或者模型名里有拼写错误。对照模型列表确认模型名,注意大小写和斜杠。另外,如果返回里没有choices字段,可能是请求体格式不对,检查messages数组是否规范。
OAuth 相关报错。如果你在配置里看到了 OAuth 字样,说明某处启用了 OAuth 流程,但当前用的是 API Key 模式。检查 Hermes 配置里是否有auth_type = "oauth"之类的字段,改成 API Key 模式。Codex 的auth.json如果存在,确认里面的认证方式与当前配置一致,不要混用。
Telegram 收不到消息。除了前面说的/start和 user_id,还要检查 Bot Token 是否被撤销。如果多次泄露 Token,BotFather 那边可能已经失效,重新生成一个填回去。另外,Gateway 服务是否真的重启了,可以看 Hermes 的日志输出。
模型返回空内容。有时候请求成功但content为空,可能是模型本身的问题,换一个模型试试。也可能是max_tokens设得太小,回复被截断。检查配置里有没有限制输出长度的字段。
排查顺序建议:先 curl 直连 TaoToken 确认 Key 和地址,再hermes chat确认 Hermes 转发,最后 Telegram 确认 Gateway。逐层缩小范围,比一上来就改一堆配置高效得多。
6. 把链路固定下来:后续维护与扩展
链路跑通之后,日常维护其实很轻。模型想换就改default_model,Key 想轮换就更新.env里的TAOTOKEN_API_KEY,Base URL 基本不用动。这就是统一入口的好处:变化收敛到一处,Hermes 和 Telegram 的配置保持稳定。
如果你后面想加更多模型,直接在模型列表里挑,把模型名填进配置即可,不用重新申请 Key 或改地址。想做更复杂的 Agent 或长期编码任务,可以看看 Coding Plan 的方案,把调用额度规划好。
接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。配置过程中遇到报错,先回到第 5 节对照排查,多数问题都能定位到具体环节。
最后留一个实用习惯:把.env加入.gitignore,别把 Key 提交到仓库。Telegram Bot Token 同理,泄露了就去 BotFather 重新生成。链路稳定之后,你可以在 Telegram 里随手跟自己的多模型机器人对话,换模型只需要改一行配置。