Nodes and media
درک رسانهها
OpenClaw میتواند رسانههای ورودی را خلاصه کند (تصویر/صدا/ویدئو) پیش از آنکه خط لوله پاسخ اجرا شود. وقتی ابزارهای محلی یا کلیدهای ارائهدهنده در دسترس باشند، بهصورت خودکار تشخیص میدهد و میتوان آن را غیرفعال یا سفارشی کرد. اگر فهم رسانه خاموش باشد، مدلها همچنان فایلها/URLهای اصلی را مثل همیشه دریافت میکنند.
رفتار رسانهای ویژه هر فروشنده توسط Pluginهای فروشنده ثبت میشود، در حالی که هسته OpenClaw مالک پیکربندی مشترک tools.media، ترتیب fallback، و یکپارچهسازی خط لوله پاسخ است.
اهداف
- اختیاری: پیشهضم رسانههای ورودی به متن کوتاه برای مسیریابی سریعتر + تحلیل بهتر فرمان.
- حفظ تحویل رسانه اصلی به مدل (همیشه).
- پشتیبانی از APIهای ارائهدهنده و fallbackهای CLI.
- امکان استفاده از چند مدل با fallback مرتبشده (خطا/اندازه/timeout).
رفتار سطح بالا
Collect attachments
پیوستهای ورودی (MediaPaths، MediaUrls، MediaTypes) را جمعآوری کنید.
Select per-capability
برای هر قابلیت فعالشده (تصویر/صدا/ویدئو)، پیوستها را طبق policy انتخاب کنید (پیشفرض: اولی).
Choose model
نخستین ورودی مدل واجد شرایط را انتخاب کنید (اندازه + قابلیت + احراز هویت).
Fallback on failure
اگر یک مدل شکست بخورد یا رسانه بیش از حد بزرگ باشد، به ورودی بعدی fallback کنید.
Apply success block
در صورت موفقیت:
Bodyبه بلوک[Image]،[Audio]، یا[Video]تبدیل میشود.- صدا
{{Transcript}}را تنظیم میکند؛ تحلیل فرمان وقتی متن caption موجود باشد از آن استفاده میکند، در غیر این صورت از transcript. - Captionها بهصورت
User text:داخل بلوک حفظ میشوند.
اگر فهم رسانه شکست بخورد یا غیرفعال باشد، جریان پاسخ ادامه مییابد با بدنه اصلی + پیوستها.
نمای کلی پیکربندی
tools.media از مدلهای مشترک بهعلاوه overrideهای هر قابلیت پشتیبانی میکند:
Top-level keys
tools.media.models: فهرست مدل مشترک (برای gate کردن ازcapabilitiesاستفاده کنید).tools.media.image/tools.media.audio/tools.media.video:- پیشفرضها (
prompt،maxChars،maxBytes،timeoutSeconds،language) - overrideهای ارائهدهنده (
baseUrl،headers،providerOptions) - گزینههای صوتی Deepgram از طریق
tools.media.audio.providerOptions.deepgram - کنترلهای بازتاب transcript صوتی (
echoTranscript، پیشفرضfalse؛echoFormat) - فهرست اختیاری
modelsبرای هر قابلیت (پیش از مدلهای مشترک ترجیح داده میشود) - policy پیوستها (
mode،maxAttachments،prefer) scope(gate اختیاری بر اساس کانال/chatType/کلید session)
- پیشفرضها (
tools.media.concurrency: حداکثر اجرای همزمان قابلیتها (پیشفرض 2).
{
tools: {
media: {
models: [
/* shared list */
],
image: {
/* optional overrides */
},
audio: {
/* optional overrides */
echoTranscript: true,
echoFormat: '📝 "{transcript}"',
},
video: {
/* optional overrides */
},
},
},
}
ورودیهای مدل
هر ورودی models[] میتواند ارائهدهنده یا CLI باشد:
Provider entry
{
type: "provider", // default if omitted
provider: "openai",
model: "gpt-5.5",
prompt: "Describe the image in <= 500 chars.",
maxChars: 500,
maxBytes: 10485760,
timeoutSeconds: 60,
capabilities: ["image"], // optional, used for multi-modal entries
profile: "vision-profile",
preferredProfile: "vision-fallback",
}
CLI entry
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
maxChars: 500,
maxBytes: 52428800,
timeoutSeconds: 120,
capabilities: ["video", "image"],
}
الگوهای CLI میتوانند از اینها نیز استفاده کنند:
{{MediaDir}}(دایرکتوری حاوی فایل رسانه){{OutputDir}}(دایرکتوری scratch که برای این اجرا ساخته شده است){{OutputBase}}(مسیر پایه فایل scratch، بدون پسوند)
پیشفرضها و محدودیتها
پیشفرضهای پیشنهادی:
maxChars: 500 برای تصویر/ویدئو (کوتاه، مناسب فرمان)maxChars: برای صدا تنظیمنشده (transcript کامل مگر اینکه محدودیت تعیین کنید)maxBytes:- تصویر: 10MB
- صدا: 20MB
- ویدئو: 50MB
Rules
- اگر رسانه از
maxBytesفراتر برود، آن مدل رد میشود و مدل بعدی امتحان میشود. - فایلهای صوتی کوچکتر از 1024 بایت پیش از transcription توسط ارائهدهنده/CLI خالی یا خراب تلقی شده و رد میشوند؛ context پاسخ ورودی یک transcript placeholder قطعی دریافت میکند تا agent بداند یادداشت بیش از حد کوچک بوده است.
- اگر مدل بیش از
maxCharsبرگرداند، خروجی کوتاه میشود. promptبهصورت پیشفرض یک "Describe the {media}." ساده بهعلاوه راهنمایmaxCharsاست (فقط تصویر/ویدئو).- اگر مدل تصویر primary فعال از قبل بهصورت native از vision پشتیبانی کند، OpenClaw بلوک خلاصه
[Image]را رد میکند و در عوض تصویر اصلی را به مدل میدهد. - اگر مدل primary در Gateway/WebChat فقط متنی باشد، پیوستهای تصویر بهصورت refهای offloadشده
media://inbound/*حفظ میشوند تا ابزارهای تصویر/PDF یا مدل تصویر پیکربندیشده همچنان بتوانند آنها را بررسی کنند، بهجای اینکه پیوست از دست برود. - درخواستهای صریح
openclaw infer image describe --model <provider/model>متفاوتاند: آنها همان provider/model دارای قابلیت تصویر را مستقیم اجرا میکنند، از جمله refهای Ollama مانندollama/qwen2.5vl:7b. - اگر
<capability>.enabled: trueباشد اما هیچ مدلی پیکربندی نشده باشد، OpenClaw وقتی ارائهدهنده مدل از قابلیت پشتیبانی کند، مدل پاسخ فعال را امتحان میکند.
تشخیص خودکار فهم رسانه (پیشفرض)
اگر tools.media.<capability>.enabled روی false تنظیم نشده باشد و مدلی پیکربندی نکرده باشید، OpenClaw با این ترتیب تشخیص خودکار انجام میدهد و در اولین گزینه کارآمد متوقف میشود:
Active reply model
مدل پاسخ فعال، وقتی ارائهدهنده آن از قابلیت پشتیبانی کند.
agents.defaults.imageModel
refهای primary/fallback در agents.defaults.imageModel (فقط تصویر).
refهای provider/model را ترجیح دهید. refهای bare فقط وقتی match یکتا باشد از ورودیهای مدل ارائهدهنده دارای قابلیت تصویر پیکربندیشده qualify میشوند.
Local CLIs (audio only)
CLIهای محلی (اگر نصب باشند):
sherpa-onnx-offline(بهSHERPA_ONNX_MODEL_DIRبا encoder/decoder/joiner/tokens نیاز دارد)whisper-cli(whisper-cpp؛ ازWHISPER_CPP_MODELیا مدل tiny همراه استفاده میکند)whisper(CLI پایتون؛ مدلها را بهصورت خودکار دانلود میکند)
Gemini CLI
gemini با استفاده از read_many_files.
Provider auth
- ورودیهای پیکربندیشده
models.providers.*که از قابلیت پشتیبانی میکنند پیش از ترتیب fallback همراه امتحان میشوند. - ارائهدهندگان پیکربندی فقط-تصویر با مدل دارای قابلیت تصویر، حتی وقتی Plugin فروشنده همراه نباشند، بهصورت خودکار برای فهم رسانه ثبت میشوند.
- فهم تصویر Ollama وقتی بهصورت صریح انتخاب شود در دسترس است، برای مثال از طریق
agents.defaults.imageModelیاopenclaw infer image describe --model ollama/<vision-model>.
ترتیب fallback همراه:
- صدا: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
- تصویر: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
- ویدئو: Google → Qwen → Moonshot
برای غیرفعال کردن تشخیص خودکار، تنظیم کنید:
{
tools: {
media: {
audio: {
enabled: false,
},
},
},
}
پشتیبانی از محیط proxy (مدلهای ارائهدهنده)
وقتی فهم رسانه صوتی و ویدئویی مبتنی بر ارائهدهنده فعال باشد، OpenClaw متغیرهای محیطی استاندارد proxy خروجی را برای فراخوانیهای HTTP ارائهدهنده رعایت میکند:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
اگر هیچ متغیر محیطی proxy تنظیم نشده باشد، فهم رسانه از egress مستقیم استفاده میکند. اگر مقدار proxy بدفرمت باشد، OpenClaw یک warning ثبت میکند و به fetch مستقیم fallback میکند.
قابلیتها (اختیاری)
اگر capabilities را تنظیم کنید، ورودی فقط برای آن نوعهای رسانه اجرا میشود. برای فهرستهای مشترک، OpenClaw میتواند پیشفرضها را استنتاج کند:
openai،anthropic،minimax: تصویرminimax-portal: تصویرmoonshot: تصویر + ویدئوopenrouter: تصویرgoogle(Gemini API): تصویر + صدا + ویدئوqwen: تصویر + ویدئوmistral: صداzai: تصویرgroq: صداxai: صداdeepgram: صدا- هر کاتالوگ
models.providers.<id>.models[]با مدل دارای قابلیت تصویر: تصویر
برای ورودیهای CLI، برای جلوگیری از matchهای غافلگیرکننده capabilities را صریح تنظیم کنید. اگر capabilities را حذف کنید، ورودی برای فهرستی که در آن ظاهر میشود واجد شرایط است.
ماتریس پشتیبانی ارائهدهنده (یکپارچهسازیهای OpenClaw)
| قابلیت | یکپارچهسازی ارائهدهنده | نکات |
|---|---|---|
| تصویر | OpenAI, OpenAI Codex OAuth, Codex app-server, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, config providers | Pluginهای فروشنده پشتیبانی تصویر را ثبت میکنند؛ openai-codex/* از plumbing ارائهدهنده OAuth استفاده میکند؛ codex/* از یک turn محدود Codex app-server استفاده میکند؛ MiniMax و MiniMax OAuth هر دو از MiniMax-VL-01 استفاده میکنند؛ ارائهدهندگان پیکربندی دارای قابلیت تصویر بهصورت خودکار ثبت میشوند. |
| صدا | OpenAI, Groq, xAI, Deepgram, Google, SenseAudio, ElevenLabs, Mistral | transcription ارائهدهنده (Whisper/Groq/xAI/Deepgram/Gemini/SenseAudio/Scribe/Voxtral). |
| ویدئو | Google, Qwen, Moonshot | فهم ویدئو توسط ارائهدهنده از طریق Pluginهای فروشنده؛ فهم ویدئو Qwen از endpointهای Standard DashScope استفاده میکند. |
راهنمای انتخاب مدل
- وقتی کیفیت و ایمنی اهمیت دارد، قویترین مدل نسل جدید موجود را برای هر قابلیت رسانه ترجیح دهید.
- برای agentهای دارای ابزار که ورودیهای غیرقابل اعتماد را مدیریت میکنند، از مدلهای رسانهای قدیمیتر/ضعیفتر پرهیز کنید.
- برای دسترسپذیری، حداقل یک fallback برای هر قابلیت نگه دارید (مدل باکیفیت + مدل سریعتر/ارزانتر).
- fallbackهای CLI (
whisper-cli،whisper،gemini) وقتی APIهای ارائهدهنده در دسترس نیستند مفیدند. - نکته
parakeet-mlx: با--output-dir، OpenClaw وقتی قالب خروجیtxtباشد (یا مشخص نشده باشد)<output-dir>/<media-basename>.txtرا میخواند؛ قالبهای غیرtxtبه stdout fallback میکنند.
policy پیوست
attachments برای هر قابلیت کنترل میکند کدام پیوستها پردازش شوند:
mode"first" | "all"اینکه نخستین پیوست انتخابشده پردازش شود یا همهٔ آنها.
maxAttachmentsnumberتعداد موارد پردازششده را محدود میکند.
prefer"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:را حذف میکند؛ نشانگرهای مرزی و فراداده همچنان باقی میمانند. - اگر فایلی متن قابل استخراج نداشته باشد، OpenClaw مقدار
[No extractable text]را تزریق میکند. - اگر یک PDF در این مسیر به تصاویر صفحهٔ رندرشده برگردد، پرامپت رسانه جاینگهدار
[PDF content rendered to images; images not forwarded to model]را نگه میدارد، زیرا این مرحلهٔ استخراج پیوست بلوکهای متنی را ارسال میکند، نه تصاویر PDF رندرشده را.
نمونههای پیکربندی
مدلهای مشترک + بازنویسیها
{
tools: {
media: {
models: [
{ provider: "openai", model: "gpt-5.5", capabilities: ["image"] },
{
provider: "google",
model: "gemini-3-flash-preview",
capabilities: ["image", "audio", "video"],
},
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
capabilities: ["image", "video"],
},
],
audio: {
attachments: { mode: "all", maxAttachments: 2 },
},
video: {
maxChars: 500,
},
},
},
}
فقط صدا + ویدئو
{
tools: {
media: {
audio: {
enabled: true,
models: [
{ provider: "openai", model: "gpt-4o-mini-transcribe" },
{
type: "cli",
command: "whisper",
args: ["--model", "base", "{{MediaPath}}"],
},
],
},
video: {
enabled: true,
maxChars: 500,
models: [
{ provider: "google", model: "gemini-3-flash-preview" },
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
},
],
},
},
},
}
فقط تصویر
{
tools: {
media: {
image: {
enabled: true,
maxBytes: 10485760,
maxChars: 500,
models: [
{ provider: "openai", model: "gpt-5.5" },
{ provider: "anthropic", model: "claude-opus-4-6" },
{
type: "cli",
command: "gemini",
args: [
"-m",
"gemini-3-flash",
"--allowed-tools",
"read_file",
"Read the media at {{MediaPath}} and describe it in <= {{MaxChars}} characters.",
],
},
],
},
},
},
}
ورودی واحد چندوجهی
{
tools: {
media: {
image: {
models: [
{
provider: "google",
model: "gemini-3.1-pro-preview",
capabilities: ["image", "video", "audio"],
},
],
},
audio: {
models: [
{
provider: "google",
model: "gemini-3.1-pro-preview",
capabilities: ["image", "video", "audio"],
},
],
},
video: {
models: [
{
provider: "google",
model: "gemini-3.1-pro-preview",
capabilities: ["image", "video", "audio"],
},
],
},
},
},
}
خروجی وضعیت
وقتی درک رسانه اجرا میشود، /status شامل یک خط خلاصهٔ کوتاه است:
📎 Media: image ok (openai/gpt-5.4) · audio skipped (maxBytes)
این مورد، نتیجهها را بهازای هر قابلیت و در صورت کاربرد، ارائهدهنده/مدل انتخابشده را نشان میدهد.
نکتهها
- درک بهصورت بهترین تلاش انجام میشود. خطاها پاسخها را مسدود نمیکنند.
- پیوستها حتی وقتی درک غیرفعال باشد، همچنان به مدلها ارسال میشوند.
- از
scopeبرای محدودکردن محل اجرای درک استفاده کنید (برای مثال فقط DMها).