把 Hermes Agent 用成语音助手,听起来像是开个开关的事——但真正上手后你会发现,从"能说话"到"说得舒服"中间隔着不少细节。这篇文章按落地顺序走一遍:先跑通最小链路,再逐层优化体验,最后扩展到多平台。
一、先跑通最小语音链路
Hermes Agent 的语音模式本质上是一条四步链路:录音 → STT 转写 → LLM 推理 → TTS 播报。每一环都有独立的 provider 可以换,但初次调试时不需要全部配好——先让链路跑通再说。
最省心的起步方式是 CLI 语音模式。启动 Hermes 后输入 /voice on,然后按 Ctrl+B 开始说话。系统会通过静音检测自动判断你什么时候说完,转写后交给 Agent 处理,结果同时以文字和语音返回。
这种"先 CLI 后平台"的路径有个明显好处:出了问题能立刻定位到是录音、转写还是推理环节,不用同时排查网络、权限和平台兼容性。
二、配置项和依赖关系
STT:三种 provider,一条回退链
Hermes Agent 的 STT(语音转写)支持三种 provider,自动回退顺序为 local → groq → openai:
| Provider | 模型 | 延迟 | 费用 | 需要 API Key |
|---|---|---|---|---|
| Local | faster-whisper (base/small/large-v3) | 取决于硬件 | 免费 | 否 |
| Groq | whisper-large-v3-turbo | 约 0.5 秒 | 免费额度 | 是 |
| OpenAI | whisper-1 / gpt-4o-transcribe | 约 1-2 秒 | 付费 | 是 |
本地方案用的是 faster-whisper,base 模型约 150MB,首次使用时自动下载。安装后不需要任何 API Key 就能跑通语音转写,对隐私敏感场景也比较友好。如果你对转写质量有更高要求,可以切换到 large-v3 模型,代价是速度会慢一些。
Groq 的优势在速度——whisper-large-v3-turbo 大约 0.5 秒就能出结果,体感上接近"说完即转完"。不过免费额度有上限,高频使用需要注意用量。
TTS:免费方案已经够用
TTS(文字转语音)的可选项更多:edge、elevenlabs、openai、minimax、mistral、gemini、xai、neutts,一共八种。对大多数用户来说,Edge TTS 是最实用的起点——不需要 API Key,提供 322 种语音、覆盖 74 种语言,质量对日常使用完全够用。
如果你追求更自然的语音表现,ElevenLabs 是公认质量最好的选择,但需要付费。NeuTTS 走的是本地路线,适合不想依赖外部服务的场景。
一个实用配置长这样:
voice:
record_key: "ctrl+b"
max_recording_seconds: 120
auto_tts: false
beep_enabled: true
silence_threshold: 200
silence_duration: 3.0
stt:
provider: "local"
local:
model: "base"
tts:
provider: "edge"
edge:
voice: "en-US-AriaNeural"
系统依赖别漏装
CLI 语音模式需要几个系统级依赖。漏装任何一个都会卡在奇怪的地方,建议一开始就全部装好:
macOS:
brew install portaudio ffmpeg opus espeak-ng
Ubuntu / Debian:
sudo apt install portaudio19-dev ffmpeg libopus0 espeak-ng
各依赖的作用:portaudio 负责麦克风输入和音频播放,ffmpeg 处理音频格式转换,opus 是 Discord 语音的编解码器,espeak-ng 是 NeuTTS 的音素化后端。如果你只用 Edge TTS + 本地 STT 的组合,espeak-ng 可以先不装。
安装 Python 附加组件:
pip install "hermes-agent[voice]"
如果后续要用到消息平台和高级 TTS,可以一步到位:
pip install "hermes-agent[all]"
三、从"能说话"升级到"体验自然"
链路跑通只是第一步。真正影响体感的是三个细节:静音检测准不准、回复等待久不久、上下文管理够不够聪明。
静音检测调优
Hermes Agent 的静音检测采用两阶段算法。第一阶段是"语音确认"——音频电平超过 RMS 阈值(默认 200)并持续至少 0.3 秒,才会认定你开始说话了。这一步能容忍音节间的短暂间歇,不会因为你喘口气就误判。第二阶段是"结束检测"——语音确认后,连续静音 3.0 秒触发自动停止。如果 15 秒内完全没检测到语音,录音也会自动终止。
这两个参数都可以在 config.yaml 里调。如果你说话习惯偏慢、经常有较长停顿,可以把 silence_duration 调到 4.0;如果环境噪音大、误触发多,可以提高 silence_threshold。
CLI 默认录音键是 Ctrl+B。如果跟其他工具冲突,改成 ctrl+space 也行:
voice:
record_key: "ctrl+space"
silence_duration: 4.0
silence_threshold: 300
流式 TTS:不用等完整回复
默认情况下,Hermes Agent 会等 LLM 生成完整回复后再一次性播报。这对短回答没问题,但稍微长一点的回复就会出现明显的"思考沉默"。
开启流式 TTS 后,系统会把回复文本增量缓冲为完整句子(最少 20 字符),去除 Markdown 格式和推理标签后逐句生成音频、逐句播放。体感上就像对方在边想边说,等待感大幅降低。
在 CLI 中用 /voice tts 即可切换。
上下文文件:让 Agent 记住你是谁
语音交互的一个隐性问题是:转写误差会随上下文缺失而放大。如果 Agent 不知道你在哪个项目、偏好什么技术栈,它就只能猜——而语音场景下你更不耐烦来回纠正。
Hermes Agent 支持两种上下文文件:
- AGENTS.md 放在项目根目录,注入架构决策、编码规范,每次会话自动加载
- SOUL.md 放在
~/.hermes/SOUL.md,定义 Agent 的持久人格特征
提前把常用信息写进这两个文件,语音交互时的"答非所问"会明显减少。
四、扩展到 Telegram、Discord 与语音频道
CLI 跑顺之后,下一步是把语音能力带到你常用的平台上。Hermes Agent 支持三种平台级语音形态,复杂度递增。
Telegram 和 Discord 的语音回复
这是最轻量的扩展方式——Hermes Agent 作为普通聊天机器人运行,但可以选择性地附加语音回复。
启动 gateway 后,在聊天中发送 /voice on 表示"只对语音消息回复语音",/voice tts 表示"所有回复都带语音"。三种模式的行为差异:
| 模式 | 命令 | 行为 |
|---|---|---|
| off | /voice off |
仅文本(默认) |
| voice_only | /voice on |
仅当用户发送语音消息时才语音回复 |
| all | /voice tts |
对所有消息均回复语音 |
Telegram 和 Discord 都使用 Opus/OGG 格式的语音气泡投递,必要时 ffmpeg 会自动完成格式转换。
适合的场景:在手机上用 Telegram 发语音便条,让 Agent 快速给出语音回答;或者在 Discord 私信中进行带语音输出的交互。
Discord 语音频道:最完整的实时语音形态
这是 Hermes Agent 语音能力的天花板。Bot 加入 Discord 语音频道后,执行完整的实时语音交互流程:独立监听每个用户的音频流 → 静音检测(至少 0.5 秒语音后,1.5 秒静音触发处理)→ Whisper STT 转写 → 完整 Agent 管道推理 → TTS 语音回复。
回声抑制是另一个关键设计:Bot 在播放 TTS 回复时会暂停音频监听,避免把自己的输出当作新的输入重新处理。同时,语音频道中的对话会同步显示在关联的文字频道里,格式为 [Voice] @user: 你刚才说的话,Agent 回复也同时以文本和语音两种形式发送。
启用前需要确认几件事:
- Bot 拥有 Connect、Speak 权限
- 在 Discord 开发者门户启用 Presence Intent、Server Members Intent、Message Content Intent
- 将允许的用户 ID 填入
DISCORD_ALLOWED_USERS环境变量
在文字频道中用 /voice join 让 Bot 加入当前语音频道,/voice leave 离开。建议先用专用的测试频道验证,别直接丢进主力频道。
五、语音助手优化清单
把前面的内容整理成一份可操作的清单,按落地顺序排列:
第一周设置路径
- 确认 Hermes Agent 文本模式正常工作
- 安装
hermes-agent[voice]和系统依赖(portaudio、ffmpeg、opus) - 使用本地 STT(faster-whisper base)+ Edge TTS 的 CLI 语音模式
- 调优静音检测参数,找到适合自己的
silence_threshold和silence_duration - 在 Telegram 或 Discord 中启用
/voice on - 最后尝试 Discord 语音频道模式
五类常见问题排查
| 问题类别 | 典型症状 | 排查方向 |
|---|---|---|
| 收音 | "No audio device found" | portaudio 是否安装、麦克风权限是否授予 |
| 转写 | Whisper 输出乱码或幻觉文本 | 环境噪音、silence_threshold 调高、换 STT provider |
| 上下文 | Agent 答非所问 | 补充 AGENTS.md / SOUL.md、提供更多上下文 |
| 延迟 | 回复等待过久 | 用 Groq 加速 STT、开启流式 TTS、检查网络 |
| 提示方式 | 不知道该说什么 | 语音任务更需要明确目标,一次说清比来回追问高效 |
质量与成本速查
| 你的优先级 | STT 推荐 | TTS 推荐 |
|---|---|---|
| 最佳质量 | 本地 large-v3 或 Groq whisper-large-v3 | ElevenLabs |
| 最佳速度 | 本地 base 或 Groq | Edge TTS |
| 零成本 | 本地 base | Edge TTS |
语音助手的落地不需要一步到位。从 CLI 开始,把 STT 和 TTS 调到自己舒服的状态,再逐步扩展到消息平台和语音频道——每一步都能独立验证,出问题也好定位。Hermes Agent 的语音架构设计得比较模块化,provider 之间可以随时切换,不用推倒重来。