A partir de 29 de abril de 2025, os modelos Gemini 1.5 Pro e Gemini 1.5 Flash não estarão disponíveis em projetos que não os usaram antes, incluindo novos projetos. Para mais detalhes, consulte Versões e ciclo de vida do modelo.
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Este documento fornece uma referência para a API Live e mostra como usá-la para streaming bidirecional com o Gemini. Ele abrange os seguintes tópicos:
Recursos:saiba mais sobre os principais recursos da API Live, incluindo multimodalidade e interação de baixa latência.
Começar:encontre um exemplo de início rápido para usar a API com a geração de texto para texto.
Guia de integração:entenda os conceitos básicos para integração com a API, como sessões, tipos de mensagens e chamadas de função.
Limitações:revise as limitações atuais da API, incluindo duração da sessão e autenticação.
Mensagens e eventos:consulte a referência detalhada de todas as mensagens do cliente e do servidor.
O diagrama a seguir resume o fluxo de trabalho geral:
A API Live permite conversas bidirecionais de voz e vídeo de baixa latência com o Gemini. É possível criar interações naturais e semelhantes às humanas para seus usuários, incluindo a capacidade de interromper as respostas do modelo com comandos de voz. A API Live processa entradas de texto, áudio e vídeo e fornece 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 e de baixa latência: receba respostas rápidas do modelo para uma experiência de conversa fluida.
Memória de 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 chamada 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 projetada para comunicação de servidor para servidor. Para apps da Web e para dispositivos móveis, recomendamos que você use a integração dos nossos parceiros da Daily.
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.exportGOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECTexportGOOGLE_CLOUD_LOCATION=globalexportGOOGLE_GENAI_USE_VERTEXAI=True
fromgoogleimportgenaifromgoogle.genai.typesimport(Content,HttpOptions,LiveConnectConfig,Modality,Part)client=genai.Client(http_options=HttpOptions(api_version="v1beta1"))model_id="gemini-2.0-flash-live-preview-04-09"asyncwithclient.aio.live.connect(model=model_id,config=LiveConnectConfig(response_modalities=[Modality.TEXT]),)assession:text_input="Hello? Gemini, are you there?"print("> ",text_input,"\n")awaitsession.send_client_content(turns=Content(role="user",parts=[Part(text=text_input)]))response=[]asyncformessageinsession.receive():ifmessage.text:response.append(message.text)print("".join(response))# Example output:# > Hello? Gemini, are you there?# Yes, I'm here. What would you like to talk about?
Guia de integração
Nesta seção, descrevemos como integrar seu aplicativo à API Live.
Sessões
Uma conexão WebSocket estabelece uma sessão entre o cliente e o servidor do Gemini. Depois de iniciar uma nova conexão, o cliente pode trocar mensagens com o servidor para fazer o seguinte:
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.
Envie a configuração da sessão na primeira mensagem depois de estabelecer uma 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.
As mensagens são objetos formatados em JSON trocados pela conexão WebSocket.
Para enviar uma mensagem, o cliente envia um objeto JSON por uma conexão WebSocket aberta. O objeto JSON precisa ter exatamente um dos campos do seguinte conjunto de objetos:
A tabela a seguir descreve as mensagens que você pode enviar ao servidor.
Mensagem
Descrição
Caso de uso
BidiGenerateContentSetup
Configuração da sessão enviada na primeira mensagem.
Envie uma vez no início de uma nova sessão para configurar o modelo, as ferramentas e outros parâmetros.
BidiGenerateContentClientContent
Uma atualização incremental de conteúdo da conversa atual do cliente.
Enviar entrada de texto, estabelecer ou restaurar o contexto da sessão ou fornecer interações turno a turno.
BidiGenerateContentRealtimeInput
Entrada de áudio ou vídeo em tempo real.
Transmita dados de mídia contínua (como voz) para o modelo sem esperar que uma rodada seja concluída.
BidiGenerateContentToolResponse
Uma resposta a um ToolCallMessage do servidor.
Forneça os resultados ao modelo depois de executar uma chamada de função solicitada pelo servidor.
Receber mensagens
Para receber mensagens do Gemini, detecte o evento message do WebSocket. Em seguida, analise o resultado de acordo com as definições das mensagens do servidor compatíveis.
A tabela a seguir descreve as mensagens que você pode receber do servidor.
Mensagem
Descrição
Caso de uso
BidiGenerateContentSetupComplete
Confirma uma mensagem BidiGenerateContentSetup do cliente quando a configuração é concluída.
Confirma ao cliente que a configuração inicial foi recebida e que a sessão está pronta para interação.
BidiGenerateContentServerContent
Conteúdo gerado pelo modelo em resposta a uma mensagem do cliente.
Entrega a resposta do modelo (texto ou áudio) ao cliente.
BidiGenerateContentToolCall
Uma solicitação para o cliente executar chamadas de função e retornar as respostas.
Instrui o cliente a executar uma ferramenta ou função específica com os argumentos fornecidos.
BidiGenerateContentToolCallCancellation
Enviado quando uma chamada de função é cancelada porque o usuário interrompeu a saída do modelo.
Notifica o cliente para cancelar uma chamada de função pendente.
UsageMetadata
Um relatório do número de tokens usados pela sessão até o momento.
Monitore o consumo de tokens durante uma sessão.
GoAway
Um sinal de que a conexão atual será encerrada em breve.
Permite que o cliente se prepare para uma desconexão normal.
SessionResumptionUpdate
Um ponto de verificação de sessão que pode ser retomado.
Fornece um identificador ao cliente para retomar uma sessão desconectada.
BidiGenerateContentTranscription
Uma transcrição da fala do usuário ou do modelo.
Fornece uma versão de texto em tempo real do áudio falado pelo usuário ou pelo 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, é possível enviar interações
de turno a turno para representar a sequência exata de eventos. Para contextos mais longos, recomendamos que você forneça um único resumo da mensagem para liberar a janela de contexto para interações de acompanhamento.
Confira abaixo um exemplo de mensagem de contexto:
Embora as partes de conteúdo possam ser do tipo functionResponse, não use BidiGenerateContentClientContent para responder a chamadas de função do modelo. Em vez disso, use BidiGenerateContentToolResponse. Use BidiGenerateContentClientContent apenas 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
É necessário declarar todas as funções no início da sessão enviando definições de ferramentas como parte da mensagem BidiGenerateContentSetup.
Com um único comando, o modelo pode gerar várias chamadas de função e o
código para encadear as saídas. Esse código é executado em um ambiente de sandbox e gera mensagens BidiGenerateContentToolCall subsequentes. A execução é pausada até que os resultados de cada chamada de função
estejam disponíveis, o que fornece um processamento sequencial.
O cliente precisa responder com BidiGenerateContentToolResponse.
É 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. Só é possível definir esses parâmetros 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 que já foram 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.
Veja a seguir uma representação JSON de um objeto speechConfig:
Considere as seguintes limitações da API Live e do
Gemini 2.0 ao planejar seu projeto.
Autenticação do cliente
A API Live oferece apenas autenticação de servidor para servidor e não é recomendada para uso direto pelo cliente. Encaminhe a entrada do cliente
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.
VAD automático (padrão): o servidor detecta a fala do usuário.
Se o stream de áudio for pausado por mais de um segundo (por exemplo, quando o usuário silencia o microfone), um evento AudioStreamEnd será enviado para limpar o áudio em cache.
O cliente pode retomar o envio de dados de áudio a qualquer momento.
VAD manual: para usar esse modo, defina RealtimeInputConfig.AutomaticActivityDetection.disabled como true na mensagem de configuração.
O cliente é responsável por detectar a fala do usuário e enviar mensagens ActivityStart e ActivityEnd nos momentos adequados.
Um evento AudioStreamEnd não é enviado nessa configuração. Em vez disso, uma mensagem ActivityEnd marca qualquer interrupção do stream.
Outras limitações
Não há suporte para a inclusão manual de endpoints.
Entradas e saídas de áudio podem afetar 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
Uma atualização incremental da conversa atual entregue pelo cliente. Todo o conteúdo é anexado incondicionalmente ao histórico de conversas e usado como parte do comando para o modelo gerar conteúdo.
Uma mensagem interrompe qualquer geração de modelo em andamento.
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
bool
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 difere de ClientContentUpdate das seguintes 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 o RealtimeUpdate, 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 considerado como a entrada do usuário e não pode ser usado para preencher o histórico de conversas.
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.
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
Uma atualização incremental do servidor gerada pelo modelo em resposta às mensagens do cliente.
O conteúdo é gerado o mais rápido possível, não em tempo real. Os clientes podem armazenar o conteúdo em buffer e reproduzi-lo em tempo real.
Campos
turn_complete
bool
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 com content, indicando que content é o último da vez.
interrupted
bool
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
bool
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.
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.
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.
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.
Opcional. Uma lista de Tools que o modelo pode usar para gerar a próxima resposta.
Uma Tool é uma parte do código que permite ao sistema interagir com sistemas externos para realizar uma ação ou conjunto de ações fora do conhecimento e do escopo do modelo.
Apenas saída. A chamada de função a ser executada.
BidiGenerateContentToolCallCancellation
Uma notificação para o cliente de que um ToolCallMessage emitido anteriormente com os ids especificados não deve ser executado e precisa ser cancelado. Se houver efeitos colaterais nessas chamadas de função, os clientes poderão tentar desfazer esses efeitos. Essa mensagem aparece apenas quando os clientes interrompem as ações do servidor.
Campos
ids[]
string
Apenas saída. Os IDs das chamadas de função a serem canceladas.
BidiGenerateContentToolResponse
Uma resposta gerada pelo cliente a um ToolCall do servidor. Os objetos FunctionResponse individuais são correspondidos aos respectivos objetos FunctionCall pelo campo id.
Nas APIs unárias e de streaming do servidor GenerateContent, a chamada de função ocorre trocando partes Content. Nas APIs bidirecionais GenerateContent, a chamada de função ocorre nesse conjunto dedicado de mensagens.
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.
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.
Opcional. Determina a probabilidade de a fala detectada ter terminado.
prefix_padding_ms
int32
Opcional. A duração necessária da fala detectada antes do início da fala ser confirmado. Um valor menor torna a detecção do início da fala mais sensível e permite que falas mais curtas sejam reconhecidas. No entanto, um valor menor também aumenta a probabilidade de falsos positivos.
silence_duration_ms
int32
Opcional. A duração necessária do silêncio detectado (ou não fala) antes que o fim da fala seja confirmado. Um valor maior permite que as lacunas de fala sejam mais longas sem interromper a atividade do usuário, mas também aumenta a latência do modelo.
disabled
bool
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
int32
Número total de tokens consumidos pelo conteúdo armazenado em cache.
text_count
int32
Número de caracteres de texto.
image_count
int32
Número de imagens.
video_duration_seconds
int32
É a duração do vídeo em segundos.
audio_duration_seconds
int32
É a duração do áudio em segundos.
GoAway
Indica que o servidor não poderá atender o cliente em breve.
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
string
Novo identificador que representa um estado que pode ser retomado. Fica vazio se resumable=false.
resumable
bool
Verdadeiro se a sessão puder ser retomada neste ponto.
Em alguns momentos, talvez não seja possível retomar uma sessão. Nesse caso, o servidor envia uma atualização com new_handle e resumable=false vazios. Por exemplo, quando o modelo está executando chamadas de função ou gerando uma resposta. Retomar uma sessão nesse estado usando o token da sessão anterior resulta em perda de dados.
last_consumed_client_message_index
int64
O índice da última mensagem enviada pelo cliente que está incluída no estado representado por este SessionResumptionToken. Isso só é enviado quando SessionResumptionConfig.transparent está definido.
A presença desse índice permite que os usuários se reconectem de forma transparente e evitem perder partes da entrada de áudio ou vídeo em tempo real. Se um cliente quiser se desconectar temporariamente (por exemplo, depois de receber GoAway), ele poderá fazer isso sem perder o estado, armazenando em buffer as mensagens enviadas desde o último SessionResmumptionTokenUpdate. Esse campo permite limitar o buffer e evitar manter todas as solicitações na RAM.
Ele não é usado para "retomada para restaurar o estado" posteriormente, porque, nesses casos, provavelmente não são necessários frames parciais de áudio e vídeo.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-19 UTC."],[],[],null,[]]