tools.media 配置、回退顺序以及回复流水线集成。
工作原理
1
收集附件
收集有序的传入媒体信息(
path、url、contentType 和 kind)。2
按能力选择
对于每个已启用的能力(图像/音频/视频),根据
attachments 策略选择附件(默认:仅第一个附件)。3
选择模型
选取第一个符合条件的模型条目(大小 + 能力 + 认证可用)。
4
失败时回退
如果某个模型报错、超时,或者媒体超过
maxBytes,则尝试下一个条目。5
成功后应用
Body 会变为一个 [Image]、[Audio] 或 [Video] 块。音频还会设置 {{Transcript}};命令解析在存在字幕文本时使用字幕文本,否则使用转写内容。字幕会作为块内的 User text: 保留。配置
tools.media 持有一个按能力标记的模型列表,以及少量按能力控制项:
image/audio/video)的键:
提示词、限制、语言提示、请求覆盖项和提供方选项可以作为能力默认值设置,也可以在单独的
tools.media.models[] 条目中覆盖。即使未显式配置模型,能力默认值也会覆盖自动检测到的提供方。
模型条目
每个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)会直接运行该支持图像的 provider/model,包括诸如ollama/qwen2.5vl:7b之类的 Ollama 引用,只要在models.providers.ollama.models[]下配置了匹配的支持图像模型。 - 如果
<capability>.enabled不为false但未配置任何模型,OpenClaw 会在活动回复模型的 provider 支持该能力时尝试使用该模型。
自动检测(默认)
当tools.media.<capability>.enabled 不为 false 且未配置任何模型时,OpenClaw 会按以下顺序尝试,并在第一个可用选项处停止:
1
已配置的图像模型(仅图像)
agents.defaults.imageModel 的主/备用引用,除非当前活动回复模型已经原生支持视觉。优先使用 provider/model 引用;裸引用仅在匹配到已配置的、具备图像能力的 provider 模型条目且匹配唯一时才会被限定。2
活动回复模型
当前活动回复模型,在其 provider 支持该能力时。
3
Provider auth(仅音频,在本地 CLI 之前)
先尝试已配置的、支持音频的
models.providers.* 条目,再尝试本地 CLI。内置 provider 优先级顺序(并列时按 provider id 字母顺序打破平局):Groq/OpenAI → xAI → Deepgram → OpenRouter → Google/SenseAudio → Deepinfra/ElevenLabs → Mistral。4
本地 CLI(仅音频)
已就绪的本地二进制文件会成为一个有序的后备列表:
whisper-cli仅在当前进程中较早的一次模型调用观察到 Metal 或 CUDA 后才会优先使用- CPU 默认的
sherpa-onnx-offline(需要SHERPA_ONNX_MODEL_DIR,其中包含tokens.txt/encoder.onnx/decoder.onnx/joiner.onnx) - 当加速仅表现为具备构建能力或尚未被观察到时使用
whisper-cli - Apple Silicon 上的
parakeet-mlx(具备 MLX 能力,但设备使用尚未被观察到) whisper(Python CLI;默认使用turbo模型,并会自动下载)
5
Provider auth(图像/视频)
先尝试已配置的、支持该能力的
models.providers.* 条目,再尝试内置回退顺序。仅图像的配置 provider 如果有一个支持图像的模型,即使它不是内置厂商插件,也会自动注册用于媒体理解。内置 provider 优先级顺序(并列时按 provider id 字母顺序打破平局):- 图像:Anthropic/OpenAI → Google → MiniMax → Deepinfra → MiniMax Portal → Z.AI
- 视频:Google → Qwen → Moonshot
二进制检测在 macOS/Linux/Windows 上尽力而为;请确保该 CLI 在
PATH 中(会展开 ~),或者设置一个带完整命令路径的显式 CLI 模型条目。代理支持(音频/视频 provider 调用)
基于 provider 的音频和视频理解会遵守标准的出站代理环境变量,包括NO_PROXY/no_proxy 绕过规则:HTTPS_PROXY、HTTP_PROXY、ALL_PROXY、https_proxy、http_proxy、all_proxy。小写变量优先于大写变量。如果未设置这些变量,媒体理解将直接出站;如果代理值格式错误,OpenClaw 会记录警告并回退到直接获取。图像理解不会经过此代理路径。
功能
在models[] 条目上设置 capabilities,可将其限制为特定的媒体类型。对于共享列表,OpenClaw 会为每个内置提供商推断默认值:
对于 CLI 条目,请显式设置
capabilities 以避免意外匹配;如果省略,该条目在其出现的每个功能列表中都符合条件。
提供方支持矩阵
MiniMax 注:
minimax、minimax-cn、minimax-portal 和 minimax-portal-cn 的图像理解始终来自插件拥有的 MiniMax-VL-01 媒体提供方,即使旧版 MiniMax M2.x 聊天元数据声称支持图像输入。模型选择指南
- 当质量和安全性至关重要时,请针对每种媒体能力,优先选择当前一代中最强大的模型。
- 对于处理不受信任输入的智能代理工具,避免使用较旧或较弱的媒体模型。
- 为每种能力至少保留一个备用选项,以确保可用性(一个高质量模型 + 一个更快速/更便宜的模型)。
- 当提供商 API 不可用时,CLI 备用方案(
whisper-cli、whisper、gemini)会派上用场。 - 已知的文件输出模式具有权威性:推断出的转录文件为空或缺失时,不会回退到 CLI 进度输出,而是不会生成任何转录内容。
parakeet-mlx:将--output-format txt(或all)与--output-dir以及默认的{filename}输出模板结合使用。上游的PARAKEET_OUTPUT_FORMAT和PARAKEET_OUTPUT_TEMPLATE环境变量同样会被遵循。OpenClaw 会读取<output-dir>/<media-basename>.txt;默认的srt格式、其他格式以及自定义输出模板仍会使用 stdout。
附件策略
按能力配置的attachments 控制会处理哪些附件:
"first" | "all"
default:"first"
仅处理第一个选中的附件,或处理全部附件。
number
default:"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:横幅,以缩短媒体提示词;边界标记和元数据仍然适用。 - 仅当回复运行时确认能够读取主机本地路径时(目前为非沙箱嵌入式会话),保存在本地磁盘上的不受支持文件才会获得自助处理指导。路径会作为不受信任的外部元数据加以围栏;受信任的指导会告知代理使用自身工具提取文件,现代 Office 文件还会获得解压提示。通用 ACP 后端、仅 URL 附件和沙箱会话会保留普通的
[Unsupported document format: <mime>. PDF and plain-text attachments can be read.]标记。 - 被操作员配置的允许列表拒绝的文件绝不会包含自助处理路径;策略拒绝不得引导代理绕过操作员的决定。
- 被操作员配置的
allowedMimes列表拒绝的文件会改为获得[Attachment type not allowed: <mime>],这样提示词就不会声称支持当前配置所禁用的类型。 - 读取失败会获得
[Attachment could not be read]。 - 当 URL 文件源被禁用时,URL 附件会获得
[Attachment skipped: URL file sources are disabled]。 - 没有可提取文本的文件会获得
[No extractable text]。 - 每条消息最多渲染五个跳过标记;后续被跳过的附件会合并为一个与原因无关的
[<n> more attachments skipped]摘要,从而避免垃圾附件无限增加提示词。文件标记以及图像、音频或视频标记共享这五个标记的额度。 - 如果 PDF 回退为渲染后的页面图像,OpenClaw 会将这些图像转发给具备视觉能力的回复模型,并在文件块中保留占位符
[PDF content rendered to images]。 - 图像、音频和视频决策会为每个附件候选记录一个已关闭的处置结果:已处理、已交给原生视觉、达到附件限制后未选中、已禁用、缺少模型、被聊天范围拒绝或失败。
- 未处理的媒体会获得一个有界的模型可见标记。交给原生视觉的图像,以及由其他 harness 负责的媒体回合,不会添加标记。
配置示例
- 共享模型 + 覆盖
- 仅音频 + 视频
- 仅图片
- 多模态单一入口
状态输出
当媒体理解运行时,/status 会包含一行按能力划分的摘要:
openclaw capability audio providers。本地行会单独显示本地回退获胜者,以及全局提供方选择、就绪状态和分别的 capable/requested/observed 后端字段。相同的本地选择也可作为信息性的 doctor 发现项获取:
说明
- 功能理解尽力而为。错误不会阻止回复。
- 即使禁用功能理解,附件仍会传递给模型。
- 使用
scope来限制功能理解运行的范围(例如,仅限私信)。