You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将OpenAI流式输出管道传输至HTTP响应?

将OpenAI流式输出管道到HTTP响应的实现方案

假设你使用Node.js + Express这类HTTP框架,以下是具体实现方案:

  1. 配置HTTP响应头部
    流式输出依赖Server-Sent Events(SSE)协议,需先设置对应响应头:
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
res.flushHeaders(); // 立即发送头部,避免前端等待
  1. 对接OpenAI流式响应并输出到HTTP响应
    结合你提供的代码,遍历OpenAI返回的异步迭代器,提取每段内容后写入HTTP响应:
app.post('/chat', async (req, res) => {
  try {
    const chat = await openai.chat.completions.create({
      messages: [{ role: "user", content: "Say this is a test" }],
      model: "gpt-3.5-turbo",
      stream: true,
    });

    // 遍历流式返回的每个chunk
    for await (const chunk of chat) {
      const content = chunk.choices[0]?.delta?.content || '';
      if (content) {
        // 按SSE格式输出(适配前端SSE监听),也可直接输出纯文本
        res.write(`data: ${JSON.stringify({ content })}\n\n`);
        // 纯文本输出方式:res.write(content);
      }
    }

    // 所有数据发送完成后结束响应
    res.end();
  } catch (error) {
    console.error(error);
    res.status(500).send('请求失败');
  }
});
  1. 核心注意事项
  • 必须用for await...of遍历OpenAI的流式响应,因为它是异步迭代器
  • 要处理chunk中可能为空的delta.content(比如响应开头/结尾的空片段)
  • 若前端不需要SSE格式,可直接输出纯文本,无需包裹data:前缀
  • 确保响应在所有流式数据发送完成后再关闭,避免截断内容

内容的提问来源于stack exchange,提问作者Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:45:54