Nodes and media
โหมดสนทนา
โหมด Talk ครอบคลุมรูปแบบรันไทม์ 5 แบบ:
- Talk แบบเนทีฟบน macOS/iOS/Android: การรู้จำเสียงพูดแบบเนทีฟ การแชตผ่าน Gateway และ TTS ของ
talk.speakการรู้จำเสียงพูดของ Apple บน macOS/iOS อาจใช้บริการเครือข่าย ส่วนลักษณะการทำงานบน Android ขึ้นอยู่กับบริการเสียงพูดที่ติดตั้งไว้ Node จะประกาศความสามารถtalkและระบุคำสั่งtalk.*ที่รองรับ - Talk บน iOS (เรียลไทม์): WebRTC ที่ไคลเอนต์เป็นผู้ดูแลสำหรับการกำหนดค่าเรียลไทม์ของ OpenAI ที่เลือกการรับส่งข้อมูล
webrtcหรือไม่ระบุการรับส่งข้อมูล การกำหนดค่าgateway-relay,provider-websocketและการกำหนดค่าเรียลไทม์ที่ไม่ใช่ OpenAI อย่างชัดเจนจะยังคงใช้รีเลย์ที่ Gateway เป็นผู้ดูแล ส่วนการกำหนดค่าที่ไม่ใช่เรียลไทม์จะใช้ลูปเสียงพูดแบบเนทีฟ - Talk บนเบราว์เซอร์:
talk.client.createสำหรับเซสชันwebrtc/provider-websocketที่ไคลเอนต์เป็นผู้ดูแล หรือtalk.session.createสำหรับเซสชันgateway-relayที่ Gateway เป็นผู้ดูแลmanaged-roomสงวนไว้สำหรับการส่งต่อให้ Gateway และห้องวอล์กกีทอล์กกี - Talk บน 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 แบบเนทีฟเป็นลูปต่อเนื่อง: ฟังเสียงพูด ส่งข้อความถอดเสียงไปยังโมเดลผ่านเซสชันที่ใช้งานอยู่ รอการตอบกลับ แล้วพูดข้อความนั้นผ่านผู้ให้บริการ Talk ที่กำหนดค่าไว้ (talk.speak)
Talk แบบเรียลไทม์ที่ไคลเอนต์เป็นผู้ดูแลจะส่งต่อการเรียกใช้เครื่องมือของผู้ให้บริการผ่าน talk.client.toolCall แทนการเรียก chat.send โดยตรง ระหว่างที่การปรึกษาแบบเรียลไทม์ทำงานอยู่ ไคลเอนต์สามารถเรียก talk.client.steer หรือ talk.session.steer เพื่อจำแนกอินพุตเสียงพูดเป็น status, steer, cancel หรือ followup การชี้นำที่ยอมรับแล้วจะเข้าคิวในรันแบบฝังที่ทำงานอยู่ ส่วนการชี้นำที่ถูกปฏิเสธจะส่งคืนเหตุผล เช่น no_active_run, not_streaming หรือ compacting
ถ้อยคำแบบเรียลไทม์ของผู้ใช้และผู้ช่วยที่สรุปสมบูรณ์แล้วจะถูกเพิ่มสดลงในเซสชันเอเจนต์ที่ใช้งานอยู่เสมอ เพื่อให้รอบการแชตและเสียงในภายหลังใช้ประวัติเดียวกัน การรับส่งข้อมูลที่ไคลเอนต์เป็นผู้ดูแลจะรายงานข้อความถอดเสียงที่สรุปสมบูรณ์แล้วพร้อมรหัสรายการที่เสถียร ส่วนเซสชันรีเลย์ของ Gateway จะเพิ่มเหตุการณ์เดียวกันที่ฝั่งเซิร์ฟเวอร์ เซสชันของผู้ให้บริการยังได้รับบริบทโปรไฟล์เรียลไทม์แบบจำกัดที่เสียงของ Discord ใช้ด้วย
รันการปรึกษาที่เริ่มต้นจากเสียงต้องได้รับการยืนยันด้วยเสียงใหม่ที่ตรงทุกประการก่อนดำเนินการที่มีผลกระทบสูง เช่น การส่งข้อความ การควบคุม Node การดำเนินการบนเบราว์เซอร์/คอมพิวเตอร์ การเปลี่ยนแปลงบริการ คำสั่งเชลล์ที่ทำลายข้อมูล หรือการเผยแพร่ การยืนยันมีผลเฉพาะกับอาร์กิวเมนต์ของเครื่องมือที่ถูกบล็อกซึ่งตรงกันทุกประการและใช้ได้ครั้งเดียว รันอื่นที่ทำงานพร้อมกันและไม่เกี่ยวข้องจะไม่ได้รับผลกระทบ เมื่อการโทรสิ้นสุด OpenClaw สามารถส่งข้อมูลสรุป การเปลี่ยนแปลงจากการโทรด้วยเสียง แบบกระชับสำหรับเครื่องมือที่ทำให้เกิดการเปลี่ยนแปลงไปยังเป้าหมายการส่งล่าสุดของเซสชันที่ไม่ใช่ WebChat
Talk แบบถอดเสียงเท่านั้นจะปล่อยซองเหตุการณ์ Talk แบบเดียวกับเซสชันเรียลไทม์และ STT/TTS แต่ใช้ mode: "transcription" และ brain: "none" เซสชัน Talk ทั้งหมดจะกระจายเหตุการณ์บนช่อง talk.event โดยไคลเอนต์จะสมัครรับข้อมูลจากช่องนี้เพื่อรับการอัปเดตข้อความถอดเสียงบางส่วน/สมบูรณ์ (transcript.delta/transcript.done) และข้อมูลวัดสถานะอื่นของเซสชัน
Video Talk บนเบราว์เซอร์พร้อมใช้งานสำหรับ OpenAI Realtime WebRTC และเซสชัน
WebSocket ของผู้ให้บริการ Google Live OpenAI จะได้รับ JPEG แบบจำกัดหนึ่งภาพเมื่อ
describe_view ขอรับบริบทภาพ โดยจะไม่ได้รับแทร็กกล้องแบบต่อเนื่อง
Google Live จะได้รับเฟรม JPEG แบบจำกัดโดยตรงจากเบราว์เซอร์
ในอัตราสูงสุดหนึ่งเฟรมต่อวินาที ขณะที่ describe_view รายงานสถานะ
สตรีมกล้อง ในทั้งสองกรณี เฟรมกล้องจะไม่ผ่าน Gateway และ
การหยุด Talk จะปล่อยแทร็กกล้องและไมโครโฟน
ลักษณะการทำงาน (macOS)
- โอเวอร์เลย์ที่แสดงตลอดเวลาเมื่อเปิดใช้งานโหมด Talk
- การเปลี่ยนระยะ กำลังฟัง → กำลังคิด → กำลังพูด
- เมื่อหยุดชั่วครู่ (ช่วงที่เงียบ) ระบบจะส่งข้อความถอดเสียงปัจจุบัน
- การตอบกลับจะถูกเขียนลงใน WebChat (เช่นเดียวกับการพิมพ์)
- ขัดจังหวะเมื่อมีเสียงพูด (เปิดเป็นค่าเริ่มต้น): หากผู้ใช้พูดขณะที่ผู้ช่วยกำลังพูด การเล่นจะหยุดและระบบจะบันทึกเวลาที่ขัดจังหวะไว้สำหรับพรอมต์ถัดไป
คำสั่งเสียงในการตอบกลับ
ผู้ช่วยสามารถเติมบรรทัด JSON หนึ่งบรรทัดไว้หน้าการตอบกลับเพื่อควบคุมเสียง:
{ "voice": "<voice-id>", "once": true }กฎ:
- เฉพาะบรรทัดแรกที่ไม่ว่างเท่านั้น โดยระบบจะนำบรรทัด JSON ออกก่อนเล่นเสียง TTS
- ระบบจะละเว้นคีย์ที่ไม่รู้จัก
once: trueมีผลเฉพาะกับการตอบกลับปัจจุบัน หากไม่มีคีย์นี้ เสียงดังกล่าวจะกลายเป็นค่าเริ่มต้นใหม่ของโหมด Talk
คีย์ที่รองรับ: 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: { 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 |
- | ผู้ให้บริการ TTS สำหรับ Active Talk ใช้ elevenlabs, mlx หรือ system สำหรับเส้นทางการเล่นเสียงภายในเครื่องบน macOS |
providers.<id>.voiceId |
- | ElevenLabs จะใช้ ELEVENLABS_VOICE_ID / SAG_VOICE_ID เป็นทางเลือกสำรอง หรือใช้เสียงแรกที่พร้อมใช้งานพร้อมคีย์ API |
speechLocale |
ค่าเริ่มต้นของอุปกรณ์ | โลแคล BCP 47 สำหรับการรู้จำเสียงพูดแบบเนทีฟบน Android, iOS และ macOS โดย Apple Speech อาจใช้บริการเครือข่าย ส่วน Android จะส่งต่อองค์ประกอบภาษาไปยังการถอดเสียงอินพุตแบบเรียลไทม์ด้วย |
providers.elevenlabs.modelId |
eleven_v3 |
|
providers.mlx.modelId |
mlx-community/Soprano-80M-bf16 |
|
providers.elevenlabs.apiKey |
- | ใช้ ELEVENLABS_API_KEY เป็นทางเลือกสำรอง (หรือโปรไฟล์เชลล์ของ Gateway หากมี) |
silenceTimeoutMs |
700 ms บน macOS/Android, 900 ms บน iOS |
ช่วงเวลาหยุดชั่วคราวก่อนที่ Talk จะส่งข้อความถอดเสียง |
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 ปัจจุบันใช้การกำหนดค่าผู้ให้บริการสตรีมของ Voice Call จนกว่าจะมีพื้นผิวการกำหนดค่าการถอดเสียง Talk โดยเฉพาะ
UI ของ macOS
- สวิตช์แถบเมนู: Talk
- แท็บการกำหนดค่า: กลุ่ม Talk Mode (รหัสเสียง + สวิตช์ขัดจังหวะ)
- โอเวอร์เลย์: ลูกทรงกลมแสดงรูปคลื่นการพูดสากล (ใช้ร่วมกับ iOS, watchOS และ Android) ขณะฟังจะเคลื่อนไหวตามระดับไมโครโฟนสด ขณะพูดจะเคลื่อนไหวตามเอนเวโลปการเล่น TTS จริง และขณะคิดจะเต้นเป็นจังหวะเบา ๆ คลิกลูกทรงกลมเพื่อหยุดชั่วคราว/เล่นต่อ ดับเบิลคลิกเพื่อหยุดพูด และคลิก X เพื่อออกจากโหมด Talk
UI ของ Android
- การนำทางหลักของ Android คือ Home, Chat และ Settings อินพุตเสียง อยู่ในตัวเขียนข้อความของ Chat แทนที่จะอยู่ในแท็บ Voice แยกต่างหาก
- แตะไมโครโฟนในตัวเขียนข้อความเพื่อป้อนตามคำบอกบนอุปกรณ์ กดค้างเพื่อบันทึก ไฟล์แนบบันทึกเสียง เริ่ม Talk แบบต่อเนื่องจากรูปคลื่น Talk
- การป้อนตามคำบอก การบันทึกข้อความเสียง และ Talk เป็นเส้นทางไมโครโฟนที่ไม่สามารถ ใช้พร้อมกันได้ การเริ่มใช้งานอย่างหนึ่งจะหยุดหรือบล็อกอย่างอื่น
- Talk แบบเรียลไทม์จะเลือกใช้ไมโครโฟนของชุดหูฟัง Bluetooth Classic หรือ BLE ที่เชื่อมต่ออยู่ก่อน หากการเชื่อมต่อขาด แอปจะขออินพุตจากชุดหูฟังอื่นหรือ ใช้ไมโครโฟนเริ่มต้นเป็นทางเลือกสำรอง และคืนค่าการตั้งค่าเริ่มต้นเมื่อ หยุดการบันทึก
- การป้อนตามคำบอกและการบันทึกข้อความเสียงจะหยุดเมื่อแอปออกจากเบื้องหน้าหรือ ผู้ใช้ออกจาก Chat
- Talk Mode จะทำงานต่อไปจนกว่าจะปิดสวิตช์หรือ Node ยกเลิกการเชื่อมต่อ โดยใช้ประเภทบริการเบื้องหน้าสำหรับไมโครโฟนของ Android ขณะทำงาน
- Android รองรับรูปแบบเอาต์พุต
pcm_16000,pcm_22050,pcm_24000และpcm_44100สำหรับการสตรีมAudioTrackที่มีเวลาแฝงต่ำ
หมายเหตุ
- ต้องมีสิทธิ์ Speech + Microphone
- 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