L'API Live è un'API stateful che utilizza WebSockets. In questa sezione troverai ulteriori dettagli sull'API WebSockets.
Sessioni
Una connessione WebSocket stabilisce una sessione tra il client e il server Gemini. Dopo che un client avvia una nuova connessione, la sessione può scambiare messaggi con il server per:
- Invia testo, audio o video al server Gemini.
- Ricevere richieste audio, di testo o di chiamata di funzione dal server Gemini.
Connessione WebSocket
Per avviare una sessione, connettiti a questo endpoint websocket:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
Configurazione sessione
Il messaggio iniziale inviato dopo aver stabilito la connessione WebSocket imposta la configurazione della sessione, che include il modello, i parametri di generazione, le istruzioni di sistema e gli strumenti.
Non puoi aggiornare la configurazione mentre la connessione è aperta. Tuttavia, puoi modificare i parametri di configurazione, ad eccezione del modello, quando metti in pausa e riprendi tramite il meccanismo di ripresa della sessione.
Vedi la seguente configurazione di esempio. Tieni presente che la distinzione tra maiuscole e minuscole nei nomi negli SDK può variare. Puoi consultare le opzioni di configurazione dell'SDK Python qui.
{
"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]
}
Per saperne di più sul campo API, consulta generationConfig.
Inviare messaggi
Per scambiare messaggi tramite la connessione WebSocket, il client deve inviare un oggetto JSON tramite una connessione WebSocket aperta. L'oggetto JSON deve avere esattamente uno dei campi del seguente insieme di oggetti:
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
Messaggi dei clienti supportati
Consulta i messaggi del client supportati nella tabella seguente:
| Messaggio | Descrizione |
|---|---|
BidiGenerateContentSetup |
Configurazione della sessione da inviare nel primo messaggio |
BidiGenerateContentClientContent |
Aggiornamento incrementale dei contenuti della conversazione corrente inviato dal client |
BidiGenerateContentRealtimeInput |
Input audio, video o di testo in tempo reale |
BidiGenerateContentToolResponse |
Risposta a un ToolCallMessage ricevuto dal server |
Ricevere messaggi
Per ricevere messaggi da Gemini, ascolta l'evento "message" di WebSocket e poi analizza il risultato in base alla definizione dei messaggi del server supportati.
Vedi quanto segue:
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)
I messaggi del server potrebbero avere un campo usageMetadata, ma altrimenti includeranno esattamente uno degli altri campi del messaggio BidiGenerateContentServerMessage. L'unione messageType non è espressa in JSON, quindi il campo
viene visualizzato nel livello superiore del messaggio.
Messaggi ed eventi
ActivityEnd
Questo tipo non contiene campi.
Indica la fine dell'attività utente.
ActivityHandling
I diversi modi di gestire l'attività utente.
| Enum | |
|---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
Se non specificato, il comportamento predefinito è START_OF_ACTIVITY_INTERRUPTS. |
START_OF_ACTIVITY_INTERRUPTS |
Se il valore è true, l'inizio dell'attività interromperà la risposta del modello (anche chiamata "interruzione"). La risposta corrente del modello verrà interrotta nel momento dell'interruzione. Questo è il comportamento predefinito. |
NO_INTERRUPTION |
La risposta del modello non verrà interrotta. |
ActivityStart
Questo tipo non contiene campi.
Indica l'inizio dell'attività utente.
AudioTranscriptionConfig
Questo tipo non contiene campi.
La configurazione della trascrizione audio.
AutomaticActivityDetection
Configura il rilevamento automatico dell'attività.
| Campi | |
|---|---|
disabled |
Facoltativo. Se è attivata (impostazione predefinita), l'attività vocale e l'immissione di testo rilevate vengono conteggiate come attività. Se disabilitati, il cliente deve inviare indicatori di attività. |
startOfSpeechSensitivity |
Facoltativo. Determina la probabilità di rilevamento del parlato. |
prefixPaddingMs |
Facoltativo. La durata richiesta del parlato rilevato prima dell'inizio del parlato. Più basso è questo valore, più sensibile è il rilevamento dell'inizio del discorso e più breve può essere il discorso riconosciuto. Tuttavia, ciò aumenta anche la probabilità di falsi positivi. |
endOfSpeechSensitivity |
Facoltativo. Determina la probabilità che il discorso rilevato sia terminato. |
silenceDurationMs |
Facoltativo. La durata richiesta del non parlato rilevato (ad es. silenzio) prima che venga eseguito il commit della fine del parlato. Maggiore è questo valore, più lunghi possono essere i silenzi nel discorso senza interrompere l'attività dell'utente, ma ciò aumenterà la latenza del modello. |
BidiGenerateContentClientContent
Aggiornamento incrementale della conversazione corrente inviata dal client. Tutti i contenuti qui vengono aggiunti in modo incondizionato alla cronologia delle conversazioni e utilizzati come parte del prompt per il modello per generare contenuti.
Un messaggio qui interromperà qualsiasi generazione di modelli in corso.
| Campi | |
|---|---|
turns[] |
Facoltativo. I contenuti aggiunti alla conversazione corrente con il modello. Per le query a un solo turno, si tratta di una singola istanza. Per le query multi-turno, questo è un campo ripetuto che contiene la cronologia della conversazione e l'ultima richiesta. |
turnComplete |
Facoltativo. Se true, indica che la generazione di contenuti del server deve iniziare con il prompt attualmente accumulato. In caso contrario, il server attende altri messaggi prima di iniziare la generazione. |
BidiGenerateContentRealtimeInput
Input dell'utente inviato in tempo reale.
Le diverse modalità (audio, video e testo) vengono gestite come stream simultanei. L'ordine di questi stream non è garantito.
Si differenzia da BidiGenerateContentClientContent per alcuni aspetti:
- Possono essere inviati continuamente senza interruzioni alla generazione del modello.
- Se è necessario combinare i dati intercalati tra
BidiGenerateContentClientContenteBidiGenerateContentRealtimeInput, il server tenta di ottimizzare la risposta migliore, ma non ci sono garanzie. - La fine del turno non è specificata in modo esplicito, ma deriva dall'attività dell'utente (ad esempio, la fine del discorso).
- Ancora prima della fine del turno, i dati vengono elaborati in modo incrementale per ottimizzare l'inizio della risposta del modello.
| Campi | |
|---|---|
mediaChunks[] |
Facoltativo. Dati in linea in byte per l'input multimediale. Non sono supportati più DEPRECATO: utilizza |
audio |
Facoltativo. Questi formano il flusso di input audio in tempo reale. |
video |
Facoltativo. Questi formano lo stream di input video in tempo reale. |
activityStart |
Facoltativo. Indica l'inizio dell'attività utente. Può essere inviato solo se il rilevamento automatico dell'attività (ovvero lato server) è disattivato. |
activityEnd |
Facoltativo. Indica la fine dell'attività utente. Può essere inviato solo se il rilevamento automatico dell'attività (ovvero lato server) è disattivato. |
audioStreamEnd |
Facoltativo. Indica che lo stream audio è terminato, ad esempio perché il microfono è stato disattivato. Questo deve essere inviato solo quando è attivato il rilevamento automatico dell'attività (impostazione predefinita). Il cliente può riaprire il flusso inviando un messaggio audio. |
text |
Facoltativo. Questi formano lo stream di input di Real-Time Text. |
BidiGenerateContentServerContent
Aggiornamento incrementale del server generato dal modello in risposta ai messaggi del client.
I contenuti vengono generati il più rapidamente possibile e non in tempo reale. I client possono scegliere di memorizzarlo nel buffer e riprodurlo in tempo reale.
| Campi | |
|---|---|
generationComplete |
Solo output. Se true, indica che la generazione del modello è terminata. Quando il modello viene interrotto durante la generazione, non viene visualizzato il messaggio "generation_complete" nel turno interrotto, ma viene visualizzato "interrupted > turn_complete". Quando il modello presuppone la riproduzione in tempo reale, si verifica un ritardo tra generation_complete e turn_complete causato dall'attesa del modello per il completamento della riproduzione. |
turnComplete |
Solo output. Se true, indica che il modello ha completato il suo turno. La generazione inizierà solo in risposta a ulteriori messaggi del client. |
interrupted |
Solo output. Se vero, indica che un messaggio del client ha interrotto la generazione del modello corrente. Se il client riproduce i contenuti in tempo reale, questo è un buon segnale per interrompere e svuotare la coda di riproduzione corrente. |
groundingMetadata |
Solo output. Metadati di base per i contenuti generati. |
inputTranscription |
Solo output. Inserisci la trascrizione audio. La trascrizione viene inviata indipendentemente dagli altri messaggi del server e non è garantito un ordine. |
outputTranscription |
Solo output. Trascrizione audio di output. La trascrizione viene inviata indipendentemente dagli altri messaggi del server e non è garantito un ordine, in particolare tra |
urlContextMetadata |
|
modelTurn |
Solo output. I contenuti generati dal modello nell'ambito della conversazione corrente con l'utente. |
BidiGenerateContentServerMessage
Messaggio di risposta per la chiamata BidiGenerateContent.
| Campi | |
|---|---|
usageMetadata |
Solo output. Metadati di utilizzo relativi alla risposta o alle risposte. |
Campo unione messageType. Il tipo di messaggio. messageType può essere solo uno dei seguenti tipi: |
|
setupComplete |
Solo output. Inviato in risposta a un messaggio |
serverContent |
Solo output. Contenuti generati dal modello in risposta ai messaggi del cliente. |
toolCall |
Solo output. Richiedi al cliente di eseguire |
toolCallCancellation |
Solo output. Notifica al cliente che un |
goAway |
Solo output. Un avviso che indica che il server verrà disconnesso a breve. |
sessionResumptionUpdate |
Solo output. Aggiornamento dello stato di ripresa della sessione. |
BidiGenerateContentSetup
Messaggio da inviare nel primo (e solo nel primo) BidiGenerateContentClientMessage. Contiene la configurazione che verrà applicata per la durata della RPC di streaming.
I clienti devono attendere un messaggio BidiGenerateContentSetupComplete prima di inviare altri messaggi.
| Campi | |
|---|---|
model |
Obbligatorio. Il nome della risorsa del modello. che funge da ID per il modello. Formato: |
generationConfig |
Facoltativo. Configurazione della generazione. I seguenti campi non sono supportati:
|
systemInstruction |
Facoltativo. L'utente ha fornito istruzioni di sistema per il modello. Nota: devono essere utilizzati solo testi nelle parti e i contenuti di ogni parte saranno in un paragrafo separato. |
tools[] |
Facoltativo. Un elenco di Un |
realtimeInputConfig |
Facoltativo. Configura la gestione dell'input in tempo reale. |
sessionResumption |
Facoltativo. Configura il meccanismo di ripresa della sessione. Se incluso, il server invierà |
contextWindowCompression |
Facoltativo. Configura un meccanismo di compressione della finestra contestuale. Se incluso, il server ridurrà automaticamente le dimensioni del contesto quando superano la lunghezza configurata. |
inputAudioTranscription |
Facoltativo. Se impostata, attiva la trascrizione dell'input vocale. La trascrizione è allineata alla lingua dell'audio di input, se configurata. |
outputAudioTranscription |
Facoltativo. Se impostata, attiva la trascrizione dell'output audio del modello. La trascrizione è allineata al codice della lingua specificato per l'audio di output, se configurato. |
proactivity |
Facoltativo. Configura la proattività del modello. In questo modo, il modello può rispondere in modo proattivo all'input e ignorare gli input irrilevanti. |
BidiGenerateContentSetupComplete
Questo tipo non contiene campi.
Inviato in risposta a un messaggio BidiGenerateContentSetup del cliente.
BidiGenerateContentToolCall
Richiedi al cliente di eseguire functionCalls e restituire le risposte con i id corrispondenti.
| Campi | |
|---|---|
functionCalls[] |
Solo output. La chiamata di funzione da eseguire. |
BidiGenerateContentToolCallCancellation
Notifica al cliente che un ToolCallMessage emesso in precedenza con i id specificati non avrebbe dovuto essere eseguito e deve essere annullato. Se si sono verificati effetti collaterali a seguito di queste chiamate di strumenti, i client potrebbero tentare di annullarle. Questo messaggio viene visualizzato solo nei casi in cui i client interrompono i turni del server.
| Campi | |
|---|---|
ids[] |
Solo output. Gli ID delle chiamate di strumenti da annullare. |
BidiGenerateContentToolResponse
Risposta generata dal client a un ToolCall ricevuto dal server. I singoli oggetti FunctionResponse vengono associati ai rispettivi oggetti FunctionCall tramite il campo id.
Tieni presente che nelle API GenerateContent unarie e di streaming lato server la chiamata di funzione avviene tramite lo scambio delle parti Content, mentre nelle API GenerateContent bidirezionali la chiamata di funzione avviene tramite questo insieme dedicato di messaggi.
| Campi | |
|---|---|
functionResponses[] |
Facoltativo. La risposta alle chiamate di funzione. |
BidiGenerateContentTranscription
Trascrizione dell'audio (input o output).
| Campi | |
|---|---|
text |
Testo della trascrizione. |
ContextWindowCompressionConfig
Attiva la compressione della finestra contestuale, un meccanismo per gestire la finestra contestuale del modello in modo che non superi una determinata lunghezza.
| Campi | |
|---|---|
Campo unione compressionMechanism. Il meccanismo di compressione della finestra contestuale utilizzato. compressionMechanism può essere solo uno dei seguenti tipi: |
|
slidingWindow |
Un meccanismo di finestra scorrevole. |
triggerTokens |
Il numero di token (prima di eseguire un turno) necessario per attivare una compressione della finestra contestuale. Può essere utilizzato per bilanciare la qualità rispetto alla latenza, poiché finestre contestuali più brevi possono comportare risposte del modello più rapide. Tuttavia, qualsiasi operazione di compressione causerà un aumento temporaneo della latenza, pertanto non devono essere attivate di frequente. Se non viene impostato, il valore predefinito è l'80% del limite della finestra contestuale del modello. Il 20% rimane disponibile per la successiva richiesta dell'utente/risposta del modello. |
EndSensitivity
Determina come viene rilevata la fine della conversazione.
| Enum | |
|---|---|
END_SENSITIVITY_UNSPECIFIED |
Il valore predefinito è END_SENSITIVITY_HIGH. |
END_SENSITIVITY_HIGH |
Il rilevamento automatico termina il discorso più spesso. |
END_SENSITIVITY_LOW |
Il rilevamento automatico termina il discorso meno spesso. |
GoAway
Un avviso che indica che il server verrà disconnesso a breve.
| Campi | |
|---|---|
timeLeft |
Il tempo rimanente prima che la connessione venga terminata come INTERROTTA. Questa durata non sarà mai inferiore a un minimo specifico del modello, che verrà specificato insieme ai limiti di frequenza per il modello. |
ProactivityConfig
Configurazione delle funzionalità proattive.
| Campi | |
|---|---|
proactiveAudio |
Facoltativo. Se l'opzione è abilitata, il modello può rifiutarsi di rispondere all'ultimo prompt. Ad esempio, ciò consente al modello di ignorare i discorsi fuori contesto o di rimanere in silenzio se l'utente non ha ancora fatto una richiesta. |
RealtimeInputConfig
Configura il comportamento di input in tempo reale in BidiGenerateContent.
| Campi | |
|---|---|
automaticActivityDetection |
Facoltativo. Se non è impostato, il rilevamento automatico dell'attività è abilitato per impostazione predefinita. Se il rilevamento vocale automatico è disattivato, il client deve inviare segnali di attività. |
activityHandling |
Facoltativo. Definisce l'effetto dell'attività. |
turnCoverage |
Facoltativo. Definisce quale input è incluso nel turno dell'utente. |
SessionResumptionConfig
Configurazione della ripresa delle sessioni.
Questo messaggio è incluso nella configurazione della sessione come BidiGenerateContentSetup.sessionResumption. Se configurato, il server invierà SessionResumptionUpdate messaggi.
| Campi | |
|---|---|
handle |
L'handle di una sessione precedente. Se non è presente, viene creata una nuova sessione. Gli handle di sessione provengono dai valori |
SessionResumptionUpdate
Aggiornamento dello stato di ripresa della sessione.
Inviato solo se è stato impostato BidiGenerateContentSetup.sessionResumption.
| Campi | |
|---|---|
newHandle |
Nuovo handle che rappresenta uno stato che può essere ripristinato. Vuoto se |
resumable |
True se la sessione corrente può essere ripresa a questo punto. La ripresa non è possibile in alcuni punti della sessione. Ad esempio, quando il modello esegue chiamate di funzioni o genera. La ripresa della sessione (utilizzando un token di sessione precedente) in questo stato comporterà una perdita di dati. In questi casi, |
SlidingWindow
Il metodo SlidingWindow funziona eliminando i contenuti all'inizio della finestra contestuale. Il contesto risultante inizierà sempre all'inizio del turno di un ruolo UTENTE. Le istruzioni di sistema e qualsiasi BidiGenerateContentSetup.prefixTurns rimarranno sempre all'inizio del risultato.
| Campi | |
|---|---|
targetTokens |
Il numero target di token da conservare. Il valore predefinito è trigger_tokens/2. L'eliminazione di parti della finestra contestuale causa un aumento temporaneo della latenza, pertanto questo valore deve essere calibrato per evitare operazioni di compressione frequenti. |
StartSensitivity
Determina come viene rilevato l'inizio della conversazione.
| Enum | |
|---|---|
START_SENSITIVITY_UNSPECIFIED |
Il valore predefinito è START_SENSITIVITY_HIGH. |
START_SENSITIVITY_HIGH |
Il rilevamento automatico rileverà l'inizio del discorso più spesso. |
START_SENSITIVITY_LOW |
Il rilevamento automatico rileverà l'inizio della conversazione meno spesso. |
TurnCoverage
Opzioni relative all'input incluso nel turno dell'utente.
| Enum | |
|---|---|
TURN_COVERAGE_UNSPECIFIED |
Se non specificato, il comportamento predefinito è TURN_INCLUDES_ONLY_ACTIVITY. |
TURN_INCLUDES_ONLY_ACTIVITY |
Il turno dell'utente include solo l'attività dall'ultimo turno, escludendo l'inattività (ad es. il silenzio nel flusso audio). Questo è il comportamento predefinito. |
TURN_INCLUDES_ALL_INPUT |
Il turno dell'utente include tutti gli input in tempo reale dall'ultimo turno, inclusa l'inattività (ad es. silenzio nel flusso audio). |
UrlContextMetadata
Metadati relativi allo strumento di recupero del contesto dell'URL.
| Campi | |
|---|---|
urlMetadata[] |
Elenco del contesto URL. |
UsageMetadata
Metadati di utilizzo relativi alla risposta o alle risposte.
| Campi | |
|---|---|
promptTokenCount |
Solo output. Numero di token nel prompt. Quando |
cachedContentTokenCount |
Numero di token nella parte memorizzata nella cache del prompt (i contenuti memorizzati nella cache) |
responseTokenCount |
Solo output. Numero totale di token in tutte le risposte candidate generate. |
toolUsePromptTokenCount |
Solo output. Numero di token presenti nei prompt di utilizzo degli strumenti. |
thoughtsTokenCount |
Solo output. Numero di token di pensieri per i modelli di ragionamento. |
totalTokenCount |
Solo output. Il numero totale di token per la richiesta di generazione (prompt + candidati di risposta). |
promptTokensDetails[] |
Solo output. Elenco delle modalità elaborate nell'input della richiesta. |
cacheTokensDetails[] |
Solo output. Elenco delle modalità dei contenuti memorizzati nella cache nell'input della richiesta. |
responseTokensDetails[] |
Solo output. Elenco delle modalità restituite nella risposta. |
toolUsePromptTokensDetails[] |
Solo output. Elenco delle modalità elaborate per gli input delle richieste di utilizzo degli strumenti. |
Token di autenticazione effimeri
I token di autenticazione effimeri possono essere ottenuti chiamando
AuthTokenService.CreateToken e poi utilizzati con
GenerativeService.BidiGenerateContentConstrained, passando il token
in un parametro di query access_token o in un'intestazione HTTP Authorization con
il prefisso "Token".
CreateAuthTokenRequest
Crea un token di autenticazione temporaneo.
| Campi | |
|---|---|
authToken |
Obbligatorio. Il token da creare. |
AuthToken
Una richiesta per creare un token di autenticazione effimero.
| Campi | |
|---|---|
name |
Solo output. Identificatore. Il token stesso. |
expireTime |
Facoltativo. Solo input. Immutabile. Un orario facoltativo dopo il quale, quando si utilizza il token risultante, i messaggi nelle sessioni BidiGenerateContent verranno rifiutati. Gemini potrebbe chiudere la sessione in anticipo dopo questo periodo di tempo. Se non viene impostato, il valore predefinito è 30 minuti nel futuro. Se impostato, questo valore deve essere inferiore a 20 ore nel futuro. |
newSessionExpireTime |
Facoltativo. Solo input. Immutabile. Il periodo di tempo dopo il quale le nuove sessioni dell'API Live che utilizzano il token risultante da questa richiesta verranno rifiutate. Se non viene impostato, il valore predefinito sarà 60 secondi in futuro. Se impostato, questo valore deve essere inferiore a 20 ore nel futuro. |
fieldMask |
Facoltativo. Solo input. Immutabile. Se field_mask è vuoto e Se field_mask è vuoto e Se field_mask non è vuoto, i campi corrispondenti di |
Campo unione config. La configurazione specifica del metodo per il token risultante. config può essere solo uno dei seguenti tipi: |
|
bidiGenerateContentSetup |
Facoltativo. Solo input. Immutabile. Configurazione specifica per |
uses |
Facoltativo. Solo input. Immutabile. Il numero di volte in cui è possibile utilizzare il token. Se questo valore è zero, non viene applicato alcun limite. La ripresa di una sessione dell'API Live non viene conteggiata come utilizzo. Se non specificato, il valore predefinito è 1. |
Scopri di più sui tipi comuni
Per saperne di più sui tipi di risorse API di uso comune Blob,
Content, FunctionCall, FunctionResponse, GenerationConfig,
GroundingMetadata, ModalityTokenCount e Tool, vedi
Generazione di contenuti.