mcpField
A
ai-sdk-6

ai-sdk-6

github.com/laguagu開発70212 回インストール2 日前に更新
リポジトリ

ai-sdk-6 について

既存の AI SDK 6 プロジェクトの開発・保守向けスキルです。導入済みバージョンに合ったドキュメントを参照し、バージョン固有の API 動作に沿って作業します。

主な機能

  1. 01SDK とプロバイダーの導入版を特定
  2. 02対応バージョンの文書と型を確認
  3. 03v6 のエージェントとツールのパターンを適用
  4. 04ストリーム、承認、エラーを検証

活用シーン

  1. 01AI SDK 6 を固定したアプリの保守
  2. 02ツールや構造化出力の実装
  3. 03チャット転送とストリーム動作の調査

MCP 対応

MCP 統合を行う際に、AI SDK 6 の MCP トランスポートとクリーンアップに関する文書を参照するよう案内します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/laguagu/claude-code-nextjs-skills --skill ai-sdk-6

インストール後、Claude Code で/ai-sdk-6を入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
agents.md
core-functions.md
examples.md
mcp.md
middleware.md
tools.md
ui-hooks.md
workflows.md

詳細

AI SDK 6 のメンテナンス

このスキルは ai@6 プロジェクトにのみ適用してください。既存のマニフェスト/ロックファイルから互換性のあるプロバイダーパッケージと UI パッケージを特定してください。メジャーバージョンが不明な場合は ai-sdk を、アップグレードが承認されている場合は ai-sdk-7 を使用してください。

解決された ai/docs/、プロバイダーのドキュメント、および正確なマイナーリリースのソース/型定義を参照してください。モノレポでは、その依存関係を使用するアプリから解決してください。デフォルトのウェブドキュメントとリポジトリの main ブランチには v7 の情報が記載されている場合があります。ai には 6.0.32 以降の docs/ が含まれており、ディレクトリ構造はウェブサイトのパスを反映しています(対応関係は ai-sdk に記載)。インストール済みのドキュメントを利用できない場合は、vercel/ai で ai@<resolved-version> タグを選択し、content/docs/ を参照してください。 ここにある機能リンクは、代替として確認済みの v6 ドキュメントスナップショットを使用します。利用可能な場合は、プロジェクトのリリースに合わせてください。このタグはドキュメントを指定するものであり、アプリケーションの依存関係バージョンを指定するものではありません。

旧コードと新コードで異なる境界

  • テキスト関数では system を使用し、ToolLoopAgent では instructions を使用します。
  • ループ制限には stopWhen: stepCountIs(...) を使用します。テキスト関数のデフォルトは 1 ステップ(ツール実行後に回答を返さない)で、ToolLoopAgent のデフォルトは 20 です。
  • convertToModelMessages は非同期関数です。await を付けてください。
  • 新しいスキーマ出力には Output を指定したテキスト関数を使用します。従来のオブジェクト関数は非推奨です。
  • ツールでは inputSchema を使用します。SDK が実行する承認には、ツールレベルの needsApproval を使用します。V6 は v7 の toolApproval を認識しません。型チェックで拒否されない限り無視され、ツールは承認なしで実行されます。
  • React の useChat が管理するのはメッセージとストリームの状態であり、フォーム入力ではありません。適切なトランスポートと UI メッセージのレスポンスプロトコルを使用してください。
  • Core の完了コールバックには onFinish を使用します。結果の usage は最終ステップの使用量で、totalUsage はすべてのステップを対象とします。

実際のプロバイダーで検証済みの設定済みモデルを使用してください。統合を変更した後は、関連するツール/承認/エラー状態を含む複数ターンのストリームを型チェックし、テストしてください。

基本構成

[email protected]、@ai-sdk/[email protected]、[email protected]、React 19、TypeScript 5.9 で検証済みです。検証では tsc --noEmit と、モックモデルを使った 1 つのツールステップおよびその後の回答の実行を確認しました。文字列のモデルは AI Gateway 経由で解決されます。v7 では、system、stepCountIs、result.toUIMessageStreamResponse() はそれぞれ instructions、isStepCount、createUIMessageStreamResponse({ stream: toUIMessageStream({ stream: result.stream }) }) に変わります。

// app/api/chat/route.ts
import { convertToModelMessages, stepCountIs, streamText, tool, validateUIMessages,
  type InferUITools, type UIDataTypes, type UIMessage } from 'ai';
import { z } from 'zod';

const tools = {
  weather: tool({
    inputSchema: z.object({ city: z.string() }),
    execute: async ({ city }) => ({ city, celsius: 21 }),
  }),
};
export type ChatMessage = UIMessage<never, UIDataTypes, InferUITools<typeof tools>>;

export async function POST(req: Request) {
  const { messages } = await req.json();
  const uiMessages = await validateUIMessages<ChatMessage>({ messages, tools });
  const result = streamText({
    model: 'provider/model-id', // configured gateway ID, or a provider instance
    system: 'Answer briefly.',
    messages: await convertToModelMessages(uiMessages),
    tools,
    stopWhen: stepCountIs(5),
  });
  return result.toUIMessageStreamResponse();
}
// app/page.tsx
'use client';
import { useChat } from '@ai-sdk/react';
import { DefaultChatTransport } from 'ai';
import type { ChatMessage } from './api/chat/route';

const transport = new DefaultChatTransport<ChatMessage>({ api: '/api/chat' });

export default function Chat() {
  const { messages, sendMessage, status } = useChat<ChatMessage>({ transport });
  return (
    <form action={(form) => void sendMessage({ text: String(form.get('text')) })}>
      {messages.map((m) => <div key={m.id}>{m.parts.map((part, i) =>
        part.type === 'text' ? <p key={i}>{part.text}</p>
        : part.type === 'tool-weather' && part.state === 'output-available'
          ? <p key={i}>{part.output.city}: {part.output.celsius} °C</p> : null)}</div>)}
      <input name="text" disabled={status === 'submitted' || status === 'streaming'} />
    </form>
  );
}

機能に応じて参照する項目

  • エージェント:ループ制限、呼び出しオプション、コンテキスト。
  • Core 関数:出力とストリームの契約。
  • ツール:実行、承認、型付き状態。
  • UI フック:トランスポート、復元、ストリームのライフサイクル。
  • ミドルウェア:プロバイダーの仲介。
  • MCP:トランスポートとクリーンアップ。
  • ワークフロー:ループで明示的なオーケストレーションが必要な場合。
  • 例:バージョンに合った公式実装。

コメント