Audio / Voice Notes — 2026-01-17
可用功能
Media understanding(audio):如果启用了 audio understanding(或被自动检测启用),OpenClaw 会:
- 定位第一个音频附件(本地路径或 URL),必要时先下载。
- 在发送给每个 model entry 之前先校验
maxBytes。 - 按顺序运行第一个符合条件的 model entry(provider 或 CLI)。
- 如果失败或被跳过(例如 size/timeout),就尝试下一个 entry。
- 成功时,会用一个
[Audio]block 替换Body,并设置{{Transcript}}。
- 命令解析:当转录成功时,
CommandBody/RawBody会被设置为 transcript,因此 slash commands 仍然可用。 - Verbose logging:在
--verbose模式下,我们会记录何时运行 transcription,以及何时它替换了 body。
自动检测(默认)
如果你没有配置 models,并且 tools.media.audio.enabled 没有被设置为 false,OpenClaw 会按以下顺序自动检测,并在找到第一个可用方案后停止:
本地 CLI(如果已安装)
sherpa-onnx-offline(要求设置SHERPA_ONNX_MODEL_DIR,其中包含 encoder/decoder/joiner/tokens)whisper-cli(来自whisper-cpp;使用WHISPER_CPP_MODEL或内置的 tiny model)whisper(Python CLI;会自动下载 models)
- Gemini CLI(
gemini),使用read_many_files - Provider keys(OpenAI → Groq → Deepgram → Google)
如需关闭自动检测,请设置 tools.media.audio.enabled: false。
如需自定义,请设置 tools.media.audio.models。
注意:二进制检测在 macOS/Linux/Windows 上属于 best-effort;请确保 CLI 已在 PATH 中(我们会展开 ~),或者显式设置一个带完整命令路径的 CLI model。
配置示例
Provider + CLI fallback(OpenAI + Whisper CLI)
{tools: {media: {audio: {enabled: true,maxBytes: 20971520,models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" },{type: "cli",command: "whisper",args: ["--model", "base", "{{MediaPath}}"],timeoutSeconds: 45,},],},},},}
仅 Provider,并带 scope gating
{tools: {media: {audio: {enabled: true,scope: {default: "allow",rules: [{ action: "deny", match: { chatType: "group" } }],},models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],},},},}
仅 Provider(Deepgram)
{tools: {media: {audio: {enabled: true,models: [{ provider: "deepgram", model: "nova-3" }],},},},}
仅 Provider(Mistral Voxtral)
{tools: {media: {audio: {enabled: true,models: [{ provider: "mistral", model: "voxtral-mini-latest" }],},},},}
将 transcript 回显到聊天中(可选开启)
{tools: {media: {audio: {enabled: true,echoTranscript: true, // default is falseechoFormat: '📝 "{transcript}"', // optional, supports {transcript}models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],},},},}
说明与限制
- Provider 鉴权遵循标准 model auth 顺序(auth profiles、环境变量、
models.providers.*.apiKey)。 - 当使用
provider: "deepgram"时,会读取DEEPGRAM_API_KEY。 - Deepgram 配置详情见:Deepgram (audio transcription)。
- Mistral 配置详情见:Mistral。
- Audio providers 可以通过
tools.media.audio覆盖baseUrl、headers和providerOptions。 - 默认大小上限为 20MB(
tools.media.audio.maxBytes)。超出大小的音频会对当前 model 跳过,并尝试下一个 entry。 - 小于 1024 bytes 的极小或空音频文件,会在 provider/CLI transcription 之前直接跳过。
- Audio 默认
maxChars不设置(即输出完整 transcript)。你可以设置tools.media.audio.maxChars或按 entry 单独设置maxChars来裁剪输出。 - OpenAI 的自动默认 model 是
gpt-4o-mini-transcribe;如需更高精度,可设置model: "gpt-4o-transcribe"。 - 使用
tools.media.audio.attachments可以处理多个 voice notes(mode: "all"+maxAttachments)。 - Transcript 可通过模板变量
{{Transcript}}使用。 tools.media.audio.echoTranscript默认关闭;启用后,会在 agent 处理前先把 transcript 确认消息发送回原始聊天。tools.media.audio.echoFormat用于自定义回显文本(占位符:{transcript})。- CLI stdout 有上限(5MB);请保持 CLI 输出简洁。
代理环境支持
基于 provider 的 audio transcription 支持标准的出站代理环境变量:
HTTPS_PROXYHTTP_PROXYhttps_proxyhttp_proxy
如果没有设置 proxy 环境变量,则使用 direct egress。 如果 proxy 配置格式错误,OpenClaw 会记录 warning,并回退到 direct fetch。
群组中的 Mention Detection
当群聊设置了 requireMention: true 时,OpenClaw 现在会在检查 mentions 之前,先对音频进行转录。这样即使是语音消息中包含 mentions,也能被正确处理。
工作方式如下:
- 如果一条语音消息没有 text body,且该群开启了 require mentions,OpenClaw 会先执行一次“preflight” transcription。
- 然后检查 transcript 中是否包含 mention 模式(例如
@BotName、emoji triggers)。 - 如果检测到 mention,消息就会继续进入完整的 reply pipeline。
- Mention detection 会基于 transcript 执行,因此 voice notes 可以通过 mention gate。
回退行为:
- 如果 preflight 阶段的 transcription 失败(timeout、API error 等),消息会退回为仅基于文本的 mention detection。
- 这可以确保混合消息(text + audio)不会被错误丢弃。
按 Telegram group/topic 单独关闭:
- 设置
channels.telegram.groups.<chatId>.disableAudioPreflight: true,即可跳过该 group 的 preflight transcript mention 检查。 - 设置
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight,即可按 topic 覆盖(true表示跳过,false表示强制启用)。 - 默认值为
false(即当 mention-gated 条件匹配时,启用 preflight)。
示例:用户在一个设置了 requireMention: true 的 Telegram 群中发送一条语音,说的是 “Hey @Claude, what’s the weather?”。该语音会先被转录,检测到 mention,然后 agent 进行回复。
注意事项
- Scope 规则采用 first-match wins。
chatType会被规范化为direct、group或room。 - 请确保你的 CLI 以 0 退出并输出纯文本;如果输出是 JSON,需要通过
jq -r .text等方式先转换。 - 对于
parakeet-mlx,如果你传入--output-dir,当--output-format为txt(或省略)时,OpenClaw 会读取<output-dir>/<media-basename>.txt;非txt输出格式则回退为解析 stdout。 - 请将超时设置控制在合理范围内(
timeoutSeconds,默认 60 秒),以避免阻塞 reply queue。 - Preflight transcription 在 mention detection 阶段只处理第一个 audio attachment。其他音频会在主 media understanding 阶段处理。
