Vercel AI SDK で Next.js × LLM

AI Navigate Original / 2026/5/16

共有:

要点

  • Vercel AI SDK はストリーミング・ツール呼び出し・UI 連携を簡潔化
  • 複数プロバイダ共通 API・定型ストリーミング・型付きツール
  • キーはサーバー側・ストリーミング・抽象化・エラー処理
  • API は変化が速く、コスト計測・入力連結回避は自己責任

Vercel AI SDK は、TypeScript で LLM 機能を最短実装するためのオープンソースのツールキットです。OpenAI・Anthropic・Google など多数のプロバイダを共通の APIで扱い、トークンを少しずつ画面に流すストリーミング、関数を呼ばせるツール呼び出し、型付きの構造化出力、そして React の useChat によるUI 連携までを、定型コードで書けるのが要です。

Under the Hood

2026年時点の最新は AI SDK 6(2025年12月リリース)。直前の AI SDK 5 が、React / Svelte / Vue / Angular 向けの型付きチャットエージェントループの土台を入れ、6 でツール周りとエージェント実行が強化されました。本稿はこの世代を前提に「何が楽になり、どこは自分の責任か」を整理します。

Next.js の画面 useChat AI SDK 共通API サーバー側 OpenAI Anthropic Google ほか 25+ プロバイダ

FIG.1 画面 →(共通 API)→ 各プロバイダ。モデルを変えても画面側のコードはほぼそのまま

01何が楽になるのか

LLM を Web に組み込むと、毎回ぶつかる「面倒」がいくつかあります。AI SDK はそこを定型化します。

プロバイダ抽象化

OpenAI / Anthropic / Google などを共通 API で。モデル切替は数行で済み、ベンダーロックを避けやすい。

ストリーミング

streamText でトークンを逐次返し、体感速度を上げる。完成待ち(generateText)は数秒の無反応になりがち。

ツール/構造化出力

関数呼び出しを Zod スキーマで定義。generateObject / streamObject で型付き JSON を取り出せる。

02コア関数:用途で選ぶ4つ

サーバー側で LLM を呼ぶ中心関数は、出力が「文章か/構造化データか」「待つか/流すか」で選びます。

文章を返す構造化データ(JSON)を返す
streamText:逐次ストリーミング(ユーザー向けの既定)streamObject:スキーマ準拠の JSON を逐次
generateText:完成してから一括で返す(裏処理・短文向き)generateObject:スキーマ準拠の JSON を一括で

分類・抽出・フォーム自動入力のように「形が決まった答え」が欲しいときは generateObject / streamObjectZod スキーマを渡すと、出力がその形に拘束され後段の処理が安定します。チャットのような自由文は streamText です。

03UI 連携は useChat が中心

React 側のチャット UI は @ai-sdk/reactuseChat が定番で、メッセージ状態・ストリーミング更新・エラー処理をまとめて面倒見ます。AI SDK 5 以降は設計が変わった点に注意が必要です。

  • 入力欄の状態を自前で持つuseChat はもう入力テキストを内部管理しません(自分で useState 等で保持し、sendMessage で送る)。
  • transport ベース:通信は DefaultChatTransport(fetch)が既定。WebSocket など独自トランスポートに差し替え可能。
  • UIMessage が状態の源:メッセージは UIMessage として保持し、本文・ツール結果・メタデータを型付きの partsとして持つ。サーバーから任意データを型安全にストリームできる。

つまり「メッセージ配列とストリーミングは SDK が、入力欄の制御は自分が」という分担です。旧バージョンの記事やサンプルは useChat が input を持つ前提で書かれていることが多いので、現行 API(5/6)で確認してください。

04ツール呼び出しとエージェントループ

「在庫を調べる」「DB を引く」などの実処理はツール(関数)として渡します。LLM がツールを要求 → 実行 → 結果を会話に戻す、というループを手で組むと煩雑ですが、SDK はこの多段ループを管理します。

LLM ツールを要求 ツール実行 結果を会話へ戻す 必要なら繰り返す(最大ステップで上限) 回答

FIG.2 LLM →(ツール要求)→ 実行 →(結果を戻す)→ 繰り返し → 回答。SDK がこのループを管理

AI SDK 6 では、このループを実装した ToolLoopAgent が用意され、既定で上限ステップ数まで自動で回します(暴走を防ぐため上限は必ず設定)。さらに、危険な操作の前にユーザーへ確認を取るツール承認useChat と連携)も用意されています。外部に副作用を出すツール(送信・削除・課金など)は最小権限・要承認を原則にしてください。構造化出力とツール呼び出しを組み合わせ、「複数ステップ実行 → 最後に型付き JSON で締める」といった構成も取れます。

05実装の勘所

01

API キーはサーバー側だけに置く

キーは Route Handler / Server Action / Server Component などサーバーで保持。クライアントに出さない。SDK のモデル呼び出しはサーバー側で行う。

02

ユーザー向けはストリーミング既定

streamText で逐次表示。generateText の一括待ちは体感が重く、UI 用途には向かない。

03

プロバイダ抽象化で切替を容易に

モデル指定を一箇所に集約。障害時や価格・性能の変化に応じてモデルを差し替えられるようにしておく。

04

エラー・タイムアウト・レート制限を必ず処理

失敗時のフォールバックと再試行、上限超過時のメッセージを用意。ストリーム中断時の UI 復帰も考える。

06プロバイダ抽象化と AI Gateway

SDK は標準で Vercel AI Gateway 経由にでき、25 以上のプロバイダ(OpenAI / Anthropic / Google など)へわずか数行の変更でアクセスできます。各社の API キーを個別に直接使う構成も選べます。Gateway を使うと、プロバイダ横断のフォールバックやログ取得がしやすくなります。

価値は「速く作れて、モデルに縛られない」こと。抽象化の裏で、キー管理・検証・コストは依然として自分の責任。

07コストとセキュリティの注意

  • SDK 自体は無料の OSS。一方、推論コストは別。AI Gateway はトークンに上乗せなしでプロバイダの定価に基づく従量課金(執筆時点で新規アカウントに 30 日ごとの試用クレジット枠あり。料金は変動するので公式で確認)。
  • ストリーミングでもコストは発生。入力/出力トークン量で決まるため、文脈の詰め込み過ぎに注意し、トークン量・遅延・呼び出し回数を計測する。
  • プロンプトインジェクション対策:ユーザー入力をそのままシステムプロンプトに連結しない。役割を分け、ツールには最小権限を与え、外部副作用は承認制に。
  • ハルシネーション対策:モデルの出力は鵜呑みにせず、重要な事実は一次情報で検証する。構造化出力でも「もっともらしい嘘」は起こりうる。
  • API は更新が速い。5→6 で useChat の入力管理や transport が変わったように破壊的変更がある。必ず公式ドキュメントで最新仕様を確認すること。

08位置づけ:いつ選ぶか

Vercel AI SDK は、Next.js を中心に Web で LLM 機能を最短実装したいときの有力な選択肢です。とくに「ストリーミングするチャット UI」「複数プロバイダを横断したい」「型付きの構造化出力やツール実行を素早く入れたい」用途で効きます。Next.js 専用ではなく、サーバー側のコア機能は他環境でも使えます(RSC 連携など一部機能のみ App Router 前提)。

抽象化に頼りつつも、キー管理・入力検証・コスト計測・最新仕様の追従は自分の設計責任として残ります。まずは小さなチャットを useChat + streamText で動かし、必要に応じてツール・構造化出力・エージェントループへ広げていくのが堅実です。