감정 인식 대화
감정 인식 대화는 에이전트가 감정을 인식하도록 합니다. 사용자의 목소리에서 좌절감, 흥분, 망설임과 같은 어조를 파악하고, 이에 맞춰 자신의 전달 방식도 조정합니다. 좌절한 고객에게는 더 차분하고 세심한 에이전트의 응답을 들려주고, 기분이 좋은 고객에게는 따뜻한 응답을 돌려줍니다. 이것이 대본과 대화의 차이입니다.
활성화
RealtimeConfig에서 빌더 호출 한 번으로 활성화할 수 있습니다.
let config = RealtimeConfig::default()
.with_instruction("You are a warm, empathetic support agent.")
.with_voice("Kore")
.with_audio_only()
.with_vad(VadConfig::server_vad())
.with_transcription()
.with_affective_dialog(true); // ← emotion-aware responses
요구 사항(읽어 보세요)
감정 인식 대화는 Gemini 전용 기능이며 다음 두 가지 필수 요구 사항이 있습니다.
- 네이티브 오디오 모델.
gemini-3.1-flash-live-preview에서는 지원되지 않습니다.models/gemini-live-2.5-flash-native-audio와 같은 네이티브 오디오 모델을 사용하세요. v1alpha엔드포인트. 크레이트의GeminiLiveBackend::studio(...)는 이미v1alpha을 통해 연결되므로, 이 부분은 자동으로 처리됩니다.
지원하지 않는 모델에서 with_affective_dialog(true)을 설정하면 Gemini 설정이
"Unknown name enableAffectiveDialog" 오류와 함께 거부되고 세션이
종료됩니다. 따라서 활성화할 때 모델을 전환하세요.
let (default_model, voice) = if affective {
("models/gemini-live-2.5-flash-native-audio", "Kore")
} else {
("models/gemini-3.1-flash-live-preview", "Kore")
};
OpenAI에서는(그리고 네이티브 모델이 아닌 Gemini 모델에서는) with_affective_dialog(true)가
아무 작업도 하지 않습니다. 즉, 무해하며 단순히 무시되므로 항상 설정해 두고
제공자가 결정하도록 맡겨도 안전합니다.
절충점
네이티브 오디오 모델은 가장 자연스럽고 표현력 있는 음성 및 감정 적응 기능을 제공하지만, 하프 캐스케이드 모델보다 도구 호출의 안정성이 떨어집니다. 따라서 이는 실제로 선택이 필요한 문제입니다.
- 도구 중심 에이전트(환불, 조회, 작업) → 하프 캐스케이드
(
gemini-3.1-flash-live-preview), 감정 인식 대화 사용 안 함. - 공감 우선 에이전트(지원 과정에서의 긴장 완화, 동반, 코칭) → 네이티브 오디오 + 감정 인식 대화.
customer_service 예제에서는 바로 이러한 이유로
선택적으로 활성화합니다. CS_AFFECTIVE=1는 Gemini를 네이티브 오디오 모델로
전환하고 플래그를 활성화하며, 그렇지 않으면 도구 호출에 안정적인 모델을
유지합니다.
내부 동작
with_affective_dialog(true)은 RealtimeConfig.affective_dialog을 설정하며,
Gemini 설정은 enableAffectiveDialog: true을 generationConfig 내부에 출력합니다
(설정 최상위 수준이 아님 — v1alpha 엔드포인트는 해당 위치에서 이를 거부합니다). 이를 사용하기 위해 이 내용을 알 필요는 없지만, 이것이 모델 및 엔드포인트 요구 사항이 엄격한 이유입니다.
플래그 없이도 공감하기. OpenAI 또는 하프 캐스케이드 모델에서도 잘 작성된 지침(“사용자의 감정 상태를 알아차리고 진심으로 인정하라”)은 의미 있게 공감하는 동작을 만들어 냅니다. 감정 대화는 Gemini 네이티브 오디오에서 그 위에 진정한 음향적 톤 매칭을 더합니다.
다음: 메모리 →