AI SDK:重新定义 AI 应用开发

news/2025/11/24 9:20:03/文章来源:https://www.cnblogs.com/guangzan/p/19261094

引言

如果你在过去一年中关注前端和全栈开发领域,可能会注意到一个有趣的现象:传统的 Web 应用正在积极拥抱人工智能。

什么是 AI SDK?

AI SDK 是由 Next.js 开发团队 Vercel 推出的开源 TypeScript 工具库,专为构建 AI 驱动应用而设计。它支持 Next.js、Vue、Svelte 和 Node.js 等框架,提供统一的 API 接口,抽象了不同 LLM(大型语言模型)提供商的差异化细节。简单说,它让开发者像调用本地函数一样集成 OpenAI、Anthropic、Google Gemini 或 xAI Grok 等模型,而无需纠缠于 SDK 切换的样板代码。

核心特性

提供者(Providers)

不同的大模型提供商(如 OpenAI、Anthropic、Google、Hugging Face、Ollama 等)拥有各自迥异的 API 格式、参数命名、错误处理机制。AI SDK 抽象出统一的 generateTextstreamTextembed 等函数,开发者只需指定 provider,其余逻辑完全一致。

// 使用 OpenAI
const result = await streamText({model: openai('gpt-4o'),prompt: 'Explain quantum entanglement.'
});// 切换为 Anthropic?只需改一行!
const result = await streamText({model: anthropic('claude-3-5-sonnet'),prompt: 'Explain quantum entanglement.'
});

AI 模型正在快速演进,今天最好的模型明天可能就被超越。锁定单一提供商存在风险。AI SDK 的抽象层让模型可以即插即用。

流式输出(Streaming)

AI SDK 默认优先支持流式(streaming)输出。对于 Web 应用而言,这意味着用户能立即看到第一个 token,而非等待整个响应完成,极大提升交互体验。

import { useAIState, useActions, useUIState } from 'ai/rsc';function Chat() {const [messages, setMessages] = useState([]);const [input, setInput] = useState('');const handleSubmit = async (e) => {e.preventDefault();const newMessage = { role: 'user', content: input };setMessages([...messages, newMessage]);const response = await fetch('/api/chat', {method: 'POST',body: JSON.stringify({ messages: [...messages, newMessage] })});const reader = response.body.getReader();const decoder = new TextDecoder();let aiMessage = '';while (true) {const { done, value } = await reader.read();if (done) break;aiMessage += decoder.decode(value);setMessages([...messages, newMessage, { role: 'assistant', content: ai助理 }]);}};
}

AI SDK 还提供 useAssistantuseChat 等 React Hook,自动处理流式、状态管理、错误重试等,开发者只需关注 UI。

import { useChat } from 'ai/react';function Chat() {const { messages, input, handleInputChange, handleSubmit } = useChat();return (<div>{messages.map(m => <div key={m.id}>{m.content}</div>)}<form onSubmit={handleSubmit}><input value={input} onChange={handleInputChange} /></form></div>);
}

流式输出已经是 AI 应用的基本体验要求。

框架无关

虽然由 Next.js 团队打造,但 AI SDK 支持 React、Vue、Svelte、Nuxt、SvelteKit 甚至纯 Node.js。

例如在 SvelteKit 中:

// +page.server.ts
import { streamText } from 'ai';
import { openai } from 'ai/openai';export const actions = {chat: async ({ request }) => {const formData = await request.formData();const input = formData.get('input') as string;const result = await streamText({model: openai('gpt-4o'),prompt: input});return result.toDataStreamResponse();}
};

前端用 useChat 即可消费流。

生成式 UI(Generative UI)

让 AI 不仅生成文本,还能生成可交互的 UI 组件。

例如,AI 可以返回一段 JSON 描述:“显示一个天气卡片,包含温度 23°C 和晴天图标”,前端自动将其渲染为 React 组件。

// AI 返回结构化 UI 指令
{type: 'weather-card',props: { temperature: 23, condition: 'sunny' }
}

配合 useUIState,前端可动态渲染:

const [uiMessages, setUIMessages] = useUIState();return (<div>{uiMessages.map((msg, i) => (<GeneratedComponent key={i} {...msg} />))}</div>
);

传统 Chat UI 是对话的终点,而 Generative UI 是交互的起点。用户不再需要复制粘贴结果,AI 直接提供可操作的界面

结构化输出

用 Zod 生成 JSON 对象,避免解析乱码:

import { generateObject } from 'ai';const result = await generateObject({model: openai('gpt-4o'),schema: z.object({name: z.string(),age: z.number(),}),prompt: '生成一个名字和年龄。',
});

结构化输出可以降低 AI 的幻觉问题,降低错误率。

PDF 支持

处理文档:上传 PDF,AI 分析内容。

import fs from 'fs';
import { generateText } from 'ai';const { text } = await generateText({model: openai('gpt-4o'),messages: [{role: 'user',content: [{ type: 'text', text: '根据此文档分析,什么是大模型?并总结出要点。' },{ type: 'file', data: fs.readFileSync('./ai.pdf'), mimeType: 'application/pdf' },],},],
});

实战

搭建一个简单的 AI 聊天应用,以 Next.js 为例:

  1. 安装:

    npm install ai openai
    
  2. 创建路由处理器 /app/api/chat/route.ts

    import { openai } from '@ai-sdk/openai';
    import { streamText } from 'ai';export async function POST(req: Request) {const { messages } = await req.json();const result = await streamText({model: openai('gpt-4o'),messages});return result.toDataStreamResponse();
    }
    
  3. 前端使用 useChat

    'use client';
    import { useChat } from 'ai/react';export default function Chat() {const { messages, input, handleInputChange, handleSubmit } = useChat();return (<div>{messages.map(m => <div key={m.id}>{m.role}: {m.content}</div>)}<form onSubmit={handleSubmit}><input value={input} onChange={handleInputChange} /><button type="submit">Send</button></form></div>);
    }
    
  4. 完成,AI SDK 将复杂性封装到极致,整个过程无需手动处理 fetch、流解析、状态同步。

总结

最后,总结一下,在我看来,AI SDK 的最大价值在于标准化。AI 领域模型层出不穷,每家提供商的 API 都像方言般不同,导致开发者疲于切换。AI SDK 像一座桥梁,统一了语法,让你专注于业务逻辑而非适配层。

如果你正在构建 AI 应用,无论使用哪种前端框架,AI SDK 都值得优先考虑,基本流行的开源 Chat 应用都是基于 AI SDK 构建的。它可能不会让你一夜暴富,但一定能让你少掉些头发🤣。

另外,AI SDK v6 已经在 beta 阶段,更新了不少东西,感兴趣可以关注下。

参考链接

  • 官网:https://ai-sdk.dev/
  • GitHub:https://github.com/vercel/ai
  • 文档:https://sdk.vercel.ai/docs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年中频点焊机厂家权威推荐榜单:中频直流点焊机/中频交流点焊机/中频焊接设备源头厂家精选

中频点焊机作为现代制造业中不可或缺的金属连接设备,其市场需求正随着汽车制造、家电生产和航空航天等行业对焊接质量要求的提升而持续增长。本文将基于详实的行业数据,为您推荐2025年度在中频点焊机领域表现卓越的T…

专访创一AI:2025年短剧革命,揭秘爆款背后的智能引擎

开场引言 “短剧行业不再野蛮生长,专业化、效率化成为新的要求。 AI工具将不再是一个‘可选’,而是成为一个‘必须’,AI工具正在‘重塑’短剧创作流程”。 创一 AI 作为垂直领域代表,其利用 AI 技术打造短剧创作流…

20232410 2025-2026-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 1.1实验内容简述 (1)应用SET工具建立冒名网站。 (2)利用ettercap完成DNS欺骗攻击。 (3)结合应用两种技术,使被攻击者会通过域名访问到冒名网站。 (4)结合攻击过程,提出具体防范方法。 1.2学习内容…

主流开源JS地图框架选择

主流开源JS地图框架选择Posted on 2025-11-24 09:09 且行且思 阅读(0) 评论(0) 收藏 举报根据 WebGIS 应用场景和数据情况,选择合适的前端地图框架。 ArcGIS >使用 ArcGls 地图服务的首选OpenLayers…

管理千家经销商之困:医疗器械耗材生产企业的数字化破局之道

从订单处理、库存管理到渠道合规,数字化平台如何化解医疗器械企业管理千家经销商的沉重负担从订单处理、库存管理到渠道合规,数字化平台如何化解医疗器械企业管理千家经销商的沉重负担 尊敬的各位商务总监、运营总监…

CH395Q INT脚变化说明

CH395Q INT脚变化说明测试环境:CH32v307+CH395Q;SPI接口,直连电脑 芯片固件版本:0x4A 1.接收一包数据的流程,逻辑分析仪时序如下(其中,通道0为片选,通道1为时钟,通道2/3为数据,通道4为INT脚)常规接收流程不…

PHP 8.5 在性能、调试和运维方面的新特性

PHP 8.5 在性能、调试和运维方面的新特性 2025 年即将结束,这意味着 PHP 的新版本也已经发布了! 在本文中,我们将重点介绍那些你在上述文章中找不到的,关于 PHP 8.5 在性能、调试和运维方面的变化。 其中一些改动甚…

洛谷 B3694:数列离散化 ← 数组 + sort + unique + lower_bound

​【题目来源】https://www.luogu.com.cn/problem/B3694【题目描述】给定一个长度为 n 的数列 a。定义 rank(i) 表示数列 a 中比 ai 小的不同数字个数再加一。对 1≤i≤n,现在请你求出所有的 rank(i)。【输入格式】输…

完整教程:2025年接单经验和软件外包平台一览

完整教程:2025年接单经验和软件外包平台一览pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

SpringCloud 常见面试题(三)

服务网关 在微服务架构中,网关的作用是什么 在微服务架构中,网关(Gateway)具有以下作用:统一入口:网关为所有的微服务提供一个唯一的入口点,从而简化了客户端与服务的交互,同时保障了后台服务的安全性。 鉴权校…

4.Rocky Linux 网络配置 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年最新国际货运代理公司实力推荐榜:全链路服务力到行业口碑深度评估

国际货运代理(International Freight Forwarding)指由专业机构代为处理国际运输中的订舱、报关、仓储、运输规划及目的国清关等流程,是连接全球贸易与跨境物流的重要服务体系。 随着全球贸易回稳、跨境电商增长及海…

MySQL 8.4:未使用 mysql_native_password 却报插件未加载(Plugin mysql_native_password is not loaded)?

现象 最近遇到一个有趣的案例:在一个新创建的 MySQL 8.4 实例中,使用用户 u2 登录时,返回了Plugin mysql_native_password is not loaded错误。 $ mysql -h127.0.0.1 -P3316 -uu2 -p123mysql: [Warning] Using a pa…

水题乱做

P11746 设 $R$ 为单色行的数量,$C$ 为单色列的数量。 根据题意,AI 的得分 $S_{AI} = R + C$,你的得分 $S_P = (n - R) + (m - C) = n + m - (R + C) = n + m - S_{AI}$。 获胜条件是 $S_P$ 为奇数且 $S_{AI}$ 为偶数…

第四讲GNN图神经网络

第四讲GNN图神经网络基于空间的卷积(Spatial-based convolution) 基于谱的卷积(Spectral-based convolution)

最短路的板子默写

Dj算法 (好像不太会超时)反正我拿它冲锋了 突然发现自己忘干净了 先梳理一下(和topu不同 topu是找到第一个入度=0,遍历出边 最短路是本次循环找到距离最小点遍历出边 1.建立边 用邻接表e[u]push_back(v) 2.dj函数 …

完整教程:AI超级智能体项目中的多模型集成实践:挑战、架构与代码详解

完整教程:AI超级智能体项目中的多模型集成实践:挑战、架构与代码详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

【URP】Unity[相机]渲染类型

URP 相机渲染类型概述 在 Unity Universal Render Pipeline (URP) 中,相机组件提供了多种渲染类型选项,用于控制相机如何参与渲染流程。这些类型决定了相机是否渲染、【从UnityURP开始探索游戏渲染】专栏-直达URP 相…

20251028在荣品RD-RK3588-MID开发板的Android13系统下解决关机的时候最近打开的应用不关的难题

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实验4 NoSQL和关系数据库的操作比较

实验要求 只给出这四种数据库的JAVA客户端编程的相关代码具体代码 导入依赖: <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.…