主要功能:
- 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。我们迫不及待想看到您将用这些新功能构建什么。