Nodes and media
Audio y notas de voz
Qué hace
Cuando la comprensión de audio está habilitada (o se detecta automáticamente), OpenClaw:
- Localiza el primer archivo adjunto de audio (ruta local o URL) y lo descarga si es necesario.
- Aplica
maxBytesantes de enviarlo a cada entrada de modelo. - Ejecuta en orden la primera entrada de modelo apta (proveedor o CLI); si una entrada falla o se omite (tamaño/tiempo de espera), se prueba la siguiente.
- Si se completa correctamente, sustituye
Bodypor un bloque[Audio]y establece{{Transcript}}.
Cuando la transcripción se completa correctamente, CommandBody/RawBody también se establecen en la transcripción para que los comandos con barra sigan funcionando. Con --verbose, los registros muestran cuándo se ejecuta la transcripción y cuándo sustituye el cuerpo.
Detección automática (predeterminada)
Si no se han configurado modelos y tools.media.audio.enabled no es false, OpenClaw realiza la detección automática en este orden y se detiene en la primera opción que funcione:
- Modelo de respuesta activo, cuando su proveedor admite la comprensión de audio.
- Autenticación de proveedor configurada: cualquier entrada
models.providers.*con autenticación disponible para un proveedor que admita la transcripción de audio. Esto se comprueba antes que las CLI locales, por lo que una clave de API configurada siempre tiene prioridad sobre un binario local enPATH. Prioridad de proveedores cuando hay varios configurados: Groq, OpenAI, xAI, Deepgram, Google, SenseAudio, ElevenLabs, Mistral. - CLI locales (solo si no se resolvió ninguna autenticación de proveedor). OpenClaw crea una lista ordenada de alternativas:
whisper-cli, antes que las opciones predeterminadas de CPU solo cuando una invocación anterior de un modelo en el proceso actual detectó Metal o CUDAsherpa-onnx-offlineen su proveedor de CPU predeterminado (requiereSHERPA_ONNX_MODEL_DIRcontokens.txt,encoder.onnx,decoder.onnxyjoiner.onnx)whisper-clicuando Metal/CUDA solo está disponible para la compilación o, de otro modo, no se ha detectado el backend seleccionadoparakeet-mlxen Apple Silicon (compatible con MLX; el uso del dispositivo sigue sin observarse)whisper(CLI de Python; descarga los modelos automáticamente)
La procedencia de la instalación o el enlace constituye evidencia de capacidad, no de ejecución. Por sí sola, nunca antepone un candidato a sherpa en CPU. OpenClaw no carga un modelo durante la configuración ni las comprobaciones de estado únicamente para sondear un backend.
La detección automática de whisper.cpp mantiene habilitados sus registros normales de ejecución del modelo para que OpenClaw pueda registrar la línea using … backend del componente de origen. Las entradas de CLI explícitas conservan sus indicadores de salida configurados.
La detección automática de Gemini CLI para la comprensión multimedia se sustituyó por una alternativa de Antigravity CLI aislada (agy) para imágenes y vídeo; el audio no usa ninguna alternativa de CLI aparte de los binarios locales anteriores.
Para deshabilitar la detección automática, establezca tools.media.audio.enabled: false. Para personalizarla, añada entradas con etiquetas de capacidad a tools.media.models.
Inspeccione la selección local sin transcribir audio:
openclaw capability audio providersopenclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min infoEl inventario de proveedores informa del ganador de la alternativa local por separado de la selección global de proveedores, además de los campos de backend disponible, solicitado y detectado. Después de ejecutar la transcripción, /status informa del backend solicitado o detectado en la línea multimedia. Las entradas de CLI tools.media.models explícitas compatibles con audio siguen omitiendo la selección automática; use sus indicadores específicos del backend, como --provider=cuda de sherpa o --no-gpu/--device de whisper.cpp.
Ejemplos de configuración
Proveedor + alternativa de CLI (OpenAI + Whisper CLI)
{ tools: { media: { models: [ { provider: "openai", model: "gpt-4o-transcribe", capabilities: ["audio"] }, { type: "cli", command: "whisper", args: ["--model", "base", "{{AttachmentPath}}"], timeoutSeconds: 45, capabilities: ["audio"], }, ], audio: { enabled: true, preferredModel: "openai/gpt-4o-transcribe" }, }, },}Solo proveedor (Deepgram)
{ tools: { media: { models: [{ provider: "deepgram", model: "nova-3", capabilities: ["audio"] }], audio: { enabled: true }, }, },}Solo proveedor (Mistral Voxtral)
{ tools: { media: { models: [{ provider: "mistral", model: "voxtral-mini-latest", capabilities: ["audio"] }], audio: { enabled: true }, }, },}Solo proveedor (SenseAudio)
{ tools: { media: { models: [ { provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319", capabilities: ["audio"], }, ], audio: { enabled: true }, }, },}Repetir la transcripción en el chat (opcional)
{ tools: { media: { audio: { enabled: true, echoTranscript: true, echoFormat: '📝 "{transcript}"', }, }, },}Notas y límites
- La autenticación del proveedor sigue el orden estándar de autenticación de modelos (perfiles de autenticación, variables de entorno,
models.providers.*.apiKey). - Detalles de configuración de Groq: Groq.
- Deepgram utiliza
DEEPGRAM_API_KEYcuando se usaprovider: "deepgram". Detalles de configuración: Deepgram. - Detalles de configuración de Mistral: Mistral.
- SenseAudio utiliza
SENSEAUDIO_API_KEYcuando se usaprovider: "senseaudio". Detalles de configuración: SenseAudio. - Los proveedores de audio pueden usar los valores predeterminados de
tools.media.audioo sustituirbaseUrl,headers,providerOptionsy los límites en su entradatools.media.models[]. - El límite de tamaño de audio integrado es de 20MB. Una sustitución de
maxBytesen el nivel de entrada puede cambiarlo; el audio que supere el tamaño se omite para ese modelo y se prueba la siguiente entrada. - Los archivos de audio de menos de 1024 bytes se omiten antes de la transcripción mediante un proveedor o una CLI.
- El valor predeterminado de
maxCharspara audio está sin establecer (transcripción completa). Establezcatools.media.audio.maxCharsomaxCharspor entrada para recortar la salida. - El valor predeterminado de la detección automática de OpenAI es
gpt-4o-transcribe; establezcamodel: "gpt-4o-mini-transcribe"para obtener una opción más económica y rápida. - La transcripción está disponible para las plantillas como
{{Transcript}}. tools.media.audio.echoTranscriptestá desactivado de forma predeterminada;echoFormatacepta un marcador de posición{transcript}.- La salida estándar de la CLI está limitada a 5MB; mantenga concisa la salida de la CLI.
argsde la CLI debe usar{{AttachmentPath}}para la ruta del archivo de audio local. Ejecuteopenclaw doctor --fixpara migrar los marcadores de posición{input}obsoletos de configuracionesaudio.transcription.commandanteriores (clave retirada:audio.transcription, sustituida portools.media.models).{{MediaPath}}sigue siendo un alias de compatibilidad obsoleto.tools.media.concurrencylimita las tareas multimedia; no es un planificador de GPU.
STT local residente
El STT local detectado automáticamente sigue ejecutándose en un proceso por solicitud. Actualmente, OpenClaw no administra un servidor whisper.cpp residente porque el paquete estándar whisper-cpp de Homebrew deshabilita ese servidor, mientras que el ejemplo del proyecto de origen no tiene configurada una cola de admisión limitada. Para poder habilitar de forma segura un ciclo de vida residente propiedad de un Plugin, se necesita un worker empaquetado y mantenido con comprobación de estado/inicio, residencia del modelo, colas limitadas, cancelación/tiempo de espera, funcionamiento sin autenticación limitado a la interfaz de bucle invertido y sin alternativa en la nube.
Compatibilidad con variables de entorno de proxy
La transcripción de audio basada en proveedores respeta las variables de entorno estándar de proxy de salida, de acuerdo con la semántica de EnvHttpProxyAgent de undici:
HTTPS_PROXY/https_proxyHTTP_PROXY/http_proxyALL_PROXY/all_proxy
Las variables en minúsculas tienen prioridad sobre las de mayúsculas; las entradas NO_PROXY/no_proxy (nombres de host, *.suffix o host:port) omiten el proxy. Si no se establece ninguna variable de entorno de proxy, se usa una salida directa. Si falla la configuración del proxy (URL con formato incorrecto), OpenClaw registra una advertencia y recurre a la solicitud directa.
Detección de menciones en grupos
En los canales que admiten una comprobación previa de audio, OpenClaw transcribe el audio antes de comprobar las menciones cuando requireMention: true está establecido para un chat grupal. Esto permite que una nota de voz sin texto supere el control de menciones cuando su transcripción contiene un patrón de mención configurado. La documentación específica de cada canal describe los transportes que requieren una mención escrita.
Cómo funciona:
- Si un mensaje de voz no tiene cuerpo de texto y el grupo requiere menciones, OpenClaw realiza una transcripción previa del primer archivo adjunto de audio.
- Se comprueba si la transcripción contiene patrones de mención (por ejemplo,
@BotNameo activadores con emojis). - Si se encuentra una mención, el mensaje continúa por el Pipeline de respuesta completo.
Comportamiento alternativo: si falla la transcripción previa (tiempo de espera, error de API, etc.), el mensaje recurre a la detección de menciones únicamente en el texto, de modo que los mensajes mixtos (texto + audio) nunca se descarten.
Desactivación por grupo/tema de Telegram:
- Establezca
channels.telegram.groups.<chatId>.disableAudioPreflight: truepara omitir las comprobaciones previas de menciones en la transcripción para ese grupo. - Establezca
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightpara sustituir el valor por tema (truepara omitirlo,falsepara habilitarlo de manera forzada). - El valor predeterminado es
false(la comprobación previa se habilita cuando se cumplen las condiciones del control de menciones).
Ejemplo: una persona envía una nota de voz que dice «Oye, @Claude, ¿qué tiempo hace?» en un grupo de Telegram con requireMention: true. La nota de voz se transcribe, se detecta la mención y el agente responde.
Aspectos importantes
- Las reglas de ámbito usan la primera coincidencia;
chatTypese normaliza comodirect,groupochannel. - Asegúrese de que la CLI termine con el código 0 e imprima texto sin formato; la salida JSON debe adaptarse mediante
jq -r .text. - Los modos conocidos de salida a archivos son autoritativos: si falta el archivo de transcripción inferido o está vacío, no se genera ninguna transcripción en lugar de recurrir a la salida de progreso de la CLI.
- Para
parakeet-mlx, use--output-format txt(oall) con--output-diry la plantilla de salida predeterminada{filename}. También se respetan las variables de entornoPARAKEET_OUTPUT_FORMATyPARAKEET_OUTPUT_TEMPLATEdel proyecto de origen. OpenClaw lee<output-dir>/<media-basename>.txt; el formato predeterminadosrt, los demás formatos y las plantillas de salida personalizadas siguen usando la salida estándar. - Mantenga tiempos de espera razonables (
timeoutSeconds, 60s de forma predeterminada) para evitar bloquear la cola de respuestas. - La transcripción previa solo procesa el primer archivo adjunto de audio para detectar menciones. Los archivos adjuntos de audio adicionales se procesan durante la fase principal de comprensión multimedia.