Skip to main content
يغطي وضع التحدث خمسة أشكال لوقت التشغيل:
  • التحدث الأصلي على 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 قبل تشغيل تحويل النص إلى كلام.
  • تُتجاهل المفاتيح غير المعروفة.
  • يطبَّق 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)

يكشف 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.

ذو صلة