Live API - WebSockets API reference

Live API 是一种使用 WebSockets 的有状态 API。 在本部分中,您将找到有关 WebSockets API 的更多详细信息。

会话

WebSocket 连接会在客户端与 Gemini 服务器之间建立会话。客户端发起新连接后,会话可以与服务器交换消息,以执行以下操作:

  • 向 Gemini 服务器发送文本、音频或视频。
  • 接收来自 Gemini 服务器的音频、文本或函数调用请求。

WebSocket 连接

如需开始会话,请连接到以下 WebSocket 端点:

wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent

会话配置

建立 WebSocket 连接后发送的初始消息会设置会话配置,其中包括模型、生成参数、系统指令和工具。

连接处于打开状态时,您无法更新配置。不过,当通过会话恢复机制暂停和恢复时,您可以更改配置参数(模型除外)。

请参阅以下示例配置。请注意,SDK 中的名称大小写可能有所不同。您可以点击此处查找 Python SDK 配置选项。


{
  "model": string,
  "generationConfig": {
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "temperature": number,
    "topP": number,
    "topK": integer,
    "presencePenalty": number,
    "frequencyPenalty": number,
    "responseModalities": [string],
    "speechConfig": object,
    "mediaResolution": object,
    "translationConfig": object
  },
  "systemInstruction": string,
  "tools": [object]
}

如需详细了解该 API 字段,请参阅 generationConfig。

发送消息

如需通过 WebSocket 连接交换消息,客户端必须通过打开的 WebSocket 连接发送 JSON 对象。JSON 对象必须恰好具有以下对象集中的其中一个字段:


{
  "setup": BidiGenerateContentSetup,
  "clientContent": BidiGenerateContentClientContent,
  "realtimeInput": BidiGenerateContentRealtimeInput,
  "toolResponse": BidiGenerateContentToolResponse
}

支持的客户端消息

请参阅下表中的支持的客户端消息:

消息 说明
BidiGenerateContentSetup 要在第一条消息中发送的会话配置
BidiGenerateContentClientContent 从客户端传送的当前对话的增量内容更新
BidiGenerateContentRealtimeInput 实时音频、视频或文本输入
BidiGenerateContentToolResponse 对从服务器收到的 ToolCallMessage 的响应

接收消息

如需接收来自 Gemini 的消息,请监听 WebSocket“消息”事件,然后根据支持的服务器消息的定义解析结果。

请参阅以下内容:

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)

服务器消息可能具有 usageMetadata 字段,但除此之外,还会包含 BidiGenerateContentServerMessage 消息中的其他字段,且恰好包含一个。(messageType 并集未在 JSON 中表示,因此该字段将显示在消息的顶层。)

消息和事件

ActivityEnd

此类型没有字段。

标记用户活动的结束。

ActivityHandling

处理用户活动的不同方式。

枚举
ACTIVITY_HANDLING_UNSPECIFIED 如果未指定,则默认行为为 START_OF_ACTIVITY_INTERRUPTS。
START_OF_ACTIVITY_INTERRUPTS 如果为 true,则活动的启动会中断模型的响应(也称为“打断”)。模型当前的回答将在中断时被截断。这是默认行为。
NO_INTERRUPTION 模型的回答不会中断。

ActivityStart

此类型没有字段。

标记用户活动的开始。

AudioTranscriptionConfig

音频转写配置。

字段
languageCodes[]

string

可选。提供音频中语言相关提示的 BCP-47 语言代码。如果省略或为空,则默认为自动检测语言。

customVocabulary[]

string

可选。自定义词汇短语列表,用于引导语音识别模型识别特定术语(商品名称、专有名词、行业术语)。

wordTimestamp

bool

可选。配置字词级时间戳生成。

diarization

bool

可选。配置讲话人区分。

mode

Mode

可选。配置转写模式。支持的值:VERBATIM、SMART。如果未指定,则默认为 VERBATIM 转写。在 SMART 模式下,模型会执行以下操作:文本顺滑(消除填充词、重复和错误开头)、进行轻微的语法清理、自动设置格式(段落、项目符号、编号列表)以及进行少量用户编辑(内嵌自我更正)。时间戳和说话人分离与模式 SMART 不兼容。

模式

转写模式。

枚举
MODE_UNSPECIFIED 未指定转写模式。
VERBATIM 逐字转写模式。
SMART 智能转写模式。

AutomaticActivityDetection

配置活动自动检测。

字段
disabled

bool

可选。如果启用(默认),检测到的语音和文本输入将计为活动。如果停用,客户端必须发送活动信号。

startOfSpeechSensitivity

StartSensitivity

可选。确定检测到语音的可能性。

prefixPaddingMs

int32

可选。在提交语音开始之前检测到的所需语音时长。此值越低,语音开始检测的灵敏度越高,可识别的语音越短。但是,这也会增加出现假正例的概率。

endOfSpeechSensitivity

EndSensitivity

可选。确定检测到的语音结束的可能性。

silenceDurationMs

int32

可选。在提交语音结束之前检测到的非语音(例如静音)的所需时长。此值越大,语音间断时间越长,而不会中断用户活动,但会增加模型的延迟时间。

BidiGenerateContentClientContent

从客户端传送的当前对话的增量更新。此处的所有内容都会无条件附加到对话历史记录中,并用作提示的一部分,以供模型生成内容。

此处的消息会中断当前的任何模型生成。

字段
turns[]

Content

可选。附加到与模型当前对话的内容。

对于单轮查询,这是单个实例。对于多轮查询,这是包含对话历史记录和最新请求的重复字段。

turnComplete

bool

可选。如果为 true,则表示服务器内容生成应从当前累积的提示开始。否则,服务器会等待更多消息,然后再开始生成。

BidiGenerateContentRealtimeInput

实时发送的用户输入。

不同的模态(音频、视频和文本)被视为并发流进行处理。无法保证这些数据流之间的顺序。

这与 BidiGenerateContentClientContent 有以下几点不同:

  • 可以连续发送,不会中断模型生成。
  • 如果需要混合使用交织分布在 BidiGenerateContentClientContent 和 BidiGenerateContentRealtimeInput 中的数据,服务器会尝试优化以获得最佳回答,但无法保证。
  • 回合结束未明确指定,而是从用户活动(例如,语音结束)中推导得出。
  • 即使在回合结束之前,系统也会以增量方式处理数据,以优化模型快速开始生成回答。
字段
mediaChunks[]

Blob

可选。媒体输入的内嵌字节数据。不支持多个 mediaChunks,系统会忽略第一个以外的所有。

已弃用:请改用 audio、video 或 text。

audio

Blob

可选。这些数据构成了实时音频输入流。

video

Blob

可选。这些帧构成了实时视频输入流。

activityStart

ActivityStart

可选。标记用户活动的开始。只有在停用自动(即服务器端)活动检测时,才能发送此事件。

activityEnd

ActivityEnd

可选。标记用户活动的结束。只有在停用自动(即服务器端)活动检测时,才能发送此事件。

mediaResolution

MediaResolution

可选。要使用的媒体分辨率。如果未指定,则使用 setup.generationConfig.mediaResolution;如果未提供设置,则使用默认值。

audioStreamEnd

bool

可选。表示音频串流已结束,例如,因为麦克风已关闭。

只有在启用自动活动检测(默认设置)时,才应发送此事件。

客户端可以通过发送语音消息重新打开流。

text

string

可选。这些内容构成了实时文本输入流。

BidiGenerateContentServerContent

模型响应客户端消息而生成的增量服务器更新。

内容会尽快生成,但不是实时生成。客户端可以选择缓冲并实时播放。

字段
generationComplete

bool

仅限输出。如果为 true,则表示模型已完成生成。

当模型在生成过程中被中断时,中断的回合中将不会出现“generation_complete”消息,而是会经历“interrupted > turn_complete”。

如果模型假设是实时播放,那么 generation_complete 和 turn_complete 之间会存在延迟,这是因为模型在等待播放完成。

turnComplete

bool

仅限输出。如果为 true,则表示模型已完成其回合。只有在收到其他客户端消息后,系统才会开始生成。注意:当启用播放状态报告时,仅当播放状态指示播放已完成时,才会发出此事件。系统会忽略同一代商品的未来播放状态。

interrupted

bool

仅限输出。如果为 true,则表示客户端消息已中断当前的模型生成。如果客户端正在实时播放内容,则这是一个很好的信号,表明应停止并清空当前播放队列。

groundingMetadata

GroundingMetadata

仅限输出。生成内容的接地元数据。

inputTranscription

BidiGenerateContentTranscription

仅限输出。输入音频转写。转写内容会独立于其他服务器消息发送,并且不保证顺序。

interimInputTranscription

BidiGenerateContentTranscription

仅限输出。在用户说话时更新的低延迟转写。此字段会经常更新。

outputTranscription

BidiGenerateContentTranscription

仅限输出。输出音频转写。这些转写内容是服务器生成输出的一部分。此轮对话的最后一次输出转写内容会在 generationComplete 或 interrupted 之前发送,而 或 之后会紧跟 turnComplete。转写内容与其他 modelTurn 输出之间没有确切的顺序保证,但服务器会尽量发送与相应音频输出相近的转写内容。

urlContextMetadata

UrlContextMetadata

waitingForInput

bool

仅限输出。如果为 true,则表示模型未生成内容,因为模型正在等待用户提供更多输入内容,例如,模型希望用户继续对话。

interactionStatus

InteractionStatus

仅限输出。直播会话的当前活动状态。始终与 turnComplete 一起发送。

modelTurn

Content

仅限输出。模型在与用户当前对话中生成的内容。

BidiGenerateContentServerMessage

针对 BidiGenerateContent 调用的响应消息。

字段
usageMetadata

UsageMetadata

仅限输出。有关回答的用量元数据。

voiceActivity

VoiceActivity

仅限输出。在音频流中检测到语音活动。

联合字段 messageType。消息的类型。messageType 只能是下列其中一项:
setupComplete

BidiGenerateContentSetupComplete

仅限输出。在设置完成后,发送以响应来自客户端的 BidiGenerateContentSetup 消息。

serverContent

BidiGenerateContentServerContent

仅限输出。模型响应客户端消息而生成的内容。

toolCall

BidiGenerateContentToolCall

仅限输出。请求客户端执行 functionCalls 并返回具有匹配 id 的响应。

toolCallCancellation

BidiGenerateContentToolCallCancellation

仅限输出。通知客户端,先前发出的具有指定 id 的 ToolCallMessage 应取消。

goAway

GoAway

仅限输出。服务器即将断开连接的通知。

sessionResumptionUpdate

SessionResumptionUpdate

仅限输出。更新会话恢复状态。

BidiGenerateContentSetup

要在第一个(也是唯一一个)BidiGenerateContentClientMessage 中发送的消息。包含将在整个流式 RPC 期间应用的配置。

客户端应先等待 BidiGenerateContentSetupComplete 消息,然后再发送任何其他消息。

字段
model

string

必需。模型的资源名称。用作要使用的模型的 ID。

格式:models/{model}

generationConfig

GenerationConfig

可选。生成配置。

不支持以下字段:

  • responseLogprobs
  • responseMimeType
  • logprobs
  • responseSchema
  • responseJsonSchema
  • stopSequence
  • skipResponseCache
  • routingConfig
  • audioTimestamp
systemInstruction

Content

可选。用户为模型提供的系统指令。

注意:各部分中只能使用文本,并且每个部分中的内容都将位于单独的段落中。

tools[]

Tool

可选。模型可能用于生成下一个回答的 Tools 列表。

Tool 是一段代码,可让系统与外部系统进行交互,以在模型知识和范围之外执行操作或一组操作。

realtimeInputConfig

RealtimeInputConfig

可选。配置实时输入的处理。

sessionResumption

SessionResumptionConfig

可选。配置会话恢复机制。

如果包含,服务器将发送 SessionResumptionUpdate 消息。

contextWindowCompression

ContextWindowCompressionConfig

可选。配置上下文窗口压缩机制。

如果包含此参数,当上下文超出配置的长度时,服务器会自动减小上下文的大小。

inputAudioTranscription

AudioTranscriptionConfig

可选。如果设置,则启用语音输入的转写。如果已配置,转写会与输入音频语言保持一致。

outputAudioTranscription

AudioTranscriptionConfig

可选。如果设置,则启用模型音频输出的转写。如果已配置,转写会与为输出音频指定的语言代码保持一致。

proactivity

ProactivityConfig

可选。配置模型的主动性。

这样一来,模型就可以主动响应输入内容,并忽略无关的输入内容。

historyConfig

HistoryConfig

可选。配置客户端与服务器之间的历史记录交换。

labels

map<string, string>

可选。请求的带有用户定义元数据的标签。

可选。标签必须遵循标准的统一 Cloud 标签要求:- 标签键必须以字母开头。- 标签键和值不得超过 63 个字符(Unicode 代码点),并且只能包含小写字母、数字字符、下划线和短划线。- 允许使用国际字符。

用法:- 来自汇总方的安全标识符:使用键 safety_identifier(例如 {"safety_identifier": "user_session_123"})

BidiGenerateContentSetupComplete

此类型没有字段。

发送以响应来自客户端的 BidiGenerateContentSetup 消息。

BidiGenerateContentToolCall

请求客户端执行 functionCalls 并返回具有匹配 id 的响应。

字段
functionCalls[]

FunctionCall

仅限输出。要执行的函数调用。

BidiGenerateContentToolCallCancellation

通知客户端,先前发出的具有指定 id 的 ToolCallMessage 不应执行,而应取消。如果这些工具调用存在副作用,客户端可能会尝试撤消这些工具调用。此消息仅在客户端中断服务器回合时出现。

字段
ids[]

string

仅限输出。要取消的工具调用的 ID。

BidiGenerateContentToolResponse

客户端针对从服务器收到的 ToolCall 生成的响应。各个 FunctionResponse 对象通过 id 字段与各自的 FunctionCall 对象匹配。

请注意,在一元和服务器流式 GenerateContent API 中,函数调用是通过交换 Content 部分实现的,而在双向 GenerateContent API 中,函数调用是通过这些专用消息集实现的。

字段
functionResponses[]

FunctionResponse

可选。对函数调用的响应。

BidiGenerateContentTranscription

音频(输入或输出)的转写内容。

字段
text

string

转写文本。

languageCode

string

转写的 BCP-47 语言代码。

startOffset

Duration

可选。转写相对于音频开头的起始时间偏移量。

endOffset

Duration

可选。转写结束时间相对于音频开始时间的偏移量。

ContextWindowCompressionConfig

启用上下文窗口压缩功能,该机制用于管理模型的上下文窗口,使其不超过给定的长度。

字段
联合字段 compressionMechanism。所用的上下文窗口压缩机制。compressionMechanism 只能是下列其中一项:
slidingWindow

SlidingWindow

滑动窗口机制。

triggerTokens

int64

触发上下文窗口压缩所需的 token 数(在运行对话轮次之前)。

这可用于平衡质量与延迟时间,因为较短的上下文窗口可能会加快模型响应速度。不过,任何压缩操作都会导致暂时性延迟增加,因此不应频繁触发。

如果未设置,则默认值为模型上下文窗口限制的 80%。这样一来,剩余 20% 的配额可用于下一个用户请求/模型响应。

EndSensitivity

确定如何检测语音结束。

枚举
END_SENSITIVITY_UNSPECIFIED 默认值为 END_SENSITIVITY_HIGH。
END_SENSITIVITY_HIGH 自动检测结束语音的频率较高。
END_SENSITIVITY_LOW 自动检测结束语音的频率较低。

GoAway

服务器即将断开连接的通知。

字段
timeLeft

Duration

连接在以 ABORTED 状态终止之前的剩余时间。

此时长永远不会低于特定于模型的最小值,该最小值将与模型的速率限制一起指定。

HistoryConfig

历史记录配置。

此消息包含在会话配置中,为 BidiGenerateContentSetup.historyConfig。配置历史消息的交换。

字段
initialHistoryInClientContent

bool

可选。如果为 true,则在发送 setupComplete 后,服务器将等待并首先处理 clientContent 消息,直到 turnComplete 为 true。此初始历史记录不会触发模型调用,并且可能会以角色 MODEL 结束。当 turnComplete 为 true 时,客户端可以通过 realtimeInput 开始实时对话。

InteractionStatus

直播会话的不同活动状态。此字段始终与 turnComplete 一起发送,用于指示服务器是否已完成所有处理。

枚举
INTERACTION_STATUS_UNSPECIFIED 未指定互动状态。
IN_PROGRESS 服务器仍在积极处理用户输入或运行后台推理。后续可能会有更多模型输出。
REQUIRES_ACTION

已弃用:请改用 IDLE。

IDLE 服务器已完成所有处理和后台推理。

ProactivityConfig

主动性功能的配置。

字段
proactiveAudio

bool

可选。如果启用,模型可以拒绝回复上一条提示。例如,这样一来,模型就可以忽略不合语境的语音,或者在用户尚未提出请求时保持静默。

RealtimeInputConfig

配置 BidiGenerateContent 中的实时输入行为。

字段
automaticActivityDetection

AutomaticActivityDetection

可选。如果未设置,则默认启用自动活动检测。如果自动语音检测已停用,客户端必须发送活动信号。

activityHandling

ActivityHandling

可选。定义活动的具体效果。

turnCoverage

TurnCoverage

可选。定义用户回合中包含哪些输入。

interimTranscriptTimestampEnabled

bool

可选。配置临时转写时间戳。

SessionResumptionConfig

会话恢复配置。

此消息包含在会话配置中,为 BidiGenerateContentSetup.sessionResumption。如果已配置,服务器将发送 SessionResumptionUpdate 消息。

字段
handle

string

之前会话的句柄。如果不存在,则创建新会话。

会话句柄来自之前连接中的 SessionResumptionUpdate.token 值。

SessionResumptionUpdate

更新会话恢复状态。

仅当设置了 BidiGenerateContentSetup.sessionResumption 时才发送。

字段
newHandle

string

表示可恢复状态的新句柄。如果 resumable=false,则为空。

resumable

bool

如果此时可以恢复当前会话,则为 true。

在练习的某些阶段,无法恢复练习。例如,当模型正在执行函数调用或生成内容时。在此类状态下恢复会话(使用之前的会话令牌)会导致一些数据丢失。在这些情况下,newHandle 将为空,而 resumable 将为 false。

SlidingWindow

SlidingWindow 方法通过舍弃上下文窗口开头的内容来运行。生成的上下文始终从 USER 角色回合的开头开始。系统指令和任何 BidiGenerateContentSetup.prefixTurns 将始终位于结果的开头。

字段
targetTokens

int64

要保留的目标 token 数量。默认值为 trigger_tokens/2。

舍弃部分上下文窗口会导致暂时性延迟增加,因此应校准此值,以避免频繁的压缩操作。

StartSensitivity

确定如何检测语音开始。

枚举
START_SENSITIVITY_UNSPECIFIED 默认值为 START_SENSITIVITY_HIGH。
START_SENSITIVITY_HIGH 自动检测功能会更频繁地检测语音的开始。
START_SENSITIVITY_LOW 自动检测功能检测语音开始的频率会降低。

TurnCoverage

有关用户回合中包含哪些输入的选项。

枚举
TURN_COVERAGE_UNSPECIFIED 如果未指定,系统会根据模型选择默认行为。例如,对于 Gemini 2.5,默认值为 TURN_INCLUDES_ONLY_ACTIVITY;对于 Gemini 3.1 及更高版本,默认值为 TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO。
TURN_INCLUDES_ONLY_ACTIVITY 包括自上一个回合以来的活动,不包括不活动状态(例如音频串流中的静音)。
TURN_INCLUDES_ALL_INPUT 包括自上一个回合以来的所有实时输入,包括不活动状态(例如音频串流中的静音)。
TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO 包括自上一个回合以来的音频活动和所有视频。启用自动活动检测功能后,音频活动是指语音,不包括静音。

TranslationConfig

翻译功能的配置。

字段
targetLanguageCode

string

必需。翻译的目标语言。支持的值为 BCP-47 语言代码(例如“en”“es”“fr”)。

echoTargetLanguage

bool

可选。如果为 true,则模型会在说出目标语言时生成音频,实际上就是鹦鹉学舌。如果为 false,我们将不会生成目标语言的音频。

UrlContextMetadata

与网址上下文检索工具相关的元数据。

字段
urlMetadata[]

UrlMetadata

网址上下文列表。

UsageMetadata

有关回答的用量元数据。

字段
promptTokenCount

int32

仅限输出。提示中的 token 数量。如果设置了 cachedContent,这仍然是有效提示的总大小,这意味着它包含缓存内容中的词元数。

cachedContentTokenCount

int32

提示的缓存部分(缓存内容)中的 token 数量

responseTokenCount

int32

仅限输出。所有生成的回答候选项中的 token 总数。

toolUsePromptTokenCount

int32

仅限输出。工具使用提示中的 token 数量。

thoughtsTokenCount

int32

仅限输出。思考模型的想法的 token 数量。

totalTokenCount

int32

仅限输出。生成请求(提示 + 回答候选)的总 token 数。

promptTokensDetails[]

ModalityTokenCount

仅限输出。请求输入中处理的模态列表。

cacheTokensDetails[]

ModalityTokenCount

仅限输出。请求输入中缓存内容的模态列表。

responseTokensDetails[]

ModalityTokenCount

仅限输出。响应中返回的模态列表。

toolUsePromptTokensDetails[]

ModalityTokenCount

仅限输出。针对工具使用请求输入处理的模态列表。

VoiceActivity

在音频流中检测到语音活动。

字段
type

Type

仅限输出。VAD(语音活动检测)信号的类型。

audioOffset

Duration

仅限输出。在音频时间中检测到的语音活动时间,相对于音频流的开始时间。

类型

VAD 信号的类型。

枚举
TYPE_UNSPECIFIED 默认值为 UNSPECIFIED。
ACTIVITY_START 句子开头信号。
ACTIVITY_END 句子结束信号。

临时身份验证令牌

可以通过调用 AuthTokenService.CreateToken 获取临时身份验证令牌,然后通过 GenerativeService.BidiGenerateContentConstrained 使用该令牌,方法是将令牌传递到 access_token 查询参数中,或传递到以“Token”为前缀的 HTTP Authorization 标头中。

CreateAuthTokenRequest

创建临时身份验证令牌。

字段
authToken

AuthToken

必需。要创建的令牌。

AuthToken

创建临时身份验证令牌的请求。

字段
name

string

仅限输出。标识符。令牌本身。

expireTime

Timestamp

可选。仅限输入。不可变。一个可选时间,在此时间之后,如果使用生成的令牌,系统将拒绝 BidiGenerateContent 会话中的消息。(Gemini 可能会在此时间后抢先关闭会话。)

如果未设置,则此值默认为未来 30 分钟。如果设置了此值,则该值必须小于未来 20 小时。

newSessionExpireTime

Timestamp

可选。仅限输入。不可变。使用此请求生成的令牌的新 Live API 会话将被拒绝的时间。

如果未设置,则默认为未来 60 秒。如果设置了此值,则该值必须小于未来 20 小时。

fieldMask

FieldMask

可选。仅限输入。不可变。如果 field_mask 为空,且不存在 bidiGenerateContentSetup,则有效的 BidiGenerateContentSetup 消息将从 Live API 连接中获取。

如果 field_mask 为空,且 bidiGenerateContentSetup 存在,则有效的 BidiGenerateContentSetup 消息完全取自此请求中的 bidiGenerateContentSetup。来自 Live API 连接的设置消息会被忽略。

如果 field_mask 不为空,则 bidiGenerateContentSetup 中的相应字段将覆盖 Live API 连接中设置消息中的字段。

联合字段 config。所得令牌的方法特定配置。config 只能是下列其中一项:
bidiGenerateContentSetup

BidiGenerateContentSetup

可选。仅限输入。不可变。特定于 BidiGenerateContent 的配置。

uses

int32

可选。仅限输入。不可变。相应令牌可使用的次数。如果此值为零,则不应用任何限制。恢复 Live API 会话不计为一次使用。如果未指定,则默认值为 1。

详细了解常见类型

如需详细了解常用的 API 资源类型 Blob、Content、FunctionCall、FunctionResponse、GenerationConfig、GroundingMetadata、ModalityTokenCount 和 Tool,请参阅生成内容。