Opzioni di configurazione per l'API Live


Anche con l'implementazione di base per Live API, puoi creare interazioni coinvolgenti e potenti per i tuoi utenti. Se vuoi, puoi personalizzare ulteriormente l'esperienza utilizzando le seguenti opzioni di configurazione:



Voce e lingua delle risposte

Puoi fare in modo che il modello risponda con una voce specifica e influenzarlo affinché risponda in lingue diverse.

Specifica una voce per la risposta

Fai clic sul tuo provider Gemini API per visualizzare i contenuti e il codice specifici del provider in questa pagina.

Live API supporta 30 diverse voci sintetizzate in HD, ognuna con caratteristiche distinte. Puoi visualizzare un elenco di opzioni vocali per le risposte e ascoltare le demo di ogni voce espandendo la sezione di seguito.

Se non specifichi una voce di risposta, il valore predefinito è Puck.

Per specificare una voce di risposta, imposta il nome della voce nell'oggetto speechConfig come parte della configurazione del modello.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to use a specific voice for its audio response.
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    speech: SpeechConfig(voiceName: "VOICE_NAME")
  )
)

// ...

Kotlin


// ...

val model = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response.
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        speechConfig = SpeechConfig(voice = Voice("VOICE_NAME"))
    }
)

// ...

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
    "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response.
    new LiveGenerationConfig.Builder()
        .setResponseModality(ResponseModality.AUDIO)
        .setSpeechConfig(new SpeechConfig(new Voice("VOICE_NAME")))
        .build()
);

// ...

Web


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const liveModel = getLiveGenerativeModel(ai, {
  model: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to use a specific voice for its audio response.
  generationConfig: {
    responseModalities: [ResponseModality.AUDIO],
    speechConfig: {
      voiceConfig: {
        prebuiltVoiceConfig: { voiceName: "VOICE_NAME" },
      },
    },
  },
});

// ...

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to use a specific voice for its audio response.
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    speechConfig: SpeechConfig(voiceName: 'VOICE_NAME'),
  ),
);

// ...

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to use a specific voice for its audio response
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        speechConfig: SpeechConfig.UsePrebuiltVoice("VOICE_NAME")
    )
);

// ...

Influenzare la lingua della risposta

I modelli Live API scelgono automaticamente la lingua appropriata per le loro risposte.

Se vuoi che il modello risponda in una lingua diversa dall'inglese o sempre in una lingua specifica, puoi influenzare le risposte del modello utilizzando istruzioni di sistema come questi esempi:

  • Rafforza nel modello l'idea che una lingua diversa dall'inglese potrebbe essere appropriata

    Listen to the speaker carefully. If you detect a non-English language, respond
    in the language you hear from the speaker. You must respond unmistakably in the
    speaker's language.
    
  • Chiedi al modello di rispondere sempre in una lingua specifica

    RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.
    



Trascrizioni per l'input e l'output audio

Fai clic sul tuo provider Gemini API per visualizzare i contenuti e il codice specifici del provider in questa pagina.

Come parte della risposta del modello, puoi ricevere le trascrizioni dell'input audio e della risposta audio del modello. Puoi impostare questa configurazione nell'ambito della configurazione del modello.

  • Per la trascrizione dell'input audio, aggiungi inputAudioTranscription.

  • Per la trascrizione della risposta audio del modello, aggiungi outputAudioTranscription.

Tieni presente quanto segue:

  • Puoi configurare il modello in modo che restituisca le trascrizioni sia dell'input che dell'output (come mostrato nell'esempio seguente) oppure puoi configurarlo in modo che restituisca solo uno o l'altro.

  • Le trascrizioni vengono trasmesse in streaming insieme all'audio, quindi è meglio raccoglierle come fai con le parti di testo a ogni turno.

  • La lingua della trascrizione viene dedotta dall'input audio e dalla risposta audio del modello.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  // Configure the model to return transcriptions of the audio input and output.
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    inputAudioTranscription: AudioTranscriptionConfig(),
    outputAudioTranscription: AudioTranscriptionConfig()
  )
)

var inputTranscript: String = ""
var outputTranscript: String = ""

do {
  let session = try await liveModel.connect()
  for try await response in session.responses {
    if case let .content(content) = response.payload {
      if let inputText = content.inputAudioTranscription?.text {
        // Handle transcription text of the audio input.
        inputTranscript += inputText
      }

      if let outputText = content.outputAudioTranscription?.text {
        // Handle transcription text of the audio output.
        outputTranscript += outputText
      }

      if content.isTurnComplete {
        // Log the transcripts after the current turn is complete.
        print("Input audio: \(inputTranscript)")
        print("Output audio: \(outputTranscript)")

        // Reset the transcripts for the next turn.
        inputTranscript = ""
        outputTranscript = ""
      }
    }
  }


} catch {
  // Handle error
}

// ...

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output.
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        inputAudioTranscription = AudioTranscriptionConfig()
        outputAudioTranscription = AudioTranscriptionConfig()
   }
)

val liveSession = liveModel.connect()

fun handleTranscription(input: Transcription?, output: Transcription?) {
    input?.text?.let { text ->
        // Handle transcription text of the audio input.
        println("Input Transcription: $text")
    }
    output?.text?.let { text ->
        // Handle transcription text of the audio output.
        println("Output Transcription: $text")
    }
}

liveSession.startAudioConversation(null, ::handleTranscription)

// ...

Java


// ...

ExecutorService executor = Executors.newFixedThreadPool(1);

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
    "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output.
    new LiveGenerationConfig.Builder()
            .setResponseModality(ResponseModality.AUDIO)
            .setInputAudioTranscription(new AudioTranscriptionConfig())
            .setOutputAudioTranscription(new AudioTranscriptionConfig())
            .build()
    );

LiveModelFutures liveModel = LiveModelFutures.from(lm);
ListenableFuture<LiveSessionFutures> sessionFuture = liveModel.connect();

Futures.addCallback(sessionFuture, new FutureCallback<LiveSessionFutures>() {
    @Override
    public void onSuccess(LiveSessionFutures ses) {
        LiveSessionFutures session = ses;
        session.startAudioConversation((Transcription input, Transcription output) -> {
            if (input != null) {
                // Handle transcription text of the audio input.
                System.out.println("Input Transcription: " + input.getText());
            }
            if (output != null) {
                // Handle transcription text of the audio output.
                System.out.println("Output Transcription: " + output.getText());
            }
            return null;
        });
    }

    @Override
    public void onFailure(Throwable t) {
        // Handle exceptions
        t.printStackTrace();
    }
}, executor);

// ...

Web


// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

const liveModel = getLiveGenerativeModel(ai, {
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to return transcriptions of the audio input and output.
  generationConfig: {
    responseModalities: [ResponseModality.AUDIO],
    inputAudioTranscription: {},
    outputAudioTranscription: {},
  },
});

const liveSession = await liveModel.connect();

liveSession.sendAudioRealtime({ data, mimeType: "audio/pcm" });

const messages = liveSession.receive();
for await (const message of messages) {
  switch (message.type) {
    case 'serverContent':
      if (message.inputTranscription) {
        // Handle transcription text of the audio input.
        console.log(`Input transcription: ${message.inputTranscription.text}`);
      }
      if (message.outputTranscription) {
        // Handle transcription text of the audio output.
        console.log(`Output transcription: ${message.outputTranscription.text}`);
      } else {
      	 // Handle other message types (modelTurn, turnComplete, interruption).
      }
    default:
      // Handle other message types (toolCall, toolCallCancellation).
  }
}

// ...

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  // Configure the model to return transcriptions of the audio input and output.
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    inputAudioTranscription: AudioTranscriptionConfig(),
    outputAudioTranscription: AudioTranscriptionConfig(),
  ),
);

final LiveSession _session = await _liveModel.connect();

await for (final response in _session.receive()) {
  if (response.message case LiveServerContent message) {
    if (message.inputTranscription?.text case final inputText?) {
      // Handle transcription text of the audio input.
      print('Input: $inputText');
    }

    if (message.outputTranscription?.text case final outputText?) {
      // Handle transcription text of the audio output.
      print('Output: $outputText');
    }
  }
}

// ...

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    // Configure the model to return transcriptions of the audio input and output
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        inputAudioTranscription: new AudioTranscriptionConfig(),
        outputAudioTranscription: new AudioTranscriptionConfig()
    )
);

try
{
    var session = await liveModel.ConnectAsync();
    var stream = session.ReceiveAsync();
    await foreach (var response in stream) {
        if (response.Message is LiveSessionContent sessionContent) {
            if (!string.IsNullOrEmpty(sessionContent.InputTranscription?.Text)) {
              // handle transcription text of input audio
            }

            if (!string.IsNullOrEmpty(sessionContent.OutputTranscription?.Text)) {
              // handle transcription text of output audio
            }
        }
    }
}
catch (Exception e)
{
    // Handle error
}

// ...



Rilevamento di attività vocale (VAD)

Il rilevamento di attività vocale (VAD) consente al modello di riconoscere quando una persona sta parlando. Questo è essenziale per creare conversazioni naturali, in quanto ti consente di interrompere il modello in qualsiasi momento. VAD è abilitato per impostazione predefinita.

Puoi personalizzare il comportamento del VAD, inclusa la gestione delle interruzioni. In alternativa, puoi disattivare il VAD automatico per assumere il controllo manuale completo dei turni di conversazione (ad esempio per un'interfaccia push-to-talk).

Configura il rilevamento di attività vocale (VAD)

Fai clic sul tuo provider Gemini API per visualizzare i contenuti e il codice specifici del provider in questa pagina.

L'esempio seguente mostra come personalizzare il comportamento del VAD impostando realtimeInputConfig come parte della configurazione del modello. Scopri di più sulle impostazioni disponibili per questa configurazione nella tabella più avanti in questa sezione.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    // Configure voice activity detection (VAD), interruption handling, and turn coverage.
    // IMPORTANT: Example values shown here. Make sure to update for your use case.
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig(
        startSensitivity: .low,
        endSensitivity: .low,
        prefixPadding: .milliseconds(20),
        silenceDuration: .milliseconds(500)
      ),
      activityHandling: .interrupt,
      turnCoverage: .onlyActivity
    )
  )
)

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        // Configure voice activity detection (VAD), interruption handling, and turn coverage.
        // IMPORTANT: Example values shown here. Make sure to update for your use case.
        realtimeInputConfig = realtimeInputConfig {
            automaticActivityDetection = ActivityDetectionConfig.builder()
                .setStartSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                .setEndSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                .setPrefixPaddingMs(20)
                .setSilenceDurationMs(500)
                .build()
            activityHandling = RealtimeInputConfig.ActivityHandling.INTERRUPT
            turnCoverage = RealtimeInputConfig.TurnCoverage.ONLY_ACTIVITY
        }
    }
)

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
        "GEMINI_LIVE_API_MODEL_NAME",
        new LiveGenerationConfig.Builder()
                .setResponseModality(ResponseModality.AUDIO)
                // Configure voice activity detection (VAD), interruption handling, and turn coverage.
                // IMPORTANT: Example values shown here. Make sure to update for your use case.
                .setRealtimeInputConfig(RealtimeInputConfig.builder()
                        .setAutomaticActivityDetection(ActivityDetectionConfig.builder()
                                .setStartSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                                .setEndSensitivity(ActivityDetectionConfig.Sensitivity.LOW)
                                .setPrefixPaddingMs(20)
                                .setSilenceDurationMs(500)
                                .build())
                        .setActivityHandling(RealtimeInputConfig.ActivityHandling.INTERRUPT)
                        .setTurnCoverage(RealtimeInputConfig.TurnCoverage.ONLY_ACTIVITY)
                        .build())
                .build()
);

Web

Not yet supported for Web apps - check back soon!

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    // Configure voice activity detection (VAD), interruption handling, and turn coverage.
    // IMPORTANT: Example values shown here. Make sure to update for your use case.
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig(
        startSensitivity: Sensitivity.low,
        endSensitivity: Sensitivity.low,
        prefixPaddingMS: 20,
        silenceDurationMS: 500,
      ),
      activityHandling: ActivityHandling.interrupt,
      turnCoverage: TurnCoverage.onlyActivity,
    ),
  ),
);

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        // Configure voice activity detection (VAD), interruption handling, and turn coverage.
        // IMPORTANT: Example values shown here. Make sure to update for your use case.
        realtimeInputConfig: new RealtimeInputConfig(
            automaticActivityDetection: new ActivityDetectionConfig(
                startSensitivity: ActivityDetectionConfig.Sensitivity.Low,
                endSensitivity: ActivityDetectionConfig.Sensitivity.Low,
                prefixPaddingMS: 20,
                silenceDurationMS: 500
            ),
            activityHandling: RealtimeInputConfig.ActivityHandling.Interrupt,
            turnCoverage: RealtimeInputConfig.TurnCoverage.OnlyActivity
        )
    )
);

Impostazioni di configurazione VAD disponibili

Impostazione Valori supportati Descrizione
Rilevamento automatico dell'attività (automaticActivityDetection)
startSensitivity
  • LOW (valore predefinito)
  • HIGH

Determina la facilità con cui il server rileva quando un utente inizia a parlare:

  • LOW: meno sensibile ai suoni deboli. In questo modo, il rumore ambientale non avvia inavvertitamente un turno di parola.
  • HIGH: più sensibile. In questo modo è possibile rilevare rapidamente il parlato a basso volume o le parole pronunciate a bassa voce.
endSensitivity
  • LOW (valore predefinito)
  • HIGH

Determina la rapidità con cui il server rileva quando un utente smette di parlare:

  • LOW: meno sensibile alle pause finali. Il server accetta le esitazioni naturali o le parole pronunciate a voce più bassa alla fine di una frase.
  • HIGH: più sensibile. Il server conclude il turno di conversazione non appena i livelli della voce si abbassano.
prefixPadding Durata in millisecondi
(valore predefinito: Nessuno (0 ms))

Definisce la quantità di audio da includere prima che venga rilevato il parlato.

Questo buffer "look-back" garantisce che il modello acquisisca l'inizio completo del parlato, inclusa la prima sillaba che spesso inizia prima dell'attivazione del rilevatore.

  • Il valore predefinito di 0 può causare il troncamento dell'inizio delle parole.
  • Consigliato: 20-50 millisecondi
silenceDuration Durata in millisecondi
(valore predefinito: ~800 ms)

Definisce il tempo di attesa del server in caso di silenzio prima di terminare un turno di conversazione. Determina il livello di tolleranza del sistema rispetto alle pause naturali a metà frase (ad esempio, per pensare, respirare o i limiti delle proposizioni).

  • Consigliato (500-800 ms): offre un buon equilibrio. Il modello riceve un audio completo e ricco di contesto, mantenendo al contempo una latenza di risposta ragionevole.
  • Troppo basso (meno di 200 ms): termina i turni di conversazione durante le pause naturali, suddividendo gli enunciati in piccoli frammenti che possono peggiorare la qualità della trascrizione e della risposta.
  • Troppo alto (superiore a 2000 ms): aggiunge un ritardo evidente prima che il modello inizi a rispondere.
Comportamento di interruzione (activityHandling)
activityHandling
  • INTERRUPT (valore predefinito)
  • NO_INTERRUPT

Definisce il modo in cui il server gestisce l'attività utente in entrata durante la generazione di una risposta:

  • INTERRUPT: annulla immediatamente la risposta corrente del modello quando viene rilevata un'attività utente.
  • NO_INTERRUPT: continua a generare la risposta senza interruzioni.
Copertura per le svolte (turnCoverage)
turnCoverage
  • ONLY_ACTIVITY (valore predefinito)
  • ALL_INPUT
  • AUDIO_ACTIVITY_AND_ALL_VIDEO

Definisce l'input in streaming incluso nel contesto del turno di conversazione:

  • ONLY_ACTIVITY: esclude il silenzio, mantenendo solo i segmenti in cui è stata rilevata attività utente.
  • ALL_INPUT: conserva tutti gli input in streaming, incluso il silenzio audio.
  • AUDIO_ACTIVITY_AND_ALL_VIDEO: conserva tutti i fotogrammi video riprodotti in streaming, ma solo i segmenti audio in cui è stata rilevata attività.

Gestisci le interruzioni

Se il server rileva un input vocale dell'utente in arrivo mentre il modello sta generando una risposta e activityHandling è impostato su INTERRUPT (valore predefinito), tieni presente i seguenti comportamenti:

  • La generazione viene annullata: il modello interrompe immediatamente la risposta ed elimina tutte le chiamate degli strumenti in attesa.

  • La cronologia della sessione viene troncata: solo i contenuti già trasmessi alla tua app prima dell'interruzione vengono conservati nella finestra contestuale della sessione.

  • Viene emesso un segnale di interruzione: il server invia un messaggio di risposta che indica che la generazione è stata interrotta (ad esempio wasInterrupted in Swift o interrupted in Kotlin, Java, Web, Flutter e Unity).

Disattiva il rilevamento di attività vocale (VAD) automatico

Per assumere il controllo manuale completo dei turni di conversazione (ad esempio per un'interfaccia push-to-talk), puoi disattivare il rilevamento di attività vocale (VAD) automatico anziché configurare i parametri di sensibilità.

Quando il rilevamento automatico è disattivato, il server non rileva automaticamente il parlato né attiva risposte in base al silenzio audio. L'app deve invece segnalare manualmente i limiti dell'attività utente durante la sessione attiva.

1. Disattiva il VAD automatico nella configurazione del modello

Fai clic sul tuo provider Gemini API per visualizzare i contenuti e il codice specifici del provider in questa pagina.

Swift


// ...

let liveModel = FirebaseAI.firebaseAI(backend: .googleAI()).liveModel(
  modelName: "GEMINI_LIVE_API_MODEL_NAME",
  generationConfig: LiveGenerationConfig(
    responseModalities: [.audio],
    // Disable automatic voice activity detection (VAD).
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: .disabled()
    )
  )
)

Kotlin


// ...

val liveModel = Firebase.ai(backend = GenerativeBackend.googleAI()).liveModel(
    modelName = "GEMINI_LIVE_API_MODEL_NAME",
    generationConfig = liveGenerationConfig {
        responseModality = ResponseModality.AUDIO
        // Disable automatic voice activity detection (VAD).
        realtimeInputConfig = realtimeInputConfig {
            automaticActivityDetection = ActivityDetectionConfig.disabled()
        }
    }
)

Java


// ...

LiveGenerativeModel lm = FirebaseAI.getInstance(GenerativeBackend.googleAI()).liveModel(
        "GEMINI_LIVE_API_MODEL_NAME",
        new LiveGenerationConfig.Builder()
                .setResponseModality(ResponseModality.AUDIO)
                // Disable automatic voice activity detection (VAD).
                .setRealtimeInputConfig(RealtimeInputConfig.builder()
                        .setAutomaticActivityDetection(ActivityDetectionConfig.disabled())
                        .build())
                .build()
);

Web

Not yet supported for Web apps - check back soon!

Dart


// ...

final _liveModel = FirebaseAI.googleAI().liveGenerativeModel(
  model: 'GEMINI_LIVE_API_MODEL_NAME',
  liveGenerationConfig: LiveGenerationConfig(
    responseModalities: [ResponseModalities.audio],
    // Disable automatic voice activity detection (VAD).
    realtimeInputConfig: RealtimeInputConfig(
      automaticActivityDetection: ActivityDetectionConfig.disabled(),
    ),
  ),
);

Unity


// ...

var liveModel = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI()).GetLiveModel(
    modelName: "GEMINI_LIVE_API_MODEL_NAME",
    liveGenerationConfig: new LiveGenerationConfig(
        responseModalities: new[] { ResponseModality.Audio },
        // Disable automatic voice activity detection (VAD).
        realtimeInputConfig: new RealtimeInputConfig(
            automaticActivityDetection: ActivityDetectionConfig.Disabled()
        )
    )
);

2. Segnala manualmente i limiti dell'attività utente

Se disattivi il VAD, la tua app deve delimitare manualmente i confini di ogni turno di attività utente:

  1. Segnala l'inizio dell'attività: chiama sendStartActivityRealtime prima di inviare i dati audio (ad esempio, quando un utente preme un pulsante push-to-talk).

  2. Trasmetti in streaming l'input dell'utente: trasmetti in streaming i dati audio (o video) in modo continuo utilizzando sendAudioRealtime.

  3. Segnala la fine dell'attività: chiama sendStopActivityRealtime quando l'utente finisce di parlare (ad esempio, quando rilascia il pulsante push-to-talk). Questo indica la fine del turno dell'utente e attiva la risposta del modello.

Swift

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.sendStartActivityRealtime()

// Stream user audio data while the user speaks.
await session.sendAudioRealtime(audioData)

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.sendStopActivityRealtime()

Kotlin

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
session.sendStartActivityRealtime()

// Stream user audio data while the user speaks.
session.sendAudioRealtime(audioData)

// Signal the end of user activity (for example, on button release) to trigger model response.
session.sendStopActivityRealtime()

Java

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
session.sendStartActivityRealtime();

// Stream user audio data while the user speaks.
session.sendAudioRealtime(audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
session.sendStopActivityRealtime();

Web

Not yet supported for Web apps - check back soon!

Dart

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.sendStartActivityRealtime();

// Stream user audio data while the user speaks.
await session.sendAudioRealtime(audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.sendStopActivityRealtime();

Unity

// If you disable automatic voice activity detection (VAD), you need to manually demarcate user activity.

// Signal the start of user activity (for example, on push-to-talk button press).
await session.SendStartActivityRealtimeAsync();

// Stream user audio data while the user speaks.
await session.SendAudioRealtimeAsync(audio: audioData);

// Signal the end of user activity (for example, on button release) to trigger model response.
await session.SendStopActivityRealtimeAsync();



Gestione sessione

Scopri di più sui seguenti argomenti relativi alle sessioni: