串流互動

建立 Interaction 時,您可以設定 stream: true,使用伺服器傳送事件 (SSE) 逐步串流回應。

Python

from google import genai

client = genai.Client()

stream = client.interactions.create(
    model="gemini-3.5-flash",
    input="Count from 1 to 25.",
    stream=True,
)
for event in stream:
    if event.event_type == "step.delta":
        if event.delta.type == "text":
            print(event.delta.text, end="", flush=True)

JavaScript

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({});

const stream = await client.interactions.create({
    model: "gemini-3.5-flash",
    input: "Count from 1 to 25.",
    stream: true,
});
for await (const event of stream) {
    if (event.event_type === "step.delta") {
        if (event.delta.type === "text") {
            process.stdout.write(event.delta.text);
        }
    }
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  --no-buffer \
  -d '{
    "model": "gemini-3.5-flash",
    "input": "Count from 1 to 25.",
    "stream": true
  }'
event: interaction.created
data: {"interaction":{"id":"v1_...","status":"in_progress","object":"interaction","model":"gemini-3.5-flash"},"event_type":"interaction.created"}

event: interaction.status_update
data: {"interaction_id":"v1_...","status":"in_progress","event_type":"interaction.status_update"}

event: step.start
data: {"index":0,"step":{"type":"thought"},"event_type":"step.start"}

event: step.delta
data: {"index":0,"delta":{"signature":"...","type":"thought_signature"},"event_type":"step.delta"}

event: step.stop
data: {"index":0,"event_type":"step.stop"}

event: step.start
data: {"index":1,"step":{"type":"model_output"},"event_type":"step.start"}

event: step.delta
data: {"index":1,"delta":{"text":"1, 2, 3, 4, 5, 6, ","type":"text"},"event_type":"step.delta"}

event: step.delta
data: {"index":1,"delta":{"text":"7, 8, 9, 10, 11, 12, 13,","type":"text"},"event_type":"step.delta"}

...

event: step.stop
data: {"index":1,"event_type":"step.stop"}

event: interaction.completed
data: {"interaction":{"id":"v1_...","status":"completed","usage":{"total_tokens":346,"total_input_tokens":11,"input_tokens_by_modality":[{"modality":"text","tokens":11}],"total_cached_tokens":0,"total_output_tokens":90,"total_tool_use_tokens":0,"total_thought_tokens":245},"created":"2026-05-12T18:44:51Z","updated":"2026-05-12T18:44:51Z","service_tier":"standard","object":"interaction","model":"gemini-3.5-flash"},"event_type":"interaction.completed"}

event: done
data: [DONE]

事件類型

每個伺服器傳送的事件都包含名為 event_type 的事件和相關聯的 JSON 資料。Interactions API 使用對稱串流模型,所有內容 (文字、工具呼叫、思考) 都會透過一致的步驟式事件流動。

每個串流都會遵循下列事件流程:

  1. interaction.created:互動已建立,包含中繼資料 (ID、模型、狀態)。
  2. 一系列的步驟,每個步驟都包含:
    • step.start 事件,表示步驟類型 (例如 model_outputthoughtfunction_call)。
    • 一或多個 step.delta 事件,其中包含該步驟的增量資料。
    • step.stop 事件,將步驟標示為完成。
  3. 含有最終 usage 統計資料的 interaction.completed 事件。

設定 stream: false 時,API 會傳回含有 steps 陣列的單一 interaction 物件。steps 中的每個元素都是一個 step.startstep.delta(s) → step.stop 週期完整組裝的版本。

interaction.created

首次建立互動時傳送。包含互動 ID、模型和初始狀態。

event: interaction.created
data: {"interaction": {"id": "...", "model": "gemini-3.5-flash", "status": "in_progress", "object": "interaction"}, "event_type": "interaction.created"}

interaction.status_update

發出互動層級狀態轉換的信號。可能會顯示在步驟之間。

event: interaction.status_update
data: {"interaction_id": "...", "status": "in_progress", "event_type": "interaction.status_update"}

step.start

標示新步驟的開頭。包含步驟 typeindex。步驟類型會決定預期的 delta 類型,以及步驟在非串流回應中的顯示方式:

步驟類型 預期差異類型 說明
model_output textimageaudio 模型的最終回覆內容。
thought thought_signaturethought_summary 關聯思考推論。只有在啟用 thinking_summaries 時,才會顯示 summary
function_call arguments_delta 要求用戶端執行函式。將互動狀態設為 requires_action
伺服器端工具 依工具而異 API 執行的工具 (例如 google_search_callgoogle_search_resultcode_execution_callcode_execution_result)。

如需完整清單,請參閱 Interactions API 參考資料

event: step.start
data: {"index": 0, "step": {"type": "model_output"}, "event_type": "step.start"}

如果是函式呼叫,這個步驟會包含函式名稱、ID 和空白引數 {}

event: step.start
data: {"index": 0, "step": {"type": "function_call", "id":"un6k8t18", "name": "get_weather", "arguments":{}}, "event_type": "step.start"}

step.delta

目前步驟的增量資料。delta 物件包含 type 欄位,可決定形狀。

範例:

textmodel_output 步驟的增量文字權杖:

event: step.delta
data: {"index": 0, "delta": {"type": "text", "text": "Hello, my name is Phil"}, "event_type": "step.delta"}

event: step.delta
data: {"index": 0, "delta": {"type": "text", "text": ", and I live in Germany." }, "event_type": "step.delta"}

image來自 model_output 步驟的 Base64 編碼圖片資料:

event: step.delta
data: {"index": 0, "delta": {"type":