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 |
省略可。有効にすると(デフォルト)、検出された音声入力とテキスト入力がアクティビティとしてカウントされます。無効になっている場合、クライアントはアクティビティ シグナルを送信する必要があります。 |
startOfSpeechSensitivity |
省略可。音声が検出される可能性を決定します。 |
prefixPaddingMs |
省略可。発話の開始がコミットされる前に検出された発話の必要な時間。この値が小さいほど、発話の開始の検出感度が高くなり、短い発話も認識できるようになります。ただし、誤検出の可能性も高くなります。 |
endOfSpeechSensitivity |
省略可。検出された音声が終了する可能性を判断します。 |
silenceDurationMs |
省略可。発話終了が確定するまでに検出された発話以外の音声(無音など)の必要な時間。この値を大きくすると、ユーザーの操作を中断することなく音声のギャップを長くすることができますが、モデルのレイテンシが増加します。 |
BidiGenerateContentClientContent
クライアントから送信された現在の会話の増分更新。ここに示されたコンテンツはすべて、無条件で会話履歴に追加され、コンテンツを生成するためのモデルへのプロンプトの一部として使用されます。
次のメッセージが表示されると、現在のモデルの生成が中断されます。
| フィールド | |
|---|---|
turns[] |
省略可。モデルとの現在の会話に追加されたコンテンツ。 シングルターン クエリの場合、単一のインスタンスです。マルチターン クエリの場合、これは会話履歴と最新のリクエストを含む繰り返しフィールドです。 |
turnComplete |
省略可。true の場合、現在蓄積されているプロンプトからサーバーのコンテンツ生成が開始することを示します。true ではない場合、サーバーは、メッセージが追加されるのを待って生成を開始します。 |
BidiGenerateContentRealtimeInput
リアルタイムで送信されるユーザー入力。
さまざまなモダリティ(音声、動画、テキスト)は同時ストリームとして処理されます。これらのストリーム間の順序は保証されません。
BidiGenerateContentClientContent とはいくつかの点で異なります。
- モデルの生成を中断せずに連続で送信できます。
BidiGenerateContentClientContentとBidiGenerateContentRealtimeInputにまたがってインターリーブされたデータを混在させる必要がある場合、サーバーは最良のレスポンスになるよう最適化を試みます(ただし、保証はありません)。- ターンの終了は明示的に指定されず、ユーザー アクティビティ(音声の終了など)から導き出されます。
- ターンが終了する前でも、データは増分処理され、モデルからのレスポンスを迅速に開始できるように最適化されます。
| フィールド | |
|---|---|
mediaChunks[] |
省略可。メディア入力用のインライン バイトデータ。複数の 非推奨: 代わりに、 |
audio |
省略可。これらがリアルタイム音声入力ストリームを形成します。 |
video |
省略可。これらがリアルタイム動画入力ストリームを形成します。 |
activityStart |
省略可。ユーザー アクティビティの開始をマークします。このデータは、アクティビティの自動検出(サーバーサイド)が無効になっている場合にのみ送信できます。 |
activityEnd |
省略可。ユーザー アクティビティの終了をマークします。このデータは、アクティビティの自動検出(サーバーサイド)が無効になっている場合にのみ送信できます。 |
audioStreamEnd |
省略可。オーディオ ストリームが終了したことを示します(マイクがオフになったなど)。 このデータは、アクティビティの自動検出が有効になっている場合(デフォルト)にのみ送信する必要があります。 クライアントは音声メッセージを送信してストリームを再開できます。 |
text |
省略可。これらがリアルタイム テキスト入力ストリームを形成します。 |
BidiGenerateContentServerContent
クライアント メッセージに応答してモデルが生成するサーバーの増分更新。
コンテンツはリアルタイムではなく、できるだけ早く生成されます。クライアントは、コンテンツをバッファリングしてリアルタイムで再生することもできます。
| フィールド | |
|---|---|
generationComplete |
出力専用。true の場合、モデルの生成が完了していることを示します。 モデルの生成中に中断が発生した場合、中断されたターンに generation_complete メッセージは含まれません。interrupted > turn_complete の順に処理されます。 モデルがリアルタイム再生を想定している場合、モデルが再生の完了を待機しているため、generation_complete と turn_complete の間に遅延が発生します。 |
turnComplete |
出力専用。true の場合、モデルのターンが完了したことを示します。生成は、追加のクライアント メッセージに応答してのみ開始されます。 |
interrupted |
出力専用。true の場合、クライアント メッセージが現在のモデル生成を中断したことを示します。クライアントがリアルタイムでコンテンツを再生している場合、現在の再生キューを停止して空にする良いタイミングになります。 |
groundingMetadata |
出力専用。生成されたコンテンツのグラウンディング メタデータ。 |
inputTranscription |
出力専用。入力音声の文字起こし。文字起こしは他のサーバー メッセージとは独立して送信され、順序は保証されません。 |
outputTranscription |
出力専用。出力音声文字変換。文字起こしは他のサーバー メッセージとは独立して送信され、順序は保証されません(特に |
urlContextMetadata |
|
modelTurn |
出力専用。ユーザーとの現在の会話の一部としてモデルが生成したコンテンツ。 |
BidiGenerateContentServerMessage
BidiGenerateContent 呼び出しのレスポンス メッセージ。
| フィールド | |
|---|---|
usageMetadata |
出力専用。レスポンスに関する使用状況メタデータ。 |
共用体フィールド messageType。メッセージのタイプ。messageType は次のいずれかになります。 |
|
setupComplete |
出力専用。セットアップが完了したときに、クライアントからの |
serverContent |
出力専用。クライアント メッセージに応答してモデルが生成したコンテンツ。 |
toolCall |
出力専用。クライアントに |
toolCallCancellation |
出力専用。指定の |
goAway |
出力専用。サーバーがまもなく切断されることを示す通知。 |
sessionResumptionUpdate |
出力専用。セッション再開状態の更新。 |
BidiGenerateContentSetup
最初の BidiGenerateContentClientMessage で(最初の BidiGenerateContentClientMessage でのみ)送信されるメッセージ。ストリーミング RPC の期間に適用される構成が含まれています。
クライアントは、BidiGenerateContentSetupComplete メッセージを待って、追加メッセージを送信する必要があります。
| フィールド | |
|---|---|
model |
必須。モデルのリソース名。これは、使用するモデルの ID として機能します。 形式: |
generationConfig |
省略可。生成の構成。 次のフィールドはサポートされていません。
|
systemInstruction |
省略可。ユーザーがモデルに提供するシステム指示。 注: パートにはテキストのみを使用します。各パートのコンテンツは別の段落にします。 |
tools[] |
省略可。モデルが次のレスポンスの生成に使用できる
|
realtimeInputConfig |
省略可。リアルタイム入力の処理を構成します。 |
sessionResumption |
省略可。セッション再開メカニズムを構成します。 含まれている場合、サーバーは |
contextWindowCompression |
省略可。コンテキスト ウィンドウの圧縮メカニズムを構成します。 含まれている場合、サーバーは構成された長さを超えると、コンテキストのサイズを自動的に縮小します。 |
inputAudioTranscription |
省略可。設定されている場合、音声入力の文字起こしを有効にします。音声文字変換は、構成されている場合、入力音声の言語と一致します。 |
outputAudioTranscription |
省略可。設定されている場合、モデルの音声出力の文字起こしを有効にします。音声文字変換は、構成されている場合、出力音声に指定された言語コードに従って行われます。 |
proactivity |
省略可。モデルのプロアクティビティを構成します。 これにより、モデルは入力にプロアクティブに応答し、無関係な入力を無視できます。 |
BidiGenerateContentSetupComplete
この型にはフィールドがありません。
クライアントからの BidiGenerateContentSetup メッセージに応答して送信されます。
BidiGenerateContentToolCall
クライアントに functionCalls を実行して、一致する id を含むレスポンスを返すよう求めるリクエスト。
| フィールド | |
|---|---|
functionCalls[] |
出力専用。実行される関数呼び出し。 |
BidiGenerateContentToolCallCancellation
指定の id を含む、以前発行された ToolCallMessage を実行せずにキャンセルする必要があることをクライアントに伝える通知。これらのツール呼び出しに副作用があった場合、クライアントはツール呼び出しを取り消すことができます。このメッセージは、クライアントがサーバーのターンを中断した場合にのみ表示されます。
| フィールド | |
|---|---|
ids[] |
出力専用。キャンセルするツール呼び出しの ID。 |
BidiGenerateContentToolResponse
サーバーから受信した ToolCall に対してクライアントが生成するレスポンス。個々の FunctionResponse オブジェクトは、id フィールドでそれぞれの FunctionCall オブジェクトと照合されます。
単項およびとサーバー ストリーミングの GenerateContent API では、Content パートを交換することで関数呼び出しが実行されますが、双方向の GenerateContent API では、専用のメッセージセットを介して関数呼び出しが実行されます。
| フィールド | |
|---|---|
functionResponses[] |
省略可。関数呼び出しに対するレスポンス。 |
BidiGenerateContentTranscription
音声の文字起こし(入力または出力)。
| フィールド | |
|---|---|
text |
音声文字変換テキスト。 |
ContextWindowCompressionConfig
コンテキスト ウィンドウの圧縮を有効にします。これは、モデルのコンテキスト ウィンドウが指定された長さを超えないように管理するメカニズムです。
| フィールド | |
|---|---|
共用体フィールド compressionMechanism。使用されるコンテキスト ウィンドウの圧縮メカニズム。compressionMechanism は次のいずれかになります。 |
|
slidingWindow |
スライディング ウィンドウ メカニズム。 |
triggerTokens |
コンテキスト ウィンドウの圧縮をトリガーするために必要なトークン数(ターンを実行する前)。 これは、コンテキスト ウィンドウが短いほどモデルのレスポンスが速くなるため、品質とレイテンシのバランスを取るために使用できます。ただし、圧縮オペレーションは一時的なレイテンシの増加を引き起こすため、頻繁にトリガーしないでください。 設定しない場合、デフォルトはモデルのコンテキスト ウィンドウの上限の 80% です。これにより、次のユーザー リクエスト/モデル レスポンス用に 20% が残ります。 |
EndSensitivity
音声の終了を検出する方法を決定します。
| 列挙型 | |
|---|---|
END_SENSITIVITY_UNSPECIFIED |
デフォルトは END_SENSITIVITY_HIGH です。 |
END_SENSITIVITY_HIGH |
自動検出では、音声が終了する頻度が高くなります。 |
END_SENSITIVITY_LOW |
自動検出では、音声が終了する頻度が少なくなります。 |
GoAway
サーバーがまもなく切断されることを示す通知。
| フィールド | |
|---|---|
timeLeft |
接続が ABORTED として終了するまでの残り時間。 この期間は、モデル固有の最小値を下回ることはありません。この最小値は、モデルのレート制限とともに指定されます。 |
ProactivityConfig
プロアクティブ機能の設定。
| フィールド | |
|---|---|
proactiveAudio |
省略可。有効にすると、モデルは最後のプロンプトへの応答を拒否できます。たとえば、これにより、モデルはコンテキスト外の音声は無視し、ユーザーがまだリクエストを行っていない場合は無音のままにできます。 |
RealtimeInputConfig
BidiGenerateContent でリアルタイム入力の動作を構成します。
| フィールド | |
|---|---|
automaticActivityDetection |
省略可。設定されていない場合、デフォルトでアクティビティの自動検出が有効になります。自動音声検出が無効になっている場合、クライアントはアクティビティ シグナルを送信する必要があります。 |
activityHandling |
省略可。アクティビティの効果を定義します。 |
turnCoverage |
省略可。ユーザーのターンに含まれる入力を定義します。 |
SessionResumptionConfig
セッション再開の構成。
このメッセージは、セッション構成に BidiGenerateContentSetup.sessionResumption として含まれています。設定されている場合、サーバーは SessionResumptionUpdate メッセージを送信します。
| フィールド | |
|---|---|
handle |
以前のセッションのハンドル。存在しない場合は、新しいセッションが作成されます。 セッション ハンドルは、以前の接続の |
SessionResumptionUpdate
セッション再開状態の更新。
BidiGenerateContentSetup.sessionResumption が設定されている場合にのみ送信されます。
| フィールド | |
|---|---|
newHandle |
再開可能な状態を表す新しいハンドル。 |
resumable |
この時点で現在のセッションを再開できる場合は true。 セッションの途中で再開できない場合があります。たとえば、モデルが関数呼び出しを実行している場合や生成を行っている場合などです。このような状態でセッションを再開(以前のセッション トークンを使用)すると、データが失われる可能性があります。この場合、 |
SlidingWindow
SlidingWindow メソッドは、コンテキスト ウィンドウの先頭にあるコンテンツを破棄することで動作します。結果のコンテキストは、常に USER ロールのターンの開始から始まります。システム指示と BidiGenerateContentSetup.prefixTurns は常に結果の先頭に残ります。
| フィールド | |
|---|---|
targetTokens |
保持するトークンの目標数。デフォルト値は 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[] |
URL コンテキストのリスト。 |
UsageMetadata
レスポンスに関する使用状況メタデータ。
| フィールド | |
|---|---|
promptTokenCount |
出力専用。プロンプト内のトークン数。 |
cachedContentTokenCount |
プロンプトのキャッシュに保存された部分(キャッシュに保存されたコンテンツ)のトークン数 |
responseTokenCount |
出力専用。生成されたすべてのレスポンス候補のトークンの合計数。 |
toolUsePromptTokenCount |
出力専用。ツール使用プロンプト内のトークン数。 |
thoughtsTokenCount |
出力専用。思考モデルの思考トークンの数。 |
totalTokenCount |
出力専用。生成リクエストのトークンの合計数(プロンプト + レスポンス候補)。 |
promptTokensDetails[] |
出力専用。リクエスト入力で処理されたモダリティのリスト。 |
cacheTokensDetails[] |
出力専用。リクエスト入力内のキャッシュに保存されたコンテンツのモダリティのリスト。 |
responseTokensDetails[] |
出力専用。レスポンスで返されたモダリティのリスト。 |
toolUsePromptTokensDetails[] |
出力専用。ツール使用リクエストの入力に対して処理されたモダリティのリスト。 |
エフェメラル認証トークン
エフェメラル認証トークンは AuthTokenService.CreateToken を呼び出すことで取得でき、GenerativeService.BidiGenerateContentConstrained で使用できます。トークンを access_token クエリ パラメータで渡すか、HTTP Authorization ヘッダーで「Token」を接頭辞として付加して渡します。
CreateAuthTokenRequest
エフェメラル認証トークンを作成します。
| フィールド | |
|---|---|
authToken |
必須。作成するトークン。 |
AuthToken
一時的な認証トークンを作成するリクエスト。
| フィールド | |
|---|---|
name |
出力専用。ID。トークン自体。 |
expireTime |
省略可。入力専用。変更不可。結果のトークンを使用する際に、BidiGenerateContent セッションのメッセージが拒否されるまでのオプションの時間。(この時間を過ぎると、Gemini がセッションを事前に終了することがあります)。 設定しない場合、デフォルトで 30 分後になります。設定する場合、この値は 20 時間以内の将来の値にする必要があります。 |
newSessionExpireTime |
省略可。入力専用。変更不可。このリクエストの結果として得られたトークンを使用する新しい Live API セッションが拒否されるまでの時間。 設定しない場合、デフォルトは 60 秒後になります。設定する場合、この値は 20 時間以内の将来の値にする必要があります。 |
fieldMask |
省略可。入力専用。変更不可。field_mask が空で、 field_mask が空で、 field_mask が空でない場合、 |
共用体フィールド config。結果のトークンのメソッド固有の構成。config は次のいずれかになります。 |
|
bidiGenerateContentSetup |
省略可。入力専用。変更不可。 |
uses |
省略可。入力専用。変更不可。トークンを使用できる回数。この値が 0 の場合、上限は適用されません。Live API セッションの再開は使用回数にカウントされません。指定しない場合、デフォルトは 1 です。 |
一般的なタイプに関する詳細
よく使用される API リソースタイプ Blob、Content、FunctionCall、FunctionResponse、GenerationConfig、GroundingMetadata、ModalityTokenCount、Tool について詳しくは、コンテンツの生成をご覧ください。