La API de Live es una API con estado que usa WebSockets. En esta sección, encontrarás detalles adicionales sobre la API de WebSockets.
Sesiones
Una conexión WebSocket establece una sesión entre el cliente y el servidor de Gemini. Después de que un cliente inicia una conexión nueva, la sesión puede intercambiar mensajes con el servidor para hacer lo siguiente:
- Envía texto, audio o video al servidor de Gemini.
- Recibe solicitudes de audio, texto o llamadas a funciones del servidor de Gemini.
Conexión de WebSocket
Para iniciar una sesión, conéctate a este extremo de WebSocket:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
Configuración de la sesión
El mensaje inicial que se envía después de establecer la conexión de WebSocket establece la configuración de la sesión, que incluye el modelo, los parámetros de generación, las instrucciones del sistema y las herramientas.
No puedes actualizar la configuración mientras la conexión esté abierta. Sin embargo, puedes cambiar los parámetros de configuración, excepto el modelo, cuando pausas y reanudas la sesión a través del mecanismo de reanudación de la sesión.
Consulta el siguiente ejemplo de configuración. Ten en cuenta que el uso de mayúsculas y minúsculas en los nombres de los SDK puede variar. Puedes consultar las opciones de configuración del SDK de Python aquí.
{
"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]
}
Para obtener más información sobre el campo de la API, consulta generationConfig.
Enviar mensajes
Para intercambiar mensajes a través de la conexión WebSocket, el cliente debe enviar un objeto JSON a través de una conexión WebSocket abierta. El objeto JSON debe tener exactamente uno de los campos del siguiente conjunto de objetos:
{
"setup": BidiGenerateContentSetup,
"clientContent": BidiGenerateContentClientContent,
"realtimeInput": BidiGenerateContentRealtimeInput,
"toolResponse": BidiGenerateContentToolResponse
}
Mensajes de cliente admitidos
Consulta los mensajes del cliente admitidos en la siguiente tabla:
| Mensaje | Descripción |
|---|---|
BidiGenerateContentSetup |
Es la configuración de la sesión que se enviará en el primer mensaje. |
BidiGenerateContentClientContent |
Actualización de contenido incremental de la conversación actual que se entrega desde el cliente |
BidiGenerateContentRealtimeInput |
Entrada de audio, video o texto en tiempo real |
BidiGenerateContentToolResponse |
Respuesta a un ToolCallMessage recibido del servidor |
Recibir mensajes
Para recibir mensajes de Gemini, escucha el evento "message" de WebSocket y, luego, analiza el resultado según la definición de los mensajes del servidor admitidos.
Consulta lo siguiente:
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)
Los mensajes del servidor pueden tener un campo usageMetadata, pero, de lo contrario, incluirán exactamente uno de los otros campos del mensaje BidiGenerateContentServerMessage. (La unión messageType no se expresa en JSON, por lo que el campo aparecerá en el nivel superior del mensaje).
Mensajes y eventos
ActivityEnd
Este tipo no tiene campos.
Marca el final de la actividad del usuario.
ActivityHandling
Las diferentes formas de controlar la actividad del usuario
| Enums | |
|---|---|
ACTIVITY_HANDLING_UNSPECIFIED |
Si no se especifica, el comportamiento predeterminado es START_OF_ACTIVITY_INTERRUPTS. |
START_OF_ACTIVITY_INTERRUPTS |
Si es verdadero, el inicio de la actividad interrumpirá la respuesta del modelo (también llamada "interrupción"). La respuesta actual del modelo se cortará en el momento de la interrupción. Este es el comportamiento predeterminado. |
NO_INTERRUPTION |
No se interrumpirá la respuesta del modelo. |
ActivityStart
Este tipo no tiene campos.
Marca el inicio de la actividad del usuario.
AudioTranscriptionConfig
Este tipo no tiene campos.
Es la configuración de la transcripción de audio.
AutomaticActivityDetection
Configura la detección automática de actividad.
| Campos | |
|---|---|
disabled |
Opcional. Si está habilitado (configuración predeterminada), la voz detectada y la entrada de texto se consideran actividad. Si está inhabilitado, el cliente debe enviar indicadores de actividad. |
startOfSpeechSensitivity |
Opcional. Determina la probabilidad de que se detecte el habla. |
prefixPaddingMs |
Opcional. Es la duración requerida del habla detectada antes de que se confirme el inicio del habla. Cuanto más bajo sea este valor, más sensible será la detección del inicio del habla y se podrá reconocer el habla más breve. Sin embargo, esto también aumenta la probabilidad de falsos positivos. |
endOfSpeechSensitivity |
Opcional. Determina la probabilidad de que haya finalizado el discurso detectado. |
silenceDurationMs |
Opcional. Es la duración requerida del audio sin voz detectado (p.ej., silencio) antes de que se confirme el final del discurso. Cuanto mayor sea este valor, más largos podrán ser los espacios de silencio sin interrumpir la actividad del usuario, pero esto aumentará la latencia del modelo. |
BidiGenerateContentClientContent
Es la actualización incremental de la conversación actual que se entrega desde el cliente. Todo el contenido que se incluye aquí se agrega de forma incondicional al historial de conversación y se usa como parte de la instrucción para que el modelo genere contenido.
Si escribes un mensaje aquí, se interrumpirá la generación del modelo actual.
| Campos | |
|---|---|
turns[] |
Opcional. Es el contenido que se agrega a la conversación actual con el modelo. Para consultas de un solo turno, esta es una instancia única. Para las consultas de varios turnos, este es un campo repetido que contiene el historial de conversaciones y la solicitud más reciente. |
turnComplete |
Opcional. Si es verdadero, indica que la generación de contenido del servidor debe comenzar con la instrucción acumulada actualmente. De lo contrario, el servidor espera mensajes adicionales antes de comenzar la generación. |
BidiGenerateContentRealtimeInput
Entrada del usuario que se envía en tiempo real.
Las diferentes modalidades (audio, video y texto) se controlan como transmisiones simultáneas. No se garantiza el orden entre estos flujos.
Se diferencia de BidiGenerateContentClientContent en los siguientes aspectos:
- Se puede enviar de forma continua sin interrumpir la generación del modelo.
- Si es necesario combinar datos intercalados en
BidiGenerateContentClientContentyBidiGenerateContentRealtimeInput, el servidor intentará optimizar la mejor respuesta, pero no hay garantías. - No se especifica explícitamente el final del turno, sino que se deriva de la actividad del usuario (por ejemplo, el final del discurso).
- Incluso antes de que finalice el turno, los datos se procesan de forma incremental para optimizar el inicio rápido de la respuesta del modelo.
| Campos | |
|---|---|
mediaChunks[] |
Opcional. Son los datos de bytes intercalados para la entrada de medios. No se admiten varios OBSOLETO: En su lugar, usa |
audio |
Opcional. Estos forman el flujo de entrada de audio en tiempo real. |
video |
Opcional. Estos forman el flujo de entrada de video en tiempo real. |
activityStart |
Opcional. Marca el inicio de la actividad del usuario. Solo se puede enviar si la detección automática de actividad (es decir, del servidor) está inhabilitada. |
activityEnd |
Opcional. Marca el final de la actividad del usuario. Solo se puede enviar si la detección automática de actividad (es decir, del servidor) está inhabilitada. |
audioStreamEnd |
Opcional. Indica que finalizó la transmisión de audio, p.ej., porque se apagó el micrófono. Solo se debe enviar cuando la detección automática de actividad está habilitada (que es la configuración predeterminada). El cliente puede reabrir la transmisión enviando un mensaje de audio. |
text |
Opcional. Estos forman el flujo de entrada de texto en tiempo real. |
BidiGenerateContentServerContent
Es la actualización incremental del servidor que genera el modelo en respuesta a los mensajes del cliente.
El contenido se genera lo más rápido posible, pero no en tiempo real. Los clientes pueden optar por almacenarlo en búfer y reproducirlo en tiempo real.
| Campos | |
|---|---|
generationComplete |
Solo salida. Si es verdadero, indica que el modelo terminó de generar contenido. Cuando se interrumpe el modelo mientras genera, no habrá ningún mensaje "generation_complete" en el turno interrumpido, sino que pasará por "interrupted > turn_complete". Cuando el modelo supone que la reproducción es en tiempo real, habrá una demora entre generation_complete y turn_complete causada por la espera del modelo a que finalice la reproducción. |
turnComplete |
Solo salida. Si es verdadero, indica que el modelo completó su turno. La generación solo comenzará en respuesta a mensajes adicionales del cliente. |
interrupted |
Solo salida. Si es verdadero, indica que un mensaje del cliente interrumpió la generación actual del modelo. Si el cliente reproduce el contenido en tiempo real, esta es una buena señal para detener y vaciar la cola de reproducción actual. |
groundingMetadata |
Solo salida. Son los metadatos de fundamentación del contenido generado. |
inputTranscription |
Solo salida. Es la transcripción del audio de entrada. La transcripción se envía de forma independiente de los otros mensajes del servidor y no hay un orden garantizado. |
outputTranscription |
Solo salida. Genera la transcripción de audio. La transcripción se envía de forma independiente de los otros mensajes del servidor y no hay un orden garantizado, en particular, no entre |
urlContextMetadata |
|
modelTurn |
Solo salida. Es el contenido que generó el modelo como parte de la conversación actual con el usuario. |
BidiGenerateContentServerMessage
Es el mensaje de respuesta para la llamada a BidiGenerateContent.
| Campos | |
|---|---|
usageMetadata |
Solo salida. Son los metadatos de uso sobre las respuestas. |
Campo de unión messageType. Es el tipo de mensaje. messageType puede ser solo uno de los parámetros siguientes: |
|
setupComplete |
Solo salida. Se envía en respuesta a un mensaje |
serverContent |
Solo salida. Es el contenido que genera el modelo en respuesta a los mensajes del cliente. |
toolCall |
Solo salida. Solicitud para que el cliente ejecute el |
toolCallCancellation |
Solo salida. Notificación para el cliente de que se debe cancelar un |
goAway |
Solo salida. Un aviso que indica que el servidor se desconectará pronto. |
sessionResumptionUpdate |
Solo salida. Es la actualización del estado de reanudación de la sesión. |
BidiGenerateContentSetup
Es el mensaje que se enviará en el primer BidiGenerateContentClientMessage (y solo en el primero). Contiene la configuración que se aplicará durante la RPC de transmisión.
Los clientes deben esperar un mensaje de BidiGenerateContentSetupComplete antes de enviar mensajes adicionales.
| Campos | |
|---|---|
model |
Obligatorio. Es el nombre del recurso del modelo. Este valor sirve como ID para que lo use el modelo. Formato: |
generationConfig |
Opcional. Es la configuración de generación. Los siguientes campos no son compatibles:
|
systemInstruction |
Opcional. Las instrucciones del sistema que proporcionó el usuario para el modelo. Nota: Solo se debe usar texto en las partes y el contenido en cada parte debe encontrarse en un párrafo separado. |
tools[] |
Opcional. Es una lista de Una |
realtimeInputConfig |
Opcional. Configura el procesamiento de la entrada en tiempo real. |
sessionResumption |
Opcional. Configura el mecanismo de reanudación de sesión. Si se incluye, el servidor enviará mensajes |
contextWindowCompression |
Opcional. Configura un mecanismo de compresión de la ventana de contexto. Si se incluye, el servidor reducirá automáticamente el tamaño del contexto cuando supere la longitud configurada. |
inputAudioTranscription |
Opcional. Si se configura, habilita la transcripción de la entrada de voz. La transcripción se alinea con el idioma del audio de entrada, si está configurado. |
outputAudioTranscription |
Opcional. Si se configura, habilita la transcripción de la salida de audio del modelo. Si se configura, la transcripción se alinea con el código de idioma especificado para el audio de salida. |
proactivity |
Opcional. Configura la proactividad del modelo. Esto permite que el modelo responda de forma proactiva a la entrada y que ignore la entrada irrelevante. |
BidiGenerateContentSetupComplete
Este tipo no tiene campos.
Se envía en respuesta a un mensaje BidiGenerateContentSetup del cliente.
BidiGenerateContentToolCall
Solicitud para que el cliente ejecute el functionCalls y muestre las respuestas con los ids coincidentes.
| Campos | |
|---|---|
functionCalls[] |
Solo salida. Es la llamada a la función que se ejecutará. |
BidiGenerateContentToolCallCancellation
Notificación para el cliente de que no se debería haber ejecutado un ToolCallMessage emitido previamente con los id especificados y que se debería cancelar. Si hubo efectos secundarios en esas llamadas a herramientas, los clientes pueden intentar deshacerlas. Este mensaje solo aparece en los casos en los que los clientes interrumpen los turnos del servidor.
| Campos | |
|---|---|
ids[] |
Solo salida. Son los IDs de las llamadas a herramientas que se cancelarán. |
BidiGenerateContentToolResponse
Es la respuesta generada por el cliente a un ToolCall recibido del servidor. Los objetos FunctionResponse individuales se correlacionan con los objetos FunctionCall respectivos por el campo id.
Ten en cuenta que, en las APIs de GenerateContent unary y de transmisión desde el servidor, la llamada a función se realiza intercambiando las partes Content, mientras que, en las APIs de GenerateContent bidireccionales, la llamada a función se realiza a través de este conjunto dedicado de mensajes.
| Campos | |
|---|---|
functionResponses[] |
Opcional. Es la respuesta a las llamadas a funciones. |
BidiGenerateContentTranscription
Transcripción de audio (entrada o salida).
| Campos | |
|---|---|
text |
Texto de la transcripción. |
ContextWindowCompressionConfig
Habilita la compresión de la ventana de contexto, un mecanismo para administrar la ventana de contexto del modelo de modo que no exceda una longitud determinada.
| Campos | |
|---|---|
Campo de unión compressionMechanism. Es el mecanismo de compresión de la ventana de contexto que se usa. compressionMechanism puede ser solo uno de los parámetros siguientes: |
|
slidingWindow |
Un mecanismo de ventana deslizante |
triggerTokens |
Cantidad de tokens (antes de ejecutar un turno) necesarios para activar la compresión de la ventana de contexto. Esto se puede usar para equilibrar la calidad con la latencia, ya que las ventanas de contexto más cortas pueden generar respuestas más rápidas del modelo. Sin embargo, cualquier operación de compresión provocará un aumento temporal de la latencia, por lo que no se deben activar con frecuencia. Si no se establece, el valor predeterminado es el 80% del límite de la ventana de contexto del modelo. Esto deja un 20% para la próxima solicitud del usuario o respuesta del modelo. |
EndSensitivity
Determina cómo se detecta el final del discurso.
| Enums | |
|---|---|
END_SENSITIVITY_UNSPECIFIED |
El valor predeterminado es END_SENSITIVITY_HIGH. |
END_SENSITIVITY_HIGH |
La detección automática finaliza el discurso con mayor frecuencia. |
END_SENSITIVITY_LOW |
La detección automática finaliza el discurso con menos frecuencia. |
GoAway
Un aviso que indica que el servidor se desconectará pronto.
| Campos | |
|---|---|
timeLeft |
Es el tiempo restante antes de que la conexión finalice como ABORTED. Esta duración nunca será inferior a un mínimo específico del modelo, que se especificará junto con los límites de frecuencia del modelo. |
ProactivityConfig
Es la configuración de las funciones de proactividad.
| Campos | |
|---|---|
proactiveAudio |
Opcional. Si está habilitado, el modelo puede rechazar la respuesta a la última instrucción. Por ejemplo, esto permite que el modelo ignore el habla fuera de contexto o que permanezca en silencio si el usuario aún no hizo una solicitud. |
RealtimeInputConfig
Configura el comportamiento de entrada en tiempo real en BidiGenerateContent.
| Campos | |
|---|---|
automaticActivityDetection |
Opcional. Si no se configura, la detección automática de actividad se habilita de forma predeterminada. Si la detección de voz automática está inhabilitada, el cliente debe enviar indicadores de actividad. |
activityHandling |
Opcional. Define qué efecto tiene la actividad. |
turnCoverage |
Opcional. Define qué entrada se incluye en el turno del usuario. |
SessionResumptionConfig
Es la configuración de la reanudación de sesión.
Este mensaje se incluye en la configuración de la sesión como BidiGenerateContentSetup.sessionResumption. Si se configura, el servidor enviará mensajes de SessionResumptionUpdate.
| Campos | |
|---|---|
handle |
Es el identificador de una sesión anterior. Si no está presente, se crea una sesión nueva. Los identificadores de sesión provienen de los valores de |
SessionResumptionUpdate
Es la actualización del estado de reanudación de la sesión.
Solo se envía si se configuró BidiGenerateContentSetup.sessionResumption.
| Campos | |
|---|---|
newHandle |
Es un nuevo identificador que representa un estado que se puede reanudar. Estará vacío si |
resumable |
Es verdadero si se puede reanudar la sesión actual en este punto. No se puede reanudar la sesión en algunos puntos. Por ejemplo, cuando el modelo ejecuta llamadas a funciones o genera contenido. Si se reanuda la sesión (con un token de sesión anterior) en ese estado, se perderán algunos datos. En estos casos, |
SlidingWindow
El método SlidingWindow descarta el contenido al principio de la ventana de contexto. El contexto resultante siempre comenzará al inicio de un turno de rol de USER. Las instrucciones del sistema y cualquier BidiGenerateContentSetup.prefixTurns siempre permanecerán al principio del resultado.
| Campos | |
|---|---|
targetTokens |
Es la cantidad objetivo de tokens que se deben conservar. El valor predeterminado es trigger_tokens/2. Descartar partes de la ventana de contexto provoca un aumento temporal de la latencia, por lo que este valor debe calibrarse para evitar operaciones de compresión frecuentes. |
StartSensitivity
Determina cómo se detecta el inicio del habla.
| Enums | |
|---|---|
START_SENSITIVITY_UNSPECIFIED |
El valor predeterminado es START_SENSITIVITY_HIGH. |
START_SENSITIVITY_HIGH |
La detección automática detectará el inicio del habla con mayor frecuencia. |
START_SENSITIVITY_LOW |
La detección automática detectará el inicio del habla con menor frecuencia. |
TurnCoverage
Son las opciones sobre qué entrada se incluye en el turno del usuario.
| Enums | |
|---|---|
TURN_COVERAGE_UNSPECIFIED |
Si no se especifica, el comportamiento predeterminado es TURN_INCLUDES_ONLY_ACTIVITY. |
TURN_INCLUDES_ONLY_ACTIVITY |
El turno de los usuarios solo incluye la actividad desde el último turno, sin incluir la inactividad (p.ej., silencio en la transmisión de audio). Este es el comportamiento predeterminado. |
TURN_INCLUDES_ALL_INPUT |
El turno del usuario incluye todas las entradas en tiempo real desde el último turno, incluida la inactividad (p.ej., silencio en la transmisión de audio). |
UrlContextMetadata
Son los metadatos relacionados con la herramienta de recuperación del contexto de la URL.
| Campos | |
|---|---|
urlMetadata[] |
Es la lista del contexto de URL. |
UsageMetadata
Son los metadatos de uso sobre las respuestas.
| Campos | |
|---|---|
promptTokenCount |
Solo salida. Cantidad de tokens en la instrucción. Cuando se establece |
cachedContentTokenCount |
Cantidad de tokens en la parte almacenada en caché de la instrucción (el contenido almacenado en caché) |
responseTokenCount |
Solo salida. Es la cantidad total de tokens en todos los candidatos de respuesta generados. |
toolUsePromptTokenCount |
Solo salida. Cantidad de tokens presentes en las instrucciones de uso de herramientas. |
thoughtsTokenCount |
Solo salida. Cantidad de tokens de pensamientos para los modelos de razonamiento. |
totalTokenCount |
Solo salida. Es el recuento total de tokens para la solicitud de generación (instrucción + candidatos de respuesta). |
promptTokensDetails[] |
Solo salida. Es la lista de modalidades que se procesaron en la entrada de la solicitud. |
cacheTokensDetails[] |
Solo salida. Es la lista de modalidades del contenido almacenado en caché en la entrada de la solicitud. |
responseTokensDetails[] |
Solo salida. Es la lista de modalidades que se devolvieron en la respuesta. |
toolUsePromptTokensDetails[] |
Solo salida. Lista de las modalidades que se procesaron para las entradas de la solicitud de uso de herramientas. |
Tokens de autenticación efímeros
Los tokens de autenticación efímeros se pueden obtener llamando a AuthTokenService.CreateToken y, luego, se pueden usar con GenerativeService.BidiGenerateContentConstrained. Para ello, se debe pasar el token en un parámetro de consulta access_token o en un encabezado HTTP Authorization con el prefijo "Token".
CreateAuthTokenRequest
Crea un token de autenticación efímero.
| Campos | |
|---|---|
authToken |
Obligatorio. Es el token que se creará. |
AuthToken
Es una solicitud para crear un token de autenticación efímero.
| Campos | |
|---|---|
name |
Solo salida. Es el identificador. Es el token en sí. |
expireTime |
Opcional. Solo entrada. Inmutable. Es un período opcional después del cual, cuando se usa el token resultante, se rechazarán los mensajes en las sesiones de BidiGenerateContent. (Gemini puede cerrar la sesión de forma preventiva después de este tiempo). Si no se configura, el valor predeterminado es 30 minutos en el futuro. Si se configura, este valor debe ser inferior a 20 horas en el futuro. |
newSessionExpireTime |
Opcional. Solo entrada. Inmutable. Es la fecha y hora después de las cuales se rechazarán las nuevas sesiones de la API de Live que usen el token resultante de esta solicitud. Si no se configura, el valor predeterminado es de 60 segundos en el futuro. Si se configura, este valor debe ser inferior a 20 horas en el futuro. |
fieldMask |
Opcional. Solo entrada. Inmutable. Si field_mask está vacío y Si field_mask está vacío y Si field_mask no está vacío, los campos correspondientes de |
Campo de unión config. Es la configuración específica del método para el token resultante. config puede ser solo uno de los parámetros siguientes: |
|
bidiGenerateContentSetup |
Opcional. Solo entrada. Inmutable. Es la configuración específica de |
uses |
Opcional. Solo entrada. Inmutable. Es la cantidad de veces que se puede usar el token. Si este valor es cero, no se aplica ningún límite. Reanudar una sesión de la API de Live no se considera un uso. Si no se especifica, el valor predeterminado es 1. |
Más información sobre los tipos comunes
Para obtener más información sobre los tipos de recursos de la API que se usan con frecuencia: Blob, Content, FunctionCall, FunctionResponse, GenerationConfig, GroundingMetadata, ModalityTokenCount y Tool, consulta Cómo generar contenido.