Skip to content

流式响应

Responses、Chat Completions 和 Messages 均可能返回 SSE。流不是“一个 JSON 响应拆成几段”,而是一串独立事件;应使用 SDK 的流式迭代器,或实现合规的 SSE 解析器。

ts
const response = await fetch('https://ai.tavonilo.com/v1/responses', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AI_SHOP_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ model: '<MODEL_ID>', input: 'hello', stream: true }),
})

if (!response.ok || !response.body) throw new Error(`request failed: ${response.status}`)
// Use an SSE parser here; do not split arbitrary TCP chunks by newline.

生产建议

  1. 设置连接、首字节和总时长超时,且不要让反向代理缓冲 SSE。
  2. 只对“请求尚未到达服务端”或有明确幂等语义的场景自动重试;生成请求可能已产生计费。
  3. 记录状态码、请求 ID、模型与时间,避免记录 API Key、完整隐私提示词或敏感输出。
  4. 前端取消时使用 AbortController;服务端应处理客户端断开,而不是继续向已关闭连接写入。

TIP

流式 SDK 的事件名称和增量字段由协议决定。Responses 使用 Responses 事件,Chat Completions 使用 choices[].delta,Messages 使用 Anthropic 事件;不要用同一个 JSON 解析器混用三种协议。

API access is subject to the AIShop service terms.