Nodes and media
Режим розмови
Режим Talk має дві форми виконання:
- Нативний Talk для macOS/iOS/Android використовує локальне розпізнавання мовлення, чат Gateway і TTS
talk.speak. Вузли оголошують можливістьtalkі декларують командиtalk.*, які вони підтримують. - iOS Talk використовує WebRTC, керований клієнтом, для конфігурацій OpenAI реального часу, які вибирають
webrtcабо не вказують транспорт. Явні конфігурації реального часуgateway-relay,provider-websocketі не-OpenAI залишаються на ретрансляторі, керованому Gateway; конфігурації не реального часу використовують нативний мовленнєвий цикл. - Browser Talk використовує
talk.client.createдля сеансівwebrtcіprovider-websocket, керованих клієнтом, абоtalk.session.createдля сеансівgateway-relay, керованих Gateway.managed-roomзарезервовано для передачі Gateway і кімнат раційного зв’язку. - Android Talk може увімкнути сеанси ретрансляції реального часу, керовані Gateway, з
talk.realtime.mode: "realtime"іtalk.realtime.transport: "gateway-relay". Інакше він залишається на нативному розпізнаванні мовлення, чаті Gateway іtalk.speak. - Клієнти лише для транскрипції використовують
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.client.steer або
talk.session.steer, щоб класифікувати мовленнєвий ввід як status, steer, cancel або
followup. Прийняте керування ставиться в чергу активного вбудованого запуску; відхилене
керування повертає структуровану причину, як-от no_active_run, not_streaming
або compacting.
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-2", voice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", 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для локальних шляхів відтворення 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.transport:webrtcвикористовує OpenAI WebRTC, керований клієнтом, на iOS і в браузері.provider-websocketкерується браузером, але на iOS залишається на ретрансляторі Gateway.gateway-relayтримає аудіо провайдера на Gateway; Android використовує режим реального часу лише для цього транспорту, а в інших випадках зберігає свій нативний цикл STT/TTS.realtime.brain:agent-consultмаршрутизує виклики інструментів реального часу через політику Gateway;direct-tools— це застаріла сумісна поведінка прямих інструментів;noneпризначено для транскрипції або зовнішньої оркестрації.realtime.consultRouting:provider-directзберігає пряму відповідь провайдера, коли він пропускаєopenclaw_agent_consult;force-agent-consultнатомість змушує ретранслятор Gateway маршрутизувати фіналізовані транскрипти користувача через OpenClaw.realtime.instructions: додає системні інструкції для провайдера до вбудованого запиту OpenClaw реального часу. Використовуйте це для стилю й тону голосу; OpenClaw зберігає типові вказівкиopenclaw_agent_consult.talk.catalogпоказує канонічні ідентифікатори провайдерів і псевдоніми реєстру поряд із допустимими режимами, транспортами, стратегіями brain, аудіоформатами реального часу, прапорцями можливостей і вибраним середовищем виконання результатом готовності для кожного провайдера. Клієнти Talk першої сторони мають використовувати цей каталог замість локального підтримання псевдонімів провайдерів; старіший Gateway, який не передає готовність групи, вважається неперевіреним, а не точно неналаштованим.- Провайдери потокової транскрипції виявляються через
talk.catalog.transcription. Поточний ретранслятор Gateway використовує конфігурацію провайдера потокових голосових викликів, доки не буде додано окрему поверхню конфігурації транскрипції Talk. speechLocale: необов’язковий ідентифікатор локалі BCP 47 для розпізнавання мовлення Talk на пристрої в iOS/macOS. Залиште незаданим, щоб використовувати типове значення пристрою.outputFormat: за замовчуваннямpcm_44100на macOS/iOS іpcm_24000на Android (задайтеmp3_*, щоб примусово ввімкнути потокове MP3)
Інтерфейс macOS
- Перемикач у рядку меню: Talk
- Вкладка конфігурації: група Talk Mode (ідентифікатор голосу + перемикач переривання)
- Оверлей:
- Слухання: хмара пульсує відповідно до рівня мікрофона
- Обмірковування: анімація занурення
- Говоріння: розбіжні кільця
- Клацання хмари: зупинити говоріння
- Клацання X: вийти з режиму Talk
Інтерфейс Android
- Перемикач вкладки голосу: Talk
- Ручні режими Mic і Talk є взаємовиключними режимами захоплення під час виконання.
- Ручний Mic і Talk реального часу надають перевагу підключеному мікрофону гарнітури Bluetooth Classic або BLE. Якщо він від’єднується, застосунок запитує інший вхід гарнітури або дозволяє Android використовувати типовий мікрофон; зупинка захоплення відновлює типову перевагу мікрофона.
- Ручний Mic зупиняється, коли застосунок виходить із переднього плану або користувач залишає вкладку Voice.
- Talk Mode працює, доки його не вимкнуть або вузол Android не від’єднається, і під час активності використовує тип foreground-service мікрофона 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..1.latency_tierперевіряється на0..4, коли задано.- Android підтримує вихідні формати
pcm_16000,pcm_22050,pcm_24000іpcm_44100для потокового AudioTrack із низькою затримкою.