Vercel AI SDK 5.0+ 与 OpenAI 集成:一些你可能不知道的细节
摘要
AI SDK 5.0 默认切换到 Responses API,带来行为变化与新特性。本文解释常见报错、API差异、成本与性能,以及迁移与选型建议。
Vercel AI SDK 提供了一套统一的抽象与工具链,用于在前后端快速接入大模型、流式输出与工具调用等能力。本文从一次升级到 AI SDK 5.0 后遇到的报错出发,梳理 5.0 的默认行为变化,并补充一些与 OpenAI(尤其是 Responses API)集成时容易忽略的细节与迁移要点。
起因:一个令人困惑的错误
在将项目升级到 AI SDK 5.0 后,我们在使用它调用 GPT-5 模型时遇到了这样一个错误:
{
"error": {
"message": "Item 'rs_038b8175...' of type 'reasoning' was provided without its required following item.",
"type": "invalid_request_error",
"param": "input"
}
}
这个错误信息提到了 reasoning 类型的项目缺少必需的后续项目。但我们明明只是在做简单的聊天对话,为什么会涉及到 "reasoning" 呢?
调查:AI SDK 5.0 的默认行为变化
顺着这个报错往下查,我们发现了一个直接相关的变化:
在 AI SDK 5.0 中,默认的 OpenAI provider 已经从 Chat Completions API 切换到了 Responses API。
这意味着:
// AI SDK 4.x
openai('gpt-4o') // → 使用 Chat Completions API
// AI SDK 5.0+
openai('gpt-5') // → 使用 Responses API (新默认值!)
如果你需要继续使用 Chat Completions API,需要显式指定:
// 显式使用 Chat Completions API
openai.chat('gpt-5')
// 显式使用 Responses API
openai.responses('gpt-5')
// 默认 (AI SDK 5.0+) - 等同于 openai.responses()
openai('gpt-5')
什么是 Responses API?
理解了这个“默认切换”之后,再回头看 reasoning 报错,就可以从 Responses API 的消息结构来解释。
Responses API 是 OpenAI 在 2025 年 3 月推出的新一代 API。它提供一个统一接口,用于对话、工具调用、状态持久化等 Agent 相关能力。
核心特性对比
| 特性 | Chat Completions | Responses API |
|---|---|---|
| 内置 Web 搜索 | 需要外部工具 | 原生支持 web_search |
| 文件搜索 | 需要外部工具 | 原生支持 file_search |
| 代码解释器 | 不支持 | 内置支持 |
| 计算机操作 | 不支持 | 支持(用于 Agent) |
| 状态持久化 | 每次需重发历史 | store: true 自动持久化 |
| 推理上下文保留 | 不支持 | 可在多轮中保留推理上下文 |
| MCP 支持 | 不支持 | 支持远程 MCP |
为什么会有 reasoning 错误?
Responses API 支持推理模型(如 GPT-5 系列),这类模型在生成回复时会包含 reasoning(推理)片段。多轮对话时,如果你回传的历史里带了 reasoning,却缺了紧随其后的 output,就会触发这个错误。
常见触发场景:
- 对话历史被意外截断
- 序列化/反序列化过程中丢失了部分数据
- 手动处理消息时过滤不当
成本与性能
在明确接口差异与报错原因后,下面再看成本与性能。
定价
Responses API 不额外收费,与 Chat Completions 使用相同的 token 计价标准。
成本优势
根据官方资料:
"与 Chat Completions 相比,缓存利用率提升 40%-80%"
这意味着在多轮对话场景下,Responses API 可能更省钱。
性能提升
"在 SWE-bench 测试中,使用 Responses API 的 GPT-5 比 Chat Completions 提升 3%"
如何在 AI SDK 中使用
下面给出在 AI SDK 中的用法示例,包含最常见的 generateText/streamText 场景。
基础用法
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
// 默认使用 Responses API
const { text } = await generateText({
model: openai('gpt-5'),
prompt: '解释量子纠缠的概念。',
});
使用 Web 搜索工具
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';
const result = await generateText({
model: openai('gpt-5'),
prompt: '上周旧金山发生了什么重要新闻?',
tools: {
web_search_preview: openai.tools.webSearchPreview(),
},
});
console.log(result.text);
console.log(result.sources); // 包含引用来源
控制推理力度
const result = await generateText({
model: openai('gpt-5'),
prompt: '分析这个复杂的数据集并提供见解。',
providerOptions: {
openai: {
reasoningEffort: 'high', // 'low' | 'medium' | 'high'
},
},
});
在 Next.js 中使用 (Chat Route)
// app/api/chat/route.ts
import { openai } from '@ai-sdk/openai';
import { convertToModelMessages, streamText, UIMessage } from 'ai';
export const maxDuration = 30;
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
model: openai('gpt-5.1'),
messages: convertToModelMessages(messages),
});
return result.toUIMessageStreamResponse();
}
如何选择?
看完上面的能力对比与代码示例,接下来往往需要回答一个问题:到底该用哪个接口、什么时候切换?下面按常见场景给出简要选型建议,便于快速判断。
| 场景 | 推荐 |
|---|---|
| 简单聊天,无工具调用 | 两者皆可(Chat Completions 更简单) |
| 需要实时网络信息 | Responses API |
| 多轮推理对话 | Responses API |
| 构建 AI Agent | Responses API |
| 需要兼容旧代码 | Chat Completions |
| 新项目 | Responses API(官方推荐) |
迁移建议
如果你正在从 AI SDK 4.x 升级到 5.x,建议按下面三步检查一遍:先确认实际调用的 API 与预期一致,再处理历史消息,最后再考虑引入 Responses API 的新特性。
-
检查你的 OpenAI provider 调用方式
- 如果希望继续走 Chat Completions(保持 4.x 行为),请显式使用
openai.chat('模型名') - 如果想强制使用 Responses API,请显式使用
openai.responses('模型名')(避免被默认行为变化影响)
- 如果希望继续走 Chat Completions(保持 4.x 行为),请显式使用
-
处理对话历史
- 确保
reasoning和output项目成对出现 - 或者在发送前过滤掉
reasoning类型的消息
- 确保
-
利用新特性
- 考虑使用内置的 web search 和 file search
- 探索状态持久化功能减少 token 使用
版本信息
为避免版本差异导致行为不一致,本文基于以下版本:
- AI SDK: 5.0.108+
往期回顾
相关文章
2026年6月12日
【AI早读0612】OpenAI收购Ona为Codex构建持久化Agent执行环境
今天的主线是 AI Agent 正在走向“生产级”:OpenAI 收购 Ona,给 Codex 补上持久化云端执行 —— 电脑离线后 Agent 仍能在企业自有云里接着跑。Google Cloud 用 TEE 推出 Confidential AI 保护推理数据;Anthropic 发布企业订阅 Claude Corps 并联合 DXC 进入受监管行业;AWS 开源 Agent-EvalKit 系统化评估 Agent 全执行链路;再加 DeepMind“模型察觉被评估反而表现更差”的研究与多 Agent 安全投资。
2026年6月9日
【AI早读 0609】OpenAI 连续发布金融行业 AI 实战案例
OpenAI 集中上线了一批 Ignite 大会演讲:方案工程师讲企业级 AI 落地框架 - 把 AI 当工作流里的一个可控节点而非独立智能层;GTM Lead 谈金融服务的特殊诉求,已从“帮我们分析数据”变成“嵌入实时交易决策链”;Erste Group、LSEG、Allica Bank 三家银行客户分享了平台层整合、数据协同和挑战者银行的差异化打法;另有两场从产品增长和人力杠杆角度切入 AI 的实践。
2026年6月8日
【AI早读 0608】Agent 生态加速成熟,多智能体与平台战并进
过去 24 小时 AI 圈关键词是 Agent:Towards Data Science 把 Python 多智能体教程推成中级实践;AI Engineer 频道两场分享指向 Agent 从原型走向规模化 - MCP 管道与 LLM 可观测性;OpenAI 据 FT 报道要把 ChatGPT 重构成集成 Codex 的“超级应用”,内部一句“Chat is dead”;Ramp 数据显示 DeepSeek 登顶增长最快的软件供应商,价格驱动的“Token 经济”成形;Notion 因 Anthropic Opus 4.7/4.8 抖动一度禁用全部 Anthropic 模型;The Algorithmic Bridge 深扒 Anthropic 如何用安全叙事影响特朗普政府的 AI 政策。
最近一封 · Sample
【AI早读 0613】智能体主动性飞跃与模型评估新范式
“今天聚焦智能体的两个方向加一个底层动向:Simon Willison 记录 Claude Fable 5 的“relentlessly proactive” —— 为查一个滚动条 bug 自主注入代码、自写诊断 HTTP 服务、跨浏览器截图验证,是有意图的多步自纠探索;Google DeepMind 提出“模型 diffing”新范式,让审计智能体自主构造 prompt 主动搜索两个模型的行为差异;Google Cloud 发布 Open Knowledge Format,用带 YAML frontmatter 的 Markdown 为 AI 的结构化知识建开放标准。能力、评估、基础设施三条线正拼成智能体开发的完整图景。”
—— william
来信
里面装的是
- 新文章 — 写完一篇就寄一封,不攒货
- 这周读到的、看到的、好用的工具
- 正在折腾的实验,附带翻车记录
约莫 1–2 周一封 · 随时退订
合作伙伴
CompeteMap — 英国及爱尔兰学生竞赛一站式搜索
数学、编程、科学、写作等各类竞赛信息汇总,支持按年龄和科目筛选,再也不错过报名截止日。