Nodes and media
Режим разговора
Режим разговора охватывает пять вариантов среды выполнения:
- Нативный режим разговора в macOS/iOS/Android: локальное распознавание речи, чат через Gateway и TTS
talk.speak. Узлы объявляют возможностьtalkи указывают, какие командыtalk.*они поддерживают. - Режим разговора в iOS (реальное время): управляемый клиентом WebRTC для конфигураций OpenAI реального времени, в которых выбран транспорт
webrtcили транспорт не указан. Явные конфигурацииgateway-relay,provider-websocketи конфигурации реального времени не от OpenAI продолжают использовать ретранслятор под управлением Gateway; конфигурации не в реальном времени используют нативный речевой цикл. - Режим разговора в браузере:
talk.client.createдля управляемых клиентом сеансовwebrtc/provider-websocketилиtalk.session.createдля управляемых Gateway сеансовgateway-relay.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: "Speak warmly and keep answers brief.", 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 (идентификатор голоса и переключатель прерывания)
- Оверлей: сфера отображает универсальную звуковую волну разговора (общую для iOS, watchOS и Android). В режиме прослушивания она следует за текущим уровнем микрофона, в режиме речи — за фактической огибающей воспроизведения TTS, а в режиме размышления мягко пульсирует. Нажмите сферу, чтобы приостановить или возобновить работу, дважды нажмите, чтобы остановить речь, или нажмите X, чтобы выйти из режима Talk.
Интерфейс Android
- Переключатель на вкладке Voice: Talk
- Ручные режимы Mic и Talk являются взаимоисключающими режимами захвата звука.
- Ручной режим Mic и режим Talk в реальном времени предпочитают микрофон подключённой гарнитуры Bluetooth Classic или BLE; если она отключается, приложение запрашивает другой вход гарнитуры или переключается на микрофон по умолчанию, восстанавливая предпочтение по умолчанию после прекращения захвата.
- Ручной режим Mic прекращает работу, когда приложение уходит из активного режима или пользователь покидает вкладку Voice.
- Talk Mode продолжает работать, пока его не отключат переключателем или пока 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.