Nodes and media
Режим розмови
Режим розмови охоплює п’ять варіантів виконання:
- Нативний режим розмови в macOS/iOS/Android: локальне розпізнавання мовлення, чат через Gateway і синтез мовлення
talk.speak. Вузли оголошують можливістьtalkі вказують, які командиtalk.*вони підтримують. - Режим розмови в iOS (у реальному часі): WebRTC під керуванням клієнта для конфігурацій OpenAI реального часу, у яких вибрано транспорт
webrtcабо транспорт не вказано. Явні конфігурації реального часуgateway-relay,provider-websocketі конфігурації не від OpenAI залишаються на ретрансляторі під керуванням Gateway; конфігурації не в реальному часі використовують нативний мовленнєвий цикл. - Режим розмови в браузері:
talk.client.createдля сеансівwebrtc/provider-websocketпід керуванням клієнта абоtalk.session.createдля сеансівgateway-relayпід керуванням Gateway.managed-roomзарезервовано для передавання керування Gateway і кімнат у режимі рації. - Режим розмови в Android (у реальному часі): увімкніть його за допомогою
talk.realtime.mode: "realtime"іtalk.realtime.transport: "gateway-relay". Інакше Android продовжує використовувати нативне розпізнавання мовлення, чат через Gateway іtalk.speak. - Клієнти лише для транскрибування:
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), а потімtalk.session.appendAudio,talk.session.cancelTurnіtalk.session.closeдля субтитрів/диктування без голосової відповіді асистента. Одноразово завантажені голосові нотатки й надалі використовують аудіошлях розуміння медіа.
Нативний режим розмови — це безперервний цикл: прослухати мовлення, надіслати транскрипцію моделі через активний сеанс, дочекатися відповіді, а потім озвучити її через налаштованого постачальника режиму розмови (talk.speak).
Режим розмови в реальному часі під керуванням клієнта пересилає виклики інструментів постачальника через talk.client.toolCall, а не викликає chat.send безпосередньо. Поки активна консультація в реальному часі, клієнти можуть викликати talk.client.steer або talk.session.steer, щоб класифікувати усне введення як status, steer, cancel або followup. Прийняте керування додається до черги активного вбудованого запуску; у разі відхилення повертається причина, наприклад no_active_run, not_streaming або compacting.
Режим розмови лише для транскрибування надсилає таку саму оболонку подій режиму розмови, що й сеанси реального часу та STT/TTS, але використовує mode: "transcription" і brain: "none". Усі сеанси режиму розмови транслюють події в каналі talk.event; клієнти підписуються на нього, щоб отримувати часткові/остаточні оновлення транскрипції (transcript.delta/transcript.done) та іншу телеметрію сеансу.
Поведінка (macOS)
- Накладка завжди відображається, доки режим розмови ввімкнено.
- Переходи між фазами Слухання → Обдумування → Мовлення.
- Після короткої паузи (інтервалу тиші) поточна транскрипція надсилається.
- Відповіді записуються у WebChat (так само, як під час введення тексту).
- Переривання мовленням (увімкнено за замовчуванням): якщо користувач говорить, поки асистент озвучує відповідь, відтворення припиняється, а часова позначка переривання враховується в наступному запиті.
Голосові директиви у відповідях
Асистент може додати на початок відповіді один рядок JSON для керування голосом:
{ "voice": "<voice-id>", "once": true }Правила:
- Лише перший непорожній рядок; рядок JSON вилучається перед відтворенням TTS.
- Невідомі ключі ігноруються.
once: trueзастосовується лише до поточної відповіді; без нього голос стає новим типовим голосом режиму розмови.
Підтримувані ключі: voice / voice_id / voiceId, model / model_id / modelId, speed, rate (слів за хвилину), 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.1", speakerVoice: "cedar", }, }, instructions: "Говори тепло й відповідай стисло.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}| Ключ | Типове значення | Примітки |
|---|---|---|
provider |
- | Активний постачальник TTS режиму розмови. Використовуйте elevenlabs, mlx або system для локальних шляхів відтворення в macOS. |
providers.<id>.voiceId |
- | ElevenLabs використовує резервне значення ELEVENLABS_VOICE_ID / SAG_VOICE_ID або перший доступний голос за наявності ключа API. |
providers.elevenlabs.modelId |
eleven_v3 |
|
providers.mlx.modelId |
mlx-community/Soprano-80M-bf16 |
|
providers.elevenlabs.apiKey |
- | Використовує резервне значення ELEVENLABS_API_KEY (або профіль оболонки Gateway, якщо доступний). |
speechLocale |
типове значення пристрою | Ідентифікатор локалі BCP 47 для локального розпізнавання мовлення режиму розмови на iOS/macOS. |
silenceTimeoutMs |
700 мс у macOS/Android, 900 мс в iOS |
Інтервал паузи, після якого режим розмови надсилає транскрипцію. |
interruptOnSpeech |
true |
|
outputFormat |
pcm_44100 у macOS/iOS, pcm_24000 в Android |
Установіть mp3_*, щоб примусово використовувати потокове передавання MP3. |
consultThinkingLevel |
не задано | Перевизначення рівня обдумування для запуску агента, що обслуговує виклики openclaw_agent_consult у реальному часі. |
consultFastMode |
не задано | Перевизначення швидкого режиму для викликів openclaw_agent_consult у реальному часі. |
realtime.provider |
- | openai для WebRTC, google для WebSocket постачальника або постачальник лише для мосту через ретранслятор Gateway. |
realtime.providers.<id> |
- | Конфігурація реального часу, якою керує постачальник. Браузери отримують лише тимчасові/обмежені облікові дані сеансу, але ніколи не стандартний ключ API. |
realtime.providers.openai.speakerVoice |
alloy |
Ідентифікатор вбудованого голосу OpenAI Realtime (старіший ключ voice усе ще працює, але застарів). Поточні голоси gpt-realtime-2.1: alloy, ash, ballad, cedar, coral, echo, marin, sage, shimmer, verse; для найкращої якості рекомендовано marin і cedar. |
realtime.transport |
- | webrtc: OpenAI WebRTC під керуванням клієнта в iOS і браузері. provider-websocket: під керуванням браузера; в iOS залишається на ретрансляторі Gateway. gateway-relay: утримує аудіо постачальника на Gateway; Android використовує режим реального часу лише з цим транспортом. |
realtime.brain |
- | agent-consult спрямовує виклики інструментів у реальному часі через політику Gateway; direct-tools забезпечує сумісність із застарілим прямим викликом інструментів; none призначено для транскрибування/зовнішньої оркестрації. |
realtime.consultRouting |
- | provider-direct зберігає безпосередню відповідь постачальника, коли той пропускає openclaw_agent_consult; натомість force-agent-consult спрямовує завершені транскрипції користувача через OpenClaw. |
realtime.instructions |
- | Додає системні інструкції для постачальника до вбудованого запиту OpenClaw у реальному часі (стиль/тон голосу); типові вказівки openclaw_agent_consult зберігаються. |
talk.catalog надає канонічні ідентифікатори провайдерів і псевдоніми реєстру, допустимі режими, транспорти, стратегії мозку, формати аудіо в реальному часі та прапорці можливостей кожного провайдера, а також вибраний середовищем виконання результат готовності. Клієнти Talk від розробників продукту мають використовувати цей каталог замість локального ведення псевдонімів провайдерів; старішу версію Gateway, яка не надає групову готовність, слід вважати неперевіреною, а не однозначно неналаштованою. Провайдери потокового транскрибування виявляються через talk.catalog.transcription; поточний ретранслятор Gateway використовує конфігурацію провайдера потокового передавання Voice Call, доки не з’явиться окрема поверхня конфігурації транскрибування Talk.
Інтерфейс macOS
- Перемикач у смузі меню: Talk
- Вкладка конфігурації: група Talk Mode (ідентифікатор голосу та перемикач переривання)
- Накладка: сфера відтворює універсальну форму звукової хвилі Talk (спільну з iOS, watchOS і Android). Під час прослуховування вона реагує на поточний рівень мікрофона, під час мовлення — на фактичну огинальну відтворення TTS, а під час обмірковування — м’яко пульсує. Натисніть сферу, щоб призупинити або відновити роботу, двічі натисніть, щоб припинити мовлення, або натисніть X, щоб вийти з режиму Talk.
Інтерфейс Android
- Перемикач на вкладці Voice: Talk
- Ручні режими Mic і Talk є взаємовиключними режимами захоплення.
- Ручний режим Mic і Talk у реальному часі надають перевагу мікрофону підключеної гарнітури Bluetooth Classic або BLE; якщо вона відключається, застосунок запитує інший вхід гарнітури або перемикається на стандартний мікрофон, відновлюючи стандартні налаштування після завершення захоплення.
- Ручний режим Mic припиняється, коли застосунок переходить у фоновий режим або користувач залишає вкладку Voice.
- Режим Talk продовжує працювати, доки його не вимкнуть перемикачем або доки Node не відключиться, використовуючи під час роботи тип фонової служби Android для мікрофона.
- Android підтримує вихідні формати
pcm_16000,pcm_22050,pcm_24000іpcm_44100для потокового передавання черезAudioTrackіз низькою затримкою.
Примітки
- Потрібні дозволи на розпізнавання мовлення та доступ до мікрофона.
- Вбудований Talk використовує активний сеанс Gateway і переходить до опитування історії лише тоді, коли події відповіді недоступні.
- Gateway визначає відтворення Talk через
talk.speak, використовуючи активного провайдера Talk. Android переходить до локального системного TTS лише тоді, коли цей RPC недоступний. - Локальне відтворення MLX у macOS використовує вбудований допоміжний засіб
openclaw-mlx-tts, якщо він доступний, або виконуваний файл уPATH. Під час розробки задайтеOPENCLAW_MLX_TTS_BIN, щоб указати власний виконуваний файл допоміжного засобу. - Діапазони значень голосових директив (ElevenLabs):
stability,similarityіstyleприймають0..1;speedприймає0.5..2;latency_tierприймає0..4.