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 หนึ่งบรรทัดไว้หน้าการตอบกลับเพื่อควบคุมเสียง:

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)

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 - ผู้ให้บริการ 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

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page