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

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: "Говори тепло й відповідай стисло.",      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.

Пов’язані матеріали

Was this useful?
On this page

On this page