Vercel AI SDK v6とは?新機能(ToolLoopAgent・needsApproval)とv7との違い・移行【2026】
Vercel AI SDKは、TypeScriptでAIアプリを作るためのライブラリです。v6は2025年12月22日に正式版(GA)となり、AIエージェントを組むToolLoopAgentや、ツール実行に人の承認を挟むneedsApprovalが加わりました。ただし2026年6月25日にはv7も登場しており、「v6が最新」ではなくなっています。この記事では、v6の主要な新機能を実コードで解説し、v7との違い・移行・バージョンの選び方まで最新情報で整理します。
まとめ:Vercel AI SDK v6の要点
- v6は2025年12月22日にGA。エージェント構築の
ToolLoopAgent、人間の承認を挟むneedsApproval、動的なCall Optionsが目玉。 ToolLoopAgentはツール呼び出しのループを制御するエージェント。停止条件はstopWhenで、既定はstepCountIs(20)。- 一部の記事にある
prepareCallsというAPIは存在しない。動的なCall OptionsはcallOptionsSchemaとprepareCallで行う。 - v6は最新ではない。2026年6月25日にv7.0.0が出ており、npmの
aiのlatestは7系。v6を使うならバージョンをピン留めする。 - v7では
stepCountIsがisStepCountに、onFinishがonEndに変わるなど改称が多く、移行はcodemodで支援される。
Vercel AI SDK v6とは:v5からの位置づけ
Vercel AI SDKは、OpenAIやAnthropicなど複数のLLMを共通のインターフェースで扱い、チャットUIやストリーミング、ツール実行(function calling)をTypeScriptで書けるようにするライブラリです。npmのパッケージ名はaiで、プロバイダは@ai-sdk/openaiのように分かれています。
v6の最大のテーマは「エージェント」です。v5まではツール実行のループを自分で組む場面が多かったのに対し、v6ではエージェントを組む部品が標準化されました。v6.0.0のGAは2025年12月22日で、その後もv6系はパッチが継続しています(2026年7月時点で6.0.226など)。
v6の主要な新機能
v6で押さえるべき新機能は、エージェント・人間の承認・動的なCall Options・開発ツールの4つです。
| 機能 | 役割 |
|---|---|
| ToolLoopAgent | ツール呼び出しループの制御(旧Experimental_Agent後継) |
| needsApproval | ツール実行前に人の承認を挟む |
| callOptionsSchema / prepareCall | Call Optionsの動的な差し替え |
| @ai-sdk/devtools | ローカルでの動作可視化(experimental) |
注意したいのが、日本語の解説で見かけるprepareCallsという名前のAPIは実在しない点です。動的にCall Optionsを差し替えるのはcallOptionsSchemaでスキーマを定義し、prepareCallで組み立てる形です。古い記事のコードをそのまま写すと動きません。
セットアップとToolLoopAgentの基本構成
導入はai本体とプロバイダを入れるだけです。v6を使うならバージョンを明示します。
npm install ai@6 @ai-sdk/openai
エージェントはToolLoopAgentで組みます。instructionsに役割を書き、toolsに使わせるツールを渡し、stopWhenでループの停止条件を決めます。既定の停止条件は20ステップ(stepCountIs(20))です。
import { ToolLoopAgent, stepCountIs } from "ai";
import { openai } from "@ai-sdk/openai";
const agent = new ToolLoopAgent({
model: openai("gpt-5.6"),
instructions: "ユーザーの依頼をツールで解決する",
tools: { /* … */ },
stopWhen: stepCountIs(20),
});
const result = await agent.generate({ prompt: "東京の天気を調べて" });
ToolLoopAgentは、モデルがツールを呼び、その結果を受けて次の判断をする——というループを、停止条件に達するまで自動で回します。無限ループを避けるため、stopWhenは必ず設計します。
needsApprovalによるHuman-in-the-Loop
ファイル削除や決済のような取り返しのつかない操作は、AIに任せきりにせず人の承認を挟みたくなります。v6では、ツール定義にneedsApprovalを付けるだけで承認フローに載せられます。
const tools = {
deleteFile: tool({
description: "指定パスのファイルを削除する",
inputSchema: z.object({ path: z.string() }),
needsApproval: true,
execute: async ({ path }) => { /* 実処理 */ },
}),
};
needsApprovalはブール値のほか、入力に応じて承認要否を返す関数も渡せます。UI側はuseChatのaddToolApprovalResponse({ id, approved, reason })で承認・却下を返し、tool-approval-requestのパートで承認待ちを表示します。危険な操作だけ承認を必須にする、といった出し分けが実装しやすくなっています。
v6の最新性とv7差分・ピン留め
実務では特にこの点でつまずきます。v6の情報だけを見て導入すると、インストール時に想定と違う版が入ります。2026年6月25日にv7.0.0が公開され、npmのaiのlatestタグは7系(2026年7月時点で7.0.x)に移っています。v6は現役でパッチも続いていますが、npm install aiと書くとv7が入るため、v6で固定するならai@6のようにピン留めが必要です。
v7では改称を中心に破壊的変更が入りました。主なものは次のとおりです。
| v6 | v7 |
|---|---|
| stepCountIs | isStepCount |
| system | instructions |
| onFinish | onEnd |
| onStepFinish | onStepEnd |
| experimental_telemetry | telemetry |
移行はcodemodで支援され、npx @ai-sdk/codemod v7を実行すると多くの改称を自動置換できます。DevToolsを使いたい場合は@ai-sdk/devtoolsを入れ、npx @ai-sdk/devtoolsでlocalhost:4983から動作を確認できます(ローカル専用・experimental)。
バージョン選択の指針(新規v7/既存v6ピン留め)
新規プロジェクトなら、原則はv7で始めるのが妥当です。latestであり、今後の機能追加もv7系に乗ります。一方で、v6で作った既存プロジェクトを急いで上げる必要はありません。v6系はパッチが続いており、ai@6にピン留めして運用を続けられます。移行するときは、いきなり本番を上げず、npx @ai-sdk/codemod v7で機械的な改称を当ててから、generateObjectなど非推奨APIの置き換えを手で確認する、という順が安全です。v6の学習コストが無駄になるわけではなく、ToolLoopAgentやneedsApprovalの考え方はv7でもそのまま活きます。
よくある質問
Vercel AI SDK v6はいつリリースされましたか?
v6.0.0の正式版(GA)は2025年12月22日です。その後もv6系はパッチが継続しています。ただし2026年6月25日にv7.0.0が出ており、最新はv7系です。
ToolLoopAgentとは何ですか?
ツール呼び出しのループを制御するエージェントで、旧Experimental_Agentの後継です。instructionsで役割、toolsでツール、stopWhenで停止条件を指定します。既定の停止条件はstepCountIs(20)です。
prepareCallsというAPIはありますか?
ありません。動的にCall Optionsを差し替えるのはcallOptionsSchemaとprepareCallです。prepareCallsという記述は誤りなので、コードを写すときは注意してください。
v6のまま使い続けても大丈夫ですか?
大丈夫です。v6系はパッチが継続しています。ただしnpm install aiではv7が入るため、v6で固定するならai@6のようにバージョンをピン留めしてください。
v6からv7への移行方法は?
npx @ai-sdk/codemod v7で改称(stepCountIs→isStepCount、onFinish→onEndなど)を自動置換できます。そのうえでgenerateObjectなど非推奨APIの手直しを確認します。より詳しくは、OpenUIの記事で整理しています。