Talk mode
Le mode discussion existe sous deux formes à l’exécution :
- Le mode discussion natif macOS/iOS/Android utilise la reconnaissance vocale locale, la discussion Gateway et la TTS macOSiOSAndroidGateway
talk.speak. Les nœuds annoncent la capacitétalket déclarent les commandestalk.*qu’ils prennent en charge. - Le mode discussion navigateur utilise
talk.client.createpour les sessionswebrtcetprovider-websocketappartenant au client, outalk.session.createGateway pour les sessionsgateway-relayappartenant au Gateway.managed-roomGateway est réservé pour le transfert Gateway et les salons talkie-walkie. - Android Talk peut opter pour des sessions de relais en temps réel détenues par Gateway avec AndroidGateway
talk.realtime.mode: "realtime"ettalk.realtime.transport: "gateway-relay"Gateway. Sinon, il reste sur la reconnaissance vocale native, le chat Gateway ettalk.speak. - Les clients de transcription uniquement utilisent
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" }), puistalk.session.appendAudio,talk.session.cancelTurnettalk.session.closelorsqu’ils ont besoin de sous-titres ou de dictée sans réponse vocale de l’assistant.
Le mode Talk natif est une boucle de conversation vocale continue :
- Écouter la parole
- Envoyer la transcription au modèle via la session active
- Attendre la réponse
- La prononcer via le fournisseur Talk configuré (
talk.speak)
Le Talk en temps réel du navigateur transmet les appels d’outils du provider via talk.client.toolCall ; les clients navigateur n’appellent pas directement chat.send pour les consultations en temps réel.
Pendant qu’une consultation en temps réel est active, les clients Talk peuvent utiliser talk.client.steer ou
talk.session.steer pour classer les entrées vocales comme status, steer, cancel, ou
followup. Les directives acceptées sont mises en file d’attente dans l’exécution intégrée active ; les directives rejetées renvoient une raison structurée telle que no_active_run, not_streaming,
ou compacting.
Le Talk de transcription uniquement émet la même enveloppe d’événements Talk commune que les sessions en temps réel et STT/TTS, mais utilise mode: "transcription" et brain: "none". Il est destiné aux sous-titres, à la dictée et à la capture vocale en observation uniquement ; les notes vocales téléchargées en une seule fois utilisent toujours le chemin média/audio.
Comportement (macOS)
Section intitulée « Comportement (macOS) »- Superposition toujours active tant que le mode Talk est activé.
- Transitions de phase Écoute → Réflexion → Parole.
- Lors d’une courte pause (fenêtre de silence), la transcription actuelle est envoyée.
- Les réponses sont écrites dans WebChat (comme lors de la frappe).
- Interrompre sur parole (activé par défaut) : si l’utilisateur commence à parler alors que l’assistant parle, nous arrêtons la lecture et notons l’horodatage de l’interruption pour la prochaine invite.
Directives vocales dans les réponses
Section intitulée « Directives vocales dans les réponses »L’assistant peut préfixer sa réponse par une seule ligne JSON pour contrôler la voix :
{ "voice": "<voice-id>", "once": true }Règles :
- Uniquement la première ligne non vide.
- Les clés inconnues sont ignorées.
once: trues’applique uniquement à la réponse actuelle.- Sans
once, la voix devient la nouvelle valeur par défaut pour le mode Talk. - La ligne JSON est supprimée avant la lecture TTS.
Clés prises en charge :
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
Config (~/.openclaw/openclaw.json)
Section intitulée « Config (~/.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", }, },}Par défaut :
interruptOnSpeech: truesilenceTimeoutMs: lorsqu’il n’est pas défini, Talk conserve la fenêtre de pause par défaut de la plateforme avant d’envoyer la transcription (700 ms on macOS and Android, 900 ms on iOS)provider: sélectionne le provider Talk actif. Utilisezelevenlabs,mlxousystempour les chemins de lecture locale macOS.providers.<provider>.voiceId: revient àELEVENLABS_VOICE_ID/SAG_VOICE_IDpour ElevenLabs (ou à la première voix ElevenLabs lorsque la clé API est disponible).providers.elevenlabs.modelId: valeur par défauteleven_v3si non défini.providers.mlx.modelId: valeur par défautmlx-community/Soprano-80M-bf16si non défini.providers.elevenlabs.apiKey: revient àELEVENLABS_API_KEY(ou au profil shell de la passerelle si disponible).consultThinkingLevel: substitution facultative du niveau de réflexion pour l’exécution complète de l’agent OpenClaw derrière les appelsopenclaw_agent_consulten temps réel.consultFastMode: substitution facultative du mode rapide pour les appelsopenclaw_agent_consulten temps réel.realtime.provider: sélectionne le provider de voix en temps réel actif du navigateur/serveur. Utilisezopenaipour WebRTC,googlepour le WebSocket du provider, ou un provider de pont uniquement via le relais Gateway.realtime.providers.<provider>stocke la configuration en temps réel appartenant au provider. Le navigateur ne reçoit que des identifiants de session éphémères ou contraints, jamais une clé API standard.realtime.providers.openai.voice: id de voix Realtime intégrée OpenAI. Les voixgpt-realtime-2actuelles sontalloy,ash,ballad,coral,echo,sage,shimmer,verse,marinetcedar;marinetcedarsont recommandés pour une meilleure qualité.realtime.transport:webrtcetprovider-websocketAndroid sont des transports temps réel du navigateur. Android n’utilise le relais temps réel que lorsque c’estgateway-relayAndroid ; sinon, Android Talk utilise sa boucle native STT/TTS.realtime.brain:agent-consultGateway achemine les appels d’outils temps réel via la stratégie du Gateway ;direct-toolsest le comportement de compatibilité hérité d’outil direct ;noneest pour la transcription ou l’orchestration externe.realtime.consultRouting:provider-directpréserve la réponse directe du provider lorsqu’il ignoreopenclaw_agent_consult;force-agent-consultGatewayOpenClaw fait en sorte que le relais Gateway achemine les transcriptions d’utilisateur finalisées via OpenClaw à la place.realtime.instructionsOpenClawOpenClaw : ajoute des instructions système destinées au provider à l’invite temps réel intégrée d’OpenClaw. Utilisez-le pour le style et le ton de la voix ; OpenClaw conserve les directivesopenclaw_agent_consultpar défaut.talk.catalogexpose les modes valides, les transports, les stratégies de cerveau, les formats audio temps réel et les indicateurs de capacité de chaque provider afin que les clients Talk de première partie puissent éviter les combinaisons non prises en charge.- Les providers de transcription en continu sont découverts via
talk.catalog.transcriptionGateway. Le relais Gateway actuel utilise la configuration du provider de diffusion en continu Voice Call jusqu’à ce que la surface de configuration de transcription Talk dédiée soit ajoutée. speechLocaleiOSmacOS : identifiant de locale BCP 47 optionnel pour la reconnaissance vocale Talk sur appareil sous iOS/macOS. Laisser non défini pour utiliser la valeur par défaut de l’appareil.outputFormat: par défautpcm_44100macOSiOS sous macOS/iOS etpcm_24000Android sous Android (définirmp3_*pour forcer le streaming MP3)
Interface macOS
Section intitulée « Interface macOS »- Bascule de la barre de menus : Talk
- Onglet Config : groupe Talk Mode (identifiant vocal + bascule d’interruption)
- Superposition :
- Écoute : le nuage pulse en fonction du niveau du micro
- Réflexion : animation d’enfoncement
- Parole : anneaux rayonnants
- Cliquer sur le nuage : arrêter la parole
- Cliquer sur X : quitter le mode Talk
Android UI
Section intitulée « Android UI »- Bascule de l’onglet Voice : Talk
- Mic et Talk manuels sont des modes de capture d’exécution mutuellement exclusifs.
- Le micro manuel s’arrête lorsque l’application quitte le premier plan ou lorsque l’utilisateur quitte l’onglet Voice.
- Le mode Talk continue de fonctionner jusqu’à ce qu’il soit désactivé ou que le nœud Android se déconnecte, et utilise le type de service de premier plan du micro d’Android tant qu’il est actif.
- Nécessite les permissions Speech + Microphone.
- Le mode Talk natif utilise la session active du Gateway et ne recourt au sondage de l’historique que lorsque les événements de réponse ne sont pas disponibles.
- Le mode Talk en temps réel du navigateur utilise
talk.client.toolCallpouropenclaw_agent_consultau lieu d’exposerchat.sendaux sessions de navigateur détenues par le fournisseur. - Le mode Talk de transcription uniquement utilise
talk.session.create,talk.session.appendAudio,talk.session.cancelTurnettalk.session.close; les clients s’abonnent àtalk.eventpour les mises à jour partielles/finales de la transcription. - La passerelle résout la lecture Talk via
talk.speaken utilisant le fournisseur Talk actif. Android recourt au TTS du système local uniquement lorsque cet RPC est indisponible. - La lecture MLX locale de macOS utilise l’assistant intégré
openclaw-mlx-ttss’il est présent, ou un exécutable surPATH. DéfinissezOPENCLAW_MLX_TTS_BINpour pointer vers un binaire d’assistant personnalisé lors du développement. stabilitypoureleven_v3est validé à0.0,0.5ou1.0; d’autres modèles acceptent0..1.latency_tierest validé à0..4lorsqu’il est défini.- Android prend en charge les formats de sortie Android
pcm_16000,pcm_22050,pcm_24000etpcm_44100pour le streaming AudioTrack à faible latence.