Nodes and media

โหมดสนทนา

โหมดการสนทนารองรับรูปแบบรันไทม์ห้ารูปแบบ:

  • การสนทนาแบบเนทีฟบน macOS/iOS/Android: การรู้จำเสียงพูดภายในเครื่อง การแชตผ่าน Gateway และ TTS ด้วย talk.speak โดย Node จะประกาศความสามารถ 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

การสนทนาสำหรับถอดเสียงเท่านั้นจะปล่อยซองเหตุการณ์การสนทนาแบบเดียวกับเซสชันเรียลไทม์และ STT/TTS แต่ใช้ mode: "transcription" และ brain: "none" เซสชันการสนทนาทั้งหมดจะกระจายเหตุการณ์ผ่านช่อง talk.event ซึ่งไคลเอนต์สมัครรับข้อมูลเพื่อรับการอัปเดตข้อความถอดเสียงบางส่วน/ฉบับสมบูรณ์ (transcript.delta/transcript.done) และข้อมูลการวัดอื่น ๆ ของเซสชัน

ลักษณะการทำงาน (macOS)

  • แสดงโอเวอร์เลย์ตลอดเวลาขณะเปิดใช้โหมดการสนทนา
  • การเปลี่ยนช่วง กำลังฟัง → กำลังคิด → กำลังพูด
  • เมื่อหยุดชั่วครู่ (ช่วงตรวจจับความเงียบ) ระบบจะส่งข้อความถอดเสียงปัจจุบัน
  • คำตอบจะถูกเขียนลงใน WebChat (เช่นเดียวกับการพิมพ์)
  • ขัดจังหวะด้วยเสียงพูด (เปิดเป็นค่าเริ่มต้น): หากผู้ใช้พูดขณะที่ผู้ช่วยกำลังพูด การเล่นเสียงจะหยุดลงและบันทึกเวลาที่ขัดจังหวะไว้สำหรับพรอมต์ถัดไป

คำสั่งกำกับเสียงในคำตอบ

ผู้ช่วยสามารถเติมบรรทัด JSON หนึ่งบรรทัดไว้หน้าคำตอบเพื่อควบคุมเสียง:

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

กฎ:

  • ใช้เฉพาะบรรทัดแรกที่ไม่ว่าง ระบบจะนำบรรทัด JSON ออกก่อนเล่นเสียง TTS
  • ระบบจะเพิกเฉยต่อคีย์ที่ไม่รู้จัก
  • 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 - ผู้ให้บริการ TTS ของการสนทนาที่ใช้งานอยู่ ใช้ 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 เปิดเผย ID ผู้ให้บริการมาตรฐานและนามแฝงในรีจิสทรี รวมถึงโหมด/การรับส่ง/กลยุทธ์สมอง/รูปแบบเสียงแบบเรียลไทม์/แฟล็กความสามารถที่ใช้ได้ของผู้ให้บริการแต่ละราย และผลความพร้อมที่รันไทม์เลือกไว้ ไคลเอนต์ Talk ของผู้พัฒนาโดยตรงควรอ่านแค็ตตาล็อกดังกล่าวแทนการดูแลนามแฝงของผู้ให้บริการไว้ภายในเครื่อง สำหรับ Gateway รุ่นเก่าที่ไม่ระบุความพร้อมระดับกลุ่ม ให้ถือว่ายังไม่ได้ตรวจสอบ แทนที่จะสรุปแน่ชัดว่ายังไม่ได้กำหนดค่า ระบบค้นหาผู้ให้บริการถอดเสียงแบบสตรีมผ่าน talk.catalog.transcription โดยรีเลย์ Gateway ปัจจุบันใช้การกำหนดค่าผู้ให้บริการสตรีมของ Voice Call ไปก่อน จนกว่าจะมีพื้นผิวการกำหนดค่าการถอดเสียงสำหรับ Talk โดยเฉพาะ

UI ของ macOS

  • ตัวสลับบนแถบเมนู: Talk
  • แท็บการกำหนดค่า: กลุ่ม Talk Mode (ID เสียง + ตัวสลับการขัดจังหวะ)
  • โอเวอร์เลย์: ลูกแก้วแสดงรูปคลื่นการสนทนาสากล (ใช้ร่วมกับ iOS, watchOS และ Android) ขณะฟัง รูปคลื่นจะเคลื่อนไหวตามระดับไมโครโฟนสด ขณะพูดจะเคลื่อนไหวตามเอนเวโลปการเล่น TTS จริง และขณะคิดจะเต้นเบา ๆ คลิกลูกแก้วเพื่อหยุดชั่วคราว/เล่นต่อ ดับเบิลคลิกเพื่อหยุดพูด และคลิก X เพื่อออกจากโหมด Talk

UI ของ Android

  • ตัวสลับในแท็บเสียง: Talk
  • Mic และ Talk แบบสั่งงานด้วยตนเองเป็นโหมดบันทึกเสียงที่ไม่สามารถใช้งานพร้อมกันได้
  • Mic แบบสั่งงานด้วยตนเองและ Talk แบบเรียลไทม์จะเลือกใช้ไมโครโฟนของชุดหูฟัง Bluetooth Classic หรือ BLE ที่เชื่อมต่ออยู่ก่อน หากการเชื่อมต่อขาด แอปจะขอใช้อินพุตจากชุดหูฟังอื่น หรือถอยกลับไปใช้ไมโครโฟนเริ่มต้น และจะคืนค่าการตั้งค่าเริ่มต้นเมื่อหยุดบันทึกเสียง
  • Mic แบบสั่งงานด้วยตนเองจะหยุดเมื่อแอปออกจากเบื้องหน้า หรือผู้ใช้ออกจากแท็บเสียง
  • โหมด Talk จะทำงานต่อไปจนกว่าจะปิดด้วยตัวสลับหรือ Node ตัดการเชื่อมต่อ โดยใช้ประเภทบริการเบื้องหน้าสำหรับไมโครโฟนของ 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