Diálogo Afectivo

El diálogo afectivo hace que el agent sea consciente de las emociones: capta el tono del usuario de su voz —frustración, emoción, duda— y adapta su propia entrega para que coincida. Un cliente frustrado escucha a un agent más tranquilo y cuidadoso; uno contento escucha 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 (lea esto)

El diálogo afectivo es una característica Gemini-only con dos requisitos estrictos:

  1. Un modelo de audio nativo. NO es compatible con la cascada parcial gemini-3.1-flash-live-preview. Utilice un modelo de audio nativo como models/gemini-2.5-flash-native-audio-preview-12-2025.
  2. El v1alpha punto final. El crate de GeminiLiveBackend::studio(...) ya se conecta a través de v1alpha, por lo que esto se gestiona automáticamente.

Si establece with_affective_dialog(true) en un modelo que no lo admite, la configuración de Gemini es rechazada con "Unknown name enableAffectiveDialog" y la session se cierra. Así que cambie el modelo cuando lo habilite:

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

En OpenAI (y en modelos Gemini no nativos) with_affective_dialog(true) es una no-op — inofensiva, simplemente ignorada — por lo que es seguro establecerla incondicionalmente y dejar que el proveedor decida.

La compensación

Los modelos de audio nativo ofrecen la voz más natural y expresiva y la adaptación afectiva, pero llaman a las tools con menos fiabilidad que el modelo de media cascada. Así que es una elección genuina:

  • Agent con muchas tools (reembolsos, búsquedas, acciones) → media cascada (gemini-3.1-flash-live-preview), sin diálogo afectivo.
  • Agent que prioriza la empatía (desescalada de soporte, compañía, coaching) → audio nativo + diálogo afectivo.

El ejemplo customer_service lo hace opcional precisamente por esta razón: CS_AFFECTIVE=1 cambia Gemini al modelo native-audio y activa la bandera; de lo contrario, mantiene el modelo tool-reliable.

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 + endpoint son estrictos.

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

Siguiente: Memoria →