Nodes and media
درک رسانهها
OpenClaw میتواند رسانههای ورودی را خلاصه کند (تصویر/صدا/ویدیو) پیش از آنکه پایپلاین پاسخ اجرا شود. وقتی ابزارهای محلی یا کلیدهای ارائهدهنده در دسترس باشند، بهطور خودکار آنها را تشخیص میدهد و میتوان آن را غیرفعال یا سفارشی کرد. اگر فهم رسانه خاموش باشد، مدلها همچنان فایلها/URLهای اصلی را طبق معمول دریافت میکنند.
رفتار رسانهای اختصاصی فروشندهها توسط Pluginهای فروشنده ثبت میشود، در حالی که هستهٔ OpenClaw مالک پیکربندی مشترک tools.media، ترتیب بازگشت جایگزین، و یکپارچهسازی با پایپلاین پاسخ است.
اهداف
- اختیاری: پیشهضم رسانههای ورودی به متن کوتاه برای مسیریابی سریعتر + تجزیهٔ بهتر فرمان.
- حفظ ارسال رسانهٔ اصلی به مدل (همیشه).
- پشتیبانی از APIهای ارائهدهنده و جایگزینهای CLI.
- اجازهٔ استفاده از چند مدل با بازگشت جایگزین ترتیبی (خطا/اندازه/مهلت زمانی).
رفتار سطح بالا
گردآوری پیوستها
پیوستهای ورودی را گردآوری کنید (MediaPaths, MediaUrls, MediaTypes).
انتخاب بر پایهٔ هر قابلیت
برای هر قابلیت فعال (تصویر/صدا/ویدیو)، پیوستها را بر پایهٔ سیاست انتخاب کنید (پیشفرض: اولین).
انتخاب مدل
اولین ورودی مدل واجد شرایط را انتخاب کنید (اندازه + قابلیت + احراز هویت).
بازگشت جایگزین هنگام شکست
اگر مدلی شکست بخورد یا رسانه بیش از حد بزرگ باشد، به ورودی بعدی بازگردید.
اعمال بلوک موفقیت
هنگام موفقیت:
Bodyبه بلوک[Image]،[Audio]، یا[Video]تبدیل میشود.- صدا
{{Transcript}}را تنظیم میکند؛ تجزیهٔ فرمان وقتی متن زیرنویس/شرح موجود باشد از آن استفاده میکند، وگرنه از متن پیادهسازیشده. - شرحها بهصورت
User text:داخل بلوک حفظ میشوند.
اگر فهم رسانه شکست بخورد یا غیرفعال باشد، جریان پاسخ ادامه پیدا میکند با بدنه + پیوستهای اصلی.
نمای کلی پیکربندی
tools.media از مدلهای مشترک بههمراه بازنویسیهای هر قابلیت پشتیبانی میکند:
کلیدهای سطح بالا
tools.media.models: فهرست مدل مشترک (برای محدودسازی ازcapabilitiesاستفاده کنید).tools.media.image/tools.media.audio/tools.media.video:- پیشفرضها (
prompt,maxChars,maxBytes,timeoutSeconds,language) - بازنویسیهای ارائهدهنده (
baseUrl,headers,providerOptions) - گزینههای صوتی Deepgram از طریق
tools.media.audio.providerOptions.deepgram - کنترلهای بازتاب متن پیادهسازیشدهٔ صدا (
echoTranscript، پیشفرضfalse؛echoFormat) - فهرست
modelsمخصوص هر قابلیت اختیاری (پیش از مدلهای مشترک ترجیح داده میشود) - سیاست
attachments(mode,maxAttachments,prefer) scope(دروازهگذاری اختیاری بر پایهٔ channel/chatType/session key)
- پیشفرضها (
tools.media.concurrency: حداکثر اجرای همزمان قابلیتها (پیشفرض 2).
{ tools: { media: { models: [ /* shared list */ ], image: { /* optional overrides */ }, audio: { /* optional overrides */ echoTranscript: true, echoFormat: '📝 "{transcript}"', }, video: { /* optional overrides */ }, }, },}ورودیهای مدل
هر ورودی models[] میتواند ارائهدهنده یا CLI باشد:
ورودی ارائهدهنده
{ 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
{ 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}}(دایرکتوری موقتی ساختهشده برای این اجرا){{OutputBase}}(مسیر پایهٔ فایل موقت، بدون پسوند)
پیشفرضها و محدودیتها
پیشفرضهای پیشنهادی:
maxChars: 500 برای تصویر/ویدیو (کوتاه، مناسب فرمان)maxChars: برای صدا تنظیمنشده (متن کامل پیادهسازیشده مگر اینکه حدی تعیین کنید)maxBytes:- تصویر: 10MB
- صدا: 20MB
- ویدیو: 50MB
قوانین
- اگر رسانه از
maxBytesفراتر برود، آن مدل رد میشود و مدل بعدی امتحان میشود. - فایلهای صوتی کوچکتر از 1024 bytes خالی/خراب تلقی میشوند و پیش از پیادهسازی توسط ارائهدهنده/CLI رد میشوند؛ زمینهٔ پاسخ ورودی یک متن پیادهسازیشدهٔ جایگزین و قطعی دریافت میکند تا عامل بداند یادداشت بیش از حد کوچک بوده است.
- اگر مدل بیش از
maxCharsبرگرداند، خروجی کوتاه میشود. promptبهطور پیشفرض به "Describe the {media}." ساده بههمراه راهنمایmaxCharsتبدیل میشود (فقط تصویر/ویدیو).- اگر مدل تصویر اصلی فعال از قبل بهصورت بومی از بینایی پشتیبانی کند، OpenClaw بلوک خلاصهٔ
[Image]را رد میکند و در عوض تصویر اصلی را به مدل میفرستد. - اگر مدل اصلی Gateway/WebChat فقط متنی باشد، پیوستهای تصویری بهصورت ارجاعهای منتقلشدهٔ
media://inbound/*حفظ میشوند تا ابزارهای تصویر/PDF یا مدل تصویر پیکربندیشده همچنان بتوانند آنها را بررسی کنند، بهجای اینکه پیوست از دست برود. - درخواستهای صریح
openclaw infer image describe --model <provider/model>متفاوتاند: آنها همان ارائهدهنده/مدل دارای قابلیت تصویر را مستقیماً اجرا میکنند، از جمله ارجاعهای Ollama مانندollama/qwen2.5vl:7b. - اگر
<capability>.enabled: trueباشد اما هیچ مدلی پیکربندی نشده باشد، OpenClaw وقتی ارائهدهندهٔ آن قابلیت را پشتیبانی کند، مدل پاسخ فعال را امتحان میکند.
تشخیص خودکار فهم رسانه (پیشفرض)
اگر tools.media.<capability>.enabled روی false تنظیم نشده باشد و مدلی پیکربندی نکرده باشید، OpenClaw به این ترتیب تشخیص خودکار انجام میدهد و در اولین گزینهٔ کارآمد متوقف میشود:
مدل پاسخ فعال
مدل پاسخ فعال وقتی ارائهدهندهاش از قابلیت پشتیبانی کند.
agents.defaults.imageModel
ارجاعهای اصلی/جایگزین agents.defaults.imageModel (فقط تصویر).
ارجاعهای provider/model را ترجیح دهید. ارجاعهای بدون پیشوند فقط زمانی از ورودیهای مدل ارائهدهندهٔ پیکربندیشده و دارای قابلیت تصویر واجد شرایط میشوند که تطابق یکتا باشد.
CLIهای محلی (فقط صدا)
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.
احراز هویت ارائهدهنده
- ورودیهای پیکربندیشدهٔ
models.providers.*که از قابلیت پشتیبانی میکنند، پیش از ترتیب بازگشت جایگزین همراه امتحان میشوند. - ارائهدهندههای پیکربندی فقط تصویر با مدل دارای قابلیت تصویر، حتی وقتی Plugin فروشندهٔ همراه نباشند، بهطور خودکار برای فهم رسانه ثبت میشوند.
- فهم تصویر Ollama وقتی بهصورت صریح انتخاب شود در دسترس است، برای مثال از طریق
agents.defaults.imageModelیاopenclaw infer image describe --model ollama/<vision-model>.
ترتیب بازگشت جایگزین همراه:
- صدا: OpenAI → Groq → xAI → Deepgram → OpenRouter → Google → SenseAudio → ElevenLabs → Mistral
- تصویر: OpenAI → Anthropic → Google → MiniMax → MiniMax Portal → Z.AI
- ویدیو: Google → Qwen → Moonshot
برای غیرفعال کردن تشخیص خودکار، تنظیم کنید:
{ tools: { media: { audio: { enabled: false, }, }, },}پشتیبانی از محیط پراکسی (مدلهای ارائهدهنده)
وقتی فهم رسانهٔ صدا و ویدیو مبتنی بر ارائهدهنده فعال باشد، OpenClaw متغیرهای محیطی استاندارد پراکسی خروجی را برای فراخوانیهای HTTP ارائهدهنده رعایت میکند:
HTTPS_PROXYHTTP_PROXYALL_PROXYhttps_proxyhttp_proxyall_proxy
اگر هیچ متغیر محیطی پراکسی تنظیم نشده باشد، فهم رسانه از خروج مستقیم استفاده میکند. اگر مقدار پراکسی بدشکل باشد، OpenClaw هشدار ثبت میکند و به واکشی مستقیم بازمیگردد.
قابلیتها (اختیاری)
اگر capabilities را تنظیم کنید، ورودی فقط برای آن نوعهای رسانه اجرا میشود. برای فهرستهای مشترک، OpenClaw میتواند پیشفرضها را استنباط کند:
openai,anthropic,minimax: تصویرminimax-portal: تصویرmoonshot: تصویر + ویدیوopenrouter: تصویر + صداgoogle(Gemini API): تصویر + صدا + ویدیوqwen: تصویر + ویدیوmistral: صداzai: تصویرgroq: صداxai: صداdeepgram: صدا- هر کاتالوگ
models.providers.<id>.models[]با مدل دارای قابلیت تصویر: تصویر
برای ورودیهای CLI، برای جلوگیری از تطابقهای غافلگیرکننده، capabilities را بهصورت صریح تنظیم کنید. اگر capabilities را حذف کنید، ورودی برای فهرستی که در آن ظاهر شده واجد شرایط است.
ماتریس پشتیبانی ارائهدهنده (یکپارچهسازیهای OpenClaw)
| قابلیت | یکپارچهسازی ارائهدهنده | یادداشتها |
|---|---|---|
| تصویر | OpenAI, OpenAI Codex OAuth, Codex app-server, OpenRouter, Anthropic, Google, MiniMax, Moonshot, Qwen, Z.AI, config providers | Pluginهای فروشنده پشتیبانی تصویر را ثبت میکنند؛ openai-codex/* از زیرساخت ارائهدهندهٔ OAuth استفاده میکند؛ codex/* از یک نوبت محدود Codex app-server استفاده میکند؛ MiniMax و MiniMax OAuth هر دو از MiniMax-VL-01 استفاده میکنند؛ ارائهدهندههای پیکربندی دارای قابلیت تصویر بهطور خودکار ثبت میشوند. |
| صدا | OpenAI, Groq, xAI, Deepgram, OpenRouter, Google, SenseAudio, ElevenLabs, Mistral | پیادهسازی گفتار به متن توسط ارائهدهنده (Whisper/Groq/xAI/Deepgram/OpenRouter STT/Gemini/SenseAudio/Scribe/Voxtral). |
| ویدیو | Google, Qwen, Moonshot | فهم ویدیو توسط ارائهدهنده از طریق Pluginهای فروشنده؛ فهم ویدیوی Qwen از endpointهای Standard DashScope استفاده میکند. |
راهنمای انتخاب مدل
- وقتی کیفیت و ایمنی مهم است، قویترین مدل نسل جدید در دسترس را برای هر قابلیت رسانه ترجیح دهید.
- برای عاملهای دارای ابزار که ورودیهای نامطمئن را پردازش میکنند، از مدلهای رسانهای قدیمیتر/ضعیفتر پرهیز کنید.
- برای دسترسپذیری، برای هر قابلیت حداقل یک جایگزین نگه دارید (مدل باکیفیت + مدل سریعتر/ارزانتر).
- جایگزینهای CLI (
whisper-cli,whisper,gemini) زمانی مفیدند که APIهای ارائهدهنده در دسترس نباشند. - یادداشت
parakeet-mlx: با--output-dir، OpenClaw وقتی قالب خروجیtxtباشد (یا مشخص نشده باشد)،<output-dir>/<media-basename>.txtرا میخواند؛ قالبهای غیرtxtبه stdout بازمیگردند.
سیاست پیوست
attachments مخصوص هر قابلیت کنترل میکند کدام پیوستها پردازش شوند:
mode"first" | "all"default: firstاینکه نخستین پیوست انتخابشده پردازش شود یا همهٔ آنها.
maxAttachmentsnumberdefault: 1تعداد موارد پردازششده را محدود میکند.
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برای محدود کردن محل اجرای درک استفاده کنید (مثلاً فقط پیامهای مستقیم).