返回博客2025年12月30日2 分钟阅读

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 CompletionsResponses API
内置 Web 搜索需要外部工具原生支持 web_search
文件搜索需要外部工具原生支持 file_search
代码解释器不支持内置支持
计算机操作不支持支持(用于 Agent)
状态持久化每次需重发历史store: true 自动持久化
推理上下文保留不支持可在多轮中保留推理上下文
MCP 支持不支持支持远程 MCP

为什么会有 reasoning 错误?

Responses API 支持推理模型(如 GPT-5 系列),这类模型在生成回复时会包含 reasoning(推理)片段。多轮对话时,如果你回传的历史里带了 reasoning,却缺了紧随其后的 output,就会触发这个错误。

常见触发场景:

  1. 对话历史被意外截断
  2. 序列化/反序列化过程中丢失了部分数据
  3. 手动处理消息时过滤不当

成本与性能

在明确接口差异与报错原因后,下面再看成本与性能。

定价

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 AgentResponses API
需要兼容旧代码Chat Completions
新项目Responses API(官方推荐)

迁移建议

如果你正在从 AI SDK 4.x 升级到 5.x,建议按下面三步检查一遍:先确认实际调用的 API 与预期一致,再处理历史消息,最后再考虑引入 Responses API 的新特性。

  1. 检查你的 OpenAI provider 调用方式

    • 如果希望继续走 Chat Completions(保持 4.x 行为),请显式使用 openai.chat('模型名')
    • 如果想强制使用 Responses API,请显式使用 openai.responses('模型名')(避免被默认行为变化影响)
  2. 处理对话历史

    • 确保 reasoningoutput 项目成对出现
    • 或者在发送前过滤掉 reasoning 类型的消息
  3. 利用新特性

    • 考虑使用内置的 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

Letters

来信

里面装的是

  • 新文章 — 写完一篇就寄一封,不攒货
  • 这周读到的、看到的、好用的工具
  • 正在折腾的实验,附带翻车记录

约莫 1–2 周一封 · 随时退订

合作伙伴

CompeteMap — 英国及爱尔兰学生竞赛一站式搜索

数学、编程、科学、写作等各类竞赛信息汇总,支持按年龄和科目筛选,再也不错过报名截止日。

准备开始了吗?

先简单说明目标,我会给出最合适的沟通方式。