Agents en temps réel et multimodaux

CrĂ©ez des agents qui parlent, Ă©coutent, voient et agissent en temps rĂ©el — via une connexion active Ă  faible latence Ă  OpenAI's Realtime API ou Ă  Gemini Live API de Google.

Un agent en temps rĂ©el n'est pas un chatbot requĂȘte/rĂ©ponse. Il maintient une session ouverte : le microphone de l'utilisateur diffuse en continu, le modĂšle renvoie en continu de l'audio + une transcription en direct, dĂ©tecte quand l'utilisateur commence et arrĂȘte de parler, peut ĂȘtre interrompu au milieu d'une phrase (prise de parole), peut voir les images d'une camĂ©ra et peut appeler vos outils et Ă©noncer le rĂ©sultat — le tout sans jamais mettre fin Ă  « l'appel ».

Vous découvrez ADK-Rust ? Lisez d'abord l'Introduction et le Démarrage rapide. Cette section suppose que vous savez ce que sont un agent, un outil et une session.

Ce que vous pouvez créer

FonctionnalitéCe que cela signifiePage
Conversations vocalesAudio PCM16 bidirectionnel avec VAD et interruptionArchitecture
Deux fournisseurs, une seule APIOpenAI Realtime (GA) ou Gemini Live, interchangeables par sessionFournisseurs
Outils cĂŽtĂ© serveurLe modĂšle appelle process_refund(...) ; votre code Rust l’exĂ©cute et le modĂšle Ă©nonce le rĂ©sultatOutils
Vision multimodaleDiffusez les images de la camĂ©ra en continu — l’agent voit ce que l’utilisateur lui montreMultimodal
Dialogue affectifL’agent interprĂšte le ton Ă©motionnel de l’utilisateur et s’adapte (audio natif de Gemini)Dialogue affectif
MĂ©moire Ă  long termeUn graphe de connaissances que l’agent lit au dĂ©but de la session et enrichit Ă  mesure qu’il apprendMĂ©moire
Applications webUne interface front-end de navigateur (micro + caméra) reliée via votre serveurCréer des applications web

Consultez ensuite les quatre applications d’exemple exĂ©cutables.

ModĂšle mental

Il existe deux couches, et la plupart des applications utilisent la couche supérieure :

  IntegratedRealtimeRunner          ← sessions, memory, tools, plugins (use this)
        │ wraps
  RealtimeRunner                    ← event loop + tool dispatch
        │ drives
  RealtimeSession  (a transport)    ← the live WebSocket to the provider
        │ created by
  RealtimeModel    (OpenAI | Gemini)
  • Un RealtimeModel (par ex. OpenAIRealtimeModel, GeminiRealtimeModel) sait connect() et produire un RealtimeSession — le transport actif.
  • RealtimeRunner possĂšde cette session : il traite les Ă©vĂ©nements et, lorsque le modĂšle demande un outil, il exĂ©cute le gestionnaire et renvoie le rĂ©sultat.
  • IntegratedRealtimeRunner encapsule le moteur d’exĂ©cution et le connecte au reste de ADK — SessionService (persistance de la transcription), MemoryService (rappel + stockage), EnhancedPluginManager (hooks), ainsi qu’un pont qui permet Ă  n’importe quel adk-core Tool de s’exĂ©cuter dans une session en temps rĂ©el. C’est ce qu’utilisent les exemples.

(Il existe Ă©galement un RealtimeAgent de niveau supĂ©rieur pour les agents vocaux simples, ainsi que des transports directs — WebRTC, LiveKit, Vertex AI Live — documentĂ©s Ă  cet endroit.)

Installation

# Voice + tools + the integration layer (recommended)
adk-realtime = { version = "2.1.0", features = ["openai", "gemini", "integration"] }
FonctionnalitéAjouts
openaiOpenAI Realtime (WebSocket)
geminiGemini Live (WebSocket)
integrationIntegratedRealtimeRunner — sessions, mĂ©moire, plugins, pont d’outils
openai-webrtcOpenAI sur WebRTC (nécessite cmake)
vertex-liveGemini via Vertex AI Live (OAuth2 / ADC)
livekitpont LiveKit WebRTC

Démarrage rapide en 60 secondes

Un échange vocal sans interface : connectez-vous, posez une question par texte, puis diffusez la réponse au fur et à mesure.

use adk_realtime::config::{RealtimeConfig, VadConfig};
use adk_realtime::events::ServerEvent;
use adk_realtime::integration::{IntegratedRealtimeRunner, IntegrationConfig};
use adk_realtime::model::BoxedModel;
use adk_realtime::openai::OpenAIRealtimeModel;
use adk_session::{CreateRequest, InMemorySessionService, SessionService};
use std::sync::Arc;

# async fn run() -> anyhow::Result<()> {
let model: BoxedModel = Arc::new(OpenAIRealtimeModel::new(
    std::env::var("OPENAI_API_KEY")?,
    "gpt-realtime-2.1",
));

let config = RealtimeConfig::default()
    .with_instruction("You are a friendly assistant. Keep replies short.")
    .with_voice("marin")
    .with_audio_only()
    .with_vad(VadConfig::server_vad())   // model decides turn boundaries
    .with_transcription();               // emit a text transcript too

let sessions = Arc::new(InMemorySessionService::new());
sessions.create(CreateRequest {
    app_name: "demo".into(), user_id: "u1".into(),
    session_id: Some("s1".into()), state: Default::default(),
}).await?;

let runner = IntegratedRealtimeRunner::builder()
    .model(model)
    .config(config)
    .identity("demo", "u1", "s1")
    .session_service(sessions)
    .integration_config(IntegrationConfig::default())
    .build()?;

runner.connect().await?;
runner.send_text("Say hello in one short sentence.").await?;
runner.create_response().await?;       // text input needs an explicit trigger

while let Some(event) = runner.next_event().await {
    match event? {
        ServerEvent::TranscriptDelta { delta, .. } => print!("{delta}"),
        ServerEvent::AudioDelta { .. } => { /* PCM16 to play */ }
        ServerEvent::ResponseDone { .. } => break,
        _ => {}
    }
}
runner.close().await?;
# Ok(()) }

Dans une vĂ©ritable application, vous diffusez l’audio du microphone avec runner.send_audio(base64_pcm16) au lieu de send_text, et le VAD cĂŽtĂ© serveur dĂ©clenche automatiquement les rĂ©ponses — aucun create_response() n’est nĂ©cessaire. Consultez CrĂ©er des applications web.

Pour aller plus loin

  1. Architecture — comment les Ă©lĂ©ments s’articulent, la boucle d’évĂ©nements et le pipeline audio.
  2. Fournisseurs — OpenAI et modùles Gemini, voix, points de terminaison et authentification.
  3. Outils — appels de fonctions cĂŽtĂ© serveur.
  4. Multimodal — envoi d’images vidĂ©o.
  5. Dialogue affectif — rĂ©ponses tenant compte des Ă©motions.
  6. MĂ©moire — mĂ©moire Ă  long terme fondĂ©e sur un graphe de connaissances.
  7. CrĂ©er des applications web — le pont avec le navigateur.
  8. Exemples — quatre applications exĂ©cutables.
Agents en temps réel et multimodaux - Documentation ADK-Rust | ADK-Rust