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
  },
  "systemInstruction": string,
  "tools": [object]
}

API フィールドの詳細については、generationConfig をご覧ください。

メッセージを送信する

WebSocket 接続を介してメッセージを交換するには、クライアントはオープンな WebSocket 接続を介して JSON オブジェクトを送信する必要があります。JSON オブジェクトには、次のオブジェクト セットのフィールドを 1 つだけ含める必要があります。


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

サポートされているクライアント メッセージ

サポートされているクライアント メッセージについては、次の表をご覧ください。

メッセージ 説明
BidiGenerateContentSetup 最初のメッセージで送信されるセッション構成
BidiGenerateContentClientContent クライアントから送信された現在の会話コンテンツの増分更新
BidiGenerateContentRealtimeInput リアルタイムの音声、動画、テキスト入力
BidiGenerateContentToolResponse サーバーから受信した ToolCallMessage へのレスポンス

メッセージを受信する

Gemini からメッセージを受信するには、WebSocket の「message」イベントをリッスンし、サポートされているサーバー メッセージの定義に従って結果を解析します。

以下をご覧ください。

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 メッセージの他のフィールドが 1 つだけ含まれます。messageType 共用体は JSON で表現されないため、フィールドはメッセージの最上位に表示されます)。

メッセージとイベント

ActivityEnd

この型にはフィールドがありません。

ユーザー アクティビティの終了をマークします。

ActivityHandling

ユーザー アクティビティのさまざまな処理方法。

列挙型
ACTIVITY_HANDLING_UNSPECIFIED 指定しない場合、デフォルトの動作は START_OF_ACTIVITY_INTERRUPTS です。
START_OF_ACTIVITY_INTERRUPTS true の場合、アクティビティの開始によってモデルのレスポンスが中断されます(「割り込み」とも呼ばれます)。中断した時点で、モデルの現在のレスポンスは切り捨てられます。これはデフォルトの動作です。
NO_INTERRUPTION モデルのレスポンスが中断されることはありません。

ActivityStart

この型にはフィールドがありません。

ユーザー アクティビティの開始をマークします。

AudioTranscriptionConfig

この型にはフィールドがありません。

音声文字変換の構成。

AutomaticActivityDetection

アクティビティの自動検出を構成します。

フィールド
disabled

bool

省略可。有効にすると(デフォルト)、検出された音声入力とテキスト入力がアクティビティとしてカウントされます。無効になっている場合、クライアントはアクティビティ シグナルを送信する必要があります。

startOfSpeechSensitivity

StartSensitivity

省略可。音声が検出される可能性を決定します。

prefixPaddingMs

int32

省略可。発話の開始がコミットされる前に検出された発話の必要な時間。この値が小さいほど、発話の開始の検出感度が高くなり、短い発話も認識できるようになります。ただし、誤検出の可能性も高くなります。

endOfSpeechSensitivity

EndSensitivity

省略可。検出された音声が終了する可能性を判断します。

silenceDurationMs

int32

省略可。発話終了が確定するまでに検出された発話以外の音声(無音など)の必要な時間。この値を大きくすると、ユーザーの操作を中断することなく音声のギャップを長くすることができますが、モデルのレイテンシが増加します。

BidiGenerateContentClientContent

クライアントから送信された現在の会話の増分更新。ここに示されたコンテンツはすべて、無条件で会話履歴に追加され、コンテンツを生成するためのモデルへのプロンプトの一部として使用されます。

次のメッセージが表示されると、現在のモデルの生成が中断されます。

フィールド
turns[]

Content

省略可。モデルとの現在の会話に追加されたコンテンツ。

シングルターン クエリの場合、単一のインスタンスです。マルチターン クエリの場合、これは会話履歴と最新のリクエストを含む繰り返しフィールドです。

turnComplete

bool

省略可。true の場合、現在蓄積されているプロンプトからサーバーのコンテンツ生成が開始することを示します。true ではない場合、サーバーは、メッセージが追加されるのを待って生成を開始します。

BidiGenerateContentRealtimeInput

リアルタイムで送信されるユーザー入力。

さまざまなモダリティ(音声、動画、テキスト)は同時ストリームとして処理されます。これらのストリーム間の順序は保証されません。

BidiGenerateContentClientContent とはいくつかの点で異なります。

  • モデルの生成を中断せずに連続で送信できます。
  • BidiGenerateContentClientContentBidiGenerateContentRealtimeInput にまたがってインターリーブされたデータを混在させる必要がある場合、サーバーは最良のレスポンスになるよう最適化を試みます(ただし、保証はありません)。
  • ターンの終了は明示的に指定されず、ユーザー アクティビティ(音声の終了など)から導き出されます。
  • ターンが終了する前でも、データは増分処理され、モデルからのレスポンスを迅速に開始できるように最適化されます。
フィールド
mediaChunks[]

Blob

省略可。メディア入力用のインライン バイトデータ。複数の mediaChunks はサポートされていません。最初の mediaChunks 以外は無視されます。

非推奨: 代わりに、audiovideotext のいずれかを使用してください。

audio

Blob

省略可。これらがリアルタイム音声入力ストリームを形成します。

video

Blob

省略可。これらがリアルタイム動画入力ストリームを形成します。

activityStart

ActivityStart

省略可。ユーザー アクティビティの開始をマークします。このデータは、アクティビティの自動検出(サーバーサイド)が無効になっている場合にのみ送信できます。

activityEnd

ActivityEnd

省略可。ユーザー アクティビティの終了をマークします。このデータは、アクティビティの自動検出(サーバーサイド)が無効になっている場合にのみ送信できます。

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

出力専用。入力音声の文字起こし。文字起こしは他のサーバー メッセージとは独立して送信され、順序は保証されません。

outputTranscription

BidiGenerateContentTranscription

出力専用。出力音声文字変換。文字起こしは他のサーバー メッセージとは独立して送信され、順序は保証されません(特に serverContent とこの outputTranscription の間では保証されません)。

urlContextMetadata

UrlContextMetadata

modelTurn

Content

出力専用。ユーザーとの現在の会話の一部としてモデルが生成したコンテンツ。

BidiGenerateContentServerMessage

BidiGenerateContent 呼び出しのレスポンス メッセージ。

フィールド
usageMetadata

UsageMetadata

出力専用。レスポンスに関する使用状況メタデータ。

共用体フィールド messageType。メッセージのタイプ。messageType は次のいずれかになります。
setupComplete

BidiGenerateContentSetupComplete

出力専用。セットアップが完了したときに、クライアントからの BidiGenerateContentSetup メッセージに応答して送信されます。

serverContent

BidiGenerateContentServerContent

出力専用。クライアント メッセージに応答してモデルが生成したコンテンツ。

toolCall

BidiGenerateContentToolCall

出力専用。クライアントに functionCalls を実行して、一致する id を含むレスポンスを返すよう求めるリクエスト。

toolCallCancellation

BidiGenerateContentToolCallCancellation

出力専用。指定の id を含む、以前発行された ToolCallMessage をキャンセルする必要があることをクライアントに伝える通知。

goAway

GoAway

出力専用。サーバーがまもなく切断されることを示す通知。

sessionResumptionUpdate

SessionResumptionUpdate

出力専用。セッション再開状態の更新。

BidiGenerateContentSetup

最初の BidiGenerateContentClientMessage で(最初の BidiGenerateContentClientMessage でのみ)送信されるメッセージ。ストリーミング RPC の期間に適用される構成が含まれています。

クライアントは、BidiGenerateContentSetupComplete メッセージを待って、追加メッセージを送信する必要があります。

フィールド
model

string

必須。モデルのリソース名。これは、使用するモデルの ID として機能します。

形式: models/{model}

generationConfig

GenerationConfig

省略可。生成の構成。

次のフィールドはサポートされていません。

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

Content

省略可。ユーザーがモデルに提供するシステム指示。

注: パートにはテキストのみを使用します。各パートのコンテンツは別の段落にします。

tools[]

Tool

省略可。モデルが次のレスポンスの生成に使用できる Tools のリスト。

Tool は、システムが外部システムと対話して、モデルの知識や範囲外のアクションまたは一連のアクションを実行できるようにするコードです。

realtimeInputConfig

RealtimeInputConfig

省略可。リアルタイム入力の処理を構成します。

sessionResumption

SessionResumptionConfig

省略可。セッション再開メカニズムを構成します。

含まれている場合、サーバーは SessionResumptionUpdate メッセージを送信します。

contextWindowCompression

ContextWindowCompressionConfig

省略可。コンテキスト ウィンドウの圧縮メカニズムを構成します。

含まれている場合、サーバーは構成された長さを超えると、コンテキストのサイズを自動的に縮小します。

inputAudioTranscription

AudioTranscriptionConfig

省略可。設定されている場合、音声入力の文字起こしを有効にします。音声文字変換は、構成されている場合、入力音声の言語と一致します。

outputAudioTranscription

AudioTranscriptionConfig

省略可。設定されている場合、モデルの音声出力の文字起こしを有効にします。音声文字変換は、構成されている場合、出力音声に指定された言語コードに従って行われます。

proactivity

ProactivityConfig

省略可。モデルのプロアクティビティを構成します。

これにより、モデルは入力にプロアクティブに応答し、無関係な入力を無視できます。

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

音声文字変換テキスト。

ContextWindowCompressionConfig

コンテキスト ウィンドウの圧縮を有効にします。これは、モデルのコンテキスト ウィンドウが指定された長さを超えないように管理するメカニズムです。

フィールド
共用体フィールド compressionMechanism。使用されるコンテキスト ウィンドウの圧縮メカニズム。compressionMechanism は次のいずれかになります。
slidingWindow

SlidingWindow

スライディング ウィンドウ メカニズム。

triggerTokens

int64

コンテキスト ウィンドウの圧縮をトリガーするために必要なトークン数(ターンを実行する前)。

これは、コンテキスト ウィンドウが短いほどモデルのレスポンスが速くなるため、品質とレイテンシのバランスを取るために使用できます。ただし、圧縮オペレーションは一時的なレイテンシの増加を引き起こすため、頻繁にトリガーしないでください。

設定しない場合、デフォルトはモデルのコンテキスト ウィンドウの上限の 80% です。これにより、次のユーザー リクエスト/モデル レスポンス用に 20% が残ります。

EndSensitivity

音声の終了を検出する方法を決定します。

列挙型
END_SENSITIVITY_UNSPECIFIED デフォルトは END_SENSITIVITY_HIGH です。
END_SENSITIVITY_HIGH 自動検出では、音声が終了する頻度が高くなります。
END_SENSITIVITY_LOW 自動検出では、音声が終了する頻度が少なくなります。

GoAway

サーバーがまもなく切断されることを示す通知。

フィールド
timeLeft

Duration

接続が ABORTED として終了するまでの残り時間。

この期間は、モデル固有の最小値を下回ることはありません。この最小値は、モデルのレート制限とともに指定されます。

ProactivityConfig

プロアクティブ機能の設定。

フィールド
proactiveAudio

bool

省略可。有効にすると、モデルは最後のプロンプトへの応答を拒否できます。たとえば、これにより、モデルはコンテキスト外の音声は無視し、ユーザーがまだリクエストを行っていない場合は無音のままにできます。

RealtimeInputConfig

BidiGenerateContent でリアルタイム入力の動作を構成します。

フィールド
automaticActivityDetection

AutomaticActivityDetection

省略可。設定されていない場合、デフォルトでアクティビティの自動検出が有効になります。自動音声検出が無効になっている場合、クライアントはアクティビティ シグナルを送信する必要があります。

activityHandling

ActivityHandling

省略可。アクティビティの効果を定義します。

turnCoverage

TurnCoverage

省略可。ユーザーのターンに含まれる入力を定義します。

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

保持するトークンの目標数。デフォルト値は trigger_tokens/2 です。

コンテキスト ウィンドウの一部を破棄すると、一時的にレイテンシが増加するため、この値は頻繁な圧縮オペレーションを回避するように調整する必要があります。

StartSensitivity

発話の開始を検出する方法を決定します。

列挙型
START_SENSITIVITY_UNSPECIFIED デフォルトは START_SENSITIVITY_HIGH です。
START_SENSITIVITY_HIGH 自動検出では、音声の開始がより頻繁に検出されます。
START_SENSITIVITY_LOW 自動検出では、音声の開始が検出される頻度が低くなります。

TurnCoverage

ユーザーのターンに含める入力に関するオプション。

列挙型
TURN_COVERAGE_UNSPECIFIED 指定しない場合、デフォルトの動作は TURN_INCLUDES_ONLY_ACTIVITY です。
TURN_INCLUDES_ONLY_ACTIVITY ユーザーのターンには、前回のターン以降のアクティビティのみが含まれ、非アクティビティ(音声ストリームの無音など)は除外されます。これはデフォルトの動作です。
TURN_INCLUDES_ALL_INPUT ユーザーのターンには、前回のターン以降のすべてのリアルタイム入力(音声ストリームの無音など、操作がない状態を含む)が含まれます。

UrlContextMetadata

URL コンテキスト取得ツールに関連するメタデータ。

フィールド
urlMetadata[]

UrlMetadata

URL コンテキストのリスト。

UsageMetadata

レスポンスに関する使用状況メタデータ。

フィールド
promptTokenCount

int32

出力専用。プロンプト内のトークン数。cachedContent が設定されている場合でも、これは有効なプロンプトの合計サイズであり、キャッシュに保存されたコンテンツのトークン数も含まれます。

cachedContentTokenCount

int32

プロンプトのキャッシュに保存された部分(キャッシュに保存されたコンテンツ)のトークン数

responseTokenCount

int32

出力専用。生成されたすべてのレスポンス候補のトークンの合計数。

toolUsePromptTokenCount

int32

出力専用。ツール使用プロンプト内のトークン数。

thoughtsTokenCount

int32

出力専用。思考モデルの思考トークンの数。

totalTokenCount

int32

出力専用。生成リクエストのトークンの合計数(プロンプト + レスポンス候補)。

promptTokensDetails[]

ModalityTokenCount

出力専用。リクエスト入力で処理されたモダリティのリスト。

cacheTokensDetails[]

ModalityTokenCount

出力専用。リクエスト入力内のキャッシュに保存されたコンテンツのモダリティのリスト。

responseTokensDetails[]

ModalityTokenCount

出力専用。レスポンスで返されたモダリティのリスト。

toolUsePromptTokensDetails[]

ModalityTokenCount

出力専用。ツール使用リクエストの入力に対して処理されたモダリティのリスト。

エフェメラル認証トークン

エフェメラル認証トークンは AuthTokenService.CreateToken を呼び出すことで取得でき、GenerativeService.BidiGenerateContentConstrained で使用できます。トークンを access_token クエリ パラメータで渡すか、HTTP Authorization ヘッダーで「Token」を接頭辞として付加して渡します。

CreateAuthTokenRequest

エフェメラル認証トークンを作成します。

フィールド
authToken

AuthToken

必須。作成するトークン。

AuthToken

一時的な認証トークンを作成するリクエスト。

フィールド
name

string

出力専用。ID。トークン自体。

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

省略可。入力専用。変更不可。トークンを使用できる回数。この値が 0 の場合、上限は適用されません。Live API セッションの再開は使用回数にカウントされません。指定しない場合、デフォルトは 1 です。

一般的なタイプに関する詳細

よく使用される API リソースタイプ BlobContentFunctionCallFunctionResponseGenerationConfigGroundingMetadataModalityTokenCountTool について詳しくは、コンテンツの生成をご覧ください。