Nodes and media
Gesprächsmodus
Der Sprechmodus hat zwei Laufzeitformen:
- Natives Sprechen auf macOS/iOS/Android verwendet lokale Spracherkennung, Gateway-Chat und
talk.speak-TTS. Nodes kündigen dietalk-Fähigkeit an und deklarieren die von ihnen unterstütztentalk.*-Befehle. - iOS-Sprechen verwendet clientseitig verwaltetes WebRTC für OpenAI-Echtzeitkonfigurationen, die
webrtcauswählen oder den Transport weglassen. Explizitegateway-relay-,provider-websocket- und Nicht-OpenAI-Echtzeitkonfigurationen bleiben beim Gateway-verwalteten Relay; Nicht-Echtzeitkonfigurationen verwenden die native Sprachschleife. - Browser-Sprechen verwendet
talk.client.createfür clientseitig verwaltetewebrtc- undprovider-websocket-Sitzungen odertalk.session.createfür Gateway-verwaltetegateway-relay-Sitzungen.managed-roomist für Gateway-Übergaben und Walkie-Talkie-Räume reserviert. - Android-Sprechen kann sich mit
talk.realtime.mode: "realtime"undtalk.realtime.transport: "gateway-relay"für Gateway-verwaltete Echtzeit-Relay-Sitzungen entscheiden. Andernfalls bleibt es bei nativer Spracherkennung, Gateway-Chat undtalk.speak. - Nur-Transkriptions-Clients verwenden
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), anschließendtalk.session.appendAudio,talk.session.cancelTurnundtalk.session.close, wenn sie Untertitel oder Diktat ohne gesprochene Assistentenantwort benötigen.
Natives Sprechen ist eine kontinuierliche Sprachkonversationsschleife:
- Auf Sprache hören
- Transkript über die aktive Sitzung an das Modell senden
- Auf die Antwort warten
- Über den konfigurierten Sprech-Provider ausgeben (
talk.speak)
Clientseitig verwaltetes Echtzeit-Sprechen leitet Provider-Toolaufrufe über talk.client.toolCall weiter; diese Clients rufen chat.send für Echtzeitkonsultationen nicht direkt auf.
Während eine Echtzeitkonsultation aktiv ist, können Sprech-Clients talk.client.steer oder
talk.session.steer verwenden, um gesprochene Eingaben als status, steer, cancel oder
followup zu klassifizieren. Akzeptierte Steuerung wird in den aktiven eingebetteten Lauf eingereiht; abgelehnte
Steuerung gibt einen strukturierten Grund wie no_active_run, not_streaming
oder compacting zurück.
Nur-Transkriptions-Sprechen gibt denselben gemeinsamen Sprechereignis-Umschlag aus wie Echtzeit- und STT/TTS-Sitzungen, verwendet aber mode: "transcription" und brain: "none". Es ist für Untertitel, Diktat und reine Beobachtungs-Spracherfassung gedacht; einmalig hochgeladene Sprachnotizen verwenden weiterhin den Medien-/Audiopfad.
Verhalten (macOS)
- Immer sichtbares Overlay, während der Sprechmodus aktiviert ist.
- Phasenübergänge Zuhören → Denken → Sprechen.
- Bei einer kurzen Pause (Stillefenster) wird das aktuelle Transkript gesendet.
- Antworten werden in WebChat geschrieben (genau wie beim Tippen).
- Bei Sprache unterbrechen (standardmäßig aktiviert): Wenn der Benutzer zu sprechen beginnt, während der Assistent spricht, stoppen wir die Wiedergabe und vermerken den Unterbrechungszeitstempel für den nächsten Prompt.
Sprachanweisungen in Antworten
Der Assistent kann seiner Antwort eine einzelne JSON-Zeile voranstellen, um die Stimme zu steuern:
{ "voice": "<voice-id>", "once": true }Regeln:
- Nur die erste nicht leere Zeile.
- Unbekannte Schlüssel werden ignoriert.
once: truegilt nur für die aktuelle Antwort.- Ohne
oncewird die Stimme zur neuen Standardeinstellung für den Sprechmodus. - Die JSON-Zeile wird vor der TTS-Wiedergabe entfernt.
Unterstützte Schlüssel:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Konfiguration (~/.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", }, },}Standardwerte:
interruptOnSpeech: truesilenceTimeoutMs: Wenn nicht gesetzt, behält Sprechen das plattformspezifische Standard-Pausenfenster vor dem Senden des Transkripts bei (700 ms on macOS and Android, 900 ms on iOS)provider: wählt den aktiven Sprech-Provider aus. Verwenden Sieelevenlabs,mlxodersystemfür die macOS-lokalen Wiedergabepfade.providers.<provider>.voiceId: fällt für ElevenLabs aufELEVENLABS_VOICE_ID/SAG_VOICE_IDzurück (oder auf die erste ElevenLabs-Stimme, wenn ein API-Schlüssel verfügbar ist).providers.elevenlabs.modelId: standardmäßigeleven_v3, wenn nicht gesetzt.providers.mlx.modelId: standardmäßigmlx-community/Soprano-80M-bf16, wenn nicht gesetzt.providers.elevenlabs.apiKey: fällt aufELEVENLABS_API_KEYzurück (oder auf das Gateway-Shell-Profil, falls verfügbar).consultThinkingLevel: optionale Überschreibung der Denkstufe für den vollständigen OpenClaw-Agentenlauf hinter Echtzeit-openclaw_agent_consult-Aufrufen.consultFastMode: optionale Schnellmodus-Überschreibung für Echtzeit-openclaw_agent_consult-Aufrufe.realtime.provider: wählt den aktiven Echtzeit-Sprach-Provider aus. Verwenden Sieopenaifür WebRTC,googlefür Provider-WebSocket oder einen reinen Bridge-Provider über Gateway-Relay.realtime.providers.<provider>speichert Provider-verwaltete Echtzeitkonfiguration. Der Browser erhält nur kurzlebige oder eingeschränkte Sitzungszugangsdaten, niemals einen Standard-API-Schlüssel.realtime.providers.openai.voice: integrierte OpenAI-Realtime-Stimmen-ID. Aktuellegpt-realtime-2-Stimmen sindalloy,ash,ballad,coral,echo,sage,shimmer,verse,marinundcedar;marinundcedarwerden für die beste Qualität empfohlen.realtime.transport:webrtcverwendet clientseitig verwaltetes OpenAI WebRTC auf iOS und im Browser.provider-websocketist browserseitig verwaltet, bleibt auf iOS aber beim Gateway-Relay.gateway-relayhält Provider-Audio auf dem Gateway; Android verwendet Echtzeit nur für diesen Transport und behält andernfalls seine native STT/TTS-Schleife bei.realtime.brain:agent-consultleitet Echtzeit-Toolaufrufe durch die Gateway-Policy;direct-toolsist Legacy-Kompatibilitätsverhalten für direkte Tools;noneist für Transkription oder externe Orchestrierung gedacht.realtime.consultRouting:provider-directbehält die direkte Antwort des Providers bei, wenn eropenclaw_agent_consultüberspringt;force-agent-consultsorgt dafür, dass Gateway-Relay finalisierte Benutzertranskripte stattdessen durch OpenClaw leitet.realtime.instructions: hängt Provider-seitige Systemanweisungen an den integrierten Echtzeit-Prompt von OpenClaw an. Verwenden Sie dies für Sprachstil und Tonfall; OpenClaw behält die standardmäßigeopenclaw_agent_consult-Anleitung bei.talk.catalogstellt kanonische Provider-IDs und Registry-Aliasse zusammen mit den gültigen Modi, Transporten, Brain-Strategien, Echtzeit-Audioformaten, Fähigkeitsflags und dem zur Laufzeit ausgewählten Bereitschaftsergebnis jedes Providers bereit. Offizielle Sprech-Clients sollten diesen Katalog verwenden, statt Provider-Aliasse lokal zu pflegen; ein älteres Gateway, das Gruppenbereitschaft auslässt, gilt als ungeprüft und nicht als eindeutig nicht konfiguriert.- Streaming-Transkriptions-Provider werden über
talk.catalog.transcriptionerkannt. Das aktuelle Gateway-Relay verwendet die Streaming-Provider-Konfiguration für Sprachanrufe, bis die dedizierte Konfigurationsoberfläche für Sprechtranskription hinzugefügt wird. speechLocale: optionale BCP-47-Gebietsschema-ID für die geräteinterne Sprech-Spracherkennung auf iOS/macOS. Nicht setzen, um den Gerätestandard zu verwenden.outputFormat: standardmäßigpcm_44100auf macOS/iOS undpcm_24000auf Android (setzen Siemp3_*, um MP3-Streaming zu erzwingen)
macOS-Benutzeroberfläche
- Umschalter in der Menüleiste: Sprechen
- Konfigurations-Tab: Gruppe Sprechmodus (Stimmen-ID + Unterbrechungs-Umschalter)
- Overlay:
- Zuhören: Wolke pulsiert mit Mikrofonpegel
- Denken: absinkende Animation
- Sprechen: ausstrahlende Ringe
- Wolke anklicken: Sprechen stoppen
- X anklicken: Sprechmodus beenden
Android-Benutzeroberfläche
- Umschalter im Sprach-Tab: Sprechen
- Manuelle Modi Mikrofon und Sprechen schließen sich als Laufzeit-Erfassungsmodi gegenseitig aus.
- Manuelles Mikrofon und Echtzeit-Sprechen bevorzugen ein verbundenes Bluetooth-Classic- oder BLE-Headset-Mikrofon. Wenn die Verbindung getrennt wird, fordert die App eine andere Headset-Eingabe an oder lässt Android das Standardmikrofon verwenden; das Stoppen der Erfassung stellt die Standardmikrofon-Präferenz wieder her.
- Manuelles Mikrofon stoppt, wenn die App den Vordergrund verlässt oder der Benutzer den Sprach-Tab verlässt.
- Der Sprechmodus läuft weiter, bis er ausgeschaltet wird oder der Android-Node die Verbindung trennt, und verwendet im aktiven Zustand den Android-Foreground-Service-Typ für Mikrofone.
Hinweise
- Erfordert Berechtigungen für Spracherkennung und Mikrofon.
- Natives Sprechen verwendet die aktive Gateway-Sitzung und fällt nur dann auf History-Polling zurück, wenn Antwortereignisse nicht verfügbar sind.
- Clientseitig verwaltetes Echtzeit-Sprechen verwendet
talk.client.toolCallfüropenclaw_agent_consult, stattchat.sendfür Provider-verwaltete Sitzungen offenzulegen. - Nur-Transkriptions-Sprechen verwendet
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnundtalk.session.close; Clients abonnierentalk.eventfür partielle/finale Transkriptaktualisierungen. - Das Gateway löst die Sprechwiedergabe über
talk.speakmit dem aktiven Sprech-Provider auf. Android fällt nur dann auf lokale System-TTS zurück, wenn dieser RPC nicht verfügbar ist. - Die lokale macOS-MLX-Wiedergabe verwendet den gebündelten
openclaw-mlx-tts-Helper, wenn vorhanden, oder eine ausführbare Datei aufPATH. Setzen SieOPENCLAW_MLX_TTS_BIN, um während der Entwicklung auf eine benutzerdefinierte Helper-Binärdatei zu verweisen. stabilityfüreleven_v3wird auf0.0,0.5oder1.0validiert; andere Modelle akzeptieren0..1.latency_tierwird, wenn gesetzt, auf0..4validiert.- Android unterstützt die Ausgabeformate
pcm_16000,pcm_22050,pcm_24000undpcm_44100für latenzarmes AudioTrack-Streaming.