Opcje konfiguracji interfejsu Live API


Nawet przy podstawowej implementacji Live API możesz tworzyć angażujące i zaawansowane interakcje dla użytkowników. Możesz też dodatkowo dostosować działanie, korzystając z tych opcji konfiguracji:



Głos i język odpowiedzi

Możesz sprawić, że model będzie odpowiadać określonym głosem i w różnych językach.

Określanie głosu odpowiedzi

Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dotyczące tego dostawcy.

Live API obsługuje 30 różnych syntezowanych głosów HD, z których każdy ma odrębne cechy. Możesz wyświetlić listę opcji głosu odpowiedzi i posłuchać wersji demonstracyjnych każdego głosu, rozwijając sekcję poniżej.

Jeśli nie określisz głosu odpowiedzi, domyślnie będzie to Puck.

Aby określić głos odpowiedzi, ustaw nazwę głosu w obiekcie speechConfig w ramach konfiguracji modelu.

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")
    )
);

// ...

Wpływanie na język odpowiedzi

Modele Live API automatycznie wybierają odpowiedni język odpowiedzi.

Jeśli chcesz, aby model odpowiadał w języku innym niż angielski lub zawsze w konkretnym języku, możesz wpłynąć na jego odpowiedzi, używając instrukcji systemowych, takich jak te:

  • Wzmocnij w modelu przekonanie, że język inny niż angielski może być odpowiedni.

    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.
    
  • Poproś model, aby zawsze odpowiadał w określonym języku.

    RESPOND IN LANGUAGE. YOU MUST RESPOND UNMISTAKABLY IN LANGUAGE.
    



transkrypcje wejścia i wyjścia audio,

Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dotyczące tego dostawcy.

W ramach odpowiedzi modelu możesz otrzymać transkrypcje danych wejściowych audio i odpowiedzi audio modelu. Tę konfigurację ustawiasz w ramach konfiguracji modelu.

  • Aby uzyskać transkrypcję dźwięku wejściowego, dodaj inputAudioTranscription.

  • Aby uzyskać transkrypcję odpowiedzi głosowej modelu, dodaj outputAudioTranscription.

Pamiętaj:

  • Możesz skonfigurować model tak, aby zwracał transkrypcje zarówno danych wejściowych, jak i wyjściowych (jak w przykładzie poniżej), lub tylko jedne z nich.

  • Transkrypcje są przesyłane strumieniowo wraz z dźwiękiem, więc najlepiej jest je zbierać tak, jak części tekstowe w każdej turze.

  • Język transkrypcji jest określany na podstawie danych wejściowych audio i odpowiedzi audio modelu.

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
}

// ...



wykrywanie aktywności głosowej (VAD),

Wykrywanie aktywności głosowej (VAD) umożliwia modelowi rozpoznawanie, kiedy ktoś mówi. Jest to niezbędne do tworzenia naturalnych rozmów, ponieważ pozwala przerwać modelowi w dowolnym momencie. Funkcja VAD jest domyślnie włączona.

Możesz dostosować działanie VAD, w tym obsługę przerw. Możesz też wyłączyć automatyczne wykrywanie aktywności głosowej, aby przejąć pełną ręczną kontrolę nad rozmową (np. w przypadku interfejsu push-to-talk).

Konfigurowanie wykrywania aktywności głosowej (VAD)

Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dotyczące tego dostawcy.

Poniższy przykład pokazuje, jak dostosować działanie VAD przez ustawienie realtimeInputConfig w ramach konfiguracji modelu. Więcej informacji o ustawieniach dostępnych w tej konfiguracji znajdziesz w tabeli w dalszej części tej sekcji.

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
        )
    )
);

Dostępne ustawienia konfiguracji VAD

Ustawienie Obsługiwane wartości Opis
Automatyczne wykrywanie aktywności (automaticActivityDetection)
startSensitivity
  • LOW (domyślnie)
  • HIGH

Określa, jak szybko serwer wykrywa, że użytkownik zaczyna mówić:

  • LOW: mniejsza czułość na ciche dźwięki. Pomaga to zapobiegać przypadkowemu rozpoczęciu wypowiedzi przez szum otoczenia.
  • HIGH: większa czułość. Pomaga to szybko wykrywać cichszą mowę lub cicho wypowiadane słowa.
endSensitivity
  • LOW (domyślnie)
  • HIGH

Określa, jak szybko serwer wykrywa, że użytkownik przestał mówić:

  • LOW: mniejsza czułość na pauzy na końcu. Serwer uwzględnia naturalne wahania lub cichsze słowa na końcu zdania.
  • HIGH: większa czułość. Serwer szybko kończy turę mowy, gdy poziom głosu spada.
prefixPadding Czas trwania w milisekundach
(domyślnie: brak (0 ms))

Określa ilość dźwięku do uwzględnienia przed wykryciem mowy.

Ten bufor „wsteczny” zapewnia, że model rejestruje cały początek mowy, w tym pierwszą sylabę, która często zaczyna się przed aktywacją detektora.

  • Domyślna wartość 0 może powodować obcinanie początku słów.
  • Zalecana wartość: 20–50 milisekund
silenceDuration Czas trwania w milisekundach
(domyślnie: ~800 ms)

Określa, jak długo serwer czeka w ciszy, zanim zakończy turę mowy. Określa, jak system reaguje na naturalne pauzy w środku zdania (np. na zastanawianie się, oddech lub granice zdań składowych).

  • Zalecane (500–800 ms): zapewnia dobrą równowagę – model otrzymuje kompletny, bogaty kontekstowo dźwięk, a czas oczekiwania na odpowiedź jest rozsądny.
  • Zbyt niska (poniżej 200 ms): kończy wypowiedzi podczas naturalnych przerw, dzieląc je na małe fragmenty, co może pogorszyć jakość transkrypcji i odpowiedzi.
  • Zbyt wysoka (powyżej 2000 ms): powoduje zauważalne opóźnienie, zanim model zacznie odpowiadać.
Sposób przerywania (activityHandling)
activityHandling
  • INTERRUPT (domyślnie)
  • NO_INTERRUPT

Określa, jak serwer obsługuje przychodzącą aktywność użytkownika podczas generowania odpowiedzi:

  • INTERRUPT: natychmiast anuluje bieżącą odpowiedź modelu po wykryciu aktywności użytkownika.
  • NO_INTERRUPT: kontynuuje generowanie odpowiedzi bez przerwy.
Pokrycie kontekstu skrętu (turnCoverage)
turnCoverage
  • ONLY_ACTIVITY (domyślnie)
  • ALL_INPUT
  • AUDIO_ACTIVITY_AND_ALL_VIDEO

Określa, jakie dane wejściowe przesyłane strumieniowo są uwzględniane w kontekście tury rozmowy:

  • ONLY_ACTIVITY: wyklucza ciszę, zachowując tylko segmenty, w których wykryto aktywność użytkownika.
  • ALL_INPUT: zachowuje wszystkie przesyłane strumieniowo dane wejściowe, w tym ciszę.
  • AUDIO_ACTIVITY_AND_ALL_VIDEO: zachowuje wszystkie przesyłane strumieniowo klatki wideo, ale tylko te segmenty audio, w których wykryto aktywność.

Obsługa przerw

Jeśli serwer wykryje przychodzącą mowę użytkownika, gdy model generuje odpowiedź, a parametr activityHandling jest ustawiony na INTERRUPT (wartość domyślna), pamiętaj o tych zachowaniach:

  • Generowanie jest anulowane: model natychmiast zatrzymuje odpowiedź i odrzuca wszystkie oczekujące wywołania narzędzi.

  • Historia sesji jest skrócona: w oknie kontekstu sesji zachowywane są tylko treści, które zostały już przesłane do aplikacji przed przerwą.

  • Emitowany jest sygnał przerwania: serwer wysyła komunikat odpowiedzi wskazujący, że generowanie zostało przerwane (np. wasInterrupted w języku Swift lub interrupted w językach Kotlin, Java, Web, Flutter i Unity).

Wyłącz automatyczne wykrywanie aktywności głosowej (VAD)

Aby przejąć pełną ręczną kontrolę nad turami rozmowy (np. w przypadku interfejsu push-to-talk), możesz wyłączyć automatyczne wykrywanie aktywności głosowej (VAD) zamiast konfigurować parametry czułości.

Gdy automatyczne wykrywanie jest wyłączone, serwer nie będzie automatycznie wykrywać mowy ani wywoływać odpowiedzi na podstawie ciszy. Zamiast tego aplikacja musi ręcznie sygnalizować granice sesji aktywności użytkownika podczas aktywnej sesji.

1. Wyłącz automatyczne wykrywanie aktywności głosowej w konfiguracji modelu

Kliknij dostawcę Gemini API, aby wyświetlić na tej stronie treści i kod dotyczące tego dostawcy.

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. Ręczne sygnalizowanie granic aktywności użytkownika

Jeśli wyłączysz VAD, aplikacja musi ręcznie wyznaczać granice każdej tury aktywności użytkownika:

  1. Sygnalizowanie rozpoczęcia aktywności: wywołaj sendStartActivityRealtime przed wysłaniem danych audio (np. gdy użytkownik naciśnie przycisk „Naciśnij i mów”).

  2. Przesyłanie strumieniowe danych wejściowych użytkownika: ciągłe przesyłanie strumieniowe danych audio (lub wideo) za pomocą sendAudioRealtime.

  3. Sygnalizowanie zakończenia aktywności: wywołaj sendStopActivityRealtime, gdy użytkownik skończy mówić (np. gdy zwolni przycisk „Naciśnij i mów”). Sygnalizuje to koniec tury użytkownika i wywołuje odpowiedź modelu.

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();



Zarządzanie sesją

Dowiedz się więcej o tych tematach związanych z sesjami: