Nodes and media
Sprechmodus
Der Talk-Modus hat zwei Laufzeitformen:
- Nativer macOS-/iOS-/Android-Talk verwendet lokale Spracherkennung, Gateway-Chat und
talk.speak-TTS. Nodes geben dietalk-Fähigkeit bekannt und deklarieren dietalk.*-Befehle, die sie unterstützen. - Browser-Talk verwendet
talk.client.createfür client-eigenewebrtc- undprovider-websocket-Sitzungen odertalk.session.createfür Gateway-eigenegateway-relay-Sitzungen.managed-roomist für Gateway-Übergabe und Walkie-Talkie-Räume reserviert. - Nur-Transkriptions-Clients verwenden
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })und anschließendtalk.session.appendAudio,talk.session.cancelTurnundtalk.session.close, wenn sie Untertitel oder Diktat ohne Sprachantwort eines Assistenten benötigen.
Nativer Talk ist eine kontinuierliche Sprachkonversationsschleife:
- Auf Sprache warten
- Transkript über die aktive Sitzung an das Modell senden
- Auf die Antwort warten
- Über den konfigurierten Talk-Provider sprechen (
talk.speak)
Browser-Echtzeit-Talk leitet Provider-Tool-Aufrufe über talk.client.toolCall weiter; Browser-Clients rufen chat.send für Echtzeit-Konsultationen nicht direkt auf.
Nur-Transkriptions-Talk gibt dieselbe gemeinsame Talk-Ereignishülle wie Echtzeit- und STT-/TTS-Sitzungen aus, verwendet aber mode: "transcription" und brain: "none". Er ist für Untertitel, Diktat und beobachtende Sprachaufnahme gedacht; einmalig hochgeladene Sprachnotizen verwenden weiterhin den Medien-/Audio-Pfad.
Verhalten (macOS)
- Immer eingeblendetes Overlay, solange der Talk-Modus aktiviert ist.
- Phasenübergänge Zuhören → Nachdenken → Sprechen.
- Bei einer kurzen Pause (Stillefenster) wird das aktuelle Transkript gesendet.
- Antworten werden in WebChat geschrieben (wie beim Tippen).
- Unterbrechen bei Sprache (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.
Sprachdirektiven 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 Talk-Modus. - 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",
voice: "alloy",
},
},
mode: "realtime",
transport: "webrtc",
brain: "agent-consult",
},
},
}
Standardwerte:
interruptOnSpeech: truesilenceTimeoutMs: Wenn nicht gesetzt, behält Talk das plattformspezifische Standard-Pausenfenster bei, bevor das Transkript gesendet wird (700 ms on macOS and Android, 900 ms on iOS)provider: wählt den aktiven Talk-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: ist standardmäßigeleven_v3, wenn nicht gesetzt.providers.mlx.modelId: ist 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).realtime.provider: wählt den aktiven Browser-/Server-Echtzeit-Sprach-Provider aus. Verwenden Sieopenaifür WebRTC,googlefür Provider-WebSocket oder einen reinen Bridge-Provider über Gateway-Relay.realtime.providers.<provider>speichert die echtzeitbezogene, Provider-eigene Konfiguration. Der Browser erhält nur kurzlebige oder eingeschränkte Sitzungsanmeldeinformationen, niemals einen Standard-API-Schlüssel.realtime.brain:agent-consultleitet Echtzeit-Tool-Aufrufe durch die Gateway-Richtlinie;direct-toolsist ein nur dem Eigentümer vorbehaltenes Kompatibilitätsverhalten;noneist für Transkription oder externe Orchestrierung.talk.catalogstellt die gültigen Modi, Transporte, Brain-Strategien, Echtzeit-Audioformate und Fähigkeits-Flags jedes Providers bereit, damit First-Party-Talk-Clients nicht unterstützte Kombinationen vermeiden können.- Streaming-Transkriptions-Provider werden über
talk.catalog.transcriptionermittelt. Das aktuelle Gateway-Relay verwendet die Streaming-Provider-Konfiguration für Sprachanrufe, bis die dedizierte Talk-Transkriptions-Konfigurationsoberfläche hinzugefügt wird. speechLocale: optionale BCP-47-Locale-ID für die geräteinterne Talk-Spracherkennung unter iOS/macOS. Lassen Sie den Wert nicht gesetzt, um die Gerätestandardeinstellung zu verwenden.outputFormat: ist standardmäßigpcm_44100unter macOS/iOS undpcm_24000unter Android (setzen Siemp3_*, um MP3-Streaming zu erzwingen)
macOS-Benutzeroberfläche
- Menüleisten-Umschalter: Talk
- Konfigurations-Tab: Gruppe Talk-Modus (Stimmen-ID + Unterbrechungs-Umschalter)
- Overlay:
- Zuhören: Wolke pulsiert mit Mikrofonpegel
- Nachdenken: sinkende Animation
- Sprechen: abstrahlende Ringe
- Wolke anklicken: Sprechen stoppen
- X anklicken: Talk-Modus beenden
Android-Benutzeroberfläche
- Voice-Tab-Umschalter: Talk
- Manuelle Modi Mic und Talk schließen sich als Laufzeit-Aufnahmemodi gegenseitig aus.
- Manueller Mic stoppt, wenn die App den Vordergrund verlässt oder der Benutzer den Voice-Tab verlässt.
- Der Talk-Modus läuft weiter, bis er deaktiviert wird oder der Android-Node die Verbindung trennt, und verwendet während der Aktivität den Android-Mikrofon-Foreground-Service-Typ.
Hinweise
- Erfordert Berechtigungen für Sprache und Mikrofon.
- Nativer Talk verwendet die aktive Gateway-Sitzung und fällt nur auf Verlaufsabfragen zurück, wenn Antwortereignisse nicht verfügbar sind.
- Browser-Echtzeit-Talk verwendet
talk.client.toolCallfüropenclaw_agent_consult, stattchat.sendfür Provider-eigene Browser-Sitzungen offenzulegen. - Nur-Transkriptions-Talk verwendet
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnundtalk.session.close; Clients abonnierentalk.eventfür teilweise/endgültige Transkriptaktualisierungen. - Das Gateway löst die Talk-Wiedergabe über
talk.speakmit dem aktiven Talk-Provider auf. Android fällt nur dann auf lokales System-TTS zurück, wenn dieser RPC nicht verfügbar ist. - Die lokale MLX-Wiedergabe unter macOS verwendet den gebündelten
openclaw-mlx-tts-Helper, wenn vorhanden, oder eine ausführbare Datei inPATH. Setzen SieOPENCLAW_MLX_TTS_BIN, um während der Entwicklung auf ein benutzerdefiniertes Helper-Binärprogramm zu verweisen. stabilityfüreleven_v3wird auf0.0,0.5oder1.0validiert; andere Modelle akzeptieren0..1.latency_tierwird auf0..4validiert, wenn gesetzt.- Android unterstützt die Ausgabeformate
pcm_16000,pcm_22050,pcm_24000undpcm_44100für latenzarmes AudioTrack-Streaming.