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.audio.models را تنظیم کنید.
گزینش محلی را بدون رونویسی صوت بررسی کنید:
openclaw capability audio providersopenclaw doctor --lint --only core/doctor/local-audio-acceleration --severity-min infoفهرست ارائهدهندگان، برندهٔ بازگشت محلی را جدا از گزینش سراسری ارائهدهنده و همراه با فیلدهای بکاند توانمند، درخواستی و مشاهدهشده گزارش میکند. پس از اجرای رونویسی، /status بکاند درخواستی یا مشاهدهشده را در خط رسانه گزارش میکند. ورودیهای صریح CLI در tools.media.audio.models همچنان از گزینش خودکار عبور میکنند؛ از پرچمهای ویژهٔ بکاند آنها مانند --provider=cuda برای sherpa یا --no-gpu/--device برای whisper.cpp استفاده کنید.
نمونههای پیکربندی
ارائهدهنده + بازگشت CLI (OpenAI + Whisper CLI)
{ tools: { media: { audio: { enabled: true, maxBytes: 20971520, models: [ { provider: "openai", model: "gpt-4o-transcribe" }, { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"], timeoutSeconds: 45, }, ], }, }, },}فقط ارائهدهنده با محدودسازی دامنه
{ tools: { media: { audio: { enabled: true, scope: { default: "allow", rules: [{ action: "deny", match: { chatType: "group" } }], }, models: [{ provider: "openai", model: "gpt-4o-transcribe" }], }, }, },}فقط ارائهدهنده (Deepgram)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "deepgram", model: "nova-3" }], }, }, },}فقط ارائهدهنده (Mistral Voxtral)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "mistral", model: "voxtral-mini-latest" }], }, }, },}فقط ارائهدهنده (SenseAudio)
{ tools: { media: { audio: { enabled: true, models: [{ provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319" }], }, }, },}بازفرستادن متن رونویسی به گفتوگو (اختیاری)
{ tools: { media: { audio: { enabled: true, echoTranscript: true, // پیشفرض false است echoFormat: '📝 "{transcript}"', // اختیاری، از {transcript} پشتیبانی میکند models: [{ provider: "openai", model: "gpt-4o-transcribe" }], }, }, },}نکتهها و محدودیتها
- احراز هویت ارائهدهنده از ترتیب استاندارد احراز هویت مدل پیروی میکند (پروفایلهای احراز هویت، متغیرهای محیطی،
models.providers.*.apiKey). - جزئیات راهاندازی Groq: Groq.
- هنگام استفاده از
provider: "deepgram"، Deepgram مقدارDEEPGRAM_API_KEYرا دریافت میکند. جزئیات راهاندازی: Deepgram. - جزئیات راهاندازی Mistral: Mistral.
- هنگام استفاده از
provider: "senseaudio"، SenseAudio مقدارSENSEAUDIO_API_KEYرا دریافت میکند. جزئیات راهاندازی: SenseAudio. - ارائهدهندگان صوت میتوانند
baseUrl، headersوproviderOptionsرا از طریقtools.media.audioبازنویسی کنند. - سقف اندازهٔ پیشفرض ۲۰ مگابایت است (
tools.media.audio.maxBytes). صوت بزرگتر از سقف برای آن مدل نادیده گرفته میشود و ورودی بعدی امتحان میشود. - فایلهای صوتی کوچکتر از ۱۰۲۴ بایت پیش از رونویسی توسط ارائهدهنده/CLI نادیده گرفته میشوند.
- مقدار پیشفرض
maxCharsبرای صوت تنظیم نشده است (رونویسی کامل). برای کوتاهکردن خروجی،tools.media.audio.maxCharsیاmaxCharsهر ورودی را تنظیم کنید. - پیشفرض تشخیص خودکار OpenAI برابر
gpt-4o-transcribeاست؛ برای گزینهای ارزانتر/سریعتر،model: "gpt-4o-mini-transcribe"را تنظیم کنید. - برای پردازش چند یادداشت صوتی از
tools.media.audio.attachmentsاستفاده کنید (mode: "all"همراه باmaxAttachments، با مقدار پیشفرض ۱). - متن رونویسی با
{{Transcript}}در دسترس الگوها قرار دارد. tools.media.audio.echoTranscriptبهطور پیشفرض خاموش است؛ آن را فعال کنید تا پیش از پردازش عامل، تأییدیهٔ رونویسی به گفتوگوی مبدأ بازگردانده شود.tools.media.audio.echoFormatمتن بازفرست را سفارشی میکند (جاینگهدار:{transcript}؛ پیشفرض📝 "{transcript}").- خروجی استاندارد CLI به ۵ مگابایت محدود است؛ خروجی CLI را مختصر نگه دارید.
argsدر CLI باید برای مسیر فایل صوتی محلی از{{MediaPath}}استفاده کند. برای مهاجرت جاینگهدارهای منسوخ{input}از پیکربندیهای قدیمیaudio.transcription.command، فرمانopenclaw doctor --fixرا اجرا کنید (کلید کنارگذاشتهشده:audio.transcription، جایگزینشده باtools.media.audio.models).tools.media.concurrencyتعداد وظایف رسانهای را محدود میکند؛ زمانبند GPU نیست.
تبدیل گفتار به متن محلی مقیم
تبدیل گفتار به متن محلی که بهطور خودکار تشخیص داده شده، همچنان برای هر درخواست یک فرایند جداگانه اجرا میکند. OpenClaw در حال حاضر یک سرور مقیم whisper.cpp را مدیریت نمیکند، زیرا بستهٔ استاندارد Homebrew با نام whisper-cpp آن سرور را غیرفعال میکند و نمونهٔ بالادستی نیز صف پذیرش محدودشدهای ندارد. پیش از آنکه چرخهٔ عمر مقیم تحت مالکیت یک Plugin با ایمنی فعال شود، به یک کارگر بستهبندیشده و نگهداریشده با بررسی سلامت/راهاندازی، اقامت مدل، صفبندی محدود، لغو/مهلت زمانی، اجرای بدون احراز هویت و فقط روی local 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 با کد ۰ خارج میشود و متن ساده چاپ میکند؛ خروجی 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، با مقدار پیشفرض ۶۰ ثانیه). - رونویسی پیشبررسی فقط نخستین پیوست صوتی را برای تشخیص اشاره پردازش میکند. پیوستهای صوتی اضافی در مرحلهٔ اصلی درک رسانه پردازش میشوند.