Pular para o conteúdo principal

Documentação oficial desta página · v0.20.6

Modo de voz

O Hermes Agent tem interação por voz completa, na CLI e nas plataformas de mensagem. Fale com o agente pelo microfone, ouça as respostas e converse ao vivo em canais de voz do Discord.

Se você quer um passo a passo prático, com configurações recomendadas e padrões de uso reais, veja Usar o Modo de Voz.

Para começar uma sessão sem as mãos — dizendo "hey hermes" (ou outra frase) para abrir uma sessão de voz na CLI, na TUI ou no desktop — veja Palavra de Ativação.

Pré-requisitos​

Antes de usar voz, garanta que você tem:

  1. O Hermes Agent instalado — pelo script de instalação (veja Instalação)
  2. Um provedor de LLM configurado — rode hermes model, ou coloque as credenciais em ~/.hermes/.env
  3. Uma instalação básica funcionando — rode hermes e confirme que o agente responde por texto antes de ligar a voz
dica

O diretório ~/.hermes/ e o config.yaml padrão são criados sozinhos na primeira vez que você roda o hermes. Só o ~/.hermes/.env precisa ser criado na mão, para as chaves de API.

O Nous Portal cobre os dois

Uma assinatura paga do Nous Portal fornece o modelo (passo 2) e a síntese de voz da OpenAI pelo Tool Gateway — sem chave separada. Numa instalação nova, o hermes setup --portal liga os dois de uma vez.

Visão geral​

RecursoOndeDescrição
Voz interativaCLIAperte Ctrl+B para gravar; o agente detecta o silêncio sozinho e responde
Resposta falada automáticaTelegram, DiscordO agente manda áudio junto com a resposta em texto
Canal de vozDiscordO bot entra no canal, escuta quem fala e responde falando

Requisitos​

Pacotes Python​

# Modo de voz na CLI (microfone e reprodução de áudio)
cd ~/.hermes/hermes-agent && uv pip install -e ".[voice]"

# Discord e Telegram (inclui discord.py[voice], para canal de voz)
cd ~/.hermes/hermes-agent && uv pip install -e ".[messaging]"

# Síntese de voz premium (ElevenLabs)
cd ~/.hermes/hermes-agent && uv pip install -e ".[tts-premium]"

# Síntese de voz local (NeuTTS, opcional)
python -m pip install -U neutts[all]

# Tudo de uma vez
cd ~/.hermes/hermes-agent && uv pip install -e ".[all]"
ExtraPacotesNecessário para
voicesounddevice, numpyModo de voz na CLI
messagingdiscord.py[voice], python-telegram-bot, aiohttpBots de Discord e Telegram
tts-premiumelevenlabsProvedor de voz ElevenLabs

Provedor local opcional: instale o neutts à parte, com python -m pip install -U neutts[all]. No primeiro uso, ele baixa o modelo sozinho.

informação

O discord.py[voice] instala o PyNaCl (para a criptografia de voz) e as ligações do opus sozinho. Isso é necessário para canais de voz no Discord.

Dependências de sistema​

# macOS
brew install portaudio ffmpeg opus
brew install espeak-ng # para o NeuTTS

# Ubuntu e Debian
sudo apt install portaudio19-dev ffmpeg libopus0
sudo apt install espeak-ng # para o NeuTTS
DependênciaPara que serveNecessária em
PortAudioEntrada de microfone e reproduçãoModo de voz na CLI
ffmpegConversão de formato (MP3 para Opus, PCM para WAV)Todas as plataformas
OpusCodec de voz do DiscordCanais de voz do Discord
espeak-ngMotor de fonemizaçãoProvedor local NeuTTS

Chaves de API​

Acrescente em ~/.hermes/.env:

# Transcrição — o provedor local NÃO precisa de chave nenhuma
# pip install faster-whisper # gratuito, roda local, recomendado
GROQ_API_KEY=sua-chave # Whisper da Groq — rápido, com camada gratuita (nuvem)
VOICE_TOOLS_OPENAI_KEY=sua-chave # Whisper da OpenAI — pago (nuvem)

# Síntese de voz (opcional — Edge TTS e NeuTTS funcionam sem chave)
ELEVENLABS_API_KEY=*** # ElevenLabs — qualidade premium
# a VOICE_TOOLS_OPENAI_KEY acima também habilita a síntese da OpenAI
dica

Com o faster-whisper instalado, o modo de voz funciona com zero chave de API na transcrição. O modelo (cerca de 150 MB, no tamanho base) baixa sozinho no primeiro uso.


Modo de voz na CLI​

O modo de voz existe tanto na CLI clássica (hermes chat) quanto na TUI (hermes --tui). O comportamento é idêntico — mesmos comandos de barra, mesma detecção de silêncio, mesma síntese em tempo real, mesmo filtro de alucinação. A TUI ainda manda logs de falha para ~/.hermes/logs/, para problemas de gravação em placas de áudio exóticas serem reportados com pilha completa, em vez de sumirem em silêncio.

Começando​

hermes # abre a CLI interativa

Depois, dentro da CLI:

/voice liga e desliga o modo de voz
/voice on liga
/voice off desliga
/voice tts liga e desliga a leitura em voz alta
/voice status mostra o estado atual

Como funciona​

  1. Abra a CLI com hermes e ligue a voz com /voice on
  2. Aperte Ctrl+B — um bipe toca (880 Hz) e a gravação começa
  3. Fale — uma barra ao vivo mostra o nível da sua voz: ● [▁▂▃▅▇▇▅▂] ❯
  4. Pare de falar — depois de 3 segundos de silêncio, a gravação para sozinha
  5. Dois bipes tocam (660 Hz), confirmando o fim da gravação
  6. O áudio é transcrito pelo Whisper e enviado ao agente
  7. Com a leitura em voz alta ligada, a resposta é falada
  8. A gravação recomeça sozinha — fale de novo, sem apertar tecla nenhuma

O laço segue até você apertar Ctrl+B durante uma gravação (o que sai do modo contínuo), ou até três gravações seguidas não detectarem fala.

dica

A tecla de gravação é configurável em voice.record_key, no ~/.hermes/config.yaml (padrão: ctrl+b).

Detecção de silêncio​

Um algoritmo de duas etapas percebe quando você terminou de falar:

  1. Confirmação de fala — espera áudio acima do limiar de RMS (200) por pelo menos 0,3 segundo, tolerando quedas breves entre sílabas
  2. Detecção do fim — confirmada a fala, dispara depois de 3 segundos de silêncio contínuo

Se nenhuma fala for detectada por 15 segundos, a gravação para sozinha.

O silence_threshold e o silence_duration são configuráveis no config.yaml. Também dá para desligar os bipes com voice.beep_enabled: false.

Encerrar uma conversa por voz, falando​

Diga "stop" — e nada mais — para encerrar sem as mãos. A comparação é estrita de propósito: a fala inteira (sem diferenciar maiúsculas, ignorando pontuação nas pontas) precisa ser igual a uma frase configurada. Então "stop doing that and try X instead" ainda chega ao agente normalmente. Personalize a lista com voice.stop_phrases, no config.yaml (por exemplo, ["stop", "goodbye hermes"]), ou coloque [] para desligar. Uma conversa por voz também termina sozinha depois de três ciclos seguidos de silêncio.

Digitar uma frase de parada sozinha, com a conversa por voz ativa, funciona igual em todas as superfícies (CLI, TUI, desktop): a mensagem encerra a conversa por voz em vez de ir para o agente. Fora de uma conversa por voz, um "stop" digitado é uma mensagem comum.

Síntese em tempo real​

Com a leitura em voz alta ligada, o agente fala a resposta frase a frase, conforme gera o texto — você não espera a resposta inteira. Isso funciona com todos os provedores de voz:

  1. Junta os pedaços de texto em frases completas (mínimo de 20 caracteres)
  2. Tira a formatação markdown, os emojis e os blocos <think>
  3. Toca o áudio de cada frase em tempo real — provedores com API de PCM em pedaços (ElevenLabs, OpenAI) transmitem áudio cru, para o menor tempo até a primeira palavra; os demais (incluindo o Edge, que é o padrão) sintetizam e tocam cada frase quando ela fica pronta

O mesmo caminho roda na CLI clássica, na TUI e no desktop. Numa conversa de voz no desktop, o texto da resposta é alimentado ao vivo num WebSocket de fala, por resposta, conforme o modelo gera — então a fala se sobrepõe à geração, com um socket e um relógio de áudio por resposta, sem intervalo entre frases.

Desktop remoto: voz direto do cliente​

Quando o Hermes Desktop está ligado a um gateway remoto, o áudio não precisa passar pelo gateway. No início da sessão de voz, o desktop busca as configurações de transcrição e síntese resolvidas do perfil ativo (provedor, modelo, idioma, voz e credencial) pelo canal REST autenticado (GET /api/audio/voice-config) e então chama os provedores direto:

  • Ditado e entrada de voz: a gravação do microfone vai do seu computador direto ao provedor de transcrição do perfil; só o texto resultante vai para o gateway, como prompt.
  • Respostas faladas: o texto da resposta já está chegando ao desktop pelo socket de conversa, então o desktop sintetiza localmente com o provedor do perfil e toca — a ligação com o gateway nunca carrega áudio.

Não há nada a configurar no cliente: o perfil com que você está falando é a única fonte de verdade para provedores e chaves, exatamente como se o gateway tivesse feito o trabalho. As chaves ficam na memória do desktop só durante a sessão — nunca vão para o disco do cliente.

Provedores que só rodam na máquina do gateway (whisper local, Edge TTS, provedores por comando, plugins) voltam sozinhos ao caminho de repasse (/api/audio/transcribe e o WebSocket de fala), assim como qualquer backend antigo sem esse endpoint. Para forçar o repasse em todos os provedores:

voice:
client_direct: false

Suporte direto do cliente: OpenAI (inclusive o áudio gerenciado pela Nous), Groq, Mistral e DeepInfra pelos formatos compatíveis com a OpenAI, transcrição do Grok da xAI, e transcrição e síntese da ElevenLabs. A xAI configurada por OAuth continua no repasse (o token OAuth é renovado do lado do servidor).

Interromper falando por cima​

Você pode interromper o agente em qualquer ponto do turno — o microfone fica ligado desde o momento em que você termina de falar até a resposta terminar de tocar:

  • Intervir enquanto ele pensa — no modo contínuo, falar durante a geração (antes de qualquer áudio tocar) interrompe o turno em andamento, e a sua fala vira a mensagem seguinte, igual a digitar por cima de um turno em execução.
  • Falar por cima — falar enquanto a resposta toca corta a reprodução no instante em que você começa, e envia o que você disse. O detector calibra o nível de ruído contra a sala em silêncio no início do turno (nunca contra a própria reprodução), então o som do alto-falante não o ensurdece, e a fala normal o dispara com confiança.
  • Digitar, ou apertar a tecla de gravação — mandar uma mensagem nova ou apertar a tecla para a reprodução na hora, em qualquer superfície.
  • Dizer "stop" — a frase de parada funciona nas duas fases: durante a geração, ela interrompe o turno E encerra a conversa por voz; durante a reprodução, corta a fala e encerra a conversa.

Ajuste no config.yaml: voice.barge_in: false desliga; voice.barge_in_threshold_multiplier (padrão 3.0) escala o gatilho de fala sobre o nível da sala em silêncio; voice.barge_in_grace_seconds (padrão 0.5) evita disparos logo depois de a reprodução começar. Defina HERMES_VOICE_DEBUG=1 para mandar o diagnóstico por bloco (nível calibrado, RMS, decisões de disparo) para a saída de erro, e ajustar ao vivo.

O agente sabe que foi interrompido: a mensagem seguinte carrega uma nota curta avisando que a resposta falada foi cortada, então ele pode reagir com naturalidade ("que grosseria!") ou retomar de onde parou, em vez de ficar por fora.

Filtro de alucinação​

O Whisper às vezes inventa texto a partir de silêncio ou de ruído de fundo ("Thank you for watching", "Subscribe" e afins). O agente filtra isso com um conjunto de 26 frases conhecidas de alucinação, em vários idiomas, mais uma expressão regular que pega as variações repetitivas.


Resposta falada no gateway (Telegram e Discord)​

Se você ainda não configurou seus bots, veja os guias de cada plataforma:

Suba o gateway para conectar às plataformas:

hermes gateway # sobe o gateway (conecta nas plataformas configuradas)
hermes gateway setup # assistente interativo, para a primeira configuração

Discord: canais e mensagens diretas​

O bot suporta dois modos de interação no Discord:

ModoComo falarPrecisa mencionarConfiguração
Mensagem diretaAbra o perfil do bot → "Message"NãoFunciona de imediato
Canal do servidorEscreva num canal de texto onde o bot estáSim (@nomedobot)O bot precisa ser convidado para o servidor

Mensagem direta (recomendada para uso pessoal): abra uma conversa com o bot e escreva — sem menção. Respostas faladas e todos os comandos funcionam igual.

Canais do servidor: o bot só responde quando é mencionado (@hermesbyt4 olá). Confira que você selecionou o usuário do bot na lista de menção, e não o cargo de mesmo nome.

dica

Para tirar a exigência de menção nos canais, acrescente em ~/.hermes/.env:

DISCORD_REQUIRE_MENTION=false

Ou libere canais específicos:

DISCORD_FREE_RESPONSE_CHANNELS=123456789,987654321

Comandos​

Valem no Telegram e no Discord (mensagens diretas e canais):

/voice liga e desliga o modo de voz
/voice on responde falando só quando você manda áudio
/voice tts responde falando em TODAS as mensagens
/voice off desliga as respostas faladas
/voice status mostra a configuração atual

Modos​

ModoComandoComportamento
off/voice offSó texto (padrão)
voice_only/voice onFala a resposta só quando você manda áudio
all/voice ttsFala a resposta de toda mensagem

A escolha sobrevive a reinícios do gateway.

Entrega por plataforma​

PlataformaFormatoObservações
TelegramBolha de voz (Opus/OGG)Toca dentro da conversa. O ffmpeg converte MP3 para Opus, se preciso
DiscordBolha de voz nativa (Opus/OGG)Toca como uma mensagem de voz de pessoa. Se a API de bolha falhar, cai para anexo

Canais de voz do Discord​

O recurso de voz mais imersivo: o bot entra num canal de voz, escuta quem fala, transcreve, processa pelo agente e fala a resposta no canal.

Configuração​

1. Permissões do bot​

Se você já tem um bot de Discord para texto (veja o guia do Discord), precisa acrescentar permissões de voz.

Vá no Portal de Desenvolvedores do Discord → sua aplicação → Installation → Default Install Settings → Guild Install.

Acrescente às permissões de texto que já existem:

PermissãoPara que serveObrigatória
ConnectEntrar em canais de vozSim
SpeakTocar o áudio no canalSim
Use Voice ActivityDetectar quem está falandoRecomendada

Inteiro de permissões atualizado:

NívelInteiroO que inclui
Só texto309237763136Ver canais, enviar mensagens, ler histórico, embeds, anexos, tópicos, reações, criar tópicos públicos
Texto e voz309240908864Tudo acima, mais Connect e Speak

Convide o bot de novo, com a URL de permissões atualizada:

https://discord.com/oauth2/authorize?client_id=SEU_APP_ID&scope=bot+applications.commands&permissions=309240908864

Troque SEU_APP_ID pelo Application ID do portal.

aviso

Convidar de novo um bot que já está no servidor atualiza as permissões dele, sem removê-lo. Você não perde dado nem configuração.

2. Intenções privilegiadas​

No portal → sua aplicação → Bot → Privileged Gateway Intents, habilite as três:

IntençãoPara que serve
Presence IntentDetectar se a pessoa está online
Server Members IntentResolver nomes de usuário em DISCORD_ALLOWED_USERS para identificadores numéricos (condicional)
Message Content IntentLer o conteúdo das mensagens de texto

A Message Content Intent é obrigatória. A Server Members Intent só é necessária se a sua lista DISCORD_ALLOWED_USERS usa nomes de usuário — com identificadores numéricos, pode deixar desligada. O mapeamento de SSRC para identificador, nos canais de voz, vem do opcode SPEAKING do WebSocket de voz e não precisa dessa intenção.

3. Codec Opus​

A biblioteca do codec Opus precisa estar instalada na máquina que roda o gateway:

# macOS (Homebrew)
brew install opus

# Ubuntu e Debian
sudo apt install libopus0

O bot carrega o codec sozinho, de:

  • macOS: /opt/homebrew/lib/libopus.dylib
  • Linux: libopus.so.0

4. Variáveis de ambiente​

# ~/.hermes/.env

# Bot do Discord (já configurado para texto)
DISCORD_BOT_TOKEN=seu-token
DISCORD_ALLOWED_USERS=seu-id

# Transcrição — o provedor local não precisa de chave (pip install faster-whisper)
# GROQ_API_KEY=sua-chave # alternativa na nuvem, rápida, com camada gratuita

# Síntese — opcional. Edge TTS e NeuTTS não precisam de chave.
# ELEVENLABS_API_KEY=*** # qualidade premium
# VOICE_TOOLS_OPENAI_KEY=*** # síntese e transcrição da OpenAI

Subir o gateway​

hermes gateway # sobe com a configuração existente

O bot deve ficar online no Discord em alguns segundos.

Comandos​

Use no canal de texto onde o bot está:

/voice join o bot entra no seu canal de voz atual
/voice channel apelido de /voice join
/voice leave o bot sai do canal de voz
/voice status mostra o modo de voz e o canal conectado
informação

Você precisa estar num canal de voz antes de rodar o /voice join. O bot entra no mesmo canal em que você está.

Como funciona​

Quando entra num canal de voz, o bot:

  1. Escuta o fluxo de áudio de cada pessoa, de forma independente
  2. Detecta o silêncio — 1,5 segundo de silêncio depois de pelo menos 0,5 segundo de fala dispara o processamento
  3. Transcreve o áudio pelo Whisper (local, Groq ou OpenAI)
  4. Processa pelo caminho completo do agente (sessão, ferramentas, memória)
  5. Fala a resposta no canal

Integração com o canal de texto​

Com o bot num canal de voz:

  • As transcrições aparecem no canal de texto: [Voice] @pessoa: o que você disse
  • As respostas do agente vão como texto no canal E são faladas no canal de voz
  • O canal de texto é aquele em que o /voice join foi dado

Prevenção de eco​

O bot pausa sozinho o ouvinte de áudio enquanto toca as respostas faladas, para não ouvir e reprocessar a própria saída.

Controle de acesso​

Só quem está em DISCORD_ALLOWED_USERS interage por voz. O áudio das outras pessoas é ignorado em silêncio.

# ~/.hermes/.env
DISCORD_ALLOWED_USERS=284102345871466496

Referência de configuração​

config.yaml​

# Gravação de voz (CLI)
voice:
record_key: "ctrl+b" # tecla para começar e parar a gravação
max_recording_seconds: 120 # duração máxima
auto_tts: false # liga a leitura em voz alta junto com o modo de voz
beep_enabled: true # toca os bipes de início e fim
silence_threshold: 200 # nível de RMS (0 a 32767) abaixo do qual conta como silêncio
silence_duration: 3.0 # segundos de silêncio antes de parar sozinho
stop_phrases: ["stop"] # dizer exatamente uma destas encerra a conversa; [] desliga

# Transcrição
stt:
enabled: true # false pula a transcrição automática — o gateway
# ainda guarda o arquivo de áudio e passa o caminho
# ao agente junto da mensagem, útil para fluxos
# próprios (diarização, alinhamento, arquivamento)
provider: "local" # "local" (gratuito) | "groq" | "openai" | "mistral" | "xai"
local:
model: "base" # tiny, base, small, medium, large-v3
language: "" # dica ISO-639-1 opcional; vazio usa HERMES_LOCAL_STT_LANGUAGE, senão detecta
groq:
language: "" # dica ISO-639-1 opcional; vazio usa HERMES_LOCAL_STT_LANGUAGE, senão detecta
# model: "whisper-1" # legado: usado quando não há provider

# Síntese de voz
tts:
provider: "edge" # "edge" (gratuito) | "elevenlabs" | "openai" | "neutts" | "minimax" | "mistral" | "gemini" | "xai" | "kittentts" | "piper"
edge:
voice: "pt-BR-FranciscaNeural" # 322 vozes, 74 idiomas
elevenlabs:
voice_id: "pNInz6obpgDQGcFmaJgB" # Adam
model_id: "eleven_multilingual_v2"
openai:
model: "gpt-4o-mini-tts"
voice: "alloy" # alloy, echo, fable, onyx, nova, shimmer
base_url: "https://api.openai.com/v1" # opcional: para endpoints próprios ou compatíveis
# A ferramenta `text_to_speech` aceita um argumento opcional `instructions`
# por chamada (tom, emoção, ritmo, sotaque, sussurro), repassado ao
# `gpt-4o-mini-tts` e a servidores de desenho de voz compatíveis com a OpenAI.
neutts:
ref_audio: ''
ref_text: ''
model: neuphonic/neutts-air-q4-gguf
device: cpu
Vozes em português

O Edge TTS tem vozes brasileiras nativas — pt-BR-FranciscaNeural, pt-BR-AntonioNeural e pt-BR-ThalitaNeural, entre outras. É gratuito e não precisa de chave. Para a transcrição em português, o Whisper local detecta o idioma sozinho, mas fixar language: "pt" melhora a precisão e a velocidade.

Variáveis de ambiente​

# Transcrição (o local não precisa de chave)
# pip install faster-whisper # transcrição local gratuita, sem chave
GROQ_API_KEY=... # Whisper da Groq (rápido, camada gratuita)
VOICE_TOOLS_OPENAI_KEY=... # Whisper da OpenAI (pago)

# Ajustes avançados de transcrição (opcionais)
STT_GROQ_MODEL=whisper-large-v3-turbo # troca o modelo padrão da Groq
STT_OPENAI_MODEL=whisper-1 # troca o modelo padrão da OpenAI
GROQ_BASE_URL=https://api.groq.com/openai/v1 # endpoint próprio da Groq
STT_OPENAI_BASE_URL=https://api.openai.com/v1 # endpoint próprio da OpenAI

# Síntese (Edge TTS e NeuTTS não precisam de chave)
ELEVENLABS_API_KEY=*** # ElevenLabs (qualidade premium)
# a VOICE_TOOLS_OPENAI_KEY acima também habilita a síntese da OpenAI

# Canal de voz do Discord
DISCORD_BOT_TOKEN=...
DISCORD_ALLOWED_USERS=...

Comparação dos provedores de transcrição​

ProvedorModeloVelocidadeQualidadeCustoPrecisa de chave
LocalbaseRápido (depende do processador)BoaGrátisNão
LocalsmallMédioMelhorGrátisNão
Locallarge-v3LentoA melhorGrátisNão
Groqwhisper-large-v3-turboMuito rápido (~0,5s)BoaCamada gratuitaSim
Groqwhisper-large-v3Rápido (~1s)MelhorCamada gratuitaSim
OpenAIwhisper-1Rápido (~1s)BoaPagoSim
OpenAIgpt-4o-transcribeMédio (~2s)A melhorPagoSim
OpenAIgpt-transcribeRápidoA melhorPago (US$ 0,0045/min)Sim
Mistralvoxtral-mini-latestRápidoBoaPagoSim
xAIgrok-sttRápidoBoaPagoSim

Ordem de prioridade, com recuo automático: local > groq > openai.

Comparação dos provedores de síntese​

ProvedorQualidadeCustoEsperaPrecisa de chave
Edge TTSBoaGrátis~1sNão
ElevenLabsExcelentePago~2sSim
OpenAI TTSBoaPago~1,5sSim
NeuTTSBoaGrátisDepende do processadorNão

O NeuTTS usa o bloco tts.neutts acima.

No openai, a ferramenta text_to_speech aceita o argumento opcional instructions, que libera o desenho de voz do gpt-4o-mini-tts (tom, emoção, ritmo, sotaque, sussurro). O mesmo campo também chega a servidores de desenho de voz compatíveis com a OpenAI, montados por tts.openai.base_url.


Resolução de problemas​

"No audio device found" (CLI)​

O PortAudio não está instalado:

brew install portaudio # macOS
sudo apt install portaudio19-dev # Ubuntu

Se você roda o Hermes dentro do Docker num desktop Linux, o container também precisa de acesso ao socket de áudio do sistema. Veja as notas da ponte de áudio no Docker para uma configuração compatível com PulseAudio e PipeWire.

O bot não responde nos canais do servidor no Discord​

Por padrão, ele exige menção nos canais. Confira se você:

  1. Digitou @ e escolheu o usuário do bot (com o discriminador), e não o cargo de mesmo nome
  2. Ou use mensagem direta — sem menção
  3. Ou defina DISCORD_REQUIRE_MENTION=false no ~/.hermes/.env

O bot entra no canal de voz mas não me ouve​

  • Confira se o seu identificador do Discord está em DISCORD_ALLOWED_USERS
  • Confira se você não está mudo no Discord
  • O bot precisa de um evento SPEAKING do Discord para mapear o seu áudio — comece a falar poucos segundos depois de ele entrar

O bot me ouve mas não responde​

  • Confirme que a transcrição está disponível: instale o faster-whisper (sem chave) ou defina GROQ_API_KEY ou VOICE_TOOLS_OPENAI_KEY
  • Confira se o modelo está configurado e acessível
  • Veja os logs: tail -f ~/.hermes/logs/gateway.log

O bot responde em texto, mas não no canal de voz​

  • O provedor de síntese pode estar falhando — confira chave e cota
  • O Edge TTS (gratuito, sem chave) é o recuo padrão
  • Procure erros de síntese nos logs

O Whisper devolve texto sem sentido​

O filtro de alucinação pega a maioria dos casos. Se ainda aparecerem transcrições fantasma:

  • Use um ambiente mais silencioso
  • Aumente o silence_threshold na configuração (mais alto = menos sensível)
  • Experimente outro modelo de transcrição