대화 모드

대화 모드는 연속적인 음성 대화 루프입니다:

  1. 음성 대기
  2. 변환된 텍스트를 모델로 전송 (메인 세션, chat.send)
  3. 응답 대기
  4. ElevenLabs로 응답 읽기 (스트리밍 재생)

동작 (macOS)

  • 대화 모드가 활성화되면 항상 표시되는 오버레이.
  • 듣기 → 생각 중 → 말하기 단계 전환.
  • 짧은 일시 정지(침묵 구간)에서 현재 변환 텍스트가 전송됩니다.
  • 응답은 WebChat에 기록됩니다 (타이핑과 동일).
  • 발화 시 중단 (기본 활성화): 어시스턴트가 말하는 중에 사용자가 말하면 재생을 중지하고 다음 프롬프트에 중단 타임스탬프를 기록합니다.

응답에서의 음성 지시

어시스턴트가 음성을 제어하기 위해 응답 앞에 단일 JSON 줄을 추가할 수 있습니다:

{ "voice": "<voice-id>", "once": true }

규칙:

  • 첫 번째 비어있지 않은 줄에서만.
  • 알 수 없는 키는 무시됩니다.
  • once: true는 현재 응답에만 적용됩니다.
  • once 없이는 대화 모드의 새로운 기본 음성이 됩니다.
  • JSON 줄은 TTS 재생 전에 제거됩니다.

지원되는 키:

  • voice / voice_id / voiceId
  • model / model_id / modelId
  • speed, rate (WPM), stability, similarity, style, speakerBoost
  • seed, normalize, lang, output_format, latency_tier
  • once

설정 (~/.openclaw/openclaw.json)

{
  talk: {
    voiceId: "elevenlabs_voice_id",
    modelId: "eleven_v3",
    outputFormat: "mp3_44100_128",
    apiKey: "elevenlabs_api_key",
    silenceTimeoutMs: 1500,
    interruptOnSpeech: true,
  },
}

기본값:

  • interruptOnSpeech: true
  • silenceTimeoutMs: 미설정 시, 대화 모드는 변환 텍스트 전송 전 플랫폼 기본 일시 정지 구간을 유지합니다 (macOS 및 Android에서 700ms, iOS에서 900ms)
  • voiceId: ELEVENLABS_VOICE_ID / SAG_VOICE_ID로 폴백 (또는 API 키가 사용 가능할 때 첫 번째 ElevenLabs 음성)
  • modelId: 미설정 시 eleven_v3로 기본 설정
  • apiKey: ELEVENLABS_API_KEY로 폴백 (또는 사용 가능한 경우 게이트웨이 셸 프로필)
  • outputFormat: macOS/iOS에서 pcm_44100, Android에서 pcm_24000이 기본값 (mp3_*를 설정하면 MP3 스트리밍 강제)

macOS UI

  • 메뉴 바 토글: 대화
  • 설정 탭: 대화 모드 그룹 (음성 ID + 중단 토글)
  • 오버레이:
    • 듣기: 마이크 레벨에 따라 구름이 맥동
    • 생각 중: 가라앉는 애니메이션
    • 말하기: 방사형 링
    • 구름 클릭: 말하기 중지
    • X 클릭: 대화 모드 종료

참고

  • 음성 + 마이크 권한이 필요합니다.
  • 세션 키 main에 대해 chat.send를 사용합니다.
  • TTS는 ELEVENLABS_API_KEY와 함께 ElevenLabs 스트리밍 API를 사용하며, 더 낮은 지연 시간을 위해 macOS/iOS/Android에서 점진적 재생을 수행합니다.
  • eleven_v3stability0.0, 0.5, 또는 1.0으로 검증됩니다. 다른 모델은 0..1을 허용합니다.
  • latency_tier는 설정 시 0..4로 검증됩니다.
  • Android는 저지연 AudioTrack 스트리밍을 위해 pcm_16000, pcm_22050, pcm_24000, pcm_44100 출력 형식을 지원합니다.