Nodes and media
درک رسانهای
OpenClaw میتواند پیش از اجرای خط لولهٔ پاسخ، رسانهٔ ورودی (تصویر/صدا/ویدئو) را خلاصه کند تا تجزیهٔ فرمان و مسیریابی بهجای بایتهای خام، بر اساس متن کوتاه انجام شوند. قابلیت درک، ابزارهای محلی یا کلیدهای ارائهدهنده را بهطور خودکار شناسایی میکند؛ همچنین میتوانید مدلها را بهصراحت پیکربندی کنید. رسانهٔ اصلی همواره طبق روال معمول به مدل تحویل داده میشود؛ اگر درک ناموفق یا غیرفعال باشد، جریان پاسخ بدون تغییر ادامه مییابد.
Pluginهای فروشندگان، فرادادهٔ قابلیتها را ثبت میکنند (اینکه کدام ارائهدهنده از کدام نوع رسانه پشتیبانی میکند، مدل پیشفرض و اولویت). هستهٔ OpenClaw مالک پیکربندی مشترک tools.media، ترتیب بازگشت و یکپارچهسازی با خط لولهٔ پاسخ است.
نحوهٔ کار
جمعآوری پیوستها
پیوستهای ورودی (MediaPaths، MediaUrls، MediaTypes) را جمعآوری میکند.
انتخاب برای هر قابلیت
برای هر قابلیت فعال (تصویر/صدا/ویدئو)، پیوستها را مطابق سیاست attachments انتخاب میکند (پیشفرض: فقط نخستین پیوست).
انتخاب مدل
نخستین ورودی مدل واجد شرایط را انتخاب میکند (اندازه + قابلیت + دردسترسبودن احراز هویت).
بازگشت در صورت شکست
اگر مدل خطا دهد، مهلت آن پایان یابد یا رسانه از maxBytes فراتر رود، ورودی بعدی را امتحان میکند.
اعمال در صورت موفقیت
Body به یک بلوک [Image]، [Audio] یا [Video] تبدیل میشود. صدا همچنین {{Transcript}} را تنظیم میکند؛ تجزیهٔ فرمان در صورت وجود متن زیرنویس از آن و در غیر این صورت از رونوشت استفاده میکند. زیرنویسها بهشکل User text: درون بلوک حفظ میشوند.
پیکربندی
tools.media شامل یک فهرست مشترک مدل و بازنویسیهای مخصوص هر قابلیت است:
{ tools: { media: { concurrency: 2, // max concurrent capability runs (default) models: [/* shared list, gate with capabilities */], image: {/* optional overrides */}, audio: { /* optional overrides */ echoTranscript: true, echoFormat: '📝 "{transcript}"', }, video: {/* optional overrides */}, }, },}کلیدهای مخصوص هر قابلیت (image/audio/video):
| کلید | نوع | پیشفرض | توضیحات |
|---|---|---|---|
enabled |
boolean |
خودکار (false غیرفعال میکند) |
برای خاموشکردن تشخیص خودکار این قابلیت، روی false تنظیم کنید |
models |
آرایه | هیچکدام | پیش از فهرست مشترک tools.media.models ترجیح داده میشود |
prompt |
string |
"Describe the {media}." (+ راهنمای maxChars) |
بهطور پیشفرض فقط برای تصویر/ویدئو |
maxChars |
number |
500 (تصویر/ویدئو)، تنظیمنشده (صدا) |
اگر مدل مقدار بیشتری بازگرداند، خروجی کوتاه میشود |
maxBytes |
number |
تصویر 10485760، صدا 20971520، ویدئو 52428800 |
رسانهٔ بیشازحد بزرگ نادیده گرفته میشود و مدل بعدی امتحان میشود |
timeoutSeconds |
number |
60 (تصویر/صدا)، 120 (ویدئو) |
|
language |
string |
تنظیمنشده | راهنمای زبان برای رونویسی صدا |
baseUrl/headers/providerOptions/request |
- | - | بازنویسیهای درخواست ارائهدهنده؛ ابزارها و ارائهدهندگان سفارشی را ببینید |
attachments |
شیء | { mode: "first", maxAttachments: 1 } |
سیاست پیوست را ببینید |
scope |
شیء | تنظیمنشده | محدودسازی بر اساس channel/chatType/keyPrefix |
echoTranscript |
boolean |
false |
فقط صدا: پیش از پردازش عامل، رونوشت را به گفتوگو بازمیگرداند |
echoFormat |
string |
'📝 "{transcript}"' |
فقط صدا: جاینگهدار {transcript} |
گزینههای مخصوص Deepgram در providerOptions.deepgram قرار میگیرند (فیلد سطحبالای deepgram: { detectLanguage, punctuate, smartFormat } منسوخ شده است، اما همچنان خوانده میشود).
ورودیهای مدل
هر ورودی models[] یک ورودی ارائهدهنده (پیشفرض) یا یک ورودی CLI است:
ورودی ارائهدهنده
{ type: "provider", // default if omitted provider: "openai", model: "gpt-5.6-sol", prompt: "Describe the image in <= 500 chars.", maxChars: 500, maxBytes: 10485760, timeoutSeconds: 60, capabilities: ["image"], // optional, for multi-modal shared 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}} (مسیر پایهٔ فایل موقت، بدون پسوند) نیز استفاده کنند.
اعتبارنامههای ارائهدهنده
درک رسانه توسط ارائهدهنده از همان سازوکار تعیین احراز هویت فراخوانیهای عادی مدل استفاده میکند: نمایههای احراز هویت، متغیرهای محیطی و سپس models.providers.<providerId>.apiKey. ورودیهای tools.media.*.models[] فیلد درونخطی apiKey را نمیپذیرند.
{ models: { providers: { openai: { apiKey: "<OPENAI_API_KEY>" }, moonshot: { apiKey: "<MOONSHOT_API_KEY>" }, }, },}برای نمایهها، متغیرهای محیطی و URLهای پایهٔ سفارشی، ابزارها و ارائهدهندگان سفارشی را ببینید.
قواعد و رفتار
- رسانهای که از
maxBytesفراتر رود، برای آن مدل نادیده گرفته میشود و مدل بعدی امتحان میشود. - فایلهای صوتی کوچکتر از ۱۰۲۴ بایت خالی/خراب در نظر گرفته میشوند و پیش از رونویسی نادیده گرفته میشوند؛ در عوض، عامل یک رونوشت جاینگهدار قطعی دریافت میکند.
- اگر مدل اصلی فعال تصویر از بینایی بهصورت بومی پشتیبانی کند، OpenClaw بلوک خلاصهٔ
[Image]را نادیده میگیرد و تصویر اصلی را مستقیماً به مدل میفرستد. MiniMax یک استثنا است:minimax،minimax-cn،minimax-portalوminimax-portal-cnهمیشه درک تصویر را از طریق ارائهدهندهٔ رسانهٔMiniMax-VL-01متعلق به Plugin مسیریابی میکنند، حتی اگر فرادادهٔ قدیمی گفتوگوی 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 گزینههای زیر را بهترتیب امتحان میکند و در نخستین گزینهٔ کارآمد متوقف میشود:
مدل تصویر پیکربندیشده (فقط تصویر)
ارجاعهای اصلی/جایگزین agents.defaults.imageModel، مگر اینکه مدل فعال پاسخ از قبل بهصورت بومی از بینایی پشتیبانی کند. ارجاعهای provider/model ترجیح داده میشوند؛ ارجاعهای بدون ارائهدهنده فقط زمانی با ورودیهای مدل پیکربندیشدهٔ ارائهدهندهٔ دارای قابلیت تصویر تکمیل میشوند که تطبیق یکتا باشد.
مدل فعال پاسخ
مدل فعال پاسخ، هنگامی که ارائهدهندهٔ آن از قابلیت موردنظر پشتیبانی کند.
احراز هویت ارائهدهنده (فقط صدا، پیش از CLIهای محلی)
ورودیهای پیکربندیشدهٔ models.providers.* که از صدا پشتیبانی میکنند، پیش از CLIهای محلی امتحان میشوند. ترتیب اولویت ارائهدهندگان همراه (تساویها بر اساس شناسهٔ ارائهدهنده بهترتیب الفبایی شکسته میشوند): Groq/OpenAI → xAI → Deepgram → OpenRouter → Google/SenseAudio → Deepinfra/ElevenLabs → Mistral.
CLIهای محلی (فقط صدا)
فایلهای اجرایی محلی آماده به یک فهرست بازگشت مرتبشده تبدیل میشوند:
whisper-cliتنها زمانی در اولویت نخست قرار میگیرد که یک فراخوانی مدل پیشین در فرایند جاری، Metal یا CUDA را مشاهده کرده باشدsherpa-onnx-offlineبا پیشفرض CPU (بهSHERPA_ONNX_MODEL_DIRحاویtokens.txt/encoder.onnx/decoder.onnx/joiner.onnxنیاز دارد)whisper-cliهنگامی که شتابدهی صرفاً در زمان ساخت ممکن باشد یا هنوز مشاهده نشده باشدparakeet-mlxروی Apple Silicon (دارای قابلیت MLX، استفاده از دستگاه مشاهده نشده است)whisper(CLI پایتون؛ بهطور پیشفرض از مدلturboاستفاده میکند و آن را خودکار بارگیری میکند)
بررسی قابلیت پشتیبان ذخیرهٔ موقت میشود و مدلی را بارگیری نمیکند. قابلیت زمان ساخت، پرچمهای پشتیبان درخواستی و پشتیبانی که در یک فراخوانی واقعی مشاهده شده است، جدا از یکدیگر باقی میمانند. whisper.cpp شناساییشده بهطور خودکار، گزارشهای اجرای مدل را فعال نگه میدارد تا خط پشتیبان منتخب بالادستی ثبت شود. ورودیهای صریح CLI ترتیب پیکربندیشده، پرچمهای پشتیبان و پرچمهای خروجی خود را حفظ میکنند.
احراز هویت ارائهدهنده (تصویر/ویدئو)
ورودیهای پیکربندیشدهٔ models.providers.* که از قابلیت موردنظر پشتیبانی میکنند، پیش از ترتیب بازگشت همراه امتحان میشوند. ارائهدهندگان پیکربندی مختص تصویر که مدلی دارای قابلیت تصویر دارند، حتی اگر Plugin فروشندهٔ همراه نباشند، بهطور خودکار برای درک رسانه ثبت میشوند.
ترتیب اولویت ارائهدهندگان همراه (تساویها بر اساس شناسهٔ ارائهدهنده بهترتیب الفبایی شکسته میشوند):
- تصویر: Anthropic/OpenAI → Google → MiniMax → Deepinfra → MiniMax Portal → Z.AI
- ویدئو: Google → Qwen → Moonshot
CLI Antigravity (فقط تصویر/ویدئو)
نخستین فایل اجرایی نصبشدهٔ agy یا antigravity (قابل بازنویسی با OPENCLAW_ANTIGRAVITY_CLI)، در محیط ایزولهشده نسبت به دایرکتوری رسانه.
برای غیرفعالکردن تشخیص خودکار یک قابلیت:
{ tools: { media: { audio: { enabled: false, }, }, },}پشتیبانی از پراکسی (فراخوانیهای ارائهدهنده برای صدا/ویدئو)
درک مبتنی بر ارائهدهنده برای صدا و ویدئو از متغیرهای محیطی استاندارد پراکسی خروجی، از جمله قواعد عبور NO_PROXY/no_proxy، پیروی میکند: HTTPS_PROXY، HTTP_PROXY، ALL_PROXY، https_proxy، http_proxy، all_proxy. متغیرهای حروف کوچک بر حروف بزرگ اولویت دارند. اگر هیچکدام تنظیم نشده باشند، درک رسانه از خروجی مستقیم استفاده میکند؛ اگر مقدار پراکسی بدساخت باشد، OpenClaw یک هشدار ثبت میکند و به دریافت مستقیم بازمیگردد. درک تصویر از این مسیر پراکسی عبور نمیکند.
قابلیتها
برای محدودکردن یک ورودی models[] به انواع مشخص رسانه، capabilities را روی آن تنظیم کنید. برای فهرستهای مشترک، OpenClaw مقادیر پیشفرض هر ارائهدهندهٔ همراه را استنباط میکند:
| ارائهدهنده | قابلیتها |
|---|---|
openai, anthropic, minimax |
تصویر |
minimax-portal |
تصویر |
moonshot |
تصویر + ویدئو |
openrouter |
تصویر + صدا |
google (رابط برنامهنویسی Gemini) |
تصویر + صدا + ویدئو |
qwen |
تصویر + ویدئو |
deepinfra |
تصویر + صدا |
mistral |
صدا |
zai |
تصویر |
groq, xai, deepgram, senseaudio |
صدا |
هر کاتالوگ models.providers.<id>.models[] دارای مدلی با قابلیت تصویر |
تصویر |
برای ورودیهای CLI، مقدار capabilities را صریحاً تنظیم کنید تا از تطبیقهای غیرمنتظره جلوگیری شود؛ اگر حذف شود، ورودی برای تمام فهرستهای قابلیتی که در آنها ظاهر میشود واجد شرایط خواهد بود.
ماتریس پشتیبانی ارائهدهندگان
| قابلیت | ارائهدهندگان | نکات |
|---|---|---|
| تصویر | Anthropic، سرور برنامهٔ Codex، Deepinfra، Google، MiniMax، MiniMax Portal، Moonshot، OpenAI، OpenAI Codex OAuth، OpenRouter، Qwen، Z.AI، ارائهدهندگان پیکربندی | Pluginهای فروشندگان پشتیبانی از تصویر را ثبت میکنند؛ openai/* میتواند از مسیریابی کلید API یا Codex OAuth استفاده کند؛ codex/* از یک نوبت محدود سرور برنامهٔ Codex استفاده میکند؛ ارائهدهندگان پیکربندی دارای قابلیت تصویر بهطور خودکار ثبت میشوند. |
| صدا | Deepgram، Deepinfra، ElevenLabs، Google، Groq، Mistral، OpenAI، OpenRouter، SenseAudio، xAI | رونویسی ارائهدهنده (Whisper/Groq/xAI/Deepgram/OpenRouter STT/Gemini/SenseAudio/Scribe/Voxtral). |
| ویدئو | Google، Moonshot، Qwen | درک ویدئو توسط ارائهدهنده از طریق Pluginهای فروشنده؛ درک ویدئو در Qwen از نقاط پایانی استاندارد DashScope استفاده میکند. |
راهنمای انتخاب مدل
- هنگامی که کیفیت و ایمنی اهمیت دارد، برای هر قابلیت رسانهای قویترین مدل نسل فعلی را ترجیح دهید.
- برای عاملهای مجهز به ابزار که ورودیهای غیرقابلاعتماد را پردازش میکنند، از مدلهای رسانهای قدیمیتر یا ضعیفتر اجتناب کنید.
- برای دسترسپذیری، دستکم یک مدل جایگزین برای هر قابلیت نگه دارید (مدل باکیفیت + مدل سریعتر/ارزانتر).
- گزینههای جایگزین 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 مختص هر قابلیت تعیین میکند کدام پیوستها پردازش شوند:
mode"first" | "all"default: firstفقط نخستین پیوست انتخابشده یا همهٔ آنها را پردازش میکند.
maxAttachmentsnumberdefault: 1تعداد موارد پردازششده را محدود میکند.
prefer"first" | "last" | "path" | "url"اولویت انتخاب میان پیوستهای نامزد.
هنگامی که mode: "all" باشد، خروجیها با [تصویر 1/2]، [صدا 2/2] و مانند آن برچسبگذاری میشوند.
استخراج پیوست فایل
- متن استخراجشده از فایل، پیش از افزودهشدن به درخواست رسانه، بهعنوان محتوای خارجی غیرقابلاعتماد بستهبندی میشود و از نشانگرهای مرزی مانند
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>بههمراه خط فرادادهٔSource: Externalاستفاده میکند. - این مسیر عمداً بنر طولانی
SECURITY NOTICE:را حذف میکند تا درخواست رسانه کوتاه بماند؛ نشانگرهای مرزی و فراداده همچنان اعمال میشوند. - فایلی که متن قابلاستخراجی ندارد،
[متن قابلاستخراجی وجود ندارد]دریافت میکند. - اگر یک PDF به تصاویر رندرشدهٔ صفحه بازگردد، OpenClaw آن تصاویر را به مدلهای پاسخگوی دارای قابلیت بینایی ارسال میکند و جاینگهدار
[محتوای PDF به تصویر رندر شد]را در بلوک فایل نگه میدارد.
نمونههای پیکربندی
مدلهای مشترک + بازنویسیها
{ tools: { media: { models: [ { provider: "openai", model: "gpt-5.6-sol", 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.6-sol" }, { provider: "anthropic", model: "claude-opus-4-8" }, { 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 شامل یک خط خلاصه برای هر قابلیت است:
📎 رسانه: تصویر موفق (openai/gpt-5.6-sol) · صدا موفق (whisper-cli مشاهدهشده=metal)برای فهرست موجودی پیشبررسی، openclaw capability audio providers را اجرا کنید. ردیفهای محلی، برندهٔ گزینهٔ جایگزین محلی را جدا از انتخاب سراسری ارائهدهنده، آمادگی، و فیلدهای مجزای پشتیبان دارای قابلیت/درخواستشده/مشاهدهشده نمایش میدهند. همین انتخاب محلی بهصورت یک یافتهٔ اطلاعرسان در doctor نیز در دسترس است:
openclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min infoنکات
- درک بهصورت بهترین تلاش انجام میشود. خطاها مانع پاسخها نمیشوند.
- حتی هنگامی که درک غیرفعال است، پیوستها همچنان به مدلها ارسال میشوند.
- از
scopeبرای محدودکردن محل اجرای درک استفاده کنید (برای مثال، فقط پیامهای مستقیم).