SDK 与集成
Vercel AI SDK
用 Vercel AI SDK 在 Next.js / SvelteKit / Nuxt 里接入 CokeAPI,前后端流式一气呵成。
Vercel AI SDK 是 React/Vue/Svelte 生态的 AI 集成库,内置 @ai-sdk/openai provider 支持自定义 endpoint。
安装
npm install ai @ai-sdk/openai zodProvider 配置 (服务端)
// lib/ai.ts
import { createOpenAI } from "@ai-sdk/openai";
export const cokeapi = createOpenAI({
baseURL: "https://api.cokeapi.com/v1",
apiKey: process.env.COKEAPI_KEY!,
});generateText (一次性)
import { generateText } from "ai";
import { cokeapi } from "@/lib/ai";
const { text, usage } = await generateText({
model: cokeapi("gpt-4o-mini"),
prompt: "用一句话介绍 CokeAPI",
});
console.log(text);
console.log(`tokens: ${usage.totalTokens}`);streamText (流式,前端 useChat)
Next.js Route Handler
// app/api/chat/route.ts
import { streamText, convertToModelMessages, type UIMessage } from "ai";
import { cokeapi } from "@/lib/ai";
export const runtime = "nodejs";
export async function POST(req: Request) {
const { messages }: { messages: UIMessage[] } = await req.json();
const result = streamText({
model: cokeapi("grok-4.20-fast"),
messages: convertToModelMessages(messages),
});
return result.toUIMessageStreamResponse();
}React 前端
"use client";
import { useChat } from "@ai-sdk/react";
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit } = useChat({
api: "/api/chat",
});
return (
<div>
{messages.map((m) => (
<div key={m.id}>
<b>{m.role}:</b> {m.parts.map((p) => p.type === "text" ? p.text : "").join("")}
</div>
))}
<form onSubmit={handleSubmit}>
<input value={input} onChange={handleInputChange} />
<button type="submit">Send</button>
</form>
</div>
);
}结构化输出 (generateObject)
import { generateObject } from "ai";
import { z } from "zod";
const { object } = await generateObject({
model: cokeapi("gpt-4o-mini"),
schema: z.object({
name: z.string(),
tags: z.array(z.string()),
}),
prompt: "给 CokeAPI 起 3 个标签",
});
console.log(object); // { name: "CokeAPI", tags: [...] }工具调用 (Tools)
import { generateText, tool } from "ai";
import { z } from "zod";
const { text } = await generateText({
model: cokeapi("grok-4.20-expert"),
prompt: "北京天气?",
tools: {
getWeather: tool({
description: "查询某城市天气",
parameters: z.object({ city: z.string() }),
execute: async ({ city }) => `${city} 晴天 25°C`,
}),
},
});图片生成 (experimental_generateImage)
import { experimental_generateImage as generateImage } from "ai";
const { image } = await generateImage({
model: cokeapi.image("gpt-image-2"),
prompt: "一只在京都樱花树下的赛博狐狸",
size: "1024x1024",
});
console.log(image.base64); // base64 PNG推荐模型矩阵
| AI SDK 用法 | 推荐 model |
|---|---|
generateText 一次性问答 | gpt-4o-mini |
streamText 实时聊天 | grok-4.20-fast |
generateObject 结构化抽取 | gpt-4o-mini |
| Agent + tools | grok-4.20-expert |
| 图像 | gpt-image-2 |