# Grok Streaming API

通过 Server-Sent Events（SSE）获取 Grok 流式响应，并在生成过程中向用户显示回答。

如果需要一个完整响应对象，请使用 [Messages API](https://grok-api.dev/zh/docs/messages).

## 流式响应如何工作

HTTP 连接保持打开并按顺序发送事件，直到响应完成。在请求正文中设置 `stream: true`。

```bash
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}'
```

## 事件类型

监听流时，客户端会收到生成生命周期事件。

| event | handling |
| --- | --- |
| response.created | 保存 response ID。 |
| response.output_item.added | 处理新的类型化 output。 |
| response.content_part.added | 处理新的 content 部分。 |
| response.output_text.delta | 按顺序追加文本。 |
| response.output_text.done | 结束当前文本部分。 |
| response.completed | 读取最终响应、状态和 usage。 |
| error | 停止输出并处理错误。 |

## JavaScript 示例

```javascript
const stream = await client.responses.create({
  model: "grok-4.5",
  input: "用两句话解释二分查找。",
  stream: true,
});

for await (const event of stream) {
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  }
  if (event.type === "response.completed") {
    console.log(event.response.usage);
  }
}
```

## 错误处理

| case | handling |
| --- | --- |
| SSE 前的 HTTP 错误 | 状态不是 2xx 时解析普通 JSON 错误正文。 |
| error 事件 | 保留部分输出、标记为未完成并保存 response ID。 |
| 连接提前关闭 | 未收到 response.completed 时将响应视为未完成。 |
| 429 或临时 5xx | 仅在尚未提交结果时使用带 jitter 的有限指数退避。 |
