Nodes and media
Chế độ trò chuyện
Chế độ Talk bao gồm năm dạng thức runtime:
- Talk gốc trên macOS/iOS/Android: nhận dạng giọng nói gốc, trò chuyện qua Gateway và TTS
talk.speak. Tính năng nhận dạng Apple Speech trên macOS/iOS có thể sử dụng các dịch vụ mạng; hành vi trên Android phụ thuộc vào dịch vụ giọng nói đã cài đặt. Các Node quảng bá khả năngtalkvà khai báo những lệnhtalk.*mà chúng hỗ trợ. - Talk trên iOS (thời gian thực): WebRTC do máy khách quản lý cho các cấu hình thời gian thực của OpenAI chọn phương thức truyền tải
webrtchoặc không chỉ định phương thức truyền tải. Các cấu hình thời gian thựcgateway-relay,provider-websocketđược chỉ định rõ ràng và các cấu hình không phải OpenAI vẫn sử dụng relay do Gateway quản lý; các cấu hình không theo thời gian thực sử dụng vòng lặp giọng nói gốc. - Talk trên trình duyệt:
talk.client.createcho các phiênwebrtc/provider-websocketdo máy khách quản lý, hoặctalk.session.createcho các phiêngateway-relaydo Gateway quản lý.managed-roomđược dành riêng cho việc bàn giao qua Gateway và các phòng bộ đàm. - Talk trên Android (thời gian thực): chọn tham gia bằng
talk.realtime.mode: "realtime"vàtalk.realtime.transport: "gateway-relay". Nếu không, Android tiếp tục sử dụng nhận dạng giọng nói gốc, trò chuyện qua Gateway vàtalk.speak. - Máy khách chỉ phiên âm:
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), sau đó làtalk.session.appendAudio,talk.session.cancelTurnvàtalk.session.closeđể tạo phụ đề/đọc chính tả mà không có phản hồi bằng giọng nói của trợ lý. Các ghi chú thoại tải lên một lần vẫn sử dụng đường dẫn âm thanh hiểu nội dung đa phương tiện.
Talk gốc là một vòng lặp liên tục: lắng nghe lời nói, gửi bản phiên âm đến mô hình thông qua phiên đang hoạt động, chờ phản hồi, rồi phát phản hồi đó bằng nhà cung cấp Talk đã cấu hình (talk.speak).
Talk thời gian thực do máy khách quản lý chuyển tiếp các lệnh gọi công cụ của nhà cung cấp thông qua talk.client.toolCall thay vì gọi trực tiếp chat.send. Khi một lượt tham vấn thời gian thực đang hoạt động, máy khách có thể gọi talk.client.steer hoặc talk.session.steer để phân loại đầu vào bằng giọng nói là status, steer, cancel hoặc followup. Chỉ dẫn điều hướng được chấp nhận sẽ được đưa vào hàng đợi của lượt chạy nhúng đang hoạt động; chỉ dẫn bị từ chối sẽ trả về một lý do như no_active_run, not_streaming hoặc compacting.
Các phát ngôn thời gian thực đã hoàn tất của người dùng và trợ lý luôn được nối trực tiếp vào phiên tác nhân đang hoạt động, để các lượt trò chuyện và giọng nói sau này dùng chung một lịch sử. Các phương thức truyền tải do máy khách quản lý báo cáo bản phiên âm đã hoàn tất bằng mã định danh mục nhập ổn định; các phiên relay của Gateway nối cùng những sự kiện đó ở phía máy chủ. Các phiên của nhà cung cấp cũng nhận ngữ cảnh hồ sơ thời gian thực có giới hạn được giọng nói Discord sử dụng.
Các lượt chạy tham vấn bắt nguồn từ giọng nói yêu cầu một xác nhận bằng lời nói mới và chính xác trước các hành động có tác động lớn như gửi tin nhắn, điều khiển Node, thao tác trên trình duyệt/máy tính, thay đổi dịch vụ, thực thi lệnh shell phá hủy hoặc xuất bản. Xác nhận chỉ áp dụng cho đúng các đối số công cụ bị chặn và chỉ được sử dụng một lần; các lượt chạy đồng thời không liên quan không bị ảnh hưởng. Khi cuộc gọi kết thúc, OpenClaw có thể gửi bản tóm tắt ngắn gọn Thay đổi của cuộc gọi thoại về các công cụ gây thay đổi đến đích gửi nhận cuối cùng không phải WebChat của phiên.
Talk chỉ phiên âm phát cùng một phong bì sự kiện Talk như các phiên thời gian thực và STT/TTS, nhưng sử dụng mode: "transcription" và brain: "none". Tất cả các phiên Talk phát sự kiện trên kênh talk.event; máy khách đăng ký kênh này để nhận các bản cập nhật phiên âm một phần/hoàn chỉnh (transcript.delta/transcript.done) và dữ liệu đo từ xa khác của phiên.
Talk Video trên trình duyệt khả dụng cho OpenAI Realtime WebRTC và các phiên WebSocket của nhà cung cấp Google Live. OpenAI nhận một ảnh JPEG duy nhất có giới hạn khi
describe_view yêu cầu ngữ cảnh trực quan; OpenAI không nhận luồng
camera liên tục. Google Live nhận trực tiếp các khung hình JPEG có giới hạn từ
trình duyệt với tốc độ tối đa một khung hình mỗi giây, trong khi describe_view báo cáo
trạng thái luồng camera. Trong cả hai trường hợp, các khung hình camera đều bỏ qua Gateway, và
việc dừng Talk sẽ giải phóng các luồng camera và micrô.
Hành vi (macOS)
- Lớp phủ luôn hiển thị khi chế độ Talk được bật.
- Chuyển đổi giữa các giai đoạn Đang nghe → Đang suy nghĩ → Đang nói.
- Khi có khoảng dừng ngắn (khoảng lặng), bản phiên âm hiện tại được gửi đi.
- Các phản hồi được ghi vào WebChat (giống như khi nhập văn bản).
- Ngắt khi có lời nói (mặc định bật): nếu người dùng nói trong khi trợ lý đang phát lời, quá trình phát sẽ dừng và dấu thời gian ngắt được ghi lại cho lời nhắc tiếp theo.
Chỉ thị giọng nói trong phản hồi
Trợ lý có thể thêm một dòng JSON duy nhất vào đầu phản hồi để điều khiển giọng nói:
{ "voice": "<voice-id>", "once": true }Quy tắc:
- Chỉ áp dụng cho dòng không trống đầu tiên; dòng JSON sẽ bị loại bỏ trước khi phát TTS.
- Các khóa không xác định sẽ bị bỏ qua.
once: truechỉ áp dụng cho phản hồi hiện tại; nếu không có, giọng nói sẽ trở thành mặc định mới của chế độ Talk.
Các khóa được hỗ trợ: voice / voice_id / voiceId, model / model_id / modelId, speed, rate (WPM), stability, similarity, style, speakerBoost, seed, normalize, lang, output_format, latency_tier, once.
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-2.1", speakerVoice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}| Khóa | Mặc định | Ghi chú |
|---|---|---|
provider |
- | Nhà cung cấp TTS cho Active Talk. Sử dụng elevenlabs, mlx hoặc system cho các đường dẫn phát cục bộ trên macOS. |
providers.<id>.voiceId |
- | ElevenLabs dự phòng về ELEVENLABS_VOICE_ID / SAG_VOICE_ID hoặc giọng nói khả dụng đầu tiên có khóa API. |
speechLocale |
mặc định của thiết bị | Ngôn ngữ BCP 47 cho tính năng nhận dạng giọng nói gốc trên Android, iOS và macOS. Apple Speech có thể sử dụng các dịch vụ mạng; Android cũng chuyển tiếp thành phần ngôn ngữ đến quá trình phiên âm đầu vào theo thời gian thực. |
providers.elevenlabs.modelId |
eleven_v3 |
|
providers.mlx.modelId |
mlx-community/Soprano-80M-bf16 |
|
providers.elevenlabs.apiKey |
- | Dự phòng về ELEVENLABS_API_KEY (hoặc hồ sơ shell của Gateway nếu có). |
silenceTimeoutMs |
700 ms macOS/Android, 900 ms iOS |
Khoảng tạm dừng trước khi Talk gửi bản phiên âm. |
interruptOnSpeech |
true |
|
outputFormat |
pcm_44100 macOS/iOS, pcm_24000 Android |
Đặt mp3_* để buộc phát trực tuyến MP3. |
consultThinkingLevel |
chưa đặt | Ghi đè mức suy luận cho lượt chạy tác tử phía sau các lệnh gọi openclaw_agent_consult theo thời gian thực. |
consultFastMode |
chưa đặt | Ghi đè chế độ nhanh cho các lệnh gọi openclaw_agent_consult theo thời gian thực. |
realtime.provider |
- | openai cho WebRTC, google cho WebSocket của nhà cung cấp hoặc nhà cung cấp chỉ dùng cầu nối thông qua chuyển tiếp Gateway. |
realtime.providers.<id> |
- | Cấu hình thời gian thực do nhà cung cấp sở hữu. Trình duyệt chỉ nhận thông tin xác thực phiên tạm thời/bị giới hạn, không bao giờ nhận khóa API tiêu chuẩn. |
realtime.providers.openai.speakerVoice |
alloy |
ID giọng nói OpenAI Realtime tích hợp sẵn (khóa voice cũ hơn vẫn hoạt động nhưng đã lỗi thời). Các giọng nói gpt-realtime-2.1 hiện tại: alloy, ash, ballad, cedar, coral, echo, marin, sage, shimmer, verse; khuyến nghị marin và cedar để có chất lượng tốt nhất. |
realtime.transport |
- | webrtc: OpenAI WebRTC do máy khách sở hữu trên iOS và trong trình duyệt. provider-websocket: do trình duyệt sở hữu, vẫn dùng chuyển tiếp Gateway trên iOS. gateway-relay: giữ âm thanh của nhà cung cấp trên Gateway; Android chỉ sử dụng chế độ thời gian thực với phương thức truyền tải này. |
realtime.brain |
- | agent-consult định tuyến các lệnh gọi công cụ theo thời gian thực qua chính sách Gateway; direct-tools là khả năng tương thích công cụ trực tiếp cũ; none dành cho phiên âm/điều phối bên ngoài. |
realtime.consultRouting |
- | provider-direct giữ nguyên phản hồi trực tiếp của nhà cung cấp khi bỏ qua openclaw_agent_consult; thay vào đó, force-agent-consult định tuyến các bản phiên âm người dùng đã hoàn tất qua OpenClaw. |
realtime.instructions |
- | Nối thêm các chỉ dẫn hệ thống dành cho nhà cung cấp vào lời nhắc thời gian thực tích hợp sẵn của OpenClaw (phong cách/tông giọng); hướng dẫn openclaw_agent_consult mặc định vẫn được giữ nguyên. |
talk.catalog cung cấp các ID nhà cung cấp chuẩn và bí danh trong sổ đăng ký, các chế độ/phương thức truyền tải/chiến lược bộ não/định dạng âm thanh thời gian thực/cờ khả năng hợp lệ của từng nhà cung cấp và kết quả trạng thái sẵn sàng do môi trường chạy lựa chọn. Các máy khách Talk chính chủ nên đọc danh mục đó thay vì duy trì bí danh nhà cung cấp cục bộ; hãy coi một Gateway cũ không cung cấp trạng thái sẵn sàng theo nhóm là chưa được xác minh, thay vì chắc chắn chưa được cấu hình. Các nhà cung cấp phiên âm trực tuyến được phát hiện thông qua talk.catalog.transcription; tính năng chuyển tiếp Gateway hiện tại sử dụng cấu hình nhà cung cấp phát trực tuyến của Voice Call cho đến khi có bề mặt cấu hình phiên âm Talk chuyên dụng.
Giao diện người dùng macOS
- Nút bật/tắt trên thanh menu: Talk
- Thẻ cấu hình: nhóm Talk Mode (ID giọng nói + nút bật/tắt ngắt lời)
- Lớp phủ: quả cầu hiển thị dạng sóng đàm thoại chung (được chia sẻ với iOS, watchOS và Android). Trạng thái Đang nghe phản ánh mức mic trực tiếp, trạng thái Đang nói phản ánh đường bao phát TTS thực tế, trạng thái Đang suy nghĩ chuyển động nhẹ nhàng. Nhấp vào quả cầu để tạm dừng/tiếp tục, nhấp đúp để dừng nói, nhấp vào X để thoát chế độ Talk.
Giao diện người dùng Android
- Điều hướng chính của Android gồm Home, Chat và Settings. Tính năng nhập liệu bằng giọng nói nằm trong trình soạn thảo Chat thay vì một thẻ Voice riêng.
- Nhấn vào biểu tượng micrô của trình soạn thảo để đọc chính tả trên thiết bị. Nhấn giữ để ghi tệp đính kèm ghi chú thoại. Bắt đầu Talk liên tục từ dạng sóng Talk.
- Đọc chính tả, ghi ghi chú thoại và Talk là các đường dẫn micrô loại trừ lẫn nhau; việc bắt đầu một đường dẫn sẽ dừng hoặc chặn các đường dẫn còn lại.
- Talk theo thời gian thực ưu tiên micrô của tai nghe Bluetooth Classic hoặc BLE đang kết nối; nếu thiết bị ngắt kết nối, ứng dụng sẽ yêu cầu một đầu vào tai nghe khác hoặc dự phòng về micrô mặc định, đồng thời khôi phục tùy chọn mặc định sau khi quá trình thu âm dừng lại.
- Đọc chính tả và ghi ghi chú thoại sẽ dừng khi ứng dụng rời khỏi nền trước hoặc người dùng rời khỏi Chat.
- Talk Mode tiếp tục chạy cho đến khi bị tắt hoặc Node ngắt kết nối, sử dụng loại dịch vụ nền trước dành cho micrô của Android khi đang hoạt động.
- Android hỗ trợ các định dạng đầu ra
pcm_16000,pcm_22050,pcm_24000vàpcm_44100để phát trực tuyếnAudioTrackvới độ trễ thấp.
Ghi chú
- Yêu cầu quyền truy cập Giọng nói + Micrô.
- Talk gốc sử dụng phiên Gateway đang hoạt động và chỉ dự phòng sang việc thăm dò lịch sử khi các sự kiện phản hồi không khả dụng.
- Gateway phân giải việc phát Talk thông qua
talk.speakbằng nhà cung cấp Talk đang hoạt động. Android chỉ dự phòng sang TTS hệ thống cục bộ khi RPC đó không khả dụng. - Tính năng phát MLX cục bộ trên macOS sử dụng trình trợ giúp
openclaw-mlx-ttsđi kèm khi có, hoặc một tệp thực thi trênPATH. ĐặtOPENCLAW_MLX_TTS_BINđể trỏ đến tệp nhị phân trợ giúp tùy chỉnh trong quá trình phát triển. - Phạm vi giá trị chỉ thị giọng nói (ElevenLabs):
stability,similarityvàstylechấp nhận0..1;speedchấp nhận0.5..2;latency_tierchấp nhận0..4.