❝主要功能: - 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) 推理模型(如 Anthropic Sonnet 3.7 和 DeepSeek R1)在推理时会投入计算资源,逐步解决问题,就像人类展示他们的思维链一样。相比传统模型,这种方法能产生更准确、更可靠的结果,尤其是在涉及逻辑或多步骤分析的任务中。 AI SDK 现在支持各大提供者的推理模型。您可以像使用其他模型一样使用 Anthropic 的 Claude 3.7 Sonnet,并通过 reasoning 属性访问模型的推理令牌:
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
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 服务器包括: - Filesystem - 具有可配置访问控制的安全文件操作
由于 MCP 是一个开放协议,您的用户还可以构建并连接他们自己的自定义 MCP 服务器,根据需要扩展您的应用功能。MCP 有许多用例,但对于本地代码自动化尤其强大。 SDK 支持通过 stdio(本地工具)或 SSE(远程服务器)连接到 MCP 服务器。一旦连接,您可以直接在 AI SDK 中使用 MCP 工具: 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 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 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 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 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 响应 APIOpenAI 最近发布了 Responses API,这是一种在 OpenAI 平台上构建应用的全新方式。新 API 提供了持久化聊天历史的功能、用于支持 LLM 响应的网络搜索工具,以及即将推出的文件搜索和计算机使用工具。 AI SDK 从第一天起就支持 Responses API,从现有的 Completions API 迁移到新的 Responses API 非常简单: javascript import { openai } from '@ai-sdk/openai';
const completionsAPIModel = openai('gpt-4o-mini'); const responsesAPIModel = openai.responses('gpt-4o-mini');
新的网络搜索工具使模型能够访问互联网获取相关信息,从而提高对事实性查询的响应质量: 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 <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 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 支持。
- Cohere:改进了工具处理,修复了参数和工具计划内容。
- Google:增强了架构支持、对未定义部分的容错、种子支持、动态检索、空内容处理、推理支持和模型 ID 更新。
- Google Vertex AI:新增 Gemini 模型、消息中公共文件 URL 支持以及 Anthropic Claude 模型的提示缓存。
- Mistral:改进了内容处理,修复了未定义内容、复杂内容类型、PDF 支持和多个文本内容部分。
- OpenAI:新增对 gpt-4.5、o3-mini、Responses API 和 PDF 输入的支持。
- OpenAI 兼容:新增对 generateText/streamText 中 providerOptions 的支持。
- Together AI:新增图像生成支持并扩展了提供者 V1 规范。
入门凭借 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 |