A API Live permite interações de voz e vídeo bidirecionais de baixa latência com o Gemini. Com a API Live, é possível oferecer aos usuários finais a experiência de conversas naturais e semelhantes às humanas, além da capacidade de interromper as respostas do modelo usando comandos de voz. A API Live pode processar entradas de texto, áudio e vídeo, além de fornecer saídas de texto e áudio.
Para mais informações sobre a API Live, consulte API Live.
Recursos
A API Live inclui os seguintes recursos principais:
- Multimodalidade: o modelo pode ver, ouvir e falar.
- Interação em tempo real com baixa latência: o modelo pode fornecer respostas rápidas.
- Memória da sessão: o modelo retém a memória de todas as interações em uma única sessão, lembrando informações ouvidas ou vistas anteriormente.
- Suporte para chamadas de função, execução de código e Pesquisa como uma ferramenta: é possível integrar o modelo a serviços e fontes de dados externos.
A API Live foi criada para comunicação de servidor para servidor.
Para apps da Web e para dispositivos móveis, recomendamos usar a integração dos nossos parceiros na Daily.
Modelos compatíveis
- Gemini 2.5 Flash com áudio nativo da API Live
Pré-lançamento - Gemini 2.0 Flash com API Live
pré-lançamento - Gemini 2.5 Flash
Primeiros passos
Para testar a API Live, acesse o Vertex AI Studio e clique em Iniciar sessão.
A API Live é uma API com estado que usa WebSockets.
Esta seção mostra um exemplo de como usar a API Live para geração de texto para texto usando Python 3.9+.
Python
Instalar
pip install --upgrade google-genai
Para saber mais, consulte a documentação de referência do SDK.
Defina variáveis de ambiente para usar o SDK de IA generativa com a Vertex AI:
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=global export GOOGLE_GENAI_USE_VERTEXAI=True
Guia de integração
Esta seção descreve como a integração funciona com a API Live.
Sessões
Uma conexão WebSocket estabelece uma sessão entre o cliente e o servidor do Gemini.
Depois que um cliente inicia uma nova conexão, a sessão pode trocar mensagens com o servidor para:
- Enviar texto, áudio ou vídeo para o servidor do Gemini.
- Receber solicitações de áudio, texto ou chamada de função do servidor do Gemini.
A configuração da sessão é enviada na primeira mensagem após a conexão. Uma configuração de sessão inclui o modelo, os parâmetros de geração, as instruções do sistema e as ferramentas.
Confira o exemplo de configuração a seguir:
{
"model": string,
"generationConfig": {
"candidateCount": integer,
"maxOutputTokens": integer,
"temperature": number,
"topP": number,
"topK": integer,
"presencePenalty": number,
"frequencyPenalty": number,
"responseModalities": [string],
"speechConfig": object
},
"systemInstruction": string,
"tools": [object]
}
Para mais informações, consulte BidiGenerateContentSetup.
Enviar mensagens
As mensagens são objetos formatados em JSON trocados pela conexão WebSocket.
Para enviar uma mensagem, o cliente precisa enviar um objeto JSON por uma conexão WebSocket aberta. O objeto JSON precisa ter exatamente um dos campos do seguinte conjunto de objetos:
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
Mensagens de clientes compatíveis
Confira as mensagens do cliente compatíveis na tabela a seguir:
Mensagem | Descrição |
---|---|
BidiGenerateContentSetup |
Configuração da sessão a ser enviada na primeira mensagem |
BidiGenerateContentClientContent |
Atualização incremental do conteúdo da conversa atual enviada pelo cliente |
BidiGenerateContentRealtimeInput |
Entrada de áudio ou vídeo em tempo real |
BidiGenerateContentToolResponse |
Resposta a um ToolCallMessage recebido do servidor |
Receber mensagens
Para receber mensagens do Gemini, fique atento ao evento "message" do WebSocket e analise o resultado de acordo com a definição das mensagens compatíveis do servidor.
Confira a seguir:
ws.addEventListener("message", async (evt) => { if (evt.data instanceof Blob) { // Process the received data (audio, video, etc.) } else { // Process JSON response } });
As mensagens do servidor terão exatamente um dos campos do seguinte conjunto de objetos:
{
"setupComplete": BidiGenerateContentSetupComplete,
"serverContent": BidiGenerateContentServerContent,
"toolCall": BidiGenerateContentToolCall,
"toolCallCancellation": BidiGenerateContentToolCallCancellation
"usageMetadata": UsageMetadata
"goAway": GoAway
"sessionResumptionUpdate": SessionResumptionUpdate
"inputTranscription": BidiGenerateContentTranscription
"outputTranscription": BidiGenerateContentTranscription
}
Mensagens do servidor compatíveis
Confira os tipos de mensagens do servidor compatíveis na tabela a seguir:
Mensagem | Descrição |
---|---|
BidiGenerateContentSetupComplete |
Uma mensagem BidiGenerateContentSetup do cliente, enviada quando a configuração é concluída |
BidiGenerateContentServerContent |
Conteúdo gerado pelo modelo em resposta a uma mensagem do cliente |
BidiGenerateContentToolCall |
Solicitação para o cliente executar as chamadas de função e retornar as respostas com os IDs correspondentes |
BidiGenerateContentToolCallCancellation |
Enviado quando uma chamada de função é cancelada porque o usuário interrompeu a saída do modelo. |
UsageMetadata |
Um relatório do número de tokens usados pela sessão até o momento |
GoAway |
Um sinal de que a conexão atual será encerrada em breve. |
SessionResumptionUpdate |
Um ponto de verificação de sessão que pode ser retomado |
BidiGenerateContentTranscription |
Uma transcrição da fala do usuário ou do modelo |
Atualizações incrementais de conteúdo
Use atualizações incrementais para enviar entrada de texto, estabelecer ou restaurar o contexto da sessão. Para contextos curtos, você pode enviar interações de turno a turno para representar a sequência exata de eventos. Para contextos mais longos, é recomendável fornecer um único resumo da mensagem para liberar a janela de contexto para as interações de acompanhamento.
Confira o exemplo de mensagem de contexto a seguir:
{ "clientContent": { "turns": [ { "parts":[ { "text": "" } ], "role":"user" }, { "parts":[ { "text": "" } ], "role":"model" } ], "turnComplete": true } }
Embora as partes de conteúdo possam ser do tipo functionResponse
, BidiGenerateContentClientContent
não deve ser usado para fornecer uma resposta às chamadas de função emitidas pelo modelo. Use BidiGenerateContentToolResponse
. BidiGenerateContentClientContent
só deve ser usado para estabelecer um contexto anterior ou fornecer entrada de texto para a conversa.
Streaming de áudio e vídeo
Execução de código
Para saber mais sobre a execução de código, consulte Execução de código.
Chamadas de função
Todas as funções precisam ser declaradas no início da sessão enviando definições de ferramentas como parte da mensagem BidiGenerateContentSetup
.
Você define funções usando JSON, especificamente com um subconjunto selecionado do formato de esquema OpenAPI. Uma única declaração de função pode incluir os seguintes parâmetros:
name (string): o identificador exclusivo da função na chamada de API.
description (string): uma explicação abrangente do propósito e das capacidades da função.
parameters (objeto): define os dados de entrada necessários para a função.
type (string): especifica o tipo de dados geral, como objeto.
properties (objeto): lista parâmetros individuais, cada um com:
- type (string): o tipo de dados do parâmetro, como string, número inteiro, booleano.
- description (string): uma explicação clara da finalidade e do formato esperado do parâmetro.
required (matriz): uma matriz de strings que lista os nomes dos parâmetros obrigatórios para o funcionamento da função.
Para exemplos de código de uma declaração de função usando comandos curl, consulte Chamada de função com a API Gemini. Para exemplos de como criar declarações de função usando os SDKs da API Gemini, consulte o tutorial de chamada de função.
Com um único comando, o modelo pode gerar várias chamadas de função e o
código necessário para encadear as saídas. Esse código é executado em um ambiente de sandbox, gerando mensagens BidiGenerateContentToolCall
subsequentes. A execução é pausada até que os resultados de cada chamada de função
estejam disponíveis, o que garante o processamento sequencial.
O cliente deve responder com BidiGenerateContentToolResponse
.
Para saber mais, consulte Introdução à chamada de função.
Formatos de áudio
Consulte a lista de formatos de áudio compatíveis.
Instruções do sistema
É possível fornecer instruções do sistema para controlar melhor a saída do modelo e especificar o tom e o sentimento das respostas de áudio.
As instruções do sistema são adicionadas ao comando antes do início da interação e permanecem em vigor durante toda a sessão.
As instruções do sistema só podem ser definidas no início de uma sessão, imediatamente após a conexão inicial. Para fornecer mais informações ao modelo durante a sessão, use atualizações incrementais de conteúdo.
Interrupções
Os usuários podem interromper a saída do modelo a qualquer momento. Quando a detecção de atividade de voz (VAD) detecta uma interrupção, a geração em andamento é cancelada e descartada. Apenas as informações já enviadas
ao cliente são mantidas no histórico da sessão. Em seguida, o servidor envia uma mensagem BidiGenerateContentServerContent
para informar a interrupção.
Além disso, o servidor do Gemini descarta todas as chamadas de função pendentes e envia uma mensagem BidiGenerateContentServerContent
com os IDs das chamadas canceladas.
Vozes
Para especificar uma voz, defina o voiceName
no objeto speechConfig
como parte da configuração da sessão.
Confira a representação JSON a seguir de um objeto speechConfig
:
{ "voiceConfig": { "prebuiltVoiceConfig": { "voiceName": "VOICE_NAME" } } }
Para conferir a lista de vozes disponíveis, consulte Mudar as configurações de voz e idioma.
Limitações
Considere as seguintes limitações da API Live e do Gemini 2.0 ao planejar seu projeto.
Autenticação do cliente
A API Live só oferece autenticação de servidor para servidor e não é recomendada para uso direto pelo cliente. A entrada do cliente precisa ser encaminhada por um servidor de aplicativos intermediário para autenticação segura com a API Live.
Duração máxima da sessão
A duração máxima padrão de uma sessão de conversa é de 10 minutos. Para mais informações, consulte Duração da sessão.
Detecção de atividade de voz (VAD)
Por padrão, o modelo realiza automaticamente a detecção de atividade de voz (VAD) em um stream de entrada de áudio contínuo. A VAD pode ser configurada com o campo
RealtimeInputConfig.AutomaticActivityDetection
da mensagem de configuração.
Quando o fluxo de áudio é pausado por mais de um segundo (por exemplo, quando o usuário desativa o microfone), um evento AudioStreamEnd
é enviado para limpar o áudio em cache. O cliente pode retomar o envio de dados de áudio a qualquer momento.
Como alternativa, a VAD automática pode ser desativada definindo RealtimeInputConfig.AutomaticActivityDetection.disabled
como true
na mensagem de configuração. Nessa configuração, o cliente é responsável por detectar a fala do usuário e enviar mensagens
ActivityStart
e ActivityEnd
nos momentos adequados. Um AudioStreamEnd
não é enviado nessa configuração. Em vez disso, qualquer interrupção do stream é marcada por
uma mensagem ActivityEnd
.
Outras limitações
Não há suporte para a inclusão manual de endpoints.
Entradas e saídas de áudio afetam negativamente a capacidade do modelo de usar a chamada de função.
Contagem de tokens
Não há suporte para a contagem de tokens.
Limites de taxas
Os seguintes limites de taxa são aplicáveis:
- 5.000 sessões simultâneas por chave de API
- 4 milhões de tokens por minuto
Mensagens e eventos
BidiGenerateContentClientContent
Atualização incremental da conversa atual entregue pelo cliente. Todo o conteúdo aqui é adicionado incondicionalmente ao histórico de conversas e usado como parte do comando para o modelo gerar conteúdo.
Uma mensagem aqui vai interromper qualquer geração de modelo em andamento.
Campos | |
---|---|
turns[] |
Opcional. O conteúdo anexado à conversa atual com o modelo. Para consultas de turno único, esta é uma instância única. Para consultas com várias interações, esse é um campo repetido que contém o histórico da conversa e a solicitação mais recente. |
turn_complete |
Opcional. Se for "true", indica que a geração de conteúdo do servidor deve começar com o comando acumulado no momento. Caso contrário, o servidor vai aguardar mais mensagens antes de iniciar a geração. |
BidiGenerateContentRealtimeInput
Entrada do usuário enviada em tempo real.
Isso é diferente de ClientContentUpdate
de algumas maneiras:
- Podem ser enviados continuamente sem interrupção para a geração de modelos.
- Se houver necessidade de misturar dados intercalados entre o
ClientContentUpdate
e oRealtimeUpdate
, o servidor tentará otimizar para a melhor resposta, mas não há garantias. - O fim da vez não é especificado explicitamente, mas sim derivado da atividade do usuário (por exemplo, fim da fala).
- Mesmo antes do fim do turno, os dados são processados de forma incremental para otimizar o início rápido da resposta do modelo.
- Sempre presumida como a entrada do usuário (não pode ser usada para preencher o histórico de conversas).
Campos | |
---|---|
media_chunks[] |
Opcional. Dados de bytes inline para entrada de mídia. |
activity_start |
Opcional. Marca o início da atividade do usuário. Isso só pode ser enviado se a detecção automática de atividade (ou seja, do lado do servidor) estiver desativada. |
activity_end |
Opcional. Marca o fim da atividade do usuário. Isso só pode ser enviado se a detecção automática de atividade (ou seja, do lado do servidor) estiver desativada. |
ActivityEnd
Esse tipo não tem campos.
Marca o fim da atividade do usuário.
ActivityStart
Esse tipo não tem campos.
Apenas um dos campos nesta mensagem precisa ser definido por vez. Marca o início da atividade do usuário.
BidiGenerateContentServerContent
Atualização incremental do servidor gerada pelo modelo em resposta às mensagens do cliente.
O conteúdo é gerado o mais rápido possível, e não em tempo real. Os clientes podem armazenar em buffer e reproduzir em tempo real.
Campos | |
---|---|
turn_complete |
Apenas saída. Se for verdadeiro, indica que o modelo terminou de gerar. A geração só vai começar em resposta a outras mensagens do cliente. Pode ser definido junto com |
interrupted |
Apenas saída. Se for "true", indica que uma mensagem do cliente interrompeu a geração do modelo atual. Se o cliente estiver reproduzindo o conteúdo em tempo real, esse será um bom sinal para interromper e esvaziar a fila atual. Se o cliente estiver reproduzindo o conteúdo em tempo real, esse é um bom sinal para interromper e esvaziar a fila de reprodução atual. |
generation_complete |
Apenas saída. Se for verdadeiro, indica que o modelo terminou de gerar. Quando o modelo é interrompido durante a geração, não há uma mensagem "generation_complete" na vez interrompida. Ela passa por "interrupted > turn_complete". Quando o modelo assume a reprodução em tempo real, há um atraso entre generation_complete e turn_complete causado pela espera do modelo para que a reprodução termine. |
grounding_metadata |
Apenas saída. Os metadados especificam as fontes usadas para embasar o conteúdo gerado. |
input_transcription |
Opcional. Entrada de transcrição. A transcrição é independente do turno do modelo, o que significa que não implica nenhuma ordenação entre a transcrição e o turno do modelo. |
output_transcription |
Opcional. Transcrição da saída. A transcrição é independente do turno do modelo, o que significa que não implica nenhuma ordenação entre a transcrição e o turno do modelo. |
model_turn |
Apenas saída. O conteúdo gerado pelo modelo como parte da conversa atual com o usuário. |
Transcrição
Mensagem de transcrição de áudio.
Campos | |
---|---|
text |
Opcional. Texto da transcrição. |
finished |
Opcional. O booleano indica o fim da transcrição. |
BidiGenerateContentSetup
Mensagem a ser enviada na primeira e única mensagem do primeiro cliente. Contém a configuração que será aplicada durante a sessão de streaming.
Os clientes precisam aguardar uma mensagem BidiGenerateContentSetupComplete
antes de enviar outras mensagens.
Campos | |
---|---|
model |
Obrigatório. O nome totalmente qualificado do modelo do publisher. Formato do modelo do publisher: |
generation_config |
Opcional. Configuração de geração. Os seguintes campos não são compatíveis:
|
system_instruction |
Opcional. O usuário forneceu instruções do sistema para o modelo. Observação: use apenas texto em partes, e o conteúdo de cada parte ficará em um parágrafo separado. |
tools[] |
Opcional. Uma lista de Uma |
session_resumption |
Opcional. Configura o mecanismo de retomada de sessão. Se incluído, o servidor vai enviar mensagens |
context_window_compression |
Opcional. Configura o mecanismo de compactação da janela de contexto. Se incluído, o servidor vai compactar a janela de contexto para se ajustar ao comprimento especificado. |
realtime_input_config |
Opcional. Configura o processamento de entradas em tempo real. |
input_audio_transcription |
Opcional. A transcrição da entrada está alinhada com o idioma do áudio de entrada. |
output_audio_transcription |
Opcional. A transcrição da saída está alinhada ao código de idioma especificado para o áudio de saída. |
AudioTranscriptionConfig
Esse tipo não tem campos.
A configuração de transcrição de áudio.
BidiGenerateContentSetupComplete
Esse tipo não tem campos.
Enviado em resposta a uma mensagem BidiGenerateContentSetup
do cliente.
BidiGenerateContentToolCall
Solicitação para o cliente executar o function_calls
e retornar as respostas com os id
s correspondentes.
Campos | |
---|---|
function_calls[] |
Apenas saída. A chamada de função a ser executada. |
BidiGenerateContentToolCallCancellation
Notificação para o cliente de que um ToolCallMessage
emitido anteriormente com os id
s especificados não deveria ter sido executado e precisa ser cancelado. Se houver efeitos colaterais nessas chamadas de função, os clientes poderão tentar desfazer as chamadas. Essa mensagem aparece apenas quando os clientes interrompem as ações do servidor.
Campos | |
---|---|
ids[] |
Apenas saída. Os IDs das chamadas de função a serem canceladas. |
BidiGenerateContentToolResponse
Resposta gerada pelo cliente a um ToolCall
recebido do servidor. Os objetos FunctionResponse
individuais são correspondidos aos objetos FunctionCall
respectivos pelo campo id
.
Nas APIs GenerateContent unárias e de streaming do servidor, a chamada de função acontece trocando as partes Content
. Já nas APIs GenerateContent bidirecionais, a chamada de função acontece com esse conjunto dedicado de mensagens.
Campos | |
---|---|
function_responses[] |
Opcional. A resposta às chamadas de função. |
RealtimeInputConfig
Configura o comportamento de entrada em tempo real em BidiGenerateContent
.
Campos | |
---|---|
automatic_activity_detection |
Opcional. Se não for definido, a detecção automática de atividade será ativada por padrão. Se a detecção automática de voz estiver desativada, o cliente precisará enviar indicadores de atividade. |
activity_handling |
Opcional. Define o efeito da atividade. |
turn_coverage |
Opcional. Define qual entrada é incluída na vez do usuário. |
ActivityHandling
As diferentes maneiras de lidar com a atividade do usuário.
Enums | |
---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
Se não for especificado, o comportamento padrão será START_OF_ACTIVITY_INTERRUPTS . |
START_OF_ACTIVITY_INTERRUPTS |
Se for verdadeiro, o início da atividade vai interromper a resposta do modelo (também chamada de "interrupção"). A resposta atual do modelo será interrompida no momento da interrupção. Esse é o comportamento padrão. |
NO_INTERRUPTION |
A resposta do modelo não será interrompida. |
AutomaticActivityDetection
Configura a detecção automática de atividade.
Campos | |
---|---|
start_of_speech_sensitivity |
Opcional. Determina a probabilidade de a fala ser detectada. |
end_of_speech_sensitivity |
Opcional. Determina a probabilidade de a fala detectada ter terminado. |
prefix_padding_ms |
Opcional. A duração necessária da fala detectada antes do início da fala ser confirmado. Quanto menor for esse valor, mais sensível será a detecção do início da fala e mais curta poderá ser a fala reconhecida. No entanto, isso também aumenta a probabilidade de falsos positivos. |
silence_duration_ms |
Opcional. A duração necessária do silêncio detectado (ou não fala) antes que o fim da fala seja confirmado. Quanto maior esse valor, mais longos podem ser os intervalos de fala sem interromper a atividade do usuário, mas isso aumenta a latência do modelo. |
disabled |
Opcional. Se ativada, a voz detectada e a entrada de texto contam como atividade. Se estiver desativado, o cliente precisará enviar indicadores de atividade. |
EndSensitivity
Sensibilidade ao fim da fala.
Enums | |
---|---|
END_SENSITIVITY_UNSPECIFIED |
O padrão é END_SENSITIVITY_LOW. |
END_SENSITIVITY_HIGH |
A detecção automática encerra a fala com mais frequência. |
END_SENSITIVITY_LOW |
A detecção automática encerra a fala com menos frequência. |
StartSensitivity
Sensibilidade ao início da fala.
Enums | |
---|---|
START_SENSITIVITY_UNSPECIFIED |
O padrão é START_SENSITIVITY_LOW. |
START_SENSITIVITY_HIGH |
A detecção automática vai detectar o início da fala com mais frequência. |
START_SENSITIVITY_LOW |
A detecção automática vai detectar o início da fala com menos frequência. |
TurnCoverage
Opções sobre qual entrada está incluída na vez do usuário.
Enums | |
---|---|
TURN_COVERAGE_UNSPECIFIED |
Se não for especificado, o comportamento padrão será TURN_INCLUDES_ALL_INPUT . |
TURN_INCLUDES_ONLY_ACTIVITY |
A vez dos usuários inclui apenas a atividade desde a última vez, excluindo a inatividade (por exemplo, silêncio no fluxo de áudio). |
TURN_INCLUDES_ALL_INPUT |
A vez do usuário inclui todas as entradas em tempo real desde a última vez, incluindo inatividade (por exemplo, silêncio no fluxo de áudio). Esse é o comportamento padrão. |
UsageMetadata
Metadados sobre o uso do conteúdo armazenado em cache.
Campos | |
---|---|
total_token_count |
Número total de tokens consumidos pelo conteúdo armazenado em cache. |
text_count |
Número de caracteres de texto. |
image_count |
Número de imagens. |
video_duration_seconds |
Duração do vídeo em segundos. |
audio_duration_seconds |
Duração do áudio em segundos. |
GoAway
O servidor não poderá atender o cliente em breve.
Campos | |
---|---|
time_left |
O tempo restante antes de a conexão ser encerrada como ABORTED. O tempo mínimo retornado aqui é especificado de maneira diferente junto com os limites de taxa para um determinado modelo. |
SessionResumptionUpdate
Atualização do estado de retomada da sessão.
Enviado apenas se BidiGenerateContentSetup.session_resumption
foi definido.
Campos | |
---|---|
new_handle |
Novo identificador que representa um estado que pode ser retomado. Fica vazio se |
resumable |
Verdadeiro se a sessão puder ser retomada neste ponto. Em alguns momentos, talvez não seja possível retomar a sessão. Nesse caso, enviamos a atualização empty new_handle e resumable=false. Por exemplo, o modelo pode executar chamadas de função ou apenas gerar. Retomar a sessão (usando o token da sessão anterior) nesse estado vai resultar em perda de dados. |
last_consumed_client_message_index |
Índice da última mensagem enviada pelo cliente que está incluída no estado representado por este SessionResumptionToken. Enviado apenas quando A presença desse índice permite que os usuários se reconectem de forma transparente e evitem o problema de perder parte da entrada de áudio/vídeo em tempo real. Se o cliente quiser se desconectar temporariamente (por exemplo, como resultado do recebimento de GoAway), ele poderá fazer isso sem perder o estado, armazenando em buffer as mensagens enviadas desde o último Ele não será usado para "retomada para restaurar o estado" algum tempo depois. Nesses casos, provavelmente não serão necessários frames parciais de áudio e vídeo. |
A seguir
- Saiba mais sobre chamadas de funções.
- Consulte a referência de chamada de função para exemplos.