Grok API

Grok Streaming API

View as Markdown

更新于:

Grok 流式输出可在生成过程中立即向用户显示答案,无需等待完整响应。Streaming API 通过 Server-Sent Events(SSE)传输文本和服务事件。

如果需要一个完整的响应对象,请使用 Messages API.

流式响应如何工作

HTTP 连接会保持打开,并按顺序发送事件,直到响应完成或客户端取消。

在请求正文中启用流式输出"stream": true
01

传输

在单个 HTTP 响应上使用 SSE,无需 WebSocket 握手。

02

数据

每个事件表示生命周期变化或一小段文本 delta。

03

结果

将 delta 追加到 UI,并从 completed 事件读取最终状态和 usage。

启动流式响应

curl -N https://api.llm-gate.tech/v1/responses \
  -H "Authorization: Bearer $GROK_API_DEV_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{
    "model": "grok-4.5",
    "input": "用两句话解释二分查找",
    "stream": true
  }'

事件类型

监听流时,客户端会收到不同类型的事件。下面列出了当前事件及其用途。

事件处理方式
response.created保存 response ID,并将请求标记为处理中。
response.output_item.added新增类型化 output,可能是文本、工具调用或其他项目。
response.content_part.added输出消息中开始了新的 content 部分。
response.output_text.delta按顺序把 delta 追加到可见答案。
response.output_text.done当前文本部分已结束。
response.completed提交最终答案并读取状态和 usage。
error停止渲染并显示安全的错误状态。

事件流示例

1
response.created
{"response":{"id":"resp_01abc","status":"in_progress"}}
2
response.output_text.delta
{"delta":"Binary"}
3
response.output_text.delta
{"delta":" search"}
4
response.completed
{"response":{"status":"completed","usage":{"input_tokens":18,"output_tokens":42,"total_tokens":60}}}

流式处理代码示例

import json
import os
import httpx

with httpx.stream(
    "POST",
    "https://api.llm-gate.tech/v1/responses",
    headers={
        "Authorization": f"Bearer {os.environ['GROK_API_DEV_KEY']}",
        "Accept": "text/event-stream",
    },
    json={
        "model": "grok-4.5",
        "input": "用两句话解释二分查找",
        "stream": True,
    },
    timeout=3600.0,
) as response:
    response.raise_for_status()
    for line in response.iter_lines():
        if not line.startswith("data:"):
            continue

        data = line.removeprefix("data:").strip()
        if not data or data == "[DONE]":
            continue

        event = json.loads(data)
        if event.get("type") == "response.output_text.delta":
            print(event["delta"], end="", flush=True)

错误处理

SSE 前的 HTTP 错误

响应状态不是 2xx 时,解析普通 JSON 错误正文。

连接后的 error 事件

收到 error 类型事件后,流可能停止。保留部分输出、标记为未完成并记录 response ID。

连接提前关闭

连接在 response.completed 前关闭时,应将答案视为未完成。重试会生成新答案,不要自动拼接到已收到的文本。

429 或临时 5xx

仅在尚未提交有效结果时,使用带 jitter 且次数受限的指数退避。