Vercel AI SDK 4.2 重要更新支持MCP

主要功能:

  • MCP(Model Context Protocol)客户端支持:允许应用程序连接到数百个预构建的工具,如 GitHub、Slack、文件系统操作等。用户还可以构建并连接自定义的 MCP 服务器,扩展应用程序功能。
  • 推理(Reasoning)支持:支持像 Anthropic 的 Claude 3.7 Sonnet 和 DeepSeek R1 这样的推理模型,这些模型能够以明确的分步推理方式解决问题。
  • 来源(Sources)标准化:跨 OpenAI、Google、Vertex 和 Perplexity 提供标准化的 URL 搜索结果,确保在不同提供商之间一致地展示搜索结果。
  • 其他功能:包括 OpenAI Responses API 的支持(用于基于网络搜索的可靠答案和简化的聊天历史记录)。

介绍 MCP 客户端、推理、来源等

AI SDK 是一个用于使用 JavaScript 和 TypeScript 构建 AI 应用的开源工具包。其统一的提供者 API 允许您使用任何语言模型,并支持与领先的 Web 框架(如 Next.js 和 Svelte)的强大 UI 集成。

每周超过 100 万次下载,开发者们正在使用该 SDK 创建令人惊叹的应用,例如 Otto,一款 AI 驱动的研究工具:

"AI SDK 为 Otto 提供了所有功能,从代理到数据结构再到构建工作流程。有了 AI SDK,我们可以专注于开发产品,让我们能够更快地交付更新。最棒的是,我们无需担心支持新模型的更改------AI SDK 为我们搞定了这一切,让我们能够更快地发布更新。"------Sully Omar

今天,我们宣布发布 AI SDK 4.2,带来了以下新功能和改进:

  • 推理(Reasoning)
  • 模型上下文协议(MCP)客户端
  • useChat 消息部件
  • 语言模型的图像生成
  • URL 来源
  • OpenAI 响应 API
  • Svelte 5
  • 中间件更新

让我们来探索这些新功能和改进。

推理(Reasoning)

推理模型(如 Anthropic Sonnet 3.7 和 DeepSeek R1)在推理时会投入计算资源,逐步解决问题,就像人类展示他们的思维链一样。相比传统模型,这种方法能产生更准确、更可靠的结果,尤其是在涉及逻辑或多步骤分析的任务中。

AI SDK 现在支持各大提供者的推理模型。您可以像使用其他模型一样使用 Anthropic 的 Claude 3.7 Sonnet,并通过 reasoning 属性访问模型的推理令牌:

javascript

javascript 复制代码
import { generateText } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';

const { text, reasoning } = await generateText({
  model: anthropic('claude-3-7-sonnet-20250219'),
  prompt: '2040年世界上会有多少人生活?',
});

您可以尝试不同的模型,找到最适合您应用的那一个。只需更改两行代码即可轻松切换提供者:

javascript

javascript 复制代码
import { generateText } from 'ai';
import { bedrock } from '@ai-sdk/amazon-bedrock';

const { text, reasoning } = await generateText({
  model: bedrock('anthropic.claude-3-7-sonnet-20250219-v1:0'),
  prompt: '2040年世界上会有多少人生活?',
});

对于将推理作为文本输出一部分而不是单独令牌的提供者,您可以使用 extractReasoningMiddleware,它会自动从格式化的响应中提取推理内容。这确保了在 OpenAI、Anthropic、Groq、Together AI、Azure OpenAI 等提供者之间的一致体验,无需更改应用代码。

要查看推理的实际应用,请查看 AI SDK 推理模板。要了解更多,请参阅我们的推理文档。

模型上下文协议(MCP)客户端

AI SDK 现在支持模型上下文协议(MCP),这是一个开放标准,可将您的应用连接到不断增长的工具和集成生态系统。通过 MCP 支持,您可以访问数百个预构建的工具("服务器"),为您的应用添加强大功能。一些流行的 MCP 服务器包括:

  • GitHub - 管理存储库、问题和拉取请求
  • Slack - 发送消息并与工作区互动
  • Filesystem - 具有可配置访问控制的安全文件操作

由于 MCP 是一个开放协议,您的用户还可以构建并连接他们自己的自定义 MCP 服务器,根据需要扩展您的应用功能。MCP 有许多用例,但对于本地代码自动化尤其强大。

SDK 支持通过 stdio(本地工具)或 SSE(远程服务器)连接到 MCP 服务器。一旦连接,您可以直接在 AI SDK 中使用 MCP 工具:

javascript

javascript 复制代码
import { experimental_createMCPClient as createMCPClient } from 'ai';
import { openai } from '@ai-sdk/openai';

const mcpClient = await createMCPClient({
  transport: {
    type: 'sse',
    url: 'https://my-server.com/sse',
  },
});

const response = await generateText({
  model: openai('gpt-4o'),
  tools: await mcpClient.tools(), // 使用 MCP 工具
  prompt: '找到价格低于100美元的产品',
});

要了解更多关于在项目中实现 MCP 的信息,请查看我们的 MCP 工具文档和分步 MCP 指南。

useChat 消息部件

语言模型生成的不仅仅是文本------它们将推理、来源、工具调用和文本响应组合在一个消息中。在多步骤代理用例中,这些不同类型的输出经常混合在单个响应中。

AI SDK 4.2 为 useChat 引入了消息部件,这是一种处理这些不同类型输出的新方式,能够保留它们的精确顺序:

javascript

dart 复制代码
function Chat() {
  const { messages } = useChat();
  return (
    <div>
      {messages.map(message => (
        message.parts.map((part, i) => {
          switch (part.type) {
            case "text": return <p key={i}>{part.text}</p>;
            case "source": return <p key={i}>{part.source.url}</p>;
            case "reasoning": return <div key={i}>{part.reasoning}</div>;
            case "tool-invocation": return <div key={i}>{part.toolInvocation.toolName}</div>;
            case "file": return <img key={i} src={`data:${part.mimeType};base64,${part.data}`} />;
          }
        })
      ))}
    </div>
  );
}

我们计划在未来的 4.2.x 版本中添加更多部件类型。要了解更多,请查看我们的 4.2 迁移指南。

语言模型的图像生成

Google 的 Gemini 2.0 Flash 是第一个能够直接在响应中生成图像的语言模型。AI SDK 支持此功能,使您能够构建支持文本和图像生成与理解的多模态聊天机器人。

在客户端,您可以通过 useChat 使用 file 消息部件访问语言模型生成的图像:

javascript

ini 复制代码
import { useChat } from '@ai-sdk/react';

export default function Chat() {
  const { messages } = useChat();

  return (
    <div>
      {messages.map(message => (
        <div key={message.id}>
          {message.role === 'user' ? '用户: ' : 'AI: '}
          {message.parts.map((part, i) => {
            if (part.type === 'text') {
              return <div key={i}>{part.text}</div>;
            } else if (
              part.type === 'file' &&
              part.mimeType.startsWith('image/')
            ) {
              return (
                <img
                  key={i}
                  src={`data:${part.mimeType};base64,${part.data}`}
                  alt="生成的图像"
                />
              );
            }
          })}
        </div>
      ))}
    </div>
  );
}

生成图像后,它们会像文本消息一样成为聊天历史的一部分。您可以通过自然对话引用、迭代或"编辑"之前生成的图像------要求模型修改颜色、调整风格或创建变体,同时保持视觉对话的上下文。

要了解更多,请查看我们的文件生成文档。

URL 来源

许多提供者(如 OpenAI 和 Google)可以在其响应中包含搜索结果,但每个提供者的实现方式各不相同。AI SDK 标准化了 URL 来源(即网站),使您能够构建使用来源归属的 AI 应用。

例如,以下是如何使用 Gemini Flash 使用和发送来源:

api/chat/route.ts

javascript

javascript 复制代码
import { google } from "@ai-sdk/google";
import { streamText } from "ai";

export async function POST(req: Request) {
  const { messages } = await req.json();

  const result = streamText({
    model: google("gemini-1.5-flash", { useSearchGrounding: true }),
    messages,
  });

  return result.toDataStreamResponse({
    sendSources: true,
  });
}

以下是如何在客户端组件中使用 useChat 显示来源:

app/page.tsx

javascript

dart 复制代码
function Chat() {
  const { messages } = useChat();
  return (
    <div>
      {messages.map((message) => (
        <div key={message.id}>
          {message.role === "user" ? "用户: " : "AI: "}
          {message.parts
            .filter((part) => part.type !== "source")
            .map((part, index) => {
              if (part.type === "text") {
                return <div key={index}>{part.text}</div>;
              }
            })}
          {message.parts
            .filter((part) => part.type === "source")
            .map((part) => (
              <span key={`source-${part.source.id}`}>
                [
                <a href={part.source.url} target="_blank">
                  {part.source.title ?? new URL(part.source.url).hostname}
                </a>
                ]
              </span>
            ))}
        </div>
      ))}
    </div>
  );
}

AI SDK 支持通过 OpenAI Responses、Google、Vertex 和 Perplexity 等兼容模型的 URL 来源。要查看来源的实际应用,请查看来源模板。

OpenAI 响应 API

OpenAI 最近发布了 Responses API,这是一种在 OpenAI 平台上构建应用的全新方式。新 API 提供了持久化聊天历史的功能、用于支持 LLM 响应的网络搜索工具,以及即将推出的文件搜索和计算机使用工具。

AI SDK 从第一天起就支持 Responses API,从现有的 Completions API 迁移到新的 Responses API 非常简单:

javascript

ini 复制代码
import { openai } from '@ai-sdk/openai';

const completionsAPIModel = openai('gpt-4o-mini');
const responsesAPIModel = openai.responses('gpt-4o-mini');

新的网络搜索工具使模型能够访问互联网获取相关信息,从而提高对事实性查询的响应质量:

javascript

javascript 复制代码
import { openai } from '@ai-sdk/openai';
import { generateText } from 'ai';

const result = await generateText({
  model: openai.responses('gpt-4o-mini'),
  prompt: '上周旧金山发生了什么?',
  tools: {
    web_search_preview: openai.tools.webSearchPreview(),
  },
});

console.log(result.text);
console.log(result.sources);

Responses API 还简化了对话历史的管理。您无需在每次请求中发送完整对话,而是可以通过 ID 引用之前的交互,从而降低应用的复杂性。

要了解更多关于这些功能的信息,请查看 OpenAI Responses API 指南。

Svelte 5

随着 AI SDK 4.2,@ai-sdk/svelte 包已由 Svelte 团队完全重写,以支持 Svelte 5 并充分利用原生模式。

这种新实现用基于类的 Svelte 原生模式替换了 React 的钩子方法:

html

xml 复制代码
<script>
  import { Chat } from '@ai-sdk/svelte';

  // 使用 Chat 类而不是 useChat 钩子
  const chat = new Chat();
</script>

<div>
  {#each chat.messages as message}
    <div class="message {message.role}">{message.content}</div>
  {/each}
</div>

要了解更多,请查看 Svelte 快速入门指南或查看使用这些模式实现的开源 Svelte 聊天机器人模板。

中间件更新

语言模型中间件现已稳定,它通过拦截和修改对语言模型的调用来增强其行为。这种模式支持防护栏、缓存和日志记录等功能,同时保持提供者的灵活性。中间件通过一个简单的包装函数应用,保留标准模型接口。

SDK 现在包括三种生产就绪的中间件选项:

  • extractReasoningMiddleware:从带有特殊标签(如 )的文本中提取推理步骤。
  • simulateStreamingMiddleware:通过非流式语言模型的响应模拟流式行为。
  • defaultSettingsMiddleware:跨模型调用应用一致的配置,与任何模型(包括自定义提供者)无缝协作。只需为参数(如温度)指定默认值,并使用 providerMetadata 设置提供者特定选项。

javascript

php 复制代码
import { openai } from "@ai-sdk/openai";
import { anthropic } from "@ai-sdk/anthropic";
import {
  customProvider,
  defaultSettingsMiddleware,
  wrapLanguageModel,
} from "ai";

// 使用 defaultSettingsMiddleware 的自定义提供者:
export const model = customProvider({
  languageModels: {
    fast: openai("gpt-4o-mini"),
    writing: anthropic("claude-3-5-sonnet-latest"),
    reasoning: wrapLanguageModel({
      model: anthropic("claude-3-7-sonnet-20250219"),
      middleware: defaultSettingsMiddleware({
        settings: {
          providerMetadata: {
            anthropic: {
              thinking: { type: "enabled", budgetTokens: 12000 },
            },
          },
        },
      }),
    }),
  },
});

这些中间件选项可以组合使用,创建跨任何支持的语言模型的强大、可组合功能。查看我们的中间件文档了解更多。

其他功能

我们最近将几个实验性功能稳定,这意味着它们现已生产就绪并经过充分测试。这些功能包括:

  • 自定义提供者:将 ID 映射到任何模型,允许您设置自定义模型配置、别名等。
  • 中间件改进:同时应用多个中间件,以增强请求处理和转换。中间件已移至稳定版。
  • 工具调用流:作为数据流的一部分流式传输部分工具调用。已移至稳定版。
  • 响应体访问:在使用 generateText 或 generateObject 时通过 response.body 属性直接访问原始响应体。
  • 数据流增强:为 streamText 发送开始/结束事件,并使用 write/writeSource 方法更精细地控制流数据。
  • 错误处理:利用 streamText/streamObject 的 onError 回调优雅地管理错误。
  • 对象生成:利用 generateObject 的 repairText 功能修复和改进生成的内容。
  • 提供者选项:配置特定于提供者的请求选项(例如 OpenAI 的 reasoningEffort)。具体取决于提供者。已移至稳定版。
  • 提供者元数据:访问特定于提供者的响应元数据。具体取决于提供者。已移至稳定版。

提供者更新

AI SDK 的提供者生态系统不断扩展,新增和改进的提供者包括:

  • Amazon Bedrock:与 AI SDK 标准功能更紧密集成,支持中止、获取和错误处理。新增缓存点支持、Amazon Nova Canvas 的图像生成、预算令牌支持和推理支持。
  • Anthropic:新增推理支持、推理内容的模型设置调整、工具更新(bash、文本编辑器、计算机)和图像 URL 支持。
  • Azure:新增图像生成支持。
  • Cohere:改进了工具处理,修复了参数和工具计划内容。
  • DeepInfra:新增图像生成支持。
  • Google:增强了架构支持、对未定义部分的容错、种子支持、动态检索、空内容处理、推理支持和模型 ID 更新。
  • Google Vertex AI:新增 Gemini 模型、消息中公共文件 URL 支持以及 Anthropic Claude 模型的提示缓存。
  • Mistral:改进了内容处理,修复了未定义内容、复杂内容类型、PDF 支持和多个文本内容部分。
  • OpenAI:新增对 gpt-4.5、o3-mini、Responses API 和 PDF 输入的支持。
  • OpenAI 兼容:新增对 generateText/streamText 中 providerOptions 的支持。
  • Perplexity:新增来源支持。
  • Replicate:新增对版本化模型的支持。
  • Together AI:新增图像生成支持并扩展了提供者 V1 规范。
  • xAI:新增图像生成支持。

入门

凭借 MCP 支持、语言模型图像生成和推理等强大新功能,现在是使用 AI SDK 构建 AI 应用的最佳时机。

  • 启动一个新的 AI 项目:准备好构建新东西了吗?查看我们最新的指南。
  • 探索我们的模板:访问我们的模板库,查看 AI SDK 的实际应用。
  • 加入社区:在我们的 GitHub 讨论中分享您的构建成果。

展示

自 4.1 版本发布以来,我们看到了一些由 AI SDK 驱动的惊艳产品,值得特别展示:

  • Otto:一个代理电子表格,自动化重复的知识工作。
  • Payload:一个开源 Next.js 全栈框架,将您的配置转化为完整的后端,包括管理 UI、API 和数据库管理,集成在一个无缝的包中。

"切换到 AI SDK 让我们立即删除了大量自定义代码,并轻松支持所有当前和未来的 AI 提供者。API 非常简洁,设计深思熟虑,并提供一流的 TypeScript 支持------我们非常满意!"------Alessio Gravili, Payload

贡献者

AI SDK 4.2 是 Vercel 核心团队(Lars、Jeremy、Walter 和 Nico)与众多社区贡献者共同努力的结果。感谢以下贡献者提交了合并的拉取请求:

Xiang-CH、d3lm、dreamorosi、MrunmayS、valstu、BrianHung、jstjoe、rmarescu、lasley、shaneporter、FinnWoelm、threepointone、minpeter、UrielCh、Younis-Ahmed、edukure、O1af、abhishekpatil4、sandonl、NVolcz、nihaocami、yudistiraashadi、mattlgroff、gianpaj、habeebmoosa、KABBOUCHI、franklin007ban2、yoshinorisano、jcppman、gravelBridge、peetzweg、patelvivekdev、ggallon、zeke、epoyraz、IObert、KitBurgess、marwhyte、niranjan94、asishupadhyay、SalmanK81099。

特别表彰:

  • elliott-with-the-longest-name-on-github:Svelte 5 支持
  • iteratetograceness:MCP 支持
  • Und3rf10w:Amazon Bedrock 推理支持

您的反馈和贡献继续塑造着 AI SDK。我们迫不及待想看到您将用这些新功能构建什么。

相关推荐
潘锦7 小时前
MCP 只是在中国大火了
mcp
ivygeek15 小时前
MCP:基于 Spring AI Mcp 实现 webmvc/webflux sse Mcp Server
spring boot·后端·mcp
Captaincc19 小时前
Manus 本质就是 #Claude + #MCP 的套壳?
mcp·ai 编程
daiyunchao1 天前
记录一次我用AI帮我整理提示词的过程
ai 编程
小阿鑫1 天前
AI Agent爆火后,MCP协议为什么如此重要!
agent·mcp·claude3.7
Captaincc1 天前
字节跳动开源 AI Agent 框架 Agent TARS
ai 编程
我是小七呦1 天前
!我是如何把大模型搬到Web推理的
前端·webassembly·ai 编程
孟健1 天前
重磅:等不到Manus邀请码?用Cursor+MCP打造你的专属AI智能助手
aigc·mcp
Captaincc1 天前
AI 编程避坑全攻略
cursor·trae·ai 编程