感情対話

感情対話により、エージェントはユーザーの声からそのトーン — いら立ち、興奮、ためらい — をくみ取り、自身の話し方をそれに合わせて調整できるようになります。いら立っている顧客には、より落ち着いた、丁寧なエージェントの声が届き、喜んでいる顧客には、温かさを返す声が届きます。これは、台本と会話の違いです。

有効にする

RealtimeConfigで1回 builder を呼び出します。

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専用の機能であり、2つの必須要件があります。

  1. ネイティブ音声モデル。 半カスケードの gemini-3.1-flash-live-previewではサポートされていませんmodels/gemini-live-2.5-flash-native-audioのようなネイティブ音声モデルを使用してください。
  2. v1alphaエンドポイント。 crate の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: truegenerationConfig の内部に 出力されます (設定のトップレベルではありません。v1alpha エンドポイントはそこでは拒否します)。これを使用するために知っておく必要はありませんが、モデルとエンドポイントの要件が厳格である理由はここにあります。

フラグなしの共感。 OpenAI またはハーフカスケードモデルでも、適切に記述された指示(「ユーザーの感情状態に気づき、誠実に受け止める」)によって、意味のある共感的な動作が生まれます。感情対話では、Gemini のネイティブ音声で、そこに真の 音響的な トーンマッチングが加わります。

次へ: Memory →

感情対話 - ADK-Rust ドキュメント | ADK-Rust