Diálogo afectivo

El diálogo afectivo hace que el agente sea consciente de las emociones: capta el tono del usuario a partir de su voz —frustración, entusiasmo, duda— y adapta su propia forma de expresarse para coincidir. Un cliente frustrado escucha a un agente más calmado y cuidadoso; uno feliz recibe calidez a cambio. Es la diferencia entre un guion y una conversación.

Cómo habilitarlo

Una llamada al constructor en 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

Requisitos (lee esto)

El diálogo afectivo es una función exclusiva de Gemini con dos requisitos estrictos:

  1. Un modelo de audio nativo. No es compatible con gemini-3.1-flash-live-preview de cascada parcial. Usa un modelo de audio nativo como models/gemini-live-2.5-flash-native-audio.
  2. El endpoint v1alpha. GeminiLiveBackend::studio(...) de la crate ya se conecta mediante v1alpha, así que esto se gestiona automáticamente.

Si estableces with_affective_dialog(true) en un modelo que no lo admite, la configuración de Gemini se rechaza con "Unknown name enableAffectiveDialog" y la sesión se cierra. Así que cambia el modelo cuando lo habilites:

let (default_model, voice) = if affective {
    ("models/gemini-live-2.5-flash-native-audio", "Kore")
} else {
    ("models/gemini-3.1-flash-live-preview", "Kore")
};

En OpenAI (y en modelos de Gemini que no sean de audio nativo), with_affective_dialog(true) es una operación nula: no causa problemas, simplemente se ignora; por eso es seguro establecerlo siempre y dejar que el proveedor decida.

La contrapartida

Los modelos de audio nativo ofrecen la voz más natural y expresiva, además de la adaptación afectiva, pero invocan herramientas de forma menos fiable que el modelo de cascada parcial. Por tanto, es una elección real:

  • Agente con muchas herramientas (reembolsos, consultas, acciones) → cascada parcial (gemini-3.1-flash-live-preview), sin diálogo afectivo.
  • Agente centrado en la empatía (desescalada en soporte, compañía, orientación) → audio nativo + diálogo afectivo.

El ejemplo customer_service lo hace opcional precisamente por este motivo: CS_AFFECTIVE=1 cambia Gemini al modelo de audio nativo y activa la marca; de lo contrario, mantiene el modelo más fiable con las herramientas.

Bajo el capó

with_affective_dialog(true) establece RealtimeConfig.affective_dialog, y la configuración de Gemini emite enableAffectiveDialog: true dentro de generationConfig (no en el nivel superior de la configuración; el endpoint v1alpha lo rechaza allí). No necesitas saber esto para usarlo, pero es la razón por la que los requisitos del modelo y del endpoint son estrictos.

Empatía sin la marca. Incluso con OpenAI o con el modelo de media cascada, una instrucción bien redactada («observa el estado emocional del usuario y reconócelo sinceramente») produce un comportamiento significativamente empático. El diálogo afectivo añade una verdadera correspondencia del tono acústico a lo anterior, en Gemini native-audio.

Siguiente: Memoria →

Diálogo afectivo - Documentación ADK-Rust | ADK-Rust