Аудио / голосовые заметки — 2026-01-17¶
Что работает¶
- Понимание медиа (аудио): Если понимание аудио включено (или автоматически обнаружено), OpenClaw:
1. Находит первое аудиовложение (локальный путь или URL) и при необходимости загружает его.
2. Применяет
maxBytesперед отправкой каждому элементу модели. 3. Запускает первый подходящий элемент модели по порядку (провайдер или CLI). 4. В случае сбоя или пропуска (размер/тайм‑аут) пробует следующий элемент. 5. При успехе заменяетBodyна блок[Audio]и устанавливает{{Transcript}}. - Разбор команд: Когда транскрибация успешна,
CommandBody/RawBodyустанавливаются в текст транскрипта, чтобы слеш‑команды продолжали работать. - Подробное логирование: В
--verboseмы логируем запуск транскрибации и момент замены тела сообщения.
Автообнаружение (по умолчанию)¶
Если вы не настраиваете модели и 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‑модель) -whisper(Python CLI; автоматически загружает модели) - Gemini CLI (
gemini) с использованиемread_many_files - Ключи провайдеров (OpenAI → Groq → Deepgram → Google)
Чтобы отключить автообнаружение, установите tools.media.audio.enabled: false.
Для кастомизации установите tools.media.audio.models.
Примечание: обнаружение бинарников выполняется по принципу best‑effort на 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). - Deepgram подхватывает
DEEPGRAM_API_KEY, когда используетсяprovider: "deepgram". - Подробности настройки Deepgram: Deepgram (audio transcription).
- Аудиопровайдеры могут переопределять
baseUrl,headersиproviderOptionsчерезtools.media.audio. - Ограничение размера по умолчанию — 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}}. - Вывод stdout CLI ограничен (5MB); держите вывод CLI кратким.
Готчас¶
- Правила областей используют принцип «первое совпадение выигрывает».
chatTypeнормализуется кdirect,groupилиroom. - Убедитесь, что ваш CLI завершает работу с кодом 0 и печатает обычный текст; JSON необходимо привести к нужному виду через
jq -r .text. - Держите тайм‑ауты разумными (
timeoutSeconds, по умолчанию 60с), чтобы не блокировать очередь ответов.