Next.js App RouteでVercel AI SDK v5を使ったストリーミングチャットAPI実装
基本構成
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-2.5-flash"),
system: systemPrompt,
messages: convertToModelMessages(messages),
tools,
temperature: 0.7,
onStepFinish: async ({ toolCalls, text }) => {
// ツール実行ログ
console.log("Tool called:", toolCall.toolName);
},
});
return result.toUIMessageStreamResponse({
onError: (error) => error.message
});
}
重要ポイント
convertToModelMessages() でUIMessage → ModelMessage変換が必要
toUIMessageStreamResponse() がAI SDK v5の推奨形式
- 独自ストリーミング実装は避ける
onStepFinish でサーバーサイドツールの実行をトラッキング可能
認証トークンの受け渡し
const authToken = req.headers.get("Authorization")?.replace("Bearer ", "");
const tools = createTools(authToken); // 動的にツール生成
クライアント側でBearerトークンを送り、サーバー側で受け取って認証付きツールを生成