Voice Mode 활용
기준일: 2026-08-02
난이도: 중급
공식 기준: Use Voice Mode with Hermes
개요
Voice Mode 기능 자체가 무엇을 할 수 있는지는 별도 기능 레퍼런스가 다루고, 이 가이드는 CLI·Telegram·Discord에서 실제로 어떻게 설정하고 쓰는지를 다룹니다. Nous Portal로 로그인하면 LLM과 TTS를 하나의 OAuth로 묶어 추가 자격증명 없이 voice mode를 바로 쓸 수 있습니다.
핵심 개념
| 구성 | 설명 |
|---|---|
| STT / TTS | 음성↔텍스트 변환 |
| CLI mic | Ctrl+B로 시작하는 로컬 마이크 녹음 루프 |
| Messaging voice | Telegram·Discord에서 음성으로 응답 |
| Discord VC | 보이스 채널에 참여해 실시간 대화 |
| Nous Portal | LLM+TTS를 하나의 OAuth로 묶어 추가 키 없이 사용 |
선택 기준
Voice mode는 다음과 같은 상황에서 유용합니다.
- 코딩·리서치 중 손을 쓰지 않는 CLI 워크플로가 필요할 때
- Telegram·Discord에서 음성으로 응답을 받고 싶을 때
- Hermes를 Discord 보이스 채널에 앉혀 실시간 대화를 하고 싶을 때
- 걸어다니면서 아이디어를 담거나 디버깅을 이어가고 싶을 때
실제로는 세 가지 방식이 있습니다.
| 모드 | 적합한 상황 | 플랫폼 |
|---|---|---|
| 대화형 마이크 루프 | 코딩·리서치 중 개인 핸즈프리 사용 | CLI |
| 채팅 내 음성 응답 | 일반 메시징과 함께 음성으로 응답 | Telegram, Discord |
| 실시간 보이스 채널 봇 | 그룹 또는 개인 실시간 대화 | Discord 보이스 채널 |
권장 순서는 다음과 같습니다.
- 텍스트부터 동작을 확인한다
- 음성 응답을 켠다
- 전체 경험을 원하면 마지막에 Discord 보이스 채널로 넘어간다
실습
1단계: 텍스트 Hermes 먼저 확인
Voice mode를 건드리기 전에 다음을 확인합니다.
- Hermes가 정상적으로 시작되는가
- provider가 설정되어 있는가
- 에이전트가 텍스트 프롬프트에 정상 응답하는가
hermes
지금 사용할 수 있는 도구가 뭐야?
텍스트 모드가 아직 안정적이지 않다면 voice mode보다 이 부분을 먼저 고칩니다.
2단계: extras 설치
용도에 따라 설치할 extras가 다릅니다.
- CLI 마이크 + 재생
cd ~/.hermes/hermes-agent && uv pip install -e ".[voice]"
- 메시징 플랫폼(Telegram/Discord) 연동
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-ng
- Ubuntu / Debian
sudo apt install portaudio19-dev ffmpeg libopus0
sudo apt install espeak-ng
각 패키지의 역할은 다음과 같습니다.
portaudio— CLI voice mode의 마이크 입력·재생ffmpeg— TTS·메시징 전달용 오디오 변환opus— Discord 보이스 코덱 지원espeak-ng— NeuTTS의 phonemizer 백엔드
4단계: STT/TTS provider 선택
Hermes는 로컬·클라우드 음성 스택을 모두 지원합니다. 가장 쉽고 저렴한 조합은 로컬 STT(local) + 무료 Edge TTS(edge)이며, 대부분 여기서 시작하는 것이 좋습니다.
~/.hermes/.env에 추가합니다.
# Cloud STT options (local needs no key)
GROQ_API_KEY=***
VOICE_TOOLS_OPENAI_KEY=***
# Premium TTS (optional)
ELEVENLABS_API_KEY=***
provider 권장 조합입니다.
STT(Speech-to-text):
local— 프라이버시와 무료 사용을 위한 기본값groq— 매우 빠른 클라우드 전사openai— 무난한 유료 대안
TTS(Text-to-speech):
edge— 무료, 대부분의 용도에 충분neutts— 무료 로컬/온디바이스 TTSelevenlabs— 최고 품질openai— 중간 수준의 대안mistral— 다국어, 네이티브 Opus 지원
hermes setup 마법사에서 NeuTTS를 고르면 설치 여부를 먼저 확인하고, 없으면 Python 패키지 neutts와 시스템 패키지 espeak-ng가 필요하다고 안내한 뒤 설치를 제안합니다. espeak-ng는 플랫폼 패키지 매니저로 설치하고, 이어서 아래 명령을 실행합니다.
python -m pip install -U neutts[all]
설치를 건너뛰거나 실패하면 마법사는 Edge TTS로 대체합니다.
5단계: 권장 설정
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"
대부분에게 무난한 보수적 기본값입니다. 로컬 TTS를 쓰고 싶다면 tts 블록을 다음으로 바꿉니다.
tts:
provider: "neutts"
neutts:
ref_audio: ''
ref_text: ''
model: neuphonic/neutts-air-q4-gguf
device: cpu
유스케이스 1: CLI voice mode
Hermes를 시작하고 CLI 안에서 켭니다.
hermes
/voice on
기본 녹음 키는 Ctrl+B이며, 흐름은 다음과 같습니다.
Ctrl+B를 누른다- 말한다
- 무음이 감지되면 녹음이 자동으로 멈춘다
- Hermes가 전사하고 응답한다
- TTS가 켜져 있으면 답을 음성으로 읽어준다
- 연속 사용을 위해 루프가 자동으로 다시 시작될 수 있다
자주 쓰는 명령입니다.
/voice
/voice on
/voice off
/voice tts
/voice status
추천 워크플로
걸어다니며 디버깅할 때는 이렇게 시작하고,
docker 권한 오류가 계속 나. 디버깅 좀 도와줘.
이어서 손을 쓰지 않고 이렇게 물어봅니다.
- "마지막 에러 다시 읽어줘"
- "근본 원인을 더 쉽게 설명해줘"
- "이제 정확한 수정 방법을 알려줘"
리서치·브레인스토밍에는 걸으면서 생각하기, 정리되지 않은 아이디어를 그냥 말로 던지기, Hermes에게 실시간으로 생각을 구조화해 달라고 요청하기가 잘 맞습니다. 타이핑이 불편한 상황(접근성)에서도 voice mode는 Hermes의 전체 기능을 그대로 유지하면서 쓸 수 있는 가장 빠른 방법 중 하나입니다.
CLI 동작 튜닝
Hermes가 녹음을 너무 민감하게 시작·종료하면 threshold를 조정합니다(값이 클수록 덜 민감합니다).
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에서는 자리를 비웠을 때 음성 메모를 보내고 빠른 음성 응답을 받는 용도로, Discord DM에서는 서버 채널의 멘션 규칙 없이 조용히 대화하고 싶을 때 유용합니다.
유스케이스 3: Discord 보이스 채널
가장 고급 모드입니다. Hermes가 Discord VC에 참여해 사용자의 발화를 듣고 전사한 뒤, 일반 에이전트 파이프라인을 돌리고 채널에 음성으로 답합니다.
필요한 Discord 권한
일반 텍스트 봇 설정에 더해 다음이 필요합니다.
- Connect
- Speak
- 가급적 Use Voice Activity
Developer Portal에서 다음 privileged intent도 켜야 합니다.
- Presence Intent
- Server Members Intent
- Message Content Intent
참여와 종료
봇이 있는 Discord 텍스트 채널에서 실행합니다.
/voice join
/voice leave
/voice status
참여하면 사용자가 VC에서 말한 발화 경계를 감지해 연결된 텍스트 채널에 전사문을 올리고, 텍스트와 음성으로 함께 응답합니다. 이때 텍스트 채널은 /voice join을 실행한 채널입니다.
Discord VC 사용 시 권장 사항입니다.
DISCORD_ALLOWED_USERS를 좁게 유지한다- 처음에는 전용 봇/테스트 채널을 쓴다
- VC 모드를 쓰기 전에 일반 텍스트 채팅의 음성 모드에서 STT·TTS가 잘 되는지 먼저 확인한다
음성 품질 권장 조합
- 최고 품질: STT는 로컬
large-v3또는 Groqwhisper-large-v3, TTS는 ElevenLabs - 속도·편의 우선: STT는 로컬
base또는 Groq, TTS는 Edge - 완전 무료: STT는 로컬, TTS는 Edge
흔한 실패 유형
- "No audio device found" —
portaudio를 설치합니다. - 봇이 참여는 하는데 아무것도 못 들음 — Discord 사용자 ID가
DISCORD_ALLOWED_USERS에 있는지, 음소거 상태가 아닌지, privileged intent가 켜져 있는지, 봇에 Connect/Speak 권한이 있는지 확인합니다. - 전사는 되는데 응답을 말하지 않음 — TTS provider 설정, ElevenLabs/OpenAI의 API 키·쿼터, Edge 변환 경로에 필요한
ffmpeg설치를 확인합니다. - Whisper 결과가 엉망 — 더 조용한 환경,
silence_threshold상향, 다른 STT provider·모델, 더 짧고 또렷한 발화를 시도합니다. - DM에서는 되는데 서버 채널에서는 안 됨 — 대개 멘션 정책 때문입니다. 기본적으로 Discord 서버 텍스트 채널에서는 별도 설정이 없는 한 봇을
@멘션해야 응답합니다.
첫 주 권장 설정
가장 짧은 경로로 가려면 다음 순서를 따릅니다.
- 텍스트 Hermes부터 동작시킨다
hermes setup tts로 voice 지원을 켠다- 로컬 STT + Edge TTS로 CLI voice mode를 써본다
- 이후 Telegram이나 Discord에서
/voice on을 켠다 - 그 다음에야 Discord VC 모드를 시도한다
이 순서를 지키면 문제가 생겼을 때 디버깅 범위가 좁게 유지됩니다.
Hermes에 입력할 프롬프트
내 Hermes voice mode 설정을 점검해줘.
현재 STT/TTS provider, silence_threshold, record_key 설정을 확인하고
CLI·Telegram·Discord 중 어디서부터 켜는 게 안전한 순서인지 알려줘.
체크리스트
- 텍스트 모드가 먼저 안정적으로 동작한다.
- 필요한 extras(
voice,messaging,tts-premium등)와 시스템 의존성을 설치했다. - STT/TTS provider와
voice/stt/tts설정 키를 확인했다. - CLI voice mode(
Ctrl+B)로 먼저 검증한 뒤 메시징 음성 응답으로 넘어갔다. - Discord VC를 쓴다면 Connect/Speak 권한과 privileged intent를 켰다.
-
DISCORD_ALLOWED_USERS등 허용 목록을 좁게 유지했다.