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 :

  1. 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 que models/gemini-live-2.5-flash-native-audio.
  2. Le point de terminaison v1alpha. Le GeminiLiveBackend::studio(...) de la crate se connecte déjà via v1alpha ; 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 →

Dialogue affectif - Documentation ADK-Rust | ADK-Rust