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 でツール周りとエージェント実行が強化されました。本稿はこの世代を前提に「何が楽になり、どこは自分の責任か」を整理します。
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 / streamObject に Zod スキーマを渡すと、出力がその形に拘束され後段の処理が安定します。チャットのような自由文は streamText です。
03UI 連携は useChat が中心
React 側のチャット UI は @ai-sdk/react の useChat が定番で、メッセージ状態・ストリーミング更新・エラー処理をまとめて面倒見ます。AI SDK 5 以降は設計が変わった点に注意が必要です。
- 入力欄の状態を自前で持つ:
useChatはもう入力テキストを内部管理しません(自分でuseState等で保持し、sendMessageで送る)。 - transport ベース:通信は
DefaultChatTransport(fetch)が既定。WebSocket など独自トランスポートに差し替え可能。 - UIMessage が状態の源:メッセージは
UIMessageとして保持し、本文・ツール結果・メタデータを型付きの partsとして持つ。サーバーから任意データを型安全にストリームできる。
つまり「メッセージ配列とストリーミングは SDK が、入力欄の制御は自分が」という分担です。旧バージョンの記事やサンプルは useChat が input を持つ前提で書かれていることが多いので、現行 API(5/6)で確認してください。
04ツール呼び出しとエージェントループ
「在庫を調べる」「DB を引く」などの実処理はツール(関数)として渡します。LLM がツールを要求 → 実行 → 結果を会話に戻す、というループを手で組むと煩雑ですが、SDK はこの多段ループを管理します。
FIG.2 LLM →(ツール要求)→ 実行 →(結果を戻す)→ 繰り返し → 回答。SDK がこのループを管理
AI SDK 6 では、このループを実装した ToolLoopAgent が用意され、既定で上限ステップ数まで自動で回します(暴走を防ぐため上限は必ず設定)。さらに、危険な操作の前にユーザーへ確認を取るツール承認(useChat と連携)も用意されています。外部に副作用を出すツール(送信・削除・課金など)は最小権限・要承認を原則にしてください。構造化出力とツール呼び出しを組み合わせ、「複数ステップ実行 → 最後に型付き JSON で締める」といった構成も取れます。
05実装の勘所
API キーはサーバー側だけに置く
キーは Route Handler / Server Action / Server Component などサーバーで保持。クライアントに出さない。SDK のモデル呼び出しはサーバー側で行う。
ユーザー向けはストリーミング既定
streamText で逐次表示。generateText の一括待ちは体感が重く、UI 用途には向かない。
プロバイダ抽象化で切替を容易に
モデル指定を一箇所に集約。障害時や価格・性能の変化に応じてモデルを差し替えられるようにしておく。
エラー・タイムアウト・レート制限を必ず処理
失敗時のフォールバックと再試行、上限超過時のメッセージを用意。ストリーム中断時の 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 で動かし、必要に応じてツール・構造化出力・エージェントループへ広げていくのが堅実です。