Hermes で音声モードを使う
目次
- 音声モードが向いている場面
- 音声モードの構成を選ぶ
- ステップ 1: 通常の Hermes が動くことをまず確かめる
- ステップ 2: 必要な追加機能を入れる
- CLI のマイク入力と再生
- メッセージングのプラットフォーム
- 高品質な ElevenLabs の TTS
- ローカルの NeuTTS(任意)
- すべて
- ステップ 3: システム側の依存関係を入れる
- macOS
- Ubuntu / Debian
- ステップ 4: STT と TTS のプロバイダを選ぶ
- いちばん手軽で安上がりな構成
- 環境設定ファイルの例
- プロバイダの選び方
- hermes setup を使う場合
- ステップ 5: おすすめの設定
- 使い方 1: CLI の音声モード
- 有効にする
- 録音の流れ
- よく使うコマンド
- CLI で相性のよい使い方
- CLI の挙動を調整する
- 無音の判定値
- 無音の継続時間
- 録音のキー
- 使い方 2: Telegram や Discord での読み上げ返答
- ゲートウェイを起動する
- 読み上げ返答を有効にする
- モード
- どちらを使うか
- メッセージングで相性のよい使い方
- 使い方 3: Discord のボイスチャンネル
- 必要な Discord の権限
- 参加と退出
- 参加すると何が起きるか
- Discord のボイスチャンネルで気をつけること
- 音声品質の選び方
- 品質を優先する構成
- 速さと手軽さを優先する構成
- 費用をかけない構成
- よくある不具合
- 「オーディオデバイスが見つからない」
- 「ボットは参加するが何も聞き取らない」
- 「文字起こしはするが話さない」
- 「Whisper の出力がでたらめになる」
- 「ダイレクトメッセージでは動くが、サーバーのチャンネルでは動かない」
- 最初の 1 週間におすすめの手順
- 次に読むもの
このガイドは、音声モードの機能早見表と対になる実践編です。
機能ページが「音声モードで何ができるか」を説明するものだとすれば、こちらは「どう使えばうまくいくか」の話です。
音声モードが向いている場面
音声モードがとくに役立つのは、次のような場面です。
- 手を使わずに CLI で作業を進めたい
- Telegram や Discord で読み上げの返答がほしい
- Discord のボイスチャンネルに Hermes を置いて、その場で会話したい
- 歩き回りながら、思いつきの記録・デバッグ・やり取りを、入力せずに済ませたい
音声モードの構成を選ぶ
Hermes の音声体験は、大きく 3 種類に分かれます。
| モード | 向いている用途 | プラットフォーム |
|---|---|---|
| マイクの対話ループ | コーディングや調査をしながら、手を使わずに個人で使う | CLI |
| チャットでの読み上げ返答 | 通常のメッセージのやり取りに読み上げを添える | Telegram、Discord |
| ボイスチャンネルの常駐ボット | ボイスチャンネルでのグループや個人のライブ会話 | Discord のボイスチャンネル |
進め方としては、次の順がおすすめです。
- まずテキストで動く状態にする
- 次に読み上げの返答を有効にする
- すべてを味わいたいなら、最後に Discord のボイスチャンネルへ進む
ステップ 1: 通常の Hermes が動くことをまず確かめる
音声モードに手を付ける前に、次を確認します。
- Hermes が起動する
- プロバイダの設定が済んでいる
- テキストのプロンプトにエージェントが普通に答えられる
hermes簡単なことを尋ねてみます。
What tools do you have available?ここが固まっていないなら、先にテキストモードを直してください。
ステップ 2: 必要な追加機能を入れる
CLI のマイク入力と再生
cd ~/.hermes/hermes-agent && uv pip install -e ".[voice]"メッセージングのプラットフォーム
cd ~/.hermes/hermes-agent && uv pip install -e ".[messaging]"高品質な ElevenLabs の TTS
cd ~/.hermes/hermes-agent && uv pip install -e ".[tts-premium]"ローカルの NeuTTS(任意)
python -m pip install -U neutts[all]すべて
cd ~/.hermes/hermes-agent && uv pip install -e ".[all]"ステップ 3: システム側の依存関係を入れる
macOS
brew install portaudio ffmpeg opus
brew install espeak-ngUbuntu / Debian
sudo apt install portaudio19-dev ffmpeg libopus0
sudo apt install espeak-ngそれぞれの役割は次のとおりです。
portaudio→ CLI の音声モードでのマイク入力と再生ffmpeg→ TTS とメッセージ配信のための音声変換opus→ Discord の音声コーデックへの対応espeak-ng→ NeuTTS が使う音素化の処理系
ステップ 4: STT と TTS のプロバイダを選ぶ
Hermes はローカルとクラウドの両方の音声処理に対応しています。
いちばん手軽で安上がりな構成
ローカルの STT と無料の Edge TTS を使います。
- STT プロバイダ:
local - TTS プロバイダ:
edge
たいていはここから始めるのがよいでしょう。
環境設定ファイルの例
~/.hermes/.env に次を追記します。
# Cloud STT options (local needs no key)
GROQ_API_KEY=***
VOICE_TOOLS_OPENAI_KEY=***
# Premium TTS (optional)
ELEVENLABS_API_KEY=***プロバイダの選び方
音声認識
local→ プライバシーを守りつつ費用をかけずに使うなら、これが既定として最良groq→ クラウドでの文字起こしが非常に速いopenai→ 有料の代替として悪くない
音声合成
edge→ 無料で、多くの人には十分な品質neutts→ 手元の端末で動く無料の TTSelevenlabs→ 品質は最上openai→ ほどよい中間mistral→ 多言語対応で、Opus をそのまま扱える
hermes setup を使う場合
設定ウィザードで NeuTTS を選ぶと、Hermes は neutts がすでに入っているかを調べます。入っていなければ、NeuTTS には Python パッケージの neutts とシステムパッケージの espeak-ng が必要だと伝えたうえで、代わりに導入するかを尋ね、espeak-ng はお使いのプラットフォームのパッケージ管理ツールで入れ、そのあと次を実行します。
python -m pip install -U neutts[all]この導入を飛ばした場合や失敗した場合は、ウィザードが Edge TTS に切り替えます。
ステップ 5: おすすめの設定
voice:
record_key: "ctrl+b"
submit_mode: "direct" # TUI: direct | draft
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"多くの人にとって、控えめで扱いやすい既定になっています。
TUI では、文字起こしのあとの動きを voice.submit_mode が決めます。
direct(既定)は、文字起こしの結果をそのまま送信します。draftは結果を入力欄に置くので、Enter を押す前に手直ししたり取り消したりできます。
音声の下書きを編集したい場合は、次のように設定します。
voice:
submit_mode: "draft"TTS をローカルで動かしたい場合は、tts のブロックを次のように差し替えます。
tts:
provider: "neutts"
neutts:
ref_audio: ''
ref_text: ''
model: neuphonic/neutts-air-q4-gguf
device: cpu使い方 1: CLI の音声モード
有効にする
Hermes を起動します。
hermesCLI の中で次を実行します。
/voice on録音の流れ
既定のキーは次のとおりです。
Ctrl+B
手順はこうなります。
Ctrl+Bを押す- 話す
- 無音の検出で録音が自動的に止まるのを待つ
- Hermes が文字起こしをして応答する
- TTS が有効なら、答えを読み上げる
- 続けて使えるように、ループが自動で再開することもある
よく使うコマンド
/voice
/voice on
/voice off
/voice tts
/voice statusCLI で相性のよい使い方
立ったままのデバッグ
こう話しかけます。
I keep getting a docker permission error. Help me debug it.そのまま手を使わずに続けられます。
- 「さっきのエラーをもう一度読んで」
- 「根本の原因をもっと平たい言葉で説明して」
- 「では、直し方をそのまま教えて」
調査・発想
次のような場面に向いています。
- 考えごとをしながら歩き回る
- まとまっていない思いつきを口に出す
- 考えを Hermes にその場で整理してもらう
アクセシビリティ・入力を減らしたいとき
入力しづらい状況では、音声モードは Hermes のやり取りに入り続けるための最速の手段のひとつです。
CLI の挙動を調整する
無音の判定値
Hermes の開始・停止が過敏だと感じたら、次を調整します。
voice:
silence_threshold: 250値を大きくするほど鈍くなります。
無音の継続時間
文と文のあいだで間を取ることが多いなら、大きくします。
voice:
silence_duration: 4.0録音のキー
Ctrl+B が端末や tmux の操作と重なる場合は、次のようにします。
voice:
record_key: "ctrl+space"使い方 2: Telegram や Discord での読み上げ返答
こちらは、ボイスチャンネルを使う方式より単純です。
Hermes は普通のチャットボットのままで、返答を読み上げられるようになります。
ゲートウェイを起動する
hermes gateway読み上げ返答を有効にする
Telegram か Discord の中で次を実行します。
/voice onまたは
/voice ttsモード
| モード | 意味 |
|---|---|
off |
テキストのみ |
voice_only |
利用者が音声を送ったときだけ読み上げる |
all |
すべての返答を読み上げる |
どちらを使うか
- 音声から始まったやり取りにだけ読み上げてほしいなら
/voice on - 常に読み上げる相手にしたいなら
/voice tts
メッセージングで相性のよい使い方
手元のスマートフォンで動く Telegram の助手
次のような場面で使います。
- 自分の端末から離れている
- 音声メモを送って、読み上げの返答をすぐ受け取りたい
- Hermes を持ち歩ける調査・運用の助手として使いたい
読み上げ付きの Discord のダイレクトメッセージ
サーバーのチャンネルでのメンションの決まりを気にせず、個別にやり取りしたいときに便利です。
使い方 3: Discord のボイスチャンネル
いちばん高度な使い方です。
Hermes が Discord のボイスチャンネルに参加し、参加者の発話を聞き取り、文字起こしをして、通常のエージェントの処理を回し、返答をそのチャンネルに読み上げます。
必要な Discord の権限
通常のテキストボットの設定に加えて、ボットに次の権限があることを確認してください。
- 接続
- 発言
- できれば音声検出の使用
さらに、開発者ポータルで特権インテントも有効にします。
- Presence Intent
- Server Members Intent
- Message Content Intent
参加と退出
ボットがいる Discord のテキストチャンネルで次を実行します。
/voice join
/voice leave
/voice status参加すると何が起きるか
- 参加者がボイスチャンネルで話す
- Hermes が発話の切れ目を検出する
- 文字起こしが、紐づいたテキストチャンネルに投稿される
- Hermes がテキストと音声の両方で応答する
- 対象のテキストチャンネルは、
/voice joinを実行した場所になる
Discord のボイスチャンネルで気をつけること
DISCORD_ALLOWED_USERSは絞ったままにする- 最初のうちは、ボット用・試験用の専用チャンネルを使う
- ボイスチャンネルを試す前に、普通のテキストチャットの音声モードで STT と TTS が動くことを確かめる
音声品質の選び方
品質を優先する構成
- STT: ローカルの
large-v3または Groq のwhisper-large-v3 - TTS: ElevenLabs
速さと手軽さを優先する構成
- STT: ローカルの
baseまたは Groq - TTS: Edge
費用をかけない構成
- STT: ローカル
- TTS: Edge
よくある不具合
「オーディオデバイスが見つからない」
portaudio を入れてください。
「ボットは参加するが何も聞き取らない」
次を確認します。
- 自分の Discord ユーザー ID が
DISCORD_ALLOWED_USERSに入っているか - 自分がミュートになっていないか
- 特権インテントが有効になっているか
- ボットに接続と発言の権限があるか
「文字起こしはするが話さない」
次を確認します。
- TTS プロバイダの設定
- ElevenLabs や OpenAI の API キーと残りの利用枠
- Edge の変換経路で使う
ffmpegが入っているか
「Whisper の出力がでたらめになる」
次を試してください。
- より静かな場所で使う
silence_thresholdを大きくする- 別の STT のプロバイダやモデルを使う
- 一度の発話を短く、はっきりさせる
「ダイレクトメッセージでは動くが、サーバーのチャンネルでは動かない」
たいていはメンションの扱いが原因です。
既定では、Discord のサーバーのテキストチャンネルでは、設定を変えないかぎりボットへの @mention が必要です。
最初の 1 週間におすすめの手順
いちばん短い道のりを進みたいなら、次のようにします。
- まずテキストの Hermes を動かす
hermes setup ttsを実行して音声のサポートを有効にする- ローカルの STT と Edge TTS で CLI の音声モードを使う
- 次に Telegram か Discord で
/voice onを有効にする - そのあとで初めて、Discord のボイスチャンネルを試す
この順番なら、問題を切り分ける範囲を小さく保てます。