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 — це безперервний цикл голосової розмови:

  1. Слухати мовлення
  2. Надіслати транскрипт до моделі через активний сеанс
  3. Дочекатися відповіді
  4. Озвучити її через налаштованого провайдера 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-рядка для керування голосом:

json
{ "voice": "<voice-id>", "once": true }

Правила:

  • Лише перший непорожній рядок.
  • Невідомі ключі ігноруються.
  • once: true застосовується лише до поточної відповіді.
  • Без once голос стає новим типовим для режиму Talk.
  • 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)

json5
{  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: якщо не задано, 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 із низькою затримкою.

Пов’язане

Was this useful?
On this page

On this page