Nodes and media

وضع التحدث

يغطي وضع التحدث خمسة أشكال لوقت التشغيل:

  • التحدث الأصلي على macOS/iOS/Android: التعرف المحلي على الكلام، ودردشة Gateway، وتحويل النص إلى كلام عبر talk.speak. تعلن Nodes عن إمكانية talk وتحدد أوامر talk.* التي تدعمها.
  • التحدث على iOS (في الوقت الفعلي): WebRTC مملوك للعميل لإعدادات OpenAI في الوقت الفعلي التي تحدد نقل webrtc أو لا تحدد نقلًا. تظل إعدادات gateway-relay وprovider-websocket الصريحة وإعدادات الوقت الفعلي غير التابعة لـ OpenAI على المرحّل المملوك لـ Gateway؛ أما الإعدادات غير الآنية فتستخدم حلقة الكلام الأصلية.
  • التحدث في المتصفح: استخدم talk.client.create لجلسات webrtc/provider-websocket المملوكة للعميل، أو talk.session.create لجلسات gateway-relay المملوكة لـ Gateway. الخيار managed-room محجوز لتسليم التحكم إلى Gateway وغرف أجهزة الاتصال اللاسلكي.
  • التحدث على Android (في الوقت الفعلي): فعّله اختياريًا باستخدام talk.realtime.mode: "realtime" وtalk.realtime.transport: "gateway-relay". بخلاف ذلك، يظل Android مستخدمًا للتعرف الأصلي على الكلام، ودردشة Gateway، وtalk.speak.
  • عملاء النسخ فقط: استخدم talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })، ثم talk.session.appendAudio وtalk.session.cancelTurn وtalk.session.close للتسميات التوضيحية/الإملاء من دون استجابة صوتية من المساعد. تظل الملاحظات الصوتية المرفوعة لمرة واحدة تستخدم مسار الصوت ضمن فهم الوسائط.

التحدث الأصلي عبارة عن حلقة مستمرة: الاستماع إلى الكلام، وإرسال النص المنسوخ إلى النموذج عبر الجلسة النشطة، وانتظار الاستجابة، ثم نطقها عبر موفّر التحدث المضبوط (talk.speak).

يمرّر التحدث الآني المملوك للعميل استدعاءات أدوات الموفّر عبر talk.client.toolCall بدلًا من استدعاء chat.send مباشرةً. أثناء نشاط استشارة آنية، يمكن للعملاء استدعاء talk.client.steer أو talk.session.steer لتصنيف الإدخال المنطوق على أنه status أو steer أو cancel أو followup. تُضاف توجيهات المسار المقبولة إلى قائمة انتظار التشغيل المضمّن النشط؛ أما التوجيهات المرفوضة فتعيد سببًا مثل no_active_run أو not_streaming أو compacting.

يُصدر التحدث المخصص للنسخ فقط مغلف أحداث التحدث نفسه الذي تستخدمه جلسات الوقت الفعلي وتحويل الكلام إلى نص/تحويل النص إلى كلام، لكنه يستخدم mode: "transcription" وbrain: "none". تبث جميع جلسات التحدث الأحداث على قناة talk.event؛ ويشترك العملاء فيها للحصول على تحديثات النص المنسوخ الجزئية/النهائية (transcript.delta/transcript.done) وبيانات القياس الأخرى للجلسة.

السلوك (macOS)

  • طبقة متراكبة دائمة الظهور ما دام وضع التحدث مفعّلًا.
  • انتقالات المراحل: الاستماع → التفكير → التحدث.
  • عند حدوث توقف قصير (نافذة صمت)، يُرسل النص المنسوخ الحالي.
  • تُكتب الردود في WebChat (كما عند الكتابة).
  • المقاطعة عند الكلام (مفعّلة افتراضيًا): إذا تحدث المستخدم أثناء نطق المساعد، يتوقف التشغيل ويُسجّل الطابع الزمني للمقاطعة لاستخدامه في الموجّه التالي.

توجيهات الصوت في الردود

يمكن للمساعد إضافة سطر JSON واحد في بداية الرد للتحكم في الصوت:

json
{ "voice": "<voice-id>", "once": true }

القواعد:

  • أول سطر غير فارغ فقط؛ يُزال سطر JSON قبل تشغيل تحويل النص إلى كلام.
  • تُتجاهل المفاتيح غير المعروفة.
  • يطبَّق once: true على الرد الحالي فقط؛ ومن دونه يصبح الصوت هو الإعداد الافتراضي الجديد لوضع التحدث.

المفاتيح المدعومة: voice / voice_id / voiceId، وmodel / model_id / modelId، وspeed، وrate (كلمة في الدقيقة)، وstability، وsimilarity، وstyle، وspeakerBoost، وseed، وnormalize، وlang، وoutput_format، وlatency_tier، وonce.

الإعداد (~/.openclaw/openclaw.json)

json5
{  talk: {    provider: "elevenlabs",    providers: {      elevenlabs: {        voiceId: "elevenlabs_voice_id",        modelId: "eleven_v3",        outputFormat: "mp3_44100_128",        apiKey: "elevenlabs_api_key",      },      mlx: {        modelId: "mlx-community/Soprano-80M-bf16",      },      system: {},    },    speechLocale: "ru-RU",    silenceTimeoutMs: 1500,    interruptOnSpeech: true,    realtime: {      provider: "openai",      providers: {        openai: {          apiKey: "openai_api_key",          model: "gpt-realtime-2.1",          speakerVoice: "cedar",        },      },      instructions: "تحدث بودّ وأبقِ الإجابات موجزة.",      mode: "realtime",      transport: "webrtc",      brain: "agent-consult",    },  },}
المفتاح القيمة الافتراضية ملاحظات
provider - موفّر تحويل النص إلى كلام النشط للتحدث. استخدم elevenlabs أو mlx أو system لمسارات التشغيل المحلية على macOS.
providers.<id>.voiceId - يعود ElevenLabs إلى ELEVENLABS_VOICE_ID / SAG_VOICE_ID، أو إلى أول صوت متاح باستخدام مفتاح API.
providers.elevenlabs.modelId eleven_v3
providers.mlx.modelId mlx-community/Soprano-80M-bf16
providers.elevenlabs.apiKey - يعود إلى ELEVENLABS_API_KEY (أو ملف تعريف صدفة Gateway إن كان متاحًا).
speechLocale الإعداد الافتراضي للجهاز معرّف الإعدادات المحلية وفق BCP 47 للتعرف على كلام التحدث على الجهاز في iOS/macOS.
silenceTimeoutMs 700 مللي ثانية على macOS/Android، و900 مللي ثانية على iOS نافذة التوقف قبل أن يرسل التحدث النص المنسوخ.
interruptOnSpeech true
outputFormat pcm_44100 على macOS/iOS، وpcm_24000 على Android اضبطه على mp3_* لفرض بث MP3.
consultThinkingLevel غير مضبوط تجاوز مستوى التفكير لتشغيل الوكيل خلف استدعاءات openclaw_agent_consult الآنية.
consultFastMode غير مضبوط تجاوز الوضع السريع لاستدعاءات openclaw_agent_consult الآنية.
realtime.provider - استخدم openai لـ WebRTC، أو google لاتصال WebSocket الخاص بالموفّر، أو موفّرًا مخصصًا للجسر فقط عبر مرحّل Gateway.
realtime.providers.<id> - إعداد الوقت الفعلي الذي يملكه الموفّر. لا تتلقى المتصفحات سوى بيانات اعتماد مؤقتة/مقيّدة للجلسة، ولا تتلقى مطلقًا مفتاح API قياسيًا.
realtime.providers.openai.speakerVoice alloy معرّف صوت OpenAI Realtime المضمّن (لا يزال المفتاح الأقدم voice يعمل، لكنه مهمل). أصوات gpt-realtime-2.1 الحالية: alloy وash وballad وcedar وcoral وecho وmarin وsage وshimmer وverse؛ ويُوصى بـ marin وcedar للحصول على أفضل جودة.
realtime.transport - webrtc: اتصال OpenAI WebRTC مملوك للعميل على iOS وفي المتصفح. provider-websocket: مملوك للمتصفح، ويظل على مرحّل Gateway في iOS. gateway-relay: يُبقي صوت الموفّر على Gateway؛ ولا يستخدم Android الوقت الفعلي إلا مع هذا النقل.
realtime.brain - يوجّه agent-consult استدعاءات أدوات الوقت الفعلي عبر سياسة Gateway؛ وdirect-tools مخصص للتوافق القديم مع الأدوات المباشرة؛ وnone مخصص للنسخ/التنسيق الخارجي.
realtime.consultRouting - يحافظ provider-direct على الرد المباشر للموفّر عندما يتخطى openclaw_agent_consult؛ بينما يوجّه force-agent-consult النصوص المنسوخة النهائية للمستخدم عبر OpenClaw بدلًا من ذلك.
realtime.instructions - يلحق تعليمات النظام الموجّهة إلى الموفّر بموجّه الوقت الفعلي المضمّن في OpenClaw (أسلوب الصوت/نبرته)؛ وتظل إرشادات openclaw_agent_consult الافتراضية كما هي.

يكشف talk.catalog معرّفات المزوّدين القياسية والأسماء المستعارة في السجل، والأوضاع ووسائل النقل واستراتيجيات العقل وتنسيقات الصوت في الوقت الفعلي وعلامات الإمكانات الصالحة لكل مزوّد، بالإضافة إلى نتيجة الجاهزية التي يحددها وقت التشغيل. ينبغي لعملاء Talk من الطرف الأول قراءة هذا الكتالوج بدلًا من الاحتفاظ بالأسماء المستعارة للمزوّدين محليًا؛ وتعامل مع Gateway أقدم لا يعرض جاهزية المجموعة على أنه غير متحقق منه، لا على أنه غير مهيأ بشكل قاطع. يُكتشف مزوّدو النسخ النصي المتدفق عبر talk.catalog.transcription؛ ويستخدم ترحيل Gateway الحالي إعدادات مزوّد البث المتدفق للمكالمات الصوتية إلى أن تُطرح واجهة إعدادات مخصصة للنسخ النصي في Talk.

واجهة مستخدم macOS

  • مفتاح شريط القوائم: Talk
  • علامة تبويب الإعدادات: مجموعة وضع Talk (معرّف الصوت + مفتاح المقاطعة)
  • الطبقة المتراكبة: تعرض الكرة الشكل الموجي العام للمحادثة (المشترك مع iOS وwatchOS وAndroid). تتبع حالة الاستماع مستوى الميكروفون المباشر، وتتبع حالة التحدث غلاف تشغيل TTS الفعلي، بينما تنبض حالة التفكير برفق. انقر على الكرة للإيقاف المؤقت/الاستئناف، وانقر عليها نقرًا مزدوجًا لإيقاف التحدث، وانقر على X للخروج من وضع Talk.

واجهة مستخدم Android

  • مفتاح علامة تبويب الصوت: Talk
  • وضعا الالتقاط اليدوي للميكروفون وTalk متنافيان.
  • يفضّل الميكروفون اليدوي وTalk في الوقت الفعلي ميكروفون سماعة رأس متصلة عبر Bluetooth Classic أو BLE؛ وإذا انقطع اتصالها، يطلب التطبيق إدخالًا من سماعة رأس أخرى أو يعود إلى الميكروفون الافتراضي، مع استعادة التفضيل الافتراضي بمجرد توقف الالتقاط.
  • يتوقف الميكروفون اليدوي عندما يغادر التطبيق الواجهة الأمامية أو يغادر المستخدم علامة تبويب الصوت.
  • يستمر وضع Talk في العمل حتى إيقافه عبر المفتاح أو انقطاع اتصال العقدة، مستخدمًا نوع خدمة الميكروفون في الواجهة الأمامية لنظام Android أثناء نشاطه.
  • يدعم Android تنسيقات الإخراج pcm_16000 وpcm_22050 وpcm_24000 وpcm_44100 للبث منخفض الكمون عبر AudioTrack.

ملاحظات

  • يتطلب أذونات التعرّف على الكلام والميكروفون.
  • يستخدم Talk الأصلي جلسة Gateway النشطة، ولا يعود إلى استطلاع السجل إلا عند عدم توفر أحداث الاستجابة.
  • يحل Gateway تشغيل Talk عبر talk.speak باستخدام مزوّد Talk النشط. ولا يعود Android إلى TTS المحلي للنظام إلا عندما لا يتوفر استدعاء RPC هذا.
  • يستخدم تشغيل MLX المحلي على macOS مساعد openclaw-mlx-tts المضمّن عند توفره، أو ملفًا تنفيذيًا موجودًا في PATH. عيّن OPENCLAW_MLX_TTS_BIN للإشارة إلى ملف مساعد تنفيذي مخصص أثناء التطوير.
  • نطاقات قيم توجيهات الصوت (ElevenLabs): تقبل stability وsimilarity وstyle القيم 0..1؛ ويقبل speed القيم 0.5..2؛ ويقبل latency_tier القيم 0..4.

ذو صلة

Was this useful?
On this page

On this page