OpenClaw 支持音频/语音消息的自动转录功能,可将语音消息转换为文本并传递给 AI 模型处理。
工作原理
媒体理解(音频)
当启用音频理解功能(或自动检测)时,OpenClaw 执行以下步骤:
- 定位第一个音频附件(本地路径或 URL)并在需要时下载
- 在发送到每个模型条目之前强制执行
maxBytes大小限制 - 按顺序运行第一个符合条件的模型条目(提供商或 CLI)
- 如果失败或跳过(大小/超时),则尝试下一个条目
- 成功后,用
[Audio]块替换Body并设置{{Transcript}}
命令解析
转录成功后,CommandBody/RawBody 会设置为转录文本,因此斜杠命令仍然可以正常工作。
详细日志
使用 --verbose 参数时,会记录转录运行和替换正文的时间。
自动检测(默认)
如果未配置模型且 tools.media.audio.enabled 未设置为 false,OpenClaw 会按以下顺序自动检测并在第一个可用选项处停止:
1. 本地 CLI(如果已安装)
sherpa-onnx-offline- 需要SHERPA_ONNX_MODEL_DIR包含 encoder/decoder/joiner/tokenswhisper-cli- 来自whisper-cpp; 使用WHISPER_CPP_MODEL或捆绑的 tiny 模型whisper- Python CLI; 自动下载模型
2. Gemini CLI
使用 gemini CLI 的 read_many_files 功能
3. 提供商密钥
按顺序尝试: OpenAI → Groq → Deepgram → Google
注意
- 要禁用自动检测,设置
tools.media.audio.enabled: false - 要自定义配置,设置
tools.media.audio.models - 二进制检测在 macOS/Linux/Windows 上采用最大努力原则
- 确保 CLI 在
PATH中(我们会展开~),或使用完整命令路径设置显式 CLI 模型
配置示例
提供商 + CLI 回退 (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,
},
],
},
},
},
}
仅提供商 + 范围限制
{
tools: {
media: {
audio: {
enabled: true,
scope: {
default: "allow",
rules: [
{ action: "deny", match: { chatType: "group" } }
],
},
models: [
{ provider: "openai", model: "gpt-4o-mini-transcribe" }
],
},
},
},
}
仅提供商 (Deepgram)
{
tools: {
media: {
audio: {
enabled: true,
models: [
{ provider: "deepgram", model: "nova-3" }
],
},
},
},
}
注意事项与限制
- 提供商认证遵循标准模型认证顺序(认证配置文件、环境变量、
models.providers.*.apiKey) - 使用
provider: "deepgram"时会使用DEEPGRAM_API_KEY - 音频提供商可以通过
tools.media.audio覆盖baseUrl、headers和providerOptions - 默认大小上限为 20MB (
tools.media.audio.maxBytes)。超大音频会被跳过并尝试下一个条目 - 音频的默认
maxChars为未设置(完整转录)。设置tools.media.audio.maxChars或每个条目的maxChars来裁剪输出 - OpenAI 自动默认使用
gpt-4o-mini-transcribe; 设置model: "gpt-4o-transcribe"以获得更高准确度 - 使用
tools.media.audio.attachments处理多个语音消息(mode: "all"+maxAttachments) - 转录文本可通过
{{Transcript}}模板变量使用 - CLI 标准输出限制为 5MB; 保持 CLI 输出简洁
常见问题
注意事项
- 范围规则使用首次匹配获胜原则。
chatType规范化为direct、group或room - 确保您的 CLI 退出码为 0 并输出纯文本; JSON 需要通过
jq -r .text处理 - 保持超时时间合理(
timeoutSeconds,默认 60 秒)以避免阻塞回复队列
提示
更多详情请参考 官方文档 - Audio and Voice Notes