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 для управления голосом:

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)

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.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.

Связанные материалы

Was this useful?
On this page

On this page