Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

โหมดพูดคุยมีรูปแบบรันไทม์สองแบบ:
  • การพูดคุยแบบเนทีฟบน macOS/iOS/Android ใช้การรู้จำเสียงพูดภายในเครื่อง, แชทผ่าน Gateway และ TTS ด้วย talk.speak Node จะประกาศความสามารถ 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 เมื่อต้องการคำบรรยายหรือการป้อนตามคำบอกโดยไม่มีเสียงตอบกลับจากผู้ช่วย
การพูดคุยแบบเนทีฟเป็นลูปสนทนาด้วยเสียงต่อเนื่อง:
  1. ฟังเสียงพูด
  2. ส่งข้อความถอดเสียงไปยังโมเดลผ่านเซสชันที่ใช้งานอยู่
  3. รอการตอบกลับ
  4. พูดออกมาผ่านผู้ให้บริการพูดคุยที่กำหนดค่าไว้ (talk.speak)
การพูดคุยแบบเรียลไทม์บนเบราว์เซอร์ส่งต่อการเรียกเครื่องมือของผู้ให้บริการผ่าน talk.client.toolCall; ไคลเอนต์เบราว์เซอร์จะไม่เรียก chat.send โดยตรงสำหรับการปรึกษาแบบเรียลไทม์ การพูดคุยแบบถอดเสียงอย่างเดียวปล่อยซองเหตุการณ์พูดคุยทั่วไปแบบเดียวกับเซสชันเรียลไทม์และ STT/TTS แต่ใช้ mode: "transcription" และ brain: "none" เหมาะสำหรับคำบรรยาย การป้อนตามคำบอก และการจับเสียงพูดเพื่อสังเกตอย่างเดียว; โน้ตเสียงแบบอัปโหลดครั้งเดียวยังคงใช้เส้นทางสื่อ/เสียง

พฤติกรรม (macOS)

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

ไดเรกทีฟเสียงในคำตอบ

ผู้ช่วยอาจขึ้นต้นคำตอบด้วย บรรทัด JSON เดียว เพื่อควบคุมเสียง:
{ "voice": "<voice-id>", "once": true }
กฎ:
  • เฉพาะบรรทัดแรกที่ไม่ว่างเท่านั้น
  • คีย์ที่ไม่รู้จักจะถูกละเว้น
  • once: true ใช้กับคำตอบปัจจุบันเท่านั้น
  • หากไม่มี once เสียงนั้นจะกลายเป็นค่าเริ่มต้นใหม่สำหรับโหมดพูดคุย
  • บรรทัด JSON จะถูกตัดออกก่อนเล่น TTS
คีย์ที่รองรับ:
  • voice / voice_id / voiceId
  • model / model_id / modelId
  • speed, rate (WPM), 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",
          voice: "cedar",
        },
      },
      instructions: "Speak warmly and keep answers brief.",
      mode: "realtime",
      transport: "webrtc",
      brain: "agent-consult",
    },
  },
}
ค่าเริ่มต้น:
  • interruptOnSpeech: true
  • silenceTimeoutMs: เมื่อไม่ได้ตั้งค่า การพูดคุยจะใช้หน้าต่างหยุดชั่วคราวเริ่มต้นของแพลตฟอร์มก่อนส่งข้อความถอดเสียง (700 ms on macOS and Android, 900 ms on iOS)
  • provider: เลือกผู้ให้บริการพูดคุยที่ใช้งานอยู่ ใช้ elevenlabs, mlx หรือ system สำหรับเส้นทางการเล่นภายในเครื่องบน macOS
  • providers.<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 หากมี)
  • consultThinkingLevel: การแทนที่ระดับการคิดแบบไม่บังคับสำหรับการรันเอเจนต์ OpenClaw แบบเต็มที่อยู่เบื้องหลังการเรียก openclaw_agent_consult แบบเรียลไทม์
  • consultFastMode: การแทนที่โหมดเร็วแบบไม่บังคับสำหรับการเรียก openclaw_agent_consult แบบเรียลไทม์
  • realtime.provider: เลือกผู้ให้บริการเสียงเรียลไทม์บนเบราว์เซอร์/เซิร์ฟเวอร์ที่ใช้งานอยู่ ใช้ openai สำหรับ WebRTC, google สำหรับ WebSocket ของผู้ให้บริการ หรือผู้ให้บริการแบบบริดจ์เท่านั้นผ่านรีเลย์ Gateway
  • realtime.providers.<provider> เก็บการกำหนดค่าเรียลไทม์ที่ผู้ให้บริการเป็นเจ้าของ เบราว์เซอร์จะได้รับเฉพาะข้อมูลรับรองเซสชันแบบชั่วคราวหรือแบบจำกัดเท่านั้น ไม่ใช่คีย์ API มาตรฐาน
  • realtime.providers.openai.voice: รหัสเสียง OpenAI Realtime ในตัว เสียง gpt-realtime-2 ปัจจุบันคือ alloy, ash, ballad, coral, echo, sage, shimmer, verse, marin และ cedar; แนะนำ marin และ cedar เพื่อคุณภาพที่ดีที่สุด
  • realtime.brain: agent-consult กำหนดเส้นทางการเรียกเครื่องมือเรียลไทม์ผ่านนโยบาย Gateway; direct-tools เป็นพฤติกรรมความเข้ากันได้สำหรับเจ้าของเท่านั้น; none ใช้สำหรับการถอดเสียงหรือการจัดการลำดับงานภายนอก
  • realtime.instructions: เพิ่มคำสั่งระบบที่หันไปยังผู้ให้บริการต่อท้ายพรอมป์เรียลไทม์ในตัวของ OpenClaw ใช้สำหรับสไตล์และโทนเสียง; OpenClaw จะคงคำแนะนำเริ่มต้นของ openclaw_agent_consult
  • talk.catalog เปิดเผยโหมด ทรานสปอร์ต กลยุทธ์ brain รูปแบบเสียงเรียลไทม์ และแฟล็กความสามารถที่ถูกต้องของผู้ให้บริการแต่ละราย เพื่อให้ไคลเอนต์พูดคุยของบุคคลที่หนึ่งหลีกเลี่ยงชุดค่าที่ไม่รองรับได้
  • ผู้ให้บริการถอดเสียงแบบสตรีมจะถูกค้นพบผ่าน talk.catalog.transcription รีเลย์ Gateway ปัจจุบันใช้การกำหนดค่าผู้ให้บริการสตรีมมิง Voice Call จนกว่าจะเพิ่มพื้นผิวการกำหนดค่าการถอดเสียงสำหรับการพูดคุยโดยเฉพาะ
  • speechLocale: รหัสภาษา BCP 47 แบบไม่บังคับสำหรับการรู้จำเสียงพูดของการพูดคุยบนอุปกรณ์ใน iOS/macOS ปล่อยว่างไว้เพื่อใช้ค่าเริ่มต้นของอุปกรณ์
  • outputFormat: ค่าเริ่มต้นคือ pcm_44100 บน macOS/iOS และ pcm_24000 บน Android (ตั้งค่า mp3_* เพื่อบังคับใช้การสตรีม MP3)

UI macOS

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

UI Android

  • สวิตช์แท็บเสียง: พูดคุย
  • ไมค์ และ พูดคุย แบบแมนนวลเป็นโหมดจับเสียงรันไทม์ที่ใช้พร้อมกันไม่ได้
  • ไมค์แบบแมนนวลจะหยุดเมื่อแอปออกจาก foreground หรือผู้ใช้ออกจากแท็บเสียง
  • โหมดพูดคุยจะทำงานต่อไปจนกว่าจะปิดสวิตช์หรือ Node Android ตัดการเชื่อมต่อ และใช้ประเภท foreground-service ของไมโครโฟน Android ขณะทำงาน

หมายเหตุ

  • ต้องมีสิทธิ์ Speech + Microphone
  • การพูดคุยแบบเนทีฟใช้เซสชัน Gateway ที่ใช้งานอยู่ และจะย้อนกลับไปใช้การโพลประวัติเมื่อไม่มีเหตุการณ์การตอบกลับเท่านั้น
  • การพูดคุยแบบเรียลไทม์บนเบราว์เซอร์ใช้ talk.client.toolCall สำหรับ openclaw_agent_consult แทนการเปิดเผย chat.send ให้เซสชันเบราว์เซอร์ที่ผู้ให้บริการเป็นเจ้าของ
  • การพูดคุยแบบถอดเสียงอย่างเดียวใช้ talk.session.create, talk.session.appendAudio, talk.session.cancelTurn และ talk.session.close; ไคลเอนต์สมัครรับ talk.event เพื่ออัปเดตข้อความถอดเสียงบางส่วน/สุดท้าย
  • Gateway แก้การเล่นเสียงพูดคุยผ่าน talk.speak โดยใช้ผู้ให้บริการพูดคุยที่ใช้งานอยู่ Android จะย้อนกลับไปใช้ TTS ระบบภายในเครื่องเฉพาะเมื่อ RPC นั้นใช้ไม่ได้
  • การเล่น MLX ภายในเครื่องบน macOS ใช้ตัวช่วย openclaw-mlx-tts ที่รวมมาเมื่อมี หรือไฟล์ปฏิบัติการบน PATH ตั้งค่า OPENCLAW_MLX_TTS_BIN ให้ชี้ไปยังไบนารีตัวช่วยแบบกำหนดเองระหว่างการพัฒนา
  • stability สำหรับ eleven_v3 จะถูกตรวจสอบให้เป็น 0.0, 0.5 หรือ 1.0; โมเดลอื่นยอมรับ 0..1
  • latency_tier จะถูกตรวจสอบให้เป็น 0..4 เมื่อตั้งค่า
  • Android รองรับรูปแบบเอาต์พุต pcm_16000, pcm_22050, pcm_24000 และ pcm_44100 สำหรับการสตรีม AudioTrack ที่มีความหน่วงต่ำ

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