Nodes and media
Tryb rozmowy
Tryb rozmowy ma dwa kształty działania:
- Natywna rozmowa w macOS/iOS/Android używa lokalnego rozpoznawania mowy, czatu Gateway i TTS
talk.speak. Węzły ogłaszają zdolnośćtalki deklarują obsługiwane poleceniatalk.*. - Rozmowa w iOS używa WebRTC zarządzanego przez klienta dla konfiguracji czasu rzeczywistego OpenAI, które wybierają
webrtcalbo pomijają transport. Jawne konfiguracje czasu rzeczywistegogateway-relay,provider-websocketi inne niż OpenAI pozostają przy przekaźniku zarządzanym przez Gateway; konfiguracje inne niż czasu rzeczywistego używają natywnej pętli mowy. - Rozmowa w przeglądarce używa
talk.client.createdla sesjiwebrtciprovider-websocketzarządzanych przez klienta albotalk.session.createdla sesjigateway-relayzarządzanych przez Gateway.managed-roomjest zarezerwowane dla przekazania do Gateway i pokojów walkie-talkie. - Rozmowa w Androidzie może włączyć sesje przekaźnika czasu rzeczywistego zarządzane przez Gateway za pomocą
talk.realtime.mode: "realtime"italk.realtime.transport: "gateway-relay". W przeciwnym razie pozostaje przy natywnym rozpoznawaniu mowy, czacie Gateway italk.speak. - Klienci tylko do transkrypcji używają
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), a następnietalk.session.appendAudio,talk.session.cancelTurnitalk.session.close, gdy potrzebują napisów lub dyktowania bez głosowej odpowiedzi asystenta.
Natywna rozmowa to ciągła pętla konwersacji głosowej:
- Nasłuchuj mowy
- Wyślij transkrypt do modelu przez aktywną sesję
- Poczekaj na odpowiedź
- Odtwórz ją przez skonfigurowanego dostawcę rozmowy (
talk.speak)
Rozmowa czasu rzeczywistego zarządzana przez klienta przekazuje wywołania narzędzi dostawcy przez talk.client.toolCall; ci klienci nie wywołują bezpośrednio chat.send dla konsultacji czasu rzeczywistego.
Gdy konsultacja czasu rzeczywistego jest aktywna, klienci rozmowy mogą używać talk.client.steer albo
talk.session.steer, aby klasyfikować wypowiedź jako status, steer, cancel albo
followup. Zaakceptowane sterowanie jest kolejkowane do aktywnego osadzonego uruchomienia; odrzucone
sterowanie zwraca ustrukturyzowany powód, taki jak no_active_run, not_streaming
albo compacting.
Rozmowa tylko do transkrypcji emituje tę samą wspólną kopertę zdarzeń rozmowy co sesje czasu rzeczywistego i STT/TTS, ale używa mode: "transcription" i brain: "none". Jest przeznaczona do napisów, dyktowania i przechwytywania mowy wyłącznie obserwacyjnie; jednorazowe przesłane notatki głosowe nadal używają ścieżki mediów/audio.
Zachowanie (macOS)
- Nakładka zawsze włączona, gdy tryb rozmowy jest włączony.
- Przejścia faz Nasłuchiwanie → Myślenie → Mówienie.
- Po krótkiej pauzie (oknie ciszy) bieżący transkrypt jest wysyłany.
- Odpowiedzi są zapisywane w WebChat (tak samo jak wpisywanie).
- Przerywanie przy mowie (domyślnie włączone): jeśli użytkownik zacznie mówić, gdy asystent mówi, zatrzymujemy odtwarzanie i zapisujemy znacznik czasu przerwania dla następnego promptu.
Dyrektywy głosowe w odpowiedziach
Asystent może poprzedzić odpowiedź pojedynczym wierszem JSON, aby sterować głosem:
{ "voice": "<voice-id>", "once": true }Zasady:
- Tylko pierwszy niepusty wiersz.
- Nieznane klucze są ignorowane.
once: truedotyczy tylko bieżącej odpowiedzi.- Bez
oncegłos staje się nową wartością domyślną dla trybu rozmowy. - Wiersz JSON jest usuwany przed odtwarzaniem TTS.
Obsługiwane klucze:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Konfiguracja (~/.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", voice: "cedar", }, }, instructions: "Speak warmly and keep answers brief.", mode: "realtime", transport: "webrtc", brain: "agent-consult", }, },}Wartości domyślne:
interruptOnSpeech: truesilenceTimeoutMs: gdy nieustawione, rozmowa zachowuje domyślne dla platformy okno pauzy przed wysłaniem transkryptu (700 ms w macOS i Androidzie, 900 ms w iOS)provider: wybiera aktywnego dostawcę rozmowy. Użyjelevenlabs,mlxalbosystemdla lokalnych ścieżek odtwarzania w macOS.providers.<provider>.voiceId: przechodzi awaryjnie naELEVENLABS_VOICE_ID/SAG_VOICE_IDdla ElevenLabs (albo pierwszy głos ElevenLabs, gdy klucz API jest dostępny).providers.elevenlabs.modelId: domyślnieeleven_v3, gdy nieustawione.providers.mlx.modelId: domyślniemlx-community/Soprano-80M-bf16, gdy nieustawione.providers.elevenlabs.apiKey: przechodzi awaryjnie naELEVENLABS_API_KEY(albo profil powłoki Gateway, jeśli jest dostępny).consultThinkingLevel: opcjonalne nadpisanie poziomu myślenia dla pełnego uruchomienia agenta OpenClaw za wywołaniamiopenclaw_agent_consultczasu rzeczywistego.consultFastMode: opcjonalne nadpisanie trybu szybkiego dla wywołańopenclaw_agent_consultczasu rzeczywistego.realtime.provider: wybiera aktywnego dostawcę głosu czasu rzeczywistego. Użyjopenaidla WebRTC,googledla WebSocket dostawcy albo dostawcy tylko mostkującego przez przekaźnik Gateway.realtime.providers.<provider>przechowuje konfigurację czasu rzeczywistego należącą do dostawcy. Przeglądarka otrzymuje tylko tymczasowe lub ograniczone dane uwierzytelniające sesji, nigdy standardowy klucz API.realtime.providers.openai.voice: wbudowany identyfikator głosu OpenAI Realtime. Obecne głosygpt-realtime-2toalloy,ash,ballad,coral,echo,sage,shimmer,verse,marinicedar;marinicedarsą zalecane dla najlepszej jakości.realtime.transport:webrtcużywa WebRTC OpenAI zarządzanego przez klienta w iOS i w przeglądarce.provider-websocketjest zarządzane przez przeglądarkę, ale w iOS pozostaje przy przekaźniku Gateway.gateway-relayutrzymuje audio dostawcy w Gateway; Android używa czasu rzeczywistego tylko dla tego transportu, a w pozostałych przypadkach zachowuje natywną pętlę STT/TTS.realtime.brain:agent-consultkieruje wywołania narzędzi czasu rzeczywistego przez politykę Gateway;direct-toolsto starsze zachowanie zgodności narzędzi bezpośrednich;nonesłuży do transkrypcji lub zewnętrznej orkiestracji.realtime.consultRouting:provider-directzachowuje bezpośrednią odpowiedź dostawcy, gdy pomijaopenclaw_agent_consult;force-agent-consultsprawia, że przekaźnik Gateway kieruje sfinalizowane transkrypty użytkownika przez OpenClaw.realtime.instructions: dołącza instrukcje systemowe widoczne dla dostawcy do wbudowanego promptu czasu rzeczywistego OpenClaw. Użyj tego do stylu i tonu głosu; OpenClaw zachowuje domyślne wskazówkiopenclaw_agent_consult.talk.catalogudostępnia kanoniczne identyfikatory dostawców i aliasy rejestru wraz z prawidłowymi trybami, transportami, strategiami mózgu, formatami audio czasu rzeczywistego, flagami zdolności i wynikiem gotowości wybranym przez środowisko uruchomieniowe dla każdego dostawcy. Własne klienty rozmowy powinny używać tego katalogu zamiast lokalnie utrzymywać aliasy dostawców; starszy Gateway, który pomija gotowość grupy, jest niezweryfikowany, a nie definitywnie nieskonfigurowany.- Dostawcy transkrypcji strumieniowej są wykrywani przez
talk.catalog.transcription. Obecny przekaźnik Gateway używa konfiguracji dostawcy strumieniowego Voice Call do czasu dodania dedykowanej powierzchni konfiguracji transkrypcji rozmowy. speechLocale: opcjonalny identyfikator lokalizacji BCP 47 dla rozpoznawania mowy rozmowy na urządzeniu w iOS/macOS. Pozostaw nieustawione, aby użyć wartości domyślnej urządzenia.outputFormat: domyślniepcm_44100w macOS/iOS ipcm_24000w Androidzie (ustawmp3_*, aby wymusić strumieniowanie MP3)
Interfejs macOS
- Przełącznik na pasku menu: Rozmowa
- Karta konfiguracji: grupa Tryb rozmowy (identyfikator głosu + przełącznik przerwania)
- Nakładka:
- Nasłuchiwanie: chmura pulsuje poziomem mikrofonu
- Myślenie: animacja opadania
- Mówienie: promieniujące pierścienie
- Kliknij chmurę: zatrzymaj mówienie
- Kliknij X: wyjdź z trybu rozmowy
Interfejs Android
- Przełącznik na karcie głosu: Rozmowa
- Ręczne tryby Mikrofon i Rozmowa są wzajemnie wykluczającymi się trybami przechwytywania w czasie działania.
- Ręczny mikrofon i rozmowa czasu rzeczywistego preferują podłączony mikrofon zestawu słuchawkowego Bluetooth Classic lub BLE. Jeśli się rozłączy, aplikacja żąda innego wejścia zestawu słuchawkowego albo pozwala Androidowi użyć domyślnego mikrofonu; zatrzymanie przechwytywania przywraca preferencję domyślnego mikrofonu.
- Ręczny mikrofon zatrzymuje się, gdy aplikacja opuszcza pierwszy plan albo użytkownik opuszcza kartę Głos.
- Tryb rozmowy działa, dopóki nie zostanie wyłączony lub węzeł Androida się nie rozłączy, i podczas aktywności używa typu usługi pierwszoplanowej mikrofonu Androida.
Uwagi
- Wymaga uprawnień do mowy i mikrofonu.
- Natywna rozmowa używa aktywnej sesji Gateway i przechodzi awaryjnie na odpytywanie historii tylko wtedy, gdy zdarzenia odpowiedzi są niedostępne.
- Rozmowa czasu rzeczywistego zarządzana przez klienta używa
talk.client.toolCalldlaopenclaw_agent_consultzamiast wystawiaćchat.sendsesjom zarządzanym przez dostawcę. - Rozmowa tylko do transkrypcji używa
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnitalk.session.close; klienci subskrybujątalk.event, aby otrzymywać częściowe/końcowe aktualizacje transkryptu. - Gateway rozwiązuje odtwarzanie rozmowy przez
talk.speak, używając aktywnego dostawcy rozmowy. Android przechodzi awaryjnie na lokalne systemowe TTS tylko wtedy, gdy ten RPC jest niedostępny. - Lokalne odtwarzanie MLX w macOS używa dołączonego pomocnika
openclaw-mlx-tts, gdy jest obecny, albo pliku wykonywalnego wPATH. UstawOPENCLAW_MLX_TTS_BIN, aby podczas programowania wskazać niestandardowy binarny plik pomocnika. stabilitydlaeleven_v3jest walidowane do0.0,0.5albo1.0; inne modele akceptują0..1.latency_tierjest walidowane do0..4, gdy jest ustawione.- Android obsługuje formaty wyjściowe
pcm_16000,pcm_22050,pcm_24000ipcm_44100dla strumieniowania AudioTrack o niskim opóźnieniu.