Nodes and media
대화 모드
Talk 모드에는 두 가지 런타임 형태가 있습니다.
- 네이티브 macOS/iOS/Android Talk는 로컬 음성 인식, Gateway 채팅,
talk.speakTTS를 사용합니다. Node는talk기능을 알리고 지원하는talk.*명령을 선언합니다. - 브라우저 Talk는 클라이언트가 소유하는
webrtc및provider-websocket세션에talk.client.create를 사용하거나, Gateway가 소유하는gateway-relay세션에talk.session.create를 사용합니다.managed-room은 Gateway 핸드오프와 무전기 방을 위해 예약되어 있습니다. - 전사 전용 클라이언트는 어시스턴트 음성 응답 없이 캡션이나 받아쓰기가 필요할 때
talk.session.create({ mode: "transcription", transport: "gateway-relay", brain: "none" })를 사용한 다음talk.session.appendAudio,talk.session.cancelTurn,talk.session.close를 사용합니다.
네이티브 Talk는 지속적인 음성 대화 루프입니다.
- 음성 듣기
- 활성 세션을 통해 모델에 전사문 보내기
- 응답 기다리기
- 구성된 Talk 제공자를 통해 말하기(
talk.speak)
브라우저 실시간 Talk는 제공자 도구 호출을 talk.client.toolCall을 통해 전달합니다. 브라우저 클라이언트는 실시간 상담을 위해 chat.send를 직접 호출하지 않습니다.
전사 전용 Talk는 실시간 및 STT/TTS 세션과 동일한 공통 Talk 이벤트 봉투를 내보내지만, mode: "transcription" 및 brain: "none"을 사용합니다. 캡션, 받아쓰기, 관찰 전용 음성 캡처를 위한 것이며, 일회성 업로드 음성 메모는 계속 미디어/오디오 경로를 사용합니다.
동작 (macOS)
- Talk 모드가 활성화된 동안 항상 켜져 있는 오버레이.
- 듣는 중 → 생각 중 → 말하는 중 단계 전환.
- 짧은 일시 정지(무음 창) 시 현재 전사문이 전송됩니다.
- 응답은 WebChat에 작성됩니다(입력하는 것과 동일).
- 말할 때 중단(기본값 켜짐): 어시스턴트가 말하는 동안 사용자가 말하기 시작하면 재생을 중지하고 다음 프롬프트를 위해 중단 타임스탬프를 기록합니다.
응답의 음성 지시문
어시스턴트는 음성을 제어하기 위해 응답 앞에 단일 JSON 줄을 붙일 수 있습니다.
{ "voice": "<voice-id>", "once": true }
규칙:
- 비어 있지 않은 첫 번째 줄만.
- 알 수 없는 키는 무시됩니다.
once: true는 현재 응답에만 적용됩니다.once가 없으면 해당 음성이 Talk 모드의 새 기본값이 됩니다.- JSON 줄은 TTS 재생 전에 제거됩니다.
지원되는 키:
voice/voice_id/voiceIdmodel/model_id/modelIdspeed,rate(WPM),stability,similarity,style,speakerBoostseed,normalize,lang,output_format,latency_tieronce
구성 (~/.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",
},
},
}
기본값:
interruptOnSpeech: truesilenceTimeoutMs: 설정하지 않으면 Talk는 전사문을 보내기 전에 플랫폼 기본 일시 정지 창을 유지합니다(macOS 및 Android에서는 700 ms, iOS에서는 900 ms)provider: 활성 Talk 제공자를 선택합니다. macOS 로컬 재생 경로에는elevenlabs,mlx, 또는system을 사용합니다.providers.<provider>.voiceId: ElevenLabs의 경우ELEVENLABS_VOICE_ID/SAG_VOICE_ID로 대체됩니다(API 키를 사용할 수 있으면 첫 번째 ElevenLabs 음성).providers.elevenlabs.modelId: 설정하지 않으면 기본값은eleven_v3입니다.providers.mlx.modelId: 설정하지 않으면 기본값은mlx-community/Soprano-80M-bf16입니다.providers.elevenlabs.apiKey:ELEVENLABS_API_KEY로 대체됩니다(또는 사용 가능한 경우 Gateway 셸 프로필).realtime.provider: 활성 브라우저/서버 실시간 음성 제공자를 선택합니다. WebRTC에는openai, 제공자 WebSocket에는google, 또는 Gateway 릴레이를 통해 브리지 전용 제공자를 사용합니다.realtime.providers.<provider>는 제공자가 소유하는 실시간 구성을 저장합니다. 브라우저는 표준 API 키를 받지 않고, 임시 또는 제한된 세션 자격 증명만 받습니다.realtime.brain:agent-consult는 실시간 도구 호출을 Gateway 정책을 통해 라우팅합니다.direct-tools는 소유자 전용 호환성 동작입니다.none은 전사 또는 외부 오케스트레이션용입니다.talk.catalog는 각 제공자의 유효한 모드, 전송 방식, 브레인 전략, 실시간 오디오 형식, 기능 플래그를 노출하여 퍼스트 파티 Talk 클라이언트가 지원되지 않는 조합을 피할 수 있게 합니다.- 스트리밍 전사 제공자는
talk.catalog.transcription을 통해 발견됩니다. 현재 Gateway 릴레이는 전용 Talk 전사 구성 표면이 추가될 때까지 Voice Call 스트리밍 제공자 구성을 사용합니다. speechLocale: iOS/macOS의 온디바이스 Talk 음성 인식을 위한 선택적 BCP 47 로케일 ID입니다. 기기 기본값을 사용하려면 설정하지 않은 상태로 둡니다.outputFormat: macOS/iOS에서는 기본값이pcm_44100이고 Android에서는pcm_24000입니다(MP3 스트리밍을 강제하려면mp3_*설정)
macOS UI
- 메뉴 막대 토글: Talk
- 구성 탭: Talk Mode 그룹(음성 ID + 중단 토글)
- 오버레이:
- 듣는 중: 마이크 레벨에 맞춰 구름이 맥동
- 생각 중: 가라앉는 애니메이션
- 말하는 중: 퍼져 나가는 고리
- 구름 클릭: 말하기 중지
- X 클릭: Talk 모드 종료
Android UI
- 음성 탭 토글: Talk
- 수동 Mic와 Talk는 런타임 캡처 모드에서 상호 배타적입니다.
- 앱이 포그라운드를 벗어나거나 사용자가 음성 탭을 떠나면 수동 Mic가 중지됩니다.
- Talk Mode는 꺼질 때까지 또는 Android Node 연결이 끊길 때까지 계속 실행되며, 활성 상태에서는 Android의 마이크 포그라운드 서비스 유형을 사용합니다.
참고 사항
- Speech + Microphone 권한이 필요합니다.
- 네이티브 Talk는 활성 Gateway 세션을 사용하며, 응답 이벤트를 사용할 수 없을 때만 기록 폴링으로 대체됩니다.
- 브라우저 실시간 Talk는 제공자가 소유하는 브라우저 세션에
chat.send를 노출하는 대신openclaw_agent_consult에talk.client.toolCall을 사용합니다. - 전사 전용 Talk는
talk.session.create,talk.session.appendAudio,talk.session.cancelTurn,talk.session.close를 사용합니다. 클라이언트는 부분/최종 전사 업데이트를 위해talk.event를 구독합니다. - Gateway는 활성 Talk 제공자를 사용해
talk.speak를 통해 Talk 재생을 확인합니다. Android는 해당 RPC를 사용할 수 없을 때만 로컬 시스템 TTS로 대체됩니다. - macOS 로컬 MLX 재생은 존재하는 경우 번들된
openclaw-mlx-tts헬퍼를 사용하거나PATH의 실행 파일을 사용합니다. 개발 중 사용자 지정 헬퍼 바이너리를 가리키려면OPENCLAW_MLX_TTS_BIN을 설정합니다. eleven_v3의stability는0.0,0.5, 또는1.0으로 검증됩니다. 다른 모델은0..1을 허용합니다.latency_tier가 설정된 경우0..4로 검증됩니다.- Android는 저지연 AudioTrack 스트리밍을 위해
pcm_16000,pcm_22050,pcm_24000,pcm_44100출력 형식을 지원합니다.