OpenAI API 文档中文社区翻译 · 官网结构

指南

流式传输 API 响应

默认情况下,当你向 OpenAI API 发出请求时,我们会生成模型的完整输出,然后通过单个 HTTP 响应发送回来。在生成较长输出时,等待响应可能需要时间。流式响应允许你在模型继续生成完整响应的同时,开始打印或处理模型输出的开头部分。

机器翻译
当前显示中文译文;站内文档链接会转换为本站中文路径。核对官方原文 ↗

有关完整的文档索引,请参阅 llms.txt。通过附加 .md 到页面 URL,可获取文档页面的 Markdown 版本。

默认情况下,当你向 OpenAI API 发出请求时,我们会生成模型的完整输出,然后通过单个 HTTP 响应发送回来。在生成较长输出时,等待响应可能需要时间。流式响应允许你在模型继续生成完整响应的同时,开始打印或处理模型输出的开头部分。

本指南重点介绍通过stream=true基于服务器发送事件(SSE)的 HTTP 流式传输。有关通过 previous_response_id进行增量输入并支持持久 WebSocket 传输的信息,请参阅 Responses API WebSocket 模式.

启用流式传输

要开始流式响应,请设置 stream=True 在你的请求中发送到 Responses 端点:

import { OpenAI } from "openai";
const client = new OpenAI();

const stream = await client.responses.create({
  model: "gpt-5.6",
  input: [
    {
      role: "user",
      content: "Say 'double bubble bath' ten times fast.",
    },
  ],
  stream: true,
});

for await (const event of stream) {
  console.log(event);
}
from openai import OpenAI

client = OpenAI()

stream = client.responses.create(
    model="gpt-5.6",
    input=[
        {
            "role": "user",
            "content": "Say 'double bubble bath' ten times fast.",
        },
    ],
    stream=True,
)

for event in stream:
    print(event)
package main

import (
	"context"
	"fmt"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/responses"
)

func main() {
	client := openai.NewClient()
	stream := client.Responses.NewStreaming(context.Background(), responses.ResponseNewParams{
		Model: "gpt-5.6",
		Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("Say 'double bubble bath' ten times fast.")},
	})
	for stream.Next() {
		fmt.Println(stream.Current().Type)
	}
	if err := stream.Err(); err != nil {
		panic(err)
	}
}
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseStreamEvent;

ResponseCreateParams params =
    ResponseCreateParams.builder()
        .model("gpt-5.6")
        .input("Say 'double bubble bath' ten times fast.")
        .build();

try (StreamResponse<ResponseStreamEvent> stream = client.responses().createStreaming(params)) {
  stream.stream().forEach(System.out::println);
}
using OpenAI.Responses;
#pragma warning disable OPENAI001

string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
ResponsesClient client = new(key);

var responses = client.CreateResponseStreamingAsync(
    "gpt-5.6",
    "Say 'double bubble bath' ten times fast."
);

await foreach (StreamingResponseUpdate response in responses)
{
    if (response is StreamingResponseOutputTextDeltaUpdate delta)
    {
        Console.Write(delta.Delta);
    }
}
require "openai"

openai = OpenAI::Client.new

stream = openai.responses.stream(
  model: "gpt-5.6",
  input: [
    {
      role: "user",
      content: "Say 'double bubble bath' ten times fast."
    }
  ]
)

stream.each do |event|
  puts(event)
end

Responses API 使用语义事件进行流式传输。每个事件都有预定义的模式,因此你可以监听你关心的事件。

有关事件类型的完整列表,请参阅 API 参考的流式传输部分。以下是一些示例:

StreamingEvent = (
    ResponseCreatedEvent
    | ResponseInProgressEvent
    | ResponseFailedEvent
    | ResponseCompletedEvent
    | ResponseOutputItemAdded
    | ResponseOutputItemDone
    | ResponseContentPartAdded
    | ResponseContentPartDone
    | ResponseOutputTextDelta
    | ResponseOutputTextAnnotationAdded
    | ResponseTextDone
    | ResponseRefusalDelta
    | ResponseRefusalDone
    | ResponseFunctionCallArgumentsDelta
    | ResponseFunctionCallArgumentsDone
    | ResponseFileSearchCallInProgress
    | ResponseFileSearchCallSearching
    | ResponseFileSearchCallCompleted
    | ResponseCodeInterpreterInProgress
    | ResponseCodeInterpreterCallCodeDelta
    | ResponseCodeInterpreterCallCodeDone
    | ResponseCodeInterpreterCallInterpreting
    | ResponseCodeInterpreterCallCompleted
    | Error
)
type StreamingEvent = responses.ResponseStreamEventUnion
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseStreamEvent;

ResponseCreateParams params =
    ResponseCreateParams.builder().model("gpt-5.5").input("Say hello.").build();

try (StreamResponse<ResponseStreamEvent> stream = client.responses().createStreaming(params)) {
  stream.stream().forEach(System.out::println);
}
require "openai"

client = OpenAI::Client.new
stream = client.responses.stream(model: "gpt-5.5", input: "Say hello.")
stream.each { |event| puts(event) }

阅读响应

如果你使用的是我们的 SDK,每个事件都是类型化的实例。你还可以使用事件的 type 属性来标识单个事件。

某些关键生命周期事件仅触发一次,而其他事件在生成响应时可能会多次触发。流式传输文本时,常见的事件监听包括:

- `response.created`
- `response.output_text.delta`
- `response.completed`
- `error`

如需可监听事件的完整列表,请参阅 API 的流式传输参考.

高级用例

对于更高级的用例,如流式工具调用,请参阅以下专门指南:

审核风险

请注意,在生产应用中流式传输模型的输出会使审核补全内容变得更加困难,因为部分补全可能更难以评估。这可能对已批准的使用产生影响。

如果你在生成请求中请求 审核分数,这些分数会在完整生成输出可用后到达。它们不会包含在部分输出增量中。