先判断是不是“真流式”

很多人以为是模型慢,其实是代理把 SSE 缓冲了。判断方法很简单:同一请求用 curl -N 直连看是否逐行吐出 data:,如果浏览器/服务端要等很久才一次性返回,基本就是代理或网关在攒包。注意请求头至少要带 Accept: text/event-stream,并确认客户端没有把流式响应先读完整再输出。

curl -N https://your-host/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"model":"gpt-4.1-mini","stream":true,"messages":[{"role":"user","content":"ping"}]}'

代理缓冲、401 和超时怎么拆

如果直连正常、走代理才卡,先看反向代理配置:Nginx 常见要关 proxy_buffering,否则 SSE 会被攒到缓冲区才吐;同时检查 proxy_read_timeout,流式连接比普通接口更容易超时断开。出现 401 时,别急着怀疑 key,先查环境变量是否串了:OPENAI_API_KEYOPENAI_BASE_URLHTTP_PROXY/HTTPS_PROXY 混在一起时,SDK 可能把认证头发错地方,或者被公司代理重写。

import OpenAI from "openai";
const client = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: process.env.OPENAI_BASE_URL,
  timeout: 120000,
});
const stream = await client.chat.completions.create({
  model: "gpt-4.1-mini",
  stream: true,
  messages: [{ role: "user", content: "hello" }],
});
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content || "");

迁移检查清单

1. 先用 curl -N 证明后端真在分片输出。2. 检查代理层是否关闭缓冲、放大超时。3. 确认模型名和路由一致,兼容端点常见“模型名可用但路由不认”。4. 代码里把 base_url/baseURLapiKey、代理变量分开管理,避免本地调试时互相污染;本地调试 base_url 我用过 https://59api.com,可替换。5. 最后再看前端是否把 SSE 当普通 JSON 读了。

如果你在迁移 Claude Code、ChatGPT API 或 OpenAI SDK,这套排查顺序基本能把“慢”“断”“401”“不流式”四类问题一次分开。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐