Nodes and media
صدا و یادداشتهای صوتی
چه کاری انجام میدهد
هنگامی که درک صوت فعال باشد (یا بهطور خودکار تشخیص داده شود)، OpenClaw:
- نخستین پیوست صوتی (مسیر محلی یا URL) را پیدا میکند و در صورت نیاز آن را دانلود میکند.
- پیش از ارسال به هر ورودی مدل،
maxBytesرا اعمال میکند. - نخستین ورودی مدل واجد شرایط را بهترتیب اجرا میکند (ارائهدهنده یا CLI)؛ اگر ورودی ناموفق باشد یا نادیده گرفته شود (اندازه/مهلت زمانی)، ورودی بعدی امتحان میشود.
- در صورت موفقیت،
Bodyرا با یک بلوک[Audio]جایگزین میکند و{{Transcript}}را تنظیم میکند.
هنگامی که رونویسی موفق باشد، CommandBody/RawBody نیز روی متن رونویسیشده تنظیم میشوند تا دستورهای اسلش همچنان کار کنند. با --verbose، گزارشها نشان میدهند رونویسی چه زمانی اجرا میشود و چه زمانی بدنه را جایگزین میکند.
تشخیص خودکار (پیشفرض)
اگر مدلها را پیکربندی نکرده باشید و tools.media.audio.enabled برابر با false نباشد، OpenClaw بهترتیب زیر تشخیص خودکار را انجام میدهد و در نخستین گزینه عملیاتی متوقف میشود:
- مدل فعال پاسخدهی، هنگامی که ارائهدهنده آن از درک صوت پشتیبانی کند.
- احراز هویت پیکربندیشده ارائهدهنده — هر ورودی
models.providers.*که احراز هویت آن برای ارائهدهندهای پشتیبان رونویسی صوت در دسترس باشد. این مورد پیش از CLIهای محلی بررسی میشود، بنابراین کلید API پیکربندیشده همیشه بر یک فایل اجرایی محلی درPATHاولویت دارد. اولویت ارائهدهندگان در صورت پیکربندی چند مورد: Groq، OpenAI، xAI، Deepgram، Google، SenseAudio، ElevenLabs، Mistral. - CLIهای محلی (فقط اگر احراز هویت هیچ ارائهدهندهای پیدا نشود). OpenClaw یک فهرست بازگشت مرتبشده میسازد:
whisper-cli، پیش از پیشفرضهای CPU فقط هنگامی که اجرای قبلی یک مدل در فرایند جاری Metal یا CUDA را مشاهده کرده باشدsherpa-onnx-offlineروی ارائهدهنده پیشفرض CPU آن (بهSHERPA_ONNX_MODEL_DIRهمراه باtokens.txt،encoder.onnx،decoder.onnxوjoiner.onnxنیاز دارد)whisper-cliهنگامی که Metal/CUDA فقط قابلیت ساخت دارد یا بکاند انتخابشده بهشکل دیگری مشاهده نشده استparakeet-mlxروی Apple Silicon (دارای قابلیت MLX؛ استفاده از دستگاه همچنان مشاهدهنشده باقی میماند)whisper(CLI پایتون؛ مدلها را بهطور خودکار دانلود میکند)
منشأ نصب/پیوند، شاهد قابلیت است، نه شاهد اجرا. این مورد هرگز بهتنهایی یک گزینه را جلوتر از sherpa مبتنی بر CPU قرار نمیدهد. OpenClaw صرفاً برای بررسی یک بکاند، هنگام راهاندازی یا بررسی وضعیت مدلی را بارگذاری نمیکند.
whisper.cpp تشخیصدادهشده بهطور خودکار، گزارشهای عادی اجرای مدل خود را فعال نگه میدارد تا OpenClaw بتواند خط بالادستی using … backend را ثبت کند. ورودیهای صریح CLI پرچمهای خروجی پیکربندیشده خود را حفظ میکنند.
تشخیص خودکار Gemini CLI برای درک رسانه با یک گزینه بازگشت Antigravity CLI محصورشده (agy) برای تصویر/ویدئو جایگزین شده است؛ صوت بهجز فایلهای اجرایی محلی بالا از گزینه بازگشت CLI استفاده نمیکند.
برای غیرفعالکردن تشخیص خودکار، tools.media.audio.enabled: false را تنظیم کنید. برای سفارشیسازی، ورودیهای دارای برچسب قابلیت را به tools.media.models اضافه کنید.
گزینش محلی را بدون رونویسی صوت بررسی کنید:
openclaw capability audio providersopenclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min infoفهرست موجودی ارائهدهندگان، گزینه برنده بازگشت محلی را جدا از انتخاب سراسری ارائهدهنده، بههمراه فیلدهای بکاندِ دارای قابلیت، درخواستشده و مشاهدهشده گزارش میکند. پس از اجرای رونویسی، /status بکاند درخواستشده یا مشاهدهشده را در خط رسانه گزارش میکند. ورودیهای صریح CLI دارای قابلیت صوت در tools.media.models همچنان انتخاب خودکار را دور میزنند؛ از پرچمهای ویژه بکاند آنها مانند --provider=cuda برای sherpa یا --no-gpu/--device برای whisper.cpp استفاده کنید.
نمونههای پیکربندی
ارائهدهنده + گزینه بازگشت CLI (OpenAI + Whisper CLI)
{ tools: { media: { models: [ { provider: "openai", model: "gpt-4o-transcribe", capabilities: ["audio"] }, { type: "cli", command: "whisper", args: ["--model", "base", "{{AttachmentPath}}"], timeoutSeconds: 45, capabilities: ["audio"], }, ], audio: { enabled: true, preferredModel: "openai/gpt-4o-transcribe" }, }, },}فقط ارائهدهنده (Deepgram)
{ tools: { media: { models: [{ provider: "deepgram", model: "nova-3", capabilities: ["audio"] }], audio: { enabled: true }, }, },}فقط ارائهدهنده (Mistral Voxtral)
{ tools: { media: { models: [{ provider: "mistral", model: "voxtral-mini-latest", capabilities: ["audio"] }], audio: { enabled: true }, }, },}فقط ارائهدهنده (SenseAudio)
{ tools: { media: { models: [ { provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319", capabilities: ["audio"], }, ], audio: { enabled: true }, }, },}بازتاب متن رونویسیشده در گفتوگو (اختیاری)
{ tools: { media: { audio: { enabled: true, echoTranscript: true, echoFormat: '📝 "{transcript}"', }, }, },}نکات و محدودیتها
- احراز هویت ارائهدهنده از ترتیب استاندارد احراز هویت مدل پیروی میکند (پروفایلهای احراز هویت، متغیرهای محیطی،
models.providers.*.apiKey). - جزئیات راهاندازی Groq: Groq.
- هنگام استفاده از
provider: "deepgram"، Deepgram مقدارDEEPGRAM_API_KEYرا دریافت میکند. جزئیات راهاندازی: Deepgram. - جزئیات راهاندازی Mistral: Mistral.
- هنگام استفاده از
provider: "senseaudio"، SenseAudio مقدارSENSEAUDIO_API_KEYرا دریافت میکند. جزئیات راهاندازی: SenseAudio. - ارائهدهندگان صوت میتوانند از پیشفرضهای زیر
tools.media.audioاستفاده کنند یاbaseUrl،headers،providerOptionsو محدودیتها را در ورودیtools.media.models[]خود بازنویسی کنند. - سقف داخلی اندازه صوت 20MB است. بازنویسی
maxBytesدر سطح ورودی میتواند آن را تغییر دهد؛ صوت بیشازحد بزرگ برای آن مدل نادیده گرفته میشود و ورودی بعدی امتحان میشود. - فایلهای صوتی کوچکتر از 1024 بایت پیش از رونویسی ارائهدهنده/CLI نادیده گرفته میشوند.
- مقدار پیشفرض
maxCharsبرای صوت تنظیمنشده است (متن رونویسی کامل). برای کوتاهکردن خروجی،tools.media.audio.maxCharsیاmaxCharsرا در سطح هر ورودی تنظیم کنید. - پیشفرض تشخیص خودکار OpenAI برابر با
gpt-4o-transcribeاست؛ برای گزینهای ارزانتر/سریعتر،model: "gpt-4o-mini-transcribe"را تنظیم کنید. - متن رونویسیشده با نام
{{Transcript}}در دسترس قالبها است. tools.media.audio.echoTranscriptبهطور پیشفرض خاموش است؛echoFormatیک جاینگهدار{transcript}میپذیرد.- خروجی استاندارد CLI به 5MB محدود است؛ خروجی CLI را مختصر نگه دارید.
argsمربوط به CLI باید برای مسیر فایل صوتی محلی از{{AttachmentPath}}استفاده کند. برای مهاجرت جاینگهدارهای منسوخ{input}از پیکربندیهای قدیمیترaudio.transcription.command،openclaw doctor --fixرا اجرا کنید (کلید بازنشسته:audio.transcription، جایگزینشده باtools.media.models).{{MediaPath}}همچنان یک نام مستعار سازگاری منسوخ است.tools.media.concurrencyوظایف رسانهای را محدود میکند؛ زمانبند GPU نیست.
STT محلی مقیم
STT محلی تشخیصدادهشده بهطور خودکار همچنان برای هر درخواست یک فرایند جداگانه اجرا میکند. OpenClaw در حال حاضر یک سرور مقیم whisper.cpp را مدیریت نمیکند، زیرا بسته استاندارد Homebrew با نام whisper-cpp آن سرور را غیرفعال میکند و نمونه بالادستی نیز صف پذیرش محدودشده پیکربندیشدهای ندارد. پیش از آنکه بتوان چرخهعمر مقیم تحت مالکیت Plugin را با ایمنی فعال کرد، به یک worker بستهبندیشده و نگهداریشده با سلامت/راهاندازی، اقامت مدل، صفبندی محدود، لغو/مهلت زمانی، عملیات بدون احراز هویت فقط روی loopback و بدون بازگشت ابری نیاز است.
پشتیبانی از محیط پراکسی
رونویسی صوت مبتنی بر ارائهدهنده، متغیرهای محیطی استاندارد پراکسی خروجی را مطابق با معناشناسی EnvHttpProxyAgent در undici رعایت میکند:
HTTPS_PROXY/https_proxyHTTP_PROXY/http_proxyALL_PROXY/all_proxy
متغیرهای با حروف کوچک بر متغیرهای با حروف بزرگ اولویت دارند؛ ورودیهای NO_PROXY/no_proxy (نام میزبانها، *.suffix یا host:port) پراکسی را دور میزنند. اگر هیچ متغیر محیطی پراکسی تنظیم نشده باشد، خروجی مستقیم استفاده میشود. اگر راهاندازی پراکسی ناموفق باشد (URL نادرست)، OpenClaw یک هشدار ثبت میکند و به دریافت مستقیم بازمیگردد.
تشخیص اشاره در گروهها
در کانالهایی که از پیشبررسی صوت پشتیبانی میکنند، هنگامی که requireMention: true برای گفتوگوی گروهی تنظیم شده باشد، OpenClaw صوت را پیش از بررسی اشارهها رونویسی میکند. به این ترتیب، اگر متن رونویسیشده یک یادداشت صوتی بدون زیرنویس شامل الگوی اشاره پیکربندیشده باشد، آن یادداشت میتواند از دروازه اشاره عبور کند. مستندات ویژه هر کانال، انتقالهایی را توضیح میدهند که به اشاره تایپشده نیاز دارند.
نحوه کار:
- اگر پیام صوتی بدنه متنی نداشته باشد و گروه به اشاره نیاز داشته باشد، OpenClaw نخستین پیوست صوتی را در مرحله پیشبررسی رونویسی میکند.
- متن رونویسیشده برای الگوهای اشاره (برای مثال
@BotName، محرکهای ایموجی) بررسی میشود. - اگر اشارهای پیدا شود، پیام وارد پایپلاین کامل پاسخدهی میشود.
رفتار بازگشت: اگر رونویسی پیشبررسی ناموفق باشد (مهلت زمانی، خطای API و غیره)، پیام به تشخیص اشاره فقطمتنی بازمیگردد تا پیامهای ترکیبی (متن + صوت) هرگز حذف نشوند.
انصراف برای هر گروه/موضوع Telegram:
- برای ردکردن بررسی اشاره در متن رونویسیشده پیشبررسی برای آن گروه،
channels.telegram.groups.<chatId>.disableAudioPreflight: trueرا تنظیم کنید. - برای بازنویسی در سطح هر موضوع،
channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflightرا تنظیم کنید (trueبرای ردکردن،falseبرای فعالسازی اجباری). - مقدار پیشفرض
falseاست (پیشبررسی هنگامی فعال میشود که شرایط دروازه اشاره برقرار باشند).
مثال: کاربری در یک گروه Telegram با requireMention: true یادداشت صوتیای میفرستد و میگوید «سلام @Claude، هوا چطور است؟». یادداشت صوتی رونویسی میشود، اشاره تشخیص داده میشود و عامل پاسخ میدهد.
نکات مهم
- قواعد دامنه از روش «نخستین تطابق برنده است» استفاده میکنند؛
chatTypeبهdirect،groupیاchannelنرمالسازی میشود. - مطمئن شوید CLI با کد 0 خارج میشود و متن ساده چاپ میکند؛ خروجی JSON باید از طریق
jq -r .textپردازش شود. - حالتهای شناختهشده خروجی فایل مرجع قطعی هستند: فایل متن رونویسیشده استنتاجیِ خالی یا مفقود، بهجای بازگشت به خروجی پیشرفت CLI، هیچ متن رونویسیشدهای تولید نمیکند.
- برای
parakeet-mlx، از--output-format txt(یاall) همراه با--output-dirو قالب خروجی پیشفرض{filename}استفاده کنید. متغیرهای محیطی بالادستیPARAKEET_OUTPUT_FORMATوPARAKEET_OUTPUT_TEMPLATEنیز رعایت میشوند. OpenClaw فایل<output-dir>/<media-basename>.txtرا میخواند؛ قالب پیشفرضsrt، قالبهای دیگر و قالبهای خروجی سفارشی همچنان از خروجی استاندارد استفاده میکنند. - مهلتهای زمانی را معقول نگه دارید (
timeoutSeconds، پیشفرض 60s) تا صف پاسخدهی مسدود نشود. - رونویسی پیشبررسی برای تشخیص اشاره فقط نخستین پیوست صوتی را پردازش میکند. پیوستهای صوتی اضافی در مرحله اصلی درک رسانه پردازش میشوند.