tools.media, порядок резервных вариантов и интеграцию с конвейером ответа.
Как это работает
1
Сбор вложений
Собирает входящие вложения (
MediaPaths, MediaUrls, MediaTypes).2
Выбор для каждой возможности
Для каждой включённой возможности (изображения, аудио и видео) выбирает вложения согласно политике
attachments (по умолчанию — только первое вложение).3
Выбор модели
Выбирает первую подходящую запись модели (с учётом размера, возможности и наличия аутентификации).
4
Резервный вариант при ошибке
Если модель возвращает ошибку, превышает время ожидания или размер медиа превышает
maxBytes, пробует следующую запись.5
Применение при успешном результате
Body становится блоком [Image], [Audio] или [Video]. Для аудио также задаётся {{Transcript}}; при синтаксическом анализе команд используется текст подписи, если он присутствует, иначе — расшифровка. Подписи сохраняются внутри блока как User text:.Конфигурация
tools.media содержит общий список моделей и переопределения для отдельных возможностей:
image/audio/video):
Параметры, относящиеся к Deepgram, задаются в
providerOptions.deepgram (поле верхнего уровня deepgram: { detectLanguage, punctuate, smartFormat } устарело, но по-прежнему считывается).
Записи моделей
Каждая записьmodels[] является записью провайдера (по умолчанию) или записью CLI:
- Запись провайдера
- Запись CLI
Учётные данные провайдера
Для распознавания медиа через провайдера используется тот же порядок разрешения аутентификации, что и для обычных вызовов моделей: профили аутентификации, переменные окружения, затемmodels.providers.<providerId>.apiKey. Записи tools.media.*.models[] не принимают встроенное поле apiKey.
Правила и поведение
- Если размер медиа превышает
maxBytes, эта модель пропускается и пробуется следующая. - Аудиофайлы размером менее 1024 байт считаются пустыми или повреждёнными и пропускаются до расшифровки; вместо них агент получает детерминированный текст-заполнитель.
- Если активная основная модель изображений уже изначально поддерживает зрение, OpenClaw пропускает блок краткого описания
[Image]и передаёт исходное изображение непосредственно модели. MiniMax является исключением:minimax,minimax-cn,minimax-portalиminimax-portal-cnвсегда направляют распознавание изображений через принадлежащий плагину медиапровайдерMiniMax-VL-01, даже если устаревшие метаданные чата MiniMax M2.x заявляют поддержку ввода изображений (изначально поддерживающими зрение считаются толькоMiniMax-M3и более поздние версии). - Если основная модель Gateway/WebChat поддерживает только текст, вложения изображений сохраняются как выгруженные ссылки
media://inbound/*, чтобы инструменты для изображений/PDF или настроенная модель изображений всё ещё могли их проверить и вложение не было потеряно. - Явно заданный
openclaw infer image describe --file <path> --model <provider/model>(псевдоним:openclaw capability image describe) запускает этот провайдер и модель с поддержкой изображений напрямую, включая ссылки Ollama, такие какollama/qwen2.5vl:7b, если соответствующая модель с поддержкой изображений настроена вmodels.providers.ollama.models[]. - Если
<capability>.enabledне равенfalse, но модели не настроены, OpenClaw пробует активную модель ответа, если её провайдер поддерживает эту возможность.
Автообнаружение (по умолчанию)
Еслиtools.media.<capability>.enabled не равен false и модели не настроены, OpenClaw пробует следующие варианты по порядку и останавливается на первом работающем:
1
Настроенная модель изображений (только изображения)
Основные и резервные ссылки
agents.defaults.imageModel, если активная модель ответа ещё не поддерживает зрение изначально. Предпочтительны ссылки provider/model; ссылки без квалификатора дополняются данными из настроенных записей моделей провайдеров с поддержкой изображений, только если соответствие однозначно.2
Активная модель ответа
Активная модель ответа, если её провайдер поддерживает эту возможность.
3
Аутентификация провайдера (только аудио, перед локальными CLI)
Настроенные записи
models.providers.*, поддерживающие аудио, пробуются перед локальными CLI. Порядок приоритета встроенных провайдеров (при равном приоритете — в алфавитном порядке по идентификатору провайдера): Groq/OpenAI → xAI → Deepgram → OpenRouter → Google/SenseAudio → Deepinfra/ElevenLabs → Mistral.4
Локальные CLI (только аудио)
Готовые локальные исполняемые файлы образуют упорядоченный список резервных вариантов:
whisper-cli— первым, только если предыдущий вызов модели в текущем процессе обнаружил Metal или CUDAsherpa-onnx-offlineс использованием CPU по умолчанию (требуетSHERPA_ONNX_MODEL_DIRсtokens.txt/encoder.onnx/decoder.onnx/joiner.onnx)whisper-cli, если ускорение лишь поддерживается сборкой или ещё не обнаруженоparakeet-mlxна Apple Silicon (поддерживает MLX, использование устройства не обнаружено)whisper(CLI на Python; по умолчанию использует модельturbo, загружается автоматически)
5
Аутентификация провайдера (изображения/видео)
Настроенные записи
models.providers.*, поддерживающие эту возможность, пробуются до встроенного порядка резервных вариантов. Провайдеры, настроенные только для изображений и имеющие модель с поддержкой изображений, автоматически регистрируются для распознавания медиа, даже если они не являются встроенным плагином поставщика.Порядок приоритета встроенных провайдеров (при равном приоритете — в алфавитном порядке по идентификатору провайдера):- Изображения: Anthropic/OpenAI → Google → MiniMax → Deepinfra → MiniMax Portal → Z.AI
- Видео: Google → Qwen → Moonshot
6
CLI Antigravity (только изображения/видео)
Первый установленный исполняемый файл
agy или antigravity (можно переопределить с помощью OPENCLAW_ANTIGRAVITY_CLI), изолированный каталогом медиафайла.Обнаружение исполняемых файлов выполняется по возможности в macOS/Linux/Windows; убедитесь, что CLI доступен через
PATH (~ разворачивается), либо задайте явную запись модели CLI с полным путём к команде.Поддержка прокси (вызовы провайдеров аудио/видео)
Распознавание аудио и видео на основе провайдеров учитывает стандартные переменные окружения исходящего прокси, включая правила обходаNO_PROXY/no_proxy: HTTPS_PROXY, HTTP_PROXY, ALL_PROXY, https_proxy, http_proxy, all_proxy. Переменные в нижнем регистре имеют приоритет над переменными в верхнем регистре. Если ни одна из них не задана, распознавание медиа использует прямое исходящее соединение; если значение прокси некорректно, OpenClaw записывает предупреждение в журнал и переходит к прямой загрузке. Распознавание изображений не использует этот путь прокси.
Возможности
Задайтеcapabilities в записи models[], чтобы ограничить её определёнными типами медиа. Для общих списков OpenClaw определяет значения по умолчанию для каждого встроенного провайдера:
Для записей CLI задавайте
capabilities явно, чтобы избежать неожиданных совпадений; если параметр пропущен, запись может использоваться для каждого списка возможностей, в котором она присутствует.
Матрица поддержки провайдеров
Примечание о MiniMax: распознавание изображений
minimax, minimax-cn, minimax-portal и minimax-portal-cn всегда выполняется медиапровайдером MiniMax-VL-01, принадлежащим плагину, даже если устаревшие метаданные чата MiniMax M2.x заявляют поддержку ввода изображений.Рекомендации по выбору модели
- Если важны качество и безопасность, выбирайте наиболее мощную модель текущего поколения для каждой возможности обработки медиа.
- Для агентов с доступом к инструментам, обрабатывающих недоверенные входные данные, избегайте старых или менее мощных медиамоделей.
- Оставляйте как минимум одну резервную модель для каждой возможности, чтобы обеспечить доступность (качественная модель + более быстрая или дешёвая модель).
- Резервные варианты CLI (
whisper-cli,whisper,gemini) помогают, когда API провайдеров недоступны. - Известные режимы вывода в файл имеют приоритет: пустой или отсутствующий предполагаемый файл транскрипта означает отсутствие транскрипта вместо перехода к выводу хода выполнения CLI.
parakeet-mlx: используйте--output-format txt(илиall) с--output-dirи шаблоном вывода по умолчанию{filename}. Переменные окружения вышестоящего проектаPARAKEET_OUTPUT_FORMATиPARAKEET_OUTPUT_TEMPLATEтакже учитываются. OpenClaw читает<output-dir>/<media-basename>.txt; формат по умолчаниюsrt, другие форматы и пользовательские шаблоны вывода продолжают использовать стандартный вывод.
Политика вложений
Параметрattachments для каждой возможности определяет, какие вложения обрабатываются:
"first" | "all"
по умолчанию:"first"
Обрабатывать только первое выбранное вложение или все вложения.
number
по умолчанию:"1"
Ограничить количество обрабатываемых вложений.
"first" | "last" | "path" | "url"
Предпочтение при выборе среди вложений-кандидатов.
mode: "all", результаты помечаются как [Image 1/2], [Audio 2/2] и т. д.
Извлечение данных из файловых вложений
- Извлечённый из файла текст оборачивается как недоверенное внешнее содержимое перед добавлением к запросу для обработки медиа с использованием граничных маркеров, таких как
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>, а также строки метаданныхSource: External. - В этом пути намеренно опускается длинный баннер
SECURITY NOTICE:, чтобы запрос для обработки медиа оставался коротким; граничные маркеры и метаданные по-прежнему применяются. - Файл, из которого невозможно извлечь текст, получает
[No extractable text]. - Если для PDF используется резервный вариант с отрисованными изображениями страниц, OpenClaw передаёт эти изображения моделям ответа с поддержкой компьютерного зрения и сохраняет заполнитель
[PDF content rendered to images]в блоке файла.
Примеры конфигурации
- Общие модели и переопределения
- Только аудио и видео
- Только изображение
- Единая мультимодальная запись
Вывод состояния
При выполнении распознавания медиа/status содержит строку сводки для каждой возможности:
openclaw capability audio providers. В локальных строках победивший локальный резервный вариант отображается отдельно от глобального выбора провайдера, готовности и отдельных полей доступного, запрошенного и обнаруженного бэкенда. Тот же локальный выбор доступен как информационный результат диагностики:
Примечания
- Распознавание выполняется по мере возможности. Ошибки не блокируют ответы.
- Вложения всё равно передаются моделям, даже когда распознавание отключено.
- Используйте
scope, чтобы ограничить область выполнения распознавания (например, только личными сообщениями).