Nodes and media
Chế độ trò chuyện
Chế độ Talk có hai dạng runtime:
- Talk gốc trên macOS/iOS/Android dùng nhận dạng giọng nói cục bộ, chat qua Gateway và TTS
talk.speak. Các Node quảng bá khả năngtalkvà khai báo các lệnhtalk.*mà chúng hỗ trợ. - Talk trên trình duyệt dùng
talk.client.createcho các phiênwebrtcvàprovider-websocketdo client sở hữu, hoặctalk.session.createcho các phiêngateway-relaydo Gateway sở hữu.managed-roomđược dành riêng cho việc bàn giao Gateway và các phòng bộ đàm. - Client chỉ phiên âm dùng
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), rồi dùngtalk.session.appendAudio,talk.session.cancelTurnvàtalk.session.closekhi cần phụ đề hoặc đọc chính tả mà không có phản hồi giọng nói từ trợ lý.
Talk gốc là một vòng lặp hội thoại giọng nói liên tục:
- Lắng nghe giọng nói
- Gửi bản chép lời đến mô hình qua phiên đang hoạt động
- Chờ phản hồi
- Đọc phản hồi qua provider Talk đã cấu hình (
talk.speak)
Talk thời gian thực trên trình duyệt chuyển tiếp các lệnh gọi công cụ của provider qua talk.client.toolCall; client trình duyệt không gọi trực tiếp chat.send cho các lượt tham vấn thời gian thực.
Talk chỉ phiên âm phát ra cùng phong bì sự kiện Talk chung như các phiên thời gian thực và STT/TTS, nhưng dùng mode: "transcription" và brain: "none". Tính năng này dành cho phụ đề, đọc chính tả và thu giọng nói chỉ để quan sát; ghi chú thoại tải lên một lần vẫn dùng đường dẫn media/audio.
Hành vi (macOS)
- Lớp phủ luôn bật khi chế độ Talk được bật.
- Chuyển pha Đang nghe → Đang suy nghĩ → Đang nói.
- Khi có khoảng dừng ngắn (cửa sổ im lặng), bản chép lời hiện tại được gửi.
- Câu trả lời được ghi vào WebChat (giống như khi nhập).
- Ngắt khi có giọng nói (mặc định bật): nếu người dùng bắt đầu nói trong khi trợ lý đang nói, chúng tôi dừng phát và ghi lại dấu thời gian ngắt cho prompt tiếp theo.
Chỉ thị giọng nói trong câu trả lời
Trợ lý có thể thêm tiền tố vào câu trả lời bằng một dòng JSON duy nhất để điều khiển giọng nói:
{ "voice": "<voice-id>", "once": true }
Quy tắc:
- Chỉ dòng không rỗng đầu tiên.
- Các khóa không xác định bị bỏ qua.
once: truechỉ áp dụng cho câu trả lời hiện tại.- Nếu không có
once, giọng nói sẽ trở thành mặc định mới cho chế độ Talk. - Dòng JSON bị loại bỏ trước khi phát TTS.
Các khóa được hỗ trợ:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Cấu hình (~/.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",
},
},
}
Mặc định:
interruptOnSpeech: truesilenceTimeoutMs: khi chưa đặt, Talk giữ cửa sổ tạm dừng mặc định của nền tảng trước khi gửi bản chép lời (700 ms on macOS and Android, 900 ms on iOS)provider: chọn provider Talk đang hoạt động. Dùngelevenlabs,mlxhoặcsystemcho các đường dẫn phát cục bộ trên macOS.providers.<provider>.voiceId: dùng dự phòngELEVENLABS_VOICE_ID/SAG_VOICE_IDcho ElevenLabs (hoặc giọng ElevenLabs đầu tiên khi có khóa API).providers.elevenlabs.modelId: mặc định làeleven_v3khi chưa đặt.providers.mlx.modelId: mặc định làmlx-community/Soprano-80M-bf16khi chưa đặt.providers.elevenlabs.apiKey: dùng dự phòngELEVENLABS_API_KEY(hoặc hồ sơ shell của gateway nếu có).realtime.provider: chọn provider giọng nói thời gian thực trên trình duyệt/máy chủ đang hoạt động. Dùngopenaicho WebRTC,googlecho WebSocket của provider, hoặc provider chỉ làm cầu nối qua Gateway relay.realtime.providers.<provider>lưu cấu hình thời gian thực do provider sở hữu. Trình duyệt chỉ nhận thông tin xác thực phiên tạm thời hoặc bị ràng buộc, không bao giờ nhận khóa API tiêu chuẩn.realtime.brain:agent-consultđịnh tuyến các lệnh gọi công cụ thời gian thực qua chính sách Gateway;direct-toolslà hành vi tương thích chỉ dành cho owner;nonedành cho phiên âm hoặc điều phối bên ngoài.talk.cataloghiển thị các chế độ, transport, chiến lược brain, định dạng âm thanh thời gian thực và cờ khả năng hợp lệ của từng provider để client Talk chính chủ có thể tránh các tổ hợp không được hỗ trợ.- Các provider phiên âm streaming được phát hiện qua
talk.catalog.transcription. Gateway relay hiện tại dùng cấu hình provider streaming của Voice Call cho đến khi bề mặt cấu hình phiên âm Talk chuyên dụng được thêm vào. speechLocale: id locale BCP 47 tùy chọn cho nhận dạng giọng nói Talk trên thiết bị ở iOS/macOS. Để trống để dùng mặc định của thiết bị.outputFormat: mặc định làpcm_44100trên macOS/iOS vàpcm_24000trên Android (đặtmp3_*để buộc streaming MP3)
UI macOS
- Nút bật/tắt trên thanh menu: Talk
- Tab cấu hình: nhóm Chế độ Talk (id giọng nói + nút bật/tắt ngắt)
- Lớp phủ:
- Đang nghe: đám mây phát xung theo mức mic
- Đang suy nghĩ: hiệu ứng chìm
- Đang nói: các vòng tỏa ra
- Nhấp vào đám mây: dừng nói
- Nhấp X: thoát chế độ Talk
UI Android
- Nút bật/tắt tab Giọng nói: Talk
- Mic và Talk thủ công là các chế độ thu runtime loại trừ lẫn nhau.
- Mic thủ công dừng khi ứng dụng rời foreground hoặc người dùng rời tab Giọng nói.
- Chế độ Talk tiếp tục chạy cho đến khi bị tắt hoặc Node Android ngắt kết nối, và dùng loại foreground-service microphone của Android khi đang hoạt động.
Ghi chú
- Yêu cầu quyền Speech + Microphone.
- Talk gốc dùng phiên Gateway đang hoạt động và chỉ dùng dự phòng cơ chế thăm dò lịch sử khi không có sự kiện phản hồi.
- Talk thời gian thực trên trình duyệt dùng
talk.client.toolCallchoopenclaw_agent_consultthay vì để lộchat.sendcho các phiên trình duyệt do provider sở hữu. - Talk chỉ phiên âm dùng
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnvàtalk.session.close; client đăng kýtalk.eventđể nhận cập nhật bản chép lời từng phần/cuối cùng. - gateway phân giải phát Talk qua
talk.speakbằng provider Talk đang hoạt động. Android chỉ dùng dự phòng TTS hệ thống cục bộ khi RPC đó không khả dụng. - Phát MLX cục bộ trên macOS dùng helper
openclaw-mlx-ttsđi kèm khi có, hoặc một executable trênPATH. ĐặtOPENCLAW_MLX_TTS_BINđể trỏ đến binary helper tùy chỉnh trong quá trình phát triển. stabilitychoeleven_v3được xác thực là0.0,0.5hoặc1.0; các mô hình khác chấp nhận0..1.latency_tierđược xác thực là0..4khi được đặt.- Android hỗ trợ các định dạng đầu ra
pcm_16000,pcm_22050,pcm_24000vàpcm_44100cho streaming AudioTrack độ trễ thấp.