Dialogue affectif
Le dialogue affectif rend l’agent sensible aux émotions : il détecte le ton de l’utilisateur à partir de sa voix — frustration, enthousiasme, hésitation — et adapte sa propre façon de s’exprimer en conséquence. Un client frustré entend un agent plus calme et plus attentif ; un client heureux retrouve de la chaleur dans la réponse. C’est la différence entre un script et une conversation.
L’activer
Un seul appel du constructeur sur 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
Conditions requises (à lire)
Le dialogue affectif est une fonctionnalité réservée à Gemini qui impose deux conditions :
- Un modèle audio natif. Il n’est pas pris en charge par le modèle en demi-cascade
gemini-3.1-flash-live-preview. Utilisez un modèle audio natif tel quemodels/gemini-live-2.5-flash-native-audio. - Le point de terminaison
v1alpha. LeGeminiLiveBackend::studio(...)de la crate se connecte déjà viav1alpha; cette configuration est donc gérée pour vous.
Si vous définissez with_affective_dialog(true) sur un modèle qui ne le prend pas en charge, la
configuration Gemini est rejetée avec « Unknown name enableAffectiveDialog » et la
session se ferme. Changez donc de modèle lorsque vous activez cette fonctionnalité :
let (default_model, voice) = if affective {
("models/gemini-live-2.5-flash-native-audio", "Kore")
} else {
("models/gemini-3.1-flash-live-preview", "Kore")
};
Sur OpenAI (ainsi que sur les modèles Gemini non natifs), with_affective_dialog(true) est une
opération sans effet — inoffensive, simplement ignorée — ; il est donc possible de
la définir systématiquement et de laisser le fournisseur décider.
Le compromis
Les modèles audio natifs offrent la voix la plus naturelle et expressive ainsi que l’adaptation aux émotions, mais ils appellent les outils de manière moins fiable que le modèle en demi-cascade. Le choix est donc réel :
- Agent utilisant beaucoup les outils (remboursements, recherches, actions) → demi-cascade
(
gemini-3.1-flash-live-preview), sans dialogue affectif. - Agent privilégiant l’empathie (désescalade du support, accompagnement, coaching) → audio natif + dialogue affectif.
L’exemple customer_service rend cette fonctionnalité activable
précisément pour cette raison : CS_AFFECTIVE=1 bascule Gemini vers le modèle audio natif
et active l’option ; sinon, il conserve le modèle plus fiable avec les outils.
Sous le capot
with_affective_dialog(true) définit RealtimeConfig.affective_dialog, et la configuration Gemini émet enableAffectiveDialog: true à l’intérieur de generationConfig
(et non au niveau supérieur de la configuration — le point de terminaison v1alpha le rejette à cet endroit). Vous n’avez pas
besoin de le savoir pour l’utiliser, mais c’est la raison pour laquelle les exigences concernant le modèle et le point de terminaison sont strictes.
De l’empathie sans l’indicateur. Même avec OpenAI ou le modèle en demi-cascade, une instruction bien rédigée (« remarquez l’état émotionnel de l’utilisateur et reconnaissez-le sincèrement ») produit un comportement sensiblement empathique. Le dialogue affectif ajoute une véritable correspondance de ton acoustique par-dessus cela, avec l’audio natif de Gemini.
Suivant : Mémoire →