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

如何流式调用OpenAI Completion API?

解决方案:客户端处理OpenAI流式Completion响应

要处理OpenAI流式返回的SSE格式数据,核心是逐行解析响应流,过滤空行并去除每行的data: 前缀后再解析JSON。以下是具体实现:

代码示例

async function streamOpenAICompletion() {
  const apiKey = 'YOUR_OPENAI_API_KEY'; // 注意:客户端直接暴露密钥存在被盗用风险
  const response = await fetch('https://api.openai.com/v1/completions', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'text-davinci-002',
      prompt: '请输入你的提示文本',
      max_tokens: 100,
      stream: true // 必须开启流式返回参数
    })
  });

  if (!response.ok) {
    throw new Error(`请求失败: ${response.status}`);
  }

  const reader = response.body.getReader();
  const decoder = new TextDecoder('utf-8');
  let buffer = ''; // 暂存不完整的行数据

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    // 解码当前流片段并追加到缓冲区
    buffer += decoder.decode(value, { stream: true });
    // 按换行分割成多行
    const lines = buffer.split('\n');
    // 最后一行可能不完整,留到下一次循环处理
    buffer = lines.pop();

    for (const line of lines) {
      // 过滤空行和非data开头的行
      if (!line.trim() || !line.startsWith('data: ')) continue;
      
      // 去除"data: "前缀
      const jsonStr = line.slice(6);
      // 处理流式结束标记
      if (jsonStr === '[DONE]') continue;

      try {
        const data = JSON.parse(jsonStr);
        // 获取当前返回的文本片段
        const text = data.choices[0].text;
        console.log(text);
        // 可将文本插入到页面DOM中,例如:
        // document.getElementById('output-container').textContent += text;
      } catch (err) {
        console.error('JSON解析失败:', err);
      }
    }
  }
}

// 调用流式请求函数
streamOpenAICompletion().catch(err => console.error(err));

关键要点说明

  • 缓冲区处理:流的返回片段可能截断单行数据,用buffer暂存未处理的部分,确保每行数据完整后再解析。
  • 行过滤逻辑:仅处理以data: 开头的行,跳过空行和结束标记data: [DONE]。
  • 密钥风险提示:客户端直接嵌入API密钥会导致密钥泄露,生产环境建议通过后端代理(如Flask可手动实现流式响应转发)处理请求,避免密钥暴露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:36:28