Interfejs Live API jest interfejsem stateful API, który używa WebSockets. W tej sekcji znajdziesz dodatkowe informacje o interfejsie WebSockets API.
Sesje
Połączenie WebSocket nawiązuje sesję między klientem a serwerem Gemini. Gdy klient inicjuje nowe połączenie, sesja może wymieniać się wiadomościami z serwerem, aby:
- Wysyłanie tekstu, dźwięku lub filmu na serwer Gemini.
- odbierać prośby o wykonanie funkcji, wysłane z serwera Gemini.
Połączenie WebSocket
Aby rozpocząć sesję, połącz się z tym punktem końcowym WebSocket:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
Konfiguracja sesji
Początkowy komunikat po nawiązaniu połączenia określa konfigurację sesji, która obejmuje model, parametry generowania, instrukcje systemu i narzędzia.
Podczas sesji możesz zmieniać parametry konfiguracji z wyjątkiem modelu.
Poniżej znajdziesz przykładową konfigurację. Pamiętaj, że wielkość liter w nazwach pakietów SDK może się różnić. Opcje konfiguracji pakietu Python SDK możesz sprawdzić tutaj.
{
"model": string,
"generationConfig": {
"candidateCount": integer,
"maxOutputTokens": integer,
"temperature": number,
"topP": number,
"topK": integer,
"presencePenalty": number,
"frequencyPenalty": number,
"responseModalities": [string],
"speechConfig": object,
"mediaResolution": object
},
"systemInstruction": string,
"tools": [object]
}
Więcej informacji o polu API znajdziesz w sekcji generationConfig.
Wysyłanie wiadomości
Aby wymieniać wiadomości przez połączenie WebSocket, klient musi wysłać obiekt JSON przez otwarte połączenie WebSocket. Obiekt JSON musi mieć dokładnie jedno z tych pól:
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
Obsługiwane wiadomości od klienta
W tabeli poniżej znajdziesz obsługiwane wiadomości od klienta:
Wiadomość | Opis |
---|---|
BidiGenerateContentSetup |
Konfiguracja sesji do wysłania w pierwszej wiadomości |
BidiGenerateContentClientContent |
Przyrostowa aktualizacja treści bieżącej rozmowy przesyłana z klienta |
BidiGenerateContentRealtimeInput |
Wprowadzanie tekstu, dźwięku lub obrazu w czasie rzeczywistym |
BidiGenerateContentToolResponse |
Odpowiedź na ToolCallMessage otrzymaną z serwera |
Odbieranie wiadomości
Aby otrzymywać wiadomości od Gemini, nasłuchuj zdarzenia WebSocket „message”, a potem przeanalizuj wynik zgodnie z definicją obsługiwanych wiadomości serwera.
Zapoznaj się z tymi informacjami:
async with client.aio.live.connect(model='...', config=config) as session:
await session.send(input='Hello world!', end_of_turn=True)
async for message in session.receive():
print(message)
Wiadomości serwera mogą zawierać pole usageMetadata
, ale poza tym dokładnie jedno z innych pól wiadomościBidiGenerateContentServerMessage
. (zbior messageType
nie jest wyrażony w formacie JSON, więc pole pojawi się na najwyższym poziomie wiadomości).
Wiadomości i wydarzenia
ActivityEnd
Ten typ nie ma pól.
Oznacza koniec aktywności użytkownika.
ActivityHandling
różne sposoby obsługi aktywności użytkowników;
Wartości w polu enum | |
---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
Jeśli nie podasz żadnej opcji, domyślne działanie to START_OF_ACTIVITY_INTERRUPTS . |
START_OF_ACTIVITY_INTERRUPTS |
Jeśli ma wartość prawda, rozpoczęcie aktywności przerywa odpowiedź modelu (tzw. „wtargnięcie”). Obecna odpowiedź modelu zostanie przerwana w momencie przerwania. Jest to zachowanie domyślne. |
NO_INTERRUPTION |
Odpowiedź modelu nie zostanie przerwana. |
ActivityStart
Ten typ nie ma pól.
Oznacza początek aktywności użytkownika.
AudioTranscriptionConfig
Ten typ nie ma pól.
Konfiguracja transkrypcji audio.
AutomaticActivityDetection
Konfiguruje automatyczne wykrywanie aktywności.
Pola | |
---|---|
disabled |
Opcjonalnie. Jeśli jest włączona (domyślnie), wykryta głos i tekst są uznawane za aktywność. Jeśli jest wyłączona, klient musi wysyłać sygnały aktywności. |
startOfSpeechSensitivity |
Opcjonalnie. Określa, jak prawdopodobne jest wykrycie mowy. |
prefixPaddingMs |
Opcjonalnie. Wymagany czas trwania wykrytej mowy przed podaniem początku mowy. Im niższa jest ta wartość, tym bardziej czułe jest wykrywanie początku mowy i tym krótsze wypowiedzi mogą być rozpoznawane. Zwiększa to jednak prawdopodobieństwo wyników fałszywie pozytywnych. |
endOfSpeechSensitivity |
Opcjonalnie. Określa, jak prawdopodobne jest zakończenie wykrycia mowy. |
silenceDurationMs |
Opcjonalnie. Wymagany czas trwania wykrycia niemowy (np. ciszy) przed podaniem zakończenia mowy. Im większa jest ta wartość, tym dłuższe mogą być przerwy w mowie bez przerywania aktywności użytkownika, ale spowoduje to wydłużenie opóźnienia modelu. |
BidiGenerateContentClientContent
Przyrostowa aktualizacja bieżącej rozmowy wysłana z klienta. Wszystkie te treści są bezwarunkowo dołączane do historii rozmowy i używane jako część promptu do generowania treści.
Komunikat w tym miejscu przerwie bieżące generowanie modelu.
Pola | |
---|---|
turns[] |
Opcjonalnie. Treść dołączona do bieżącej rozmowy z modelem. W przypadku zapytań z jednym ruchem jest to pojedyncza instancja. W przypadku zapytań wieloetapowych jest to powtarzalne pole, które zawiera historię rozmowy i ostatnie żądanie. |
turnComplete |
Opcjonalnie. Jeśli to ustawienie ma wartość true, generowanie treści na serwerze powinno się rozpocząć od aktualnie gromadzonego promptu. W przeciwnym razie serwer czeka na dodatkowe komunikaty przed rozpoczęciem generowania. |
BidiGenerateContentRealtimeInput
dane wejściowe użytkownika, które są wysyłane w czasie rzeczywistym;
Różne modalności (dźwięk, obraz i tekst) są obsługiwane jako równoległe strumienie. Kolejność tych strumieni nie jest gwarantowana.
Różni się ona od BidiGenerateContentClientContent
w kilku aspektach:
- mogą być przesyłane bez przerwy w generowaniu modelu;
- Jeśli trzeba mieszać dane przeplatane w
BidiGenerateContentClientContent
iBidiGenerateContentRealtimeInput
, serwer próbuje zoptymalizować odpowiedź, ale nie ma żadnych gwarancji. - Koniec tury nie jest wyraźnie określony, ale wynika z działania użytkownika (np. zakończenia mowy).
- Dane są przetwarzane stopniowo jeszcze przed zakończeniem tury, aby zoptymalizować szybki start odpowiedzi modelu.
Pola | |
---|---|
mediaChunks[] |
Opcjonalnie. Wstawione bajty danych dla wejścia multimedialnego. Nie można podać więcej niż 1 elementu w polu WYCOFANO: użyj jednej z tych wartości: |
audio |
Opcjonalnie. Tworzą one strumień danych wejściowych audio w czasie rzeczywistym. |
video |
Opcjonalnie. Tworzą one strumień danych wideo w czasie rzeczywistym. |
activityStart |
Opcjonalnie. Oznacza początek aktywności użytkownika. Dane te mogą być wysyłane tylko wtedy, gdy automatyczne wykrywanie aktywności (czyli po stronie serwera) jest wyłączone. |
activityEnd |
Opcjonalnie. Oznacza koniec aktywności użytkownika. Dane te mogą być wysyłane tylko wtedy, gdy automatyczne wykrywanie aktywności (czyli po stronie serwera) jest wyłączone. |
audioStreamEnd |
Opcjonalnie. Wskazuje, że strumień audio został zakończony, np. z powodu wyłączenia mikrofonu. Powinien być wysyłany tylko wtedy, gdy włączone jest automatyczne wykrywanie aktywności (co jest domyślną opcją). Klient może ponownie otworzyć strumień, wysyłając wiadomość audio. |
text |
Opcjonalnie. Tworzą one strumień danych tekstowych w czasie rzeczywistym. |
BidiGenerateContentServerContent
Przyrostowa aktualizacja serwera generowana przez model w odpowiedzi na wiadomości od klienta.
Treści są generowane tak szybko, jak to możliwe, a nie w czasie rzeczywistym. Klienci mogą wybrać buforowanie i odtwarzanie w czasie rzeczywistym.
Pola | |
---|---|
generationComplete |
Tylko dane wyjściowe. Jeśli ma wartość true (prawda), wskazuje, że model został wygenerowany. Gdy model zostanie przerwany podczas generowania, w przerwanym etapie nie pojawi się wiadomość „generation_complete”, tylko „interrupted > turn_complete”. Gdy model zakłada odtwarzanie w czasie rzeczywistym, między zdarzeniami generation_complete i turn_complete wystąpi opóźnienie spowodowane oczekiwaniem modelu na zakończenie odtwarzania. |
turnComplete |
Tylko dane wyjściowe. Jeśli ma wartość true (prawda), wskazuje, że model ukończył swoją kolejkę. Generowanie rozpocznie się dopiero po otrzymaniu kolejnych wiadomości od klientów. |
interrupted |
Tylko dane wyjściowe. Jeśli ma wartość true, oznacza, że wiadomość od klienta przerwała bieżące generowanie modelu. Jeśli klient odtwarza treści w czasie rzeczywistym, jest to dobry sygnał, aby zatrzymać i opróżnić bieżącą kolejkę odtwarzania. |
groundingMetadata |
Tylko dane wyjściowe. metadane odniesienia dla wygenerowanych treści; |
outputTranscription |
Tylko dane wyjściowe. Wyjście transkrypcji audio. Transkrypcja jest wysyłana niezależnie od innych wiadomości serwera i nie ma określonej kolejności, w szczególności między |
modelTurn |
Tylko dane wyjściowe. Treści wygenerowane przez model w ramach bieżącej rozmowy z użytkownikiem. |
BidiGenerateContentServerMessage
Odpowiedź na wywołanie BidiGenerateContent.
Pola | |
---|---|
usageMetadata |
Tylko dane wyjściowe. Metadane dotyczące odpowiedzi. |
Pole unii messageType . Typ wiadomości. messageType może być tylko jednym z tych elementów: |
|
setupComplete |
Tylko dane wyjściowe. Wysłana w odpowiedzi na wiadomość |
serverContent |
Tylko dane wyjściowe. Treści wygenerowane przez model w odpowiedzi na wiadomości od klientów. |
toolCall |
Tylko dane wyjściowe. Poproś klienta o wykonanie |
toolCallCancellation |
Tylko dane wyjściowe. Powiadomienie dla klienta, że wcześniej wydany |
goAway |
Tylko dane wyjściowe. powiadomienie, że serwer wkrótce się rozłączy; |
sessionResumptionUpdate |
Tylko dane wyjściowe. Aktualizacja stanu wznowienia sesji. |
BidiGenerateContentSetup
Wiadomość do wysłania w pierwszym (i tylko w pierwszym) BidiGenerateContentClientMessage
. Zawiera konfigurację, która będzie obowiązywać przez cały czas trwania strumieniowego wywołania RPC.
Klienci powinni zaczekać na wiadomość BidiGenerateContentSetupComplete
, zanim wyślą kolejne wiadomości.
Pola | |
---|---|
model |
Wymagane. Nazwa zasobu modelu. Jest to identyfikator modelu, którego chcesz użyć. Format: |
generationConfig |
Opcjonalnie. Konfiguracja generowania. Nieobsługiwane są następujące pola:
|
systemInstruction |
Opcjonalnie. Użytkownik podał instrukcje systemowe dotyczące modelu. Uwaga: w częściach należy używać tylko tekstu, a treści w każdej części powinny być umieszczone w osobnym akapicie. |
tools[] |
Opcjonalnie. Lista
|
realtimeInputConfig |
Opcjonalnie. Konfiguruje obsługę danych wejściowych w czasie rzeczywistym. |
sessionResumption |
Opcjonalnie. Konfiguruje mechanizm wznawiania sesji. Jeśli jest dołączony, serwer będzie wysyłać wiadomości |
contextWindowCompression |
Opcjonalnie. Konfiguruje mechanizm kompresji okna kontekstowego. Jeśli jest dołączony, serwer automatycznie zmniejszy rozmiar kontekstu, gdy przekroczy skonfigurowaną długość. |
outputAudioTranscription |
Opcjonalnie. Jeśli to ustawienie jest włączone, umożliwia transkrypcję wyjścia audio modelu. Transkrypcja jest dopasowywana do kodu języka określonego dla wyjściowego dźwięku (jeśli jest skonfigurowany). |
BidiGenerateContentSetupComplete
Ten typ nie ma pól.
Wysłano w odpowiedzi na wiadomość BidiGenerateContentSetup
od klienta.
BidiGenerateContentToolCall
Poproś klienta o wykonanie functionCalls
i zwrócenie odpowiedzi z odpowiednimi wartościami id
.
Pola | |
---|---|
functionCalls[] |
Tylko dane wyjściowe. Wywołanie funkcji do wykonania. |
BidiGenerateContentToolCallCancellation
Powiadomienie dla klienta, że wcześniej wydany ToolCallMessage
z określonymi id
nie powinien zostać wykonany i powinien zostać anulowany. Jeśli wywołania tych narzędzi miały jakieś skutki uboczne, klienci mogą spróbować cofnąć te wywołania. Ta wiadomość pojawia się tylko wtedy, gdy klienci przerywają kolejność serwera.
Pola | |
---|---|
ids[] |
Tylko dane wyjściowe. Identyfikatory wywołań narzędzia, które mają zostać anulowane. |
BidiGenerateContentToolResponse
Odpowiedź wygenerowana przez klienta na ToolCall
otrzymaną z serwera. Poszczególne obiekty FunctionResponse
są dopasowywane do odpowiednich obiektów FunctionCall
za pomocą pola id
.
Pamiętaj, że w przypadku wywołania funkcji interfejsów unary i GenerateContent po stronie serwera następuje wymiana części Content
, a w przypadku wywołania funkcji interfejsów bidi GenerateContent następuje wymiana dedykowanego zestawu wiadomości.
Pola | |
---|---|
functionResponses[] |
Opcjonalnie. Odpowiedź na wywołania funkcji. |
BidiGenerateContentTranscription
Transkrypcja dźwięku (dane wejściowe lub wyjściowe).
Pola | |
---|---|
text |
tekst transkrypcji; |
ContextWindowCompressionConfig
Umożliwia kompresję okna kontekstowego – mechanizm zarządzania oknem kontekstowym modelu, który nie przekracza określonej długości.
Pola | |
---|---|
Pole unii compressionMechanism . Używany mechanizm kompresji okna kontekstowego. compressionMechanism może być tylko jednym z tych elementów: |
|
slidingWindow |
mechanizm przesuwającego się okna. |
triggerTokens |
Liczba tokenów (przed wykonaniem tury), która powoduje kompresję okna kontekstowego. Możesz go użyć, aby zachować równowagę między jakością a opóźnieniem, ponieważ krótsze okna kontekstu mogą przyspieszyć działanie modelu. Jednak każda operacja kompresji powoduje tymczasowe zwiększenie opóźnienia, dlatego nie należy ich często uruchamiać. Jeśli nie zostanie ustawiony, domyślnie zostanie użyte 80% limitu okna kontekstowego modelu. Pozostałe 20% to czas potrzebny na przetworzenie kolejnego żądania użytkownika i odpowiedzi modelu. |
EndSensitivity
Określa sposób wykrywania końca mowy.
Wartości w polu enum | |
---|---|
END_SENSITIVITY_UNSPECIFIED |
Wartość domyślna to END_SENSITIVITY_HIGH. |
END_SENSITIVITY_HIGH |
Automatyczne wykrywanie kończy rozpoznawanie mowy częściej. |
END_SENSITIVITY_LOW |
Automatyczne wykrywanie kończy rozpoznawanie mowy rzadziej. |
GoAway
powiadomienie, że serwer wkrótce się rozłączy;
Pola | |
---|---|
timeLeft |
Pozostały czas do zakończenia połączenia jako ABORTED (anulowane). Czas trwania nigdy nie będzie krótszy niż minimalny czas określony w modelu, który zostanie podany wraz z ograniczeniami stawek dla tego modelu. |
RealtimeInputConfig
Konfiguruje zachowanie wprowadzania danych w czasie rzeczywistym w aplikacji BidiGenerateContent
.
Pola | |
---|---|
automaticActivityDetection |
Opcjonalnie. Jeśli nie zostanie ustawiony, automatyczne wykrywanie aktywności jest domyślnie włączone. Jeśli automatyczne wykrywanie głosu jest wyłączone, klient musi wysyłać sygnały aktywności. |
activityHandling |
Opcjonalnie. Określa efekt działania. |
turnCoverage |
Opcjonalnie. Określa, które dane wejściowe są uwzględniane w ruchu użytkownika. |
SessionResumptionConfig
Konfiguracja wznawiania sesji.
Ten komunikat jest uwzględniony w konfiguracji sesji jako BidiGenerateContentSetup.sessionResumption
. Jeśli jest skonfigurowany, serwer będzie wysyłać wiadomości SessionResumptionUpdate
.
Pola | |
---|---|
handle |
Identyfikator poprzedniej sesji. Jeśli nie ma sesji, zostanie utworzona nowa. Identyfikatory sesji pochodzą z wartości |
SessionResumptionUpdate
Aktualizacja stanu wznowienia sesji.
Wysłano tylko wtedy, gdy ustawiono wartość BidiGenerateContentSetup.sessionResumption
.
Pola | |
---|---|
newHandle |
Nowy nick, który reprezentuje stan, który można wznowić. Pusty, jeśli |
resumable |
Wartość „PRAWDA”, jeśli bieżącą sesję można wznowić w danym momencie. W niektórych momentach sesji wznowienie nie jest możliwe. Na przykład, gdy model wykonuje wywołania funkcji lub generuje dane. W takim stanie wznowienie sesji (za pomocą tokena z poprzedniej sesji) spowoduje utratę części danych. W takich przypadkach wartość |
SlidingWindow
Metoda SlidingWindow odrzuca dane na początku okna kontekstu. Wynikowy kontekst zawsze rozpocznie się na początku tury roli UŻYTKOWNIK. Instrukcje systemu i wszystkie BidiGenerateContentSetup.prefixTurns
będą zawsze widoczne na początku wyniku.
Pola | |
---|---|
targetTokens |
Docelowa liczba tokenów do zachowania. Wartość domyślna to trigger_tokens/2. Odrzucenie części okna kontekstowego powoduje tymczasowy wzrost opóźnienia, dlatego należy skalibrować tę wartość, aby uniknąć częstych operacji kompresji. |
StartSensitivity
Określa sposób wykrywania początku mowy.
Wartości w polu enum | |
---|---|
START_SENSITIVITY_UNSPECIFIED |
Wartość domyślna to START_SENSITIVITY_HIGH. |
START_SENSITIVITY_HIGH |
Automatyczne wykrywanie będzie częściej wykrywać początek mowy. |
START_SENSITIVITY_LOW |
Automatyczne wykrywanie będzie rzadziej wykrywać początek mowy. |
TurnCoverage
Opcje dotyczące tego, które dane wejściowe są uwzględniane w ruchu użytkownika.
Wartości w polu enum | |
---|---|
TURN_COVERAGE_UNSPECIFIED |
Jeśli nie podasz żadnej opcji, domyślne działanie to TURN_INCLUDES_ONLY_ACTIVITY . |
TURN_INCLUDES_ONLY_ACTIVITY |
Aktywność użytkownika obejmuje tylko działania od ostatniej kolejki, z wyłączeniem okresów bezczynności (np. ciszy w strumieniu audio). Jest to zachowanie domyślne. |
TURN_INCLUDES_ALL_INPUT |
Przebieg użytkownika obejmuje wszystkie dane wejściowe w czasie rzeczywistym od ostatniego przebiegu, w tym okresy bezczynności (np. cisza w strumieniu audio). |
UsageMetadata
Metadane dotyczące użytkowania odpowiedzi.
Pola | |
---|---|
promptTokenCount |
Tylko dane wyjściowe. Liczba tokenów w prompcie. Gdy ustawisz wartość |
cachedContentTokenCount |
Liczba tokenów w części prompta, która jest przechowywana w pamięci podręcznej (treści w pamięci podręcznej) |
responseTokenCount |
Tylko dane wyjściowe. Łączna liczba tokenów we wszystkich wygenerowanych odpowiedziach. |
toolUsePromptTokenCount |
Tylko dane wyjściowe. Liczba tokenów obecnych w prośbach dotyczących korzystania z narzędzia. |
thoughtsTokenCount |
Tylko dane wyjściowe. Liczba tokenów myśli dla modeli myślących. |
totalTokenCount |
Tylko dane wyjściowe. Łączna liczba tokenów w żądaniu generowania (prompt + kandydaci do odpowiedzi). |
promptTokensDetails[] |
Tylko dane wyjściowe. Lista modalności przetworzonych w danych wejściowych |
cacheTokensDetails[] |
Tylko dane wyjściowe. Lista modalności treści z pamięci podręcznej w danych wejściowych zapytania. |
responseTokensDetails[] |
Tylko dane wyjściowe. Lista modalności zwróconych w odpowiedzi. |
toolUsePromptTokensDetails[] |
Tylko dane wyjściowe. Lista modalności przetworzonych na potrzeby danych wejściowych zapytania o użycie narzędzia. |
Więcej informacji o najczęstszych typach
Więcej informacji o najczęściej używanych typach zasobów API Blob
, Content
, FunctionCall
, FunctionResponse
, GenerationConfig
, GroundingMetadata
, ModalityTokenCount
i Tool
znajdziesz w artykule Generowanie treści.