Hermes Agent + ElevenLabs 语音完整配置指南
把 ElevenLabs 接入你的 Hermes Agent,用于 Telegram 语音回复。API 密钥放哪里、如何选 voice_id、用什么模型。

免费的声音够用,直到真的有人听见
Edge TTS 随 Hermes Agent 一起提供,不收费。它能用,支持数十种语言超过 400 种声音,如果只有你自己听你的 bot,它确实够好。可一旦你把 Telegram bot 交给客户、放进群聊,或者用它录一段真的会有人反应的音频,默认声音就立刻听起来像默认。ElevenLabs 是最快的解决方案,也是 Hermes 支持的付费 TTS 服务商里被搜索最多的一个。
这份指南就是端到端的接线,一次一份配置文件。免费额度到底能覆盖多少、API 密钥应该放在哪里、如何挑一个半年后还存在的 voice_id、聊天和长文本分别应该选哪个模型,以及那些诚实的取舍(美国托管、按用量计费、没有离线路径)。没有截图,没有废话,只有步骤和数字。
免费额度能给你什么
ElevenLabs 在免费额度下每个账户每月发放 10,000 额度。Multilingual v2 每个字符消耗 1 额度,大约相当于 10,000 字符、1,500 个口语单词,或以自然语速播完十到十二分钟成品音频。额度不结转:计费日到点重置,没用完的部分作废。
对于每天回答几条 Telegram 语音留言的个人 Hermes Agent 来说,十分钟往往就是整整一个月。对面向客户的 bot,请按 Creator 或更高的档位来规划。Creator 档的超额价格大约是每 1,000 字符 0.30 美元,这就是拿来和免费的 Edge TTS 做对比时最诚实的数字。
有两条免费档的细节值得一开始就摆出来:
- 免费档允许商业使用,但音频必须标注 ElevenLabs。私人聊天里没问题。给付费客户说话的 bot,这条标注要求就是升级付费的理由。
- 默认预设声音(Rachel、Adam 等等)将在 2026 年底停用。请在此之前锁定一个 Voice Library 的
voice_id,否则切换发生时你的 bot 会静默地坏掉。
步骤 1:安装 premium TTS 附加包
Hermes 自带免费的 TTS 服务商。ElevenLabs 位于 tts-premium 附加包之后,这样如果你从不开启,依赖就保持精简:
pip install "hermes-agent[tts-premium]"
如果你已经装过 messaging 附加包,一次装两个,避免依赖解析来回折腾:
pip install "hermes-agent[messaging,tts-premium]"
步骤 2:把 API 密钥放到 Hermes 会读的位置
在 elevenlabs.io 的 Profile 里进入 API Keys 创建一个密钥。密钥形如 sk_...,这就是 ElevenLabs 需要的唯一凭据。它放在 ~/.hermes/.env:
ELEVENLABS_API_KEY=sk_your_key_here
关于这个路径有两点。第一,是 ~/.hermes/.env,不是你启动 Hermes 时所在项目里的 .env - 网关只读取配置目录。第二,如果你更愿意在 shell 里 export 这个密钥,Hermes 也会读到,但 .env 文件是那种不需要你操心也能挺过重启的方案。
步骤 3:在 config.yaml 里接上服务商
编辑 ~/.hermes/config.yaml,设置 TTS 块:
tts:
provider: elevenlabs
voice_id: 21m00Tcm4TlvDq8ikWAM # Rachel(默认女声)
model_id: eleven_multilingual_v2
整套配置就这些。重启网关:
hermes gateway restart
在 CLI 会话里验证:
hermes
> /voice on
> 说 "一 二 三,ElevenLabs 已经接上了。"
你应该会听到用配置的声音说出的回复。如果什么都听不到,常见的两种原因是密钥错误(网关日志里出现 401),以及机器上没有 ffmpeg 而 Hermes 想为 Telegram 转换音频 - 参考下面的 Telegram 章节。
步骤 4:挑一个还会继续存在的 voice_id
voice_id 是决定你的 bot 听起来是什么样的唯一开关。两大类声音,使用方式完全相同:
- 预设声音 - Rachel、Adam,以及免费档内置的其他名字。零成本、开箱即用,但如前所述:整套预设名单将在 2026 年底停用。周末实验用没问题,任何计划到 2027 年还要跑的东西都不合适。
- Voice Library 声音 - 超过 10,000 个由 ElevenLabs 用户分享的声音,以及你自己设计的声音。在 elevenlabs.io 上浏览这个库,把喜欢的点 Add Voice 加到账户里,然后把 ID 粘到
voice_id。这些声音会持续存在,是生产环境正确的选择。
安全流程:即便是第一次配置,也从 Voice Library 里挑两把声音,两把都加到账户里,把主用的那把放进 voice_id。当其中一把被弃用时(社区声音总在来来去去),你就能不慌不忙地换。

步骤 5:选模型
对于 Telegram 上的 Hermes,只有两个模型值得考虑,在它们之间做权衡的是延迟与音质:
| 模型 | 成本 | 延迟 | 最适合 |
|---|---|---|---|
eleven_multilingual_v2 |
每字符 1 额度 | 更高,画质优先 | 长回复、回复语音留言、多语言对话 |
eleven_flash_v2_5 |
每字符 0.5 额度 | 约 75 毫秒首字节 | 简短的聊天回复、低延迟对话 |
上面的配置默认用 Multilingual v2,因为它生成的音频更有表现力,并覆盖 29 种以上的语言,这一点在你的 Hermes Agent 有一半时间用中文回复时很重要。Flash v2.5 更适合一两句的快速一来一回,那种场景里每 100 毫秒都能被感知到。
务实的默认做法:从 Multilingual v2 开始,听几段你的 bot 的真实回复,只有当你或对面的人真的觉得语音留言之后的停顿难受时,才切到 Flash。
步骤 6:Telegram 上的 Opus 优势
这是大多数配置指南都会跳过的一环,也是 ElevenLabs 比几乎所有替代品都更契合 Telegram 的原因。
Telegram 的语音气泡必须编码为 Opus。像 NeuTTS 这样的本地 TTS 引擎输出 WAV,所以 Hermes 每次回复都要调用 ffmpeg,而这一步重编码会带来可感知的延迟。ElevenLabs 可以原生返回 Opus,音频字节直接从 API 响应进入 Telegram 语音气泡,无需转换。
即便如此,你仍然希望把 ffmpeg 装好作为兜底:
sudo apt install ffmpeg # Linux
brew install ffmpeg # macOS
但配置了 ElevenLabs 之后,ffmpeg 在正常路径上就闲着,语音回复来得更快。如果你在同一位置权衡 NeuTTS 或 Piper,请对照完整的 TTS 服务商对比。
步骤 7:把整条链路走一遍
从你的手机给你的 Telegram bot 发一条语音留言:
- 按住聊天里的麦克风按钮,说一个简短的问题,松手
- bot 用 Whisper 做转录
- 智能体处理这条消息
- ElevenLabs 把回复合成为 Opus
- Hermes 以语音气泡的形式发回
整条链路对于简短问题应该在几秒内跑完,若触发了工具调用或 MCP 查询会更久一些。如果始终没有音频回来,去网关日志里找 401(密钥错)、429(免费档限流)或 voice_id not found(通常是粘 ID 前没有把这把声音加入账户)。要做更宽的排查,可以看语音不工作排查指南。
诚实的取舍
ElevenLabs 是今天你能接到 Hermes 上、听起来最好的 TTS,它也伴随一些值得点名的后果:
- 按用量计费。 按字符付钱,免费额度紧。如果你的 bot 会大规模产出长回复,请把预算算清楚。
- 美国托管,只在云端。 每次回复都要往返 ElevenLabs。如果你的智能体必须在 air-gap 环境跑,或者数据不能离开你的司法辖区,NeuTTS 或 Piper 才是诚实答案,不是这个。
- 声音上的厂商锁定。 你克隆或从 Voice Library 挑的声音存在于 ElevenLabs 之内。换服务商就要重建这份身份。
- 预设声音日落。 默认声音在 2026 年底熄灭。请在此之前迁到 Voice Library。
对大多数在 Telegram 上跑个人 Hermes Agent 的人来说,以上这些都不是硬门槛,而音质的提升是立刻能听出来的。

跳过接线:Hermify 帮你预配置好
上面的配置并不难,但仍然要动四处配置、一次重启,再加一次寻找 voice_id 的过程,才能得到你想要的音质。如果你根本不想管这些,Hermify 在 Telegram 上运行一个托管的 Hermes Agent,TTS 层已经开好。在控制台里加入你的 ElevenLabs 密钥,选择你的 voice_id,下一次回复就生效。不需要 SSH,不需要 config.yaml,不需要装 ffmpeg。记忆文件依旧属于你。
开始使用 Hermify,直接跳到有趣的部分 - 你的 bot 用一把听起来属于你自己的声音回话的那一刻。