AI SDK 与开发框架
问题
开发 AI 应用时有哪些主流的 SDK 和框架?各有什么优缺点?
答案
一、主流 SDK 对比
| SDK | 维护方 | 语言 | 特点 | 适用场景 |
|---|---|---|---|---|
| Vercel AI SDK | Vercel | TS | 流式优先、多 Provider、React Hooks | Next.js/React 应用 |
| LangChain.js | LangChain | TS | 链式编排、Agent、RAG | 复杂 AI 工作流 |
| OpenAI SDK | OpenAI | TS/Python | 官方、稳定、简洁 | 仅用 OpenAI 模型 |
| Anthropic SDK | Anthropic | TS/Python | Claude 专属、Tool Use | 仅用 Claude |
| Mastra | Mastra | TS | Agent 框架、工作流 | Agent 应用 |
二、Vercel AI SDK
Vercel AI SDK 是目前前端生态最流行的 AI 开发框架:
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();
// streamText:流式调用 LLM
const result = streamText({
model: openai("gpt-4o"),
messages,
system: "你是一个有帮助的助手。",
});
// 返回流式响应
return result.toDataStreamResponse();
}
app/page.tsx
"use client";
import { useChat } from "@ai-sdk/react";
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } =
useChat();
return (
<div>
{messages.map((m) => (
<div key={m.id}>
<strong>{m.role}:</strong> {m.content}
</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<button type="submit" disabled={isLoading}>发送</button>
</form>
</div>
);
}
Vercel AI SDK 核心优势
- 多 Provider:统一接口切换 OpenAI/Claude/Google/Ollama
- 流式原生:
streamText、streamObject开箱即用 - React Hooks:
useChat、useCompletion、useObject零配置 - Tool Calling:内置工具调用和多步推理
三、LangChain.js
LangChain 适合复杂 AI 工作流和 RAG 系统:
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
const model = new ChatOpenAI({ model: "gpt-4o" });
// 基础调用
const response = await model.invoke([
new SystemMessage("你是一个翻译助手"),
new HumanMessage("将以下内容翻译成英文:你好世界"),
]);
// 链式编排(LCEL)
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
const chain = ChatPromptTemplate.fromMessages([
["system", "你是一个{role}"],
["human", "{input}"],
])
.pipe(model)
.pipe(new StringOutputParser());
const result = await chain.invoke({
role: "翻译助手",
input: "你好世界",
});
四、官方 SDK(OpenAI / Anthropic)
当只用单一模型时,官方 SDK 最轻量:
// OpenAI
import OpenAI from "openai";
const openai = new OpenAI();
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "你好" }],
stream: true,
});
// Anthropic
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic();
const message = await anthropic.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
messages: [{ role: "user", content: "你好" }],
});
五、选型决策
常见面试问题
Q1: Vercel AI SDK 和 LangChain.js 怎么选?
答案:
- Vercel AI SDK:关注前端体验——流式渲染、React Hooks、Chat UI,适合标准聊天/对话类应用
- LangChain.js:关注后端编排——RAG pipeline、复杂 Agent、多步工作流,适合需要大量自定义逻辑的项目
- 二者可结合使用:LangChain 做后端编排,Vercel AI SDK 做前端渲染
Q2: 为什么不直接用 OpenAI SDK?
答案:
- OpenAI SDK 绑定单一模型,切换到 Claude/Gemini 需要重写代码
- 没有流式渲染的 React 集成
- 缺少 Tool Calling 的多步推理抽象
- 如果项目简单且确定只用 OpenAI,直接用 SDK 更轻量