Nodes and media
โหมดสนทนา
โหมด Talk มีรูปแบบรันไทม์สองแบบ:
- Talk แบบเนทีฟบน macOS/iOS/Android ใช้การรู้จำเสียงในเครื่อง, แชตของ Gateway และ TTS ผ่าน
talk.speakNode จะประกาศความสามารถtalkและประกาศคำสั่งtalk.*ที่รองรับ - Talk บนเบราว์เซอร์ใช้
talk.client.createสำหรับเซสชันwebrtcและprovider-websocketที่ไคลเอนต์เป็นเจ้าของ หรือใช้talk.session.createสำหรับเซสชันgateway-relayที่ Gateway เป็นเจ้าของmanaged-roomถูกสงวนไว้สำหรับการส่งต่อของ Gateway และห้องวอล์กกี้ทอล์กกี้ - ไคลเอนต์ที่ถอดเสียงอย่างเดียวใช้
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 ที่ถอดเสียงอย่างเดียวจะปล่อยซองเหตุการณ์ Talk แบบทั่วไปเหมือนกับเซสชันเรียลไทม์และ STT/TTS แต่ใช้ mode: "transcription" และ brain: "none" เหมาะสำหรับคำบรรยาย การพิมพ์ตามเสียง และการจับเสียงแบบสังเกตอย่างเดียว; โน้ตเสียงแบบอัปโหลดครั้งเดียวยังคงใช้เส้นทางสื่อ/เสียง
พฤติกรรม (macOS)
- โอเวอร์เลย์เปิดตลอด ขณะเปิดใช้โหมด Talk
- การเปลี่ยนเฟส กำลังฟัง → กำลังคิด → กำลังพูด
- เมื่อมี การหยุดสั้นๆ (ช่วงหน้าต่างความเงียบ) ทรานสคริปต์ปัจจุบันจะถูกส่ง
- คำตอบจะถูก เขียนลงใน WebChat (เหมือนกับการพิมพ์)
- ขัดจังหวะเมื่อมีเสียงพูด (เปิดเป็นค่าเริ่มต้น): หากผู้ใช้เริ่มพูดขณะที่ผู้ช่วยกำลังพูด เราจะหยุดการเล่นเสียงและบันทึกเวลาที่ถูกขัดจังหวะไว้สำหรับพรอมป์ถัดไป
คำสั่งเสียงในคำตอบ
ผู้ช่วยอาจขึ้นต้นคำตอบด้วย บรรทัด JSON เดี่ยว เพื่อควบคุมเสียง:
{ "voice": "<voice-id>", "once": true }
กฎ:
- เฉพาะบรรทัดแรกที่ไม่ว่างเท่านั้น
- คีย์ที่ไม่รู้จักจะถูกละเว้น
once: trueใช้กับคำตอบปัจจุบันเท่านั้น- หากไม่มี
onceเสียงนั้นจะกลายเป็นค่าเริ่มต้นใหม่สำหรับโหมด Talk - บรรทัด JSON จะถูกตัดออกก่อนการเล่น TTS
คีย์ที่รองรับ:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
การกำหนดค่า (~/.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",
voice: "alloy",
},
},
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
},
},
}
ค่าเริ่มต้น:
interruptOnSpeech: truesilenceTimeoutMs: เมื่อไม่ได้ตั้งค่า Talk จะคงช่วงหน้าต่างหยุดชั่วคราวเริ่มต้นของแพลตฟอร์มไว้ก่อนส่งทรานสคริปต์ (700 ms on macOS and Android, 900 ms on iOS)provider: เลือกผู้ให้บริการ Talk ที่ใช้งานอยู่ ใช้elevenlabs,mlxหรือsystemสำหรับเส้นทางเล่นเสียงในเครื่องบน macOSproviders.<provider>.voiceId: ถอยกลับไปใช้ELEVENLABS_VOICE_ID/SAG_VOICE_IDสำหรับ ElevenLabs (หรือเสียง ElevenLabs เสียงแรกเมื่อมีคีย์ API)providers.elevenlabs.modelId: ค่าเริ่มต้นเป็นeleven_v3เมื่อไม่ได้ตั้งค่าproviders.mlx.modelId: ค่าเริ่มต้นเป็นmlx-community/Soprano-80M-bf16เมื่อไม่ได้ตั้งค่าproviders.elevenlabs.apiKey: ถอยกลับไปใช้ELEVENLABS_API_KEY(หรือโปรไฟล์เชลล์ของ Gateway หากมี)realtime.provider: เลือกผู้ให้บริการเสียงเรียลไทม์บนเบราว์เซอร์/เซิร์ฟเวอร์ที่ใช้งานอยู่ ใช้openaiสำหรับ WebRTC,googleสำหรับ WebSocket ของผู้ให้บริการ หรือผู้ให้บริการที่เป็นบริดจ์อย่างเดียวผ่านรีเลย์ของ Gatewayrealtime.providers.<provider>เก็บการกำหนดค่าเรียลไทม์ที่ผู้ให้บริการเป็นเจ้าของ เบราว์เซอร์จะได้รับเฉพาะข้อมูลรับรองเซสชันแบบชั่วคราวหรือแบบจำกัดเท่านั้น ไม่ใช่คีย์ API มาตรฐานrealtime.brain:agent-consultกำหนดเส้นทางการเรียกเครื่องมือแบบเรียลไทม์ผ่านนโยบายของ Gateway;direct-toolsเป็นพฤติกรรมความเข้ากันได้สำหรับเจ้าของเท่านั้น;noneใช้สำหรับการถอดเสียงหรือการจัดการภายนอกtalk.catalogแสดงโหมด ทรานสปอร์ต กลยุทธ์ brain รูปแบบเสียงเรียลไทม์ และแฟล็กความสามารถที่ถูกต้องของแต่ละผู้ให้บริการ เพื่อให้ไคลเอนต์ Talk ของบุคคลที่หนึ่งหลีกเลี่ยงชุดค่าที่ไม่รองรับได้- ผู้ให้บริการถอดเสียงแบบสตรีมมิงถูกค้นพบผ่าน
talk.catalog.transcriptionรีเลย์ Gateway ปัจจุบันใช้การกำหนดค่าผู้ให้บริการสตรีมมิง Voice Call จนกว่าจะเพิ่มพื้นผิวการกำหนดค่า Talk transcription โดยเฉพาะ speechLocale: รหัสโลแคล BCP 47 แบบไม่บังคับสำหรับการรู้จำเสียงพูดของ Talk บนอุปกรณ์ใน iOS/macOS เว้นว่างไว้เพื่อใช้ค่าเริ่มต้นของอุปกรณ์outputFormat: ค่าเริ่มต้นเป็นpcm_44100บน macOS/iOS และpcm_24000บน Android (ตั้งค่าmp3_*เพื่อบังคับการสตรีม MP3)
UI บน macOS
- สวิตช์ในแถบเมนู: Talk
- แท็บการกำหนดค่า: กลุ่ม โหมด Talk (รหัสเสียง + สวิตช์ขัดจังหวะ)
- โอเวอร์เลย์:
- กำลังฟัง: เมฆเต้นตามระดับไมค์
- กำลังคิด: แอนิเมชันจมลง
- กำลังพูด: วงแหวนแผ่ออก
- คลิกเมฆ: หยุดพูด
- คลิก X: ออกจากโหมด Talk
UI บน Android
- สวิตช์แท็บเสียง: Talk
- Mic แบบแมนนวลและ Talk เป็นโหมดจับเสียงรันไทม์ที่ใช้ร่วมกันไม่ได้
- Mic แบบแมนนวลจะหยุดเมื่อแอปออกจากโฟร์กราวด์หรือผู้ใช้ออกจากแท็บเสียง
- โหมด Talk จะทำงานต่อไปจนกว่าจะถูกปิดหรือ Node ของ Android ตัดการเชื่อมต่อ และใช้ประเภทบริการโฟร์กราวด์สำหรับไมโครโฟนของ Android ขณะทำงาน
หมายเหตุ
- ต้องมีสิทธิ์ Speech + Microphone
- Talk แบบเนทีฟใช้เซสชัน Gateway ที่ใช้งานอยู่ และถอยกลับไปใช้การโพลประวัติเมื่อไม่มีเหตุการณ์คำตอบเท่านั้น
- Talk แบบเรียลไทม์บนเบราว์เซอร์ใช้
talk.client.toolCallสำหรับopenclaw_agent_consultแทนการเปิดเผยchat.sendให้กับเซสชันเบราว์เซอร์ที่ผู้ให้บริการเป็นเจ้าของ - Talk ที่ถอดเสียงอย่างเดียวใช้
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnและtalk.session.close; ไคลเอนต์สมัครรับtalk.eventเพื่อรับการอัปเดตทรานสคริปต์แบบบางส่วน/สมบูรณ์ - Gateway จัดการการเล่นเสียงของ Talk ผ่าน
talk.speakโดยใช้ผู้ให้บริการ Talk ที่ใช้งานอยู่ Android จะถอยกลับไปใช้ TTS ระบบในเครื่องเฉพาะเมื่อ RPC นั้นใช้งานไม่ได้ - การเล่นเสียง MLX ในเครื่องบน macOS ใช้ตัวช่วย
openclaw-mlx-ttsที่รวมมาให้เมื่อมีอยู่ หรือไฟล์ปฏิบัติการบนPATHตั้งค่าOPENCLAW_MLX_TTS_BINให้ชี้ไปยังไบนารีตัวช่วยแบบกำหนดเองระหว่างการพัฒนา stabilityสำหรับeleven_v3จะถูกตรวจสอบให้เป็น0.0,0.5หรือ1.0; โมเดลอื่นรับค่า0..1latency_tierจะถูกตรวจสอบให้เป็น0..4เมื่อตั้งค่า- Android รองรับรูปแบบเอาต์พุต
pcm_16000,pcm_22050,pcm_24000และpcm_44100สำหรับการสตรีม AudioTrack ความหน่วงต่ำ