升级OpenAI至4.0+后Vercel AI SDK无响应及Runtime适配问题
解决OpenAI v4+与Vercel AI SDK在Node.js Runtime下无响应问题
核心问题分析
你的代码中直接从req.body解构messages是错误的——在Node.js Runtime的Next.js API路由中,请求体并非直接可用的JSON对象,需要先通过await req.json()解析。这会导致messages为undefined,OpenAI API调用失败,最终没有返回响应,触发日志中的“API resolved without sending a response”提示。
修复后的代码
import { OpenAIStream, StreamingTextResponse } from 'ai' import OpenAI from 'openai' export const runtime = 'nodejs' const openai = new OpenAI({ apiKey: process.env.OPENAI_TOKEN }); export default async function POST(req) { // 关键修复:先解析请求体 const body = await req.json(); const { messages } = body; // 复制原数组再修改,避免意外修改请求体数据 const modifiedMessages = [...messages]; modifiedMessages.unshift({ role: 'system', content: 'You are a chatbot...' }) const res = await openai.chat.completions.create({ model: 'gpt-3.5-turbo', messages: modifiedMessages, stream: true, }) const stream = OpenAIStream(res); return new StreamingTextResponse(stream) }
额外检查项
- 确保你的
ai包(Vercel AI SDK)版本是最新的,以适配OpenAI v4+:执行npm update ai或yarn upgrade ai - 确认环境变量
OPENAI_TOKEN已正确配置,且包含完整的API密钥(以sk-开头) - 可添加错误捕获排查隐性问题:
try { const res = await openai.chat.completions.create({...}); // ...后续逻辑 } catch (err) { console.error('OpenAI API Error:', err); return new Response(JSON.stringify({ error: err.message }), { status: 500 }); }
内容的提问来源于stack exchange,提问作者user2947684
相关产品推荐
相关产品推荐

