Vercel AI SDK 6 : AI SDK Core – プロンプト・エンジニアリング

ツールを含むプロンプトを作成する場合、ツールの数と複雑さが増すにつれて、良い結果を得るのが技巧的になる可能性があります。
最良な結果を得るのに役立つ幾つかのヒントを紹介します。

Vercel AI SDK 6 : AI SDK Core – プロンプト・エンジニアリング

作成 : Masashi Okumura (@classcat.com)
作成日時 : 01/30/2026
バージョン : ai@6.0.62

* 本記事は ai-sdk.dev/docs の以下のページを参考にしています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

 

Vercel AI SDK 6.x : AI SDK Core – プロンプト・エンジニアリング

Tips

ツール向けのプロンプト

ツールを含むプロンプトを作成する場合、ツールの数と複雑さが増すにつれて、良い結果を得るのが技巧的になる可能性があります。

最良な結果を得るのに役立つ幾つかのヒントがあります :

  1. gpt-5 や gpt-4.1 のような、ツール呼び出しに優れたモデルを使用します。劣化モデルはツールを効果的かつ完璧に呼び出すのに苦労する場合が多いです。

  2. ツールの数を少なく、例えば 5 またはそれ未満に抑えます。

  3. ツールパラメータの複雑さを抑えます。ネストされた要素やオプションの要素、ユニオン等を多く含む、複雑な Zod スキーマはモデルが処理するのに困難となる可能性があります。

  4. ツール、パラメータ、パラメータのプロパティ等に意味のある名前を使用します。モデルに渡す情報が多いほど、望むことをより良く理解できます。

  5. 特定のプロパティの目的についてモデルにヒントを与えるには、Zod スキーマプロパティに .describe(“…”) を追加します。

  6. ツールの出力がモデルにとって不明瞭で、ツール間に依存関係がある場合には、ツールの description フィールドを使用して、ツール実行の出力について情報を提供します。

  7. モデルがツールの使用方法を理解するのを支援するため、ツール呼び出しの入出力例をプロンプトに含めることができます。ツールは JSON オブジェクトと連携するので、例は JSON を使用する必要があることを念頭においてください。

一般に、目標は、モデルに必要なすべての情報を明確な方法で提供することになるはずです。

 

ツール & 構造化データスキーマ

Zod スキーマから LLM 入力 (通常は JSON スキーマ) へのマッピングは、1対1 ではないので、必ずしも簡単ではありません。

 

Zod の日付

Zod は JavaScript の Date オブジェクトを想定しますが、モデルは日付を文字列として返します。z.string().datetime() または z.string().date() を使用して日付フォーマットを指定・検証し、Zod トランスフォーマーを使用して文字列を Date オブジェクトに変換できます。

Gateway

const result = await generateObject({
  model: "openai/gpt-4o-mini",
  schema: z.object({
    events: z.array(
      z.object({
        event: z.string(),
        date: z
          .string()
          .date()
          .transform(value => new Date(value)),
      }),
    ),
  }),
  prompt: 'List 5 important events from the year 2000.',
});

 

オプションのパラメータ

オプションパラメータを持つツールを使用する場合、厳密なスキーマ検証を使用する特定のプロバイダーとの互換性問題に遭遇する場合があります。

ℹ️ This is particularly relevant for OpenAI models with structured outputs (strict mode).

最大限の互換性のため、オプションのパラメータは .optional() ではなく、.nullable() を使用するのが良いです :

// This may fail with strict schema validation
const failingTool = tool({
  description: 'Execute a command',
  inputSchema: z.object({
    command: z.string(),
    workdir: z.string().optional(), // This can cause errors
    timeout: z.string().optional(),
  }),
});

// This works with strict schema validation
const workingTool = tool({
  description: 'Execute a command',
  inputSchema: z.object({
    command: z.string(),
    workdir: z.string().nullable(), // Use nullable instead
    timeout: z.string().nullable(),
  }),
});

 

Temperature 設定

ツール呼び出しとオブジェクト生成については、決定論的で一貫した結果を保証するために、temperature: 0 を使用することを勧めます :

Gateway

const result = await generateText({
  model: "openai/gpt-4o-mini",
  temperature: 0, // Recommended for tool calls
  tools: {
    myTool: tool({
      description: 'Execute a command',
      inputSchema: z.object({
        command: z.string(),
      }),
    }),
  },
  prompt: 'Execute the ls command',
});

低い temperature 値はモデル出力でランダム性を減じます、これはモデルが以下を必要とする場合に特に重要です :

  • 特定の形式で構造化データを生成する

  • 正しいパラメータで正確なツール呼び出しを行う

  • 厳密なスキーマに一貫して従う

 

デバッグ

警告の調査

すべてのプロバイダーが AI SDK のすべての機能をサポートしているわけではありません。プロバイダーがある機能をサポートしていない場合、例外を投げるか、警告を返します。プロンプト、ツールと設定がプロバイダーにより正しく処理されているか確認するには、呼び出しの警告を確認できます :

Gateway

const result = await generateText({
  model: "openai/gpt-4o-mini",
  prompt: 'Hello, world!',
});

console.log(result.warnings);

 

HTTP リクエスト・ボディ

raw HTTP リクエスト・ボディを公開しているモデル、例えば OpenAI については、それらを調査することができます。これは、モデルプロバイダーに送信される正確なペイロードをプロバイダー固有の方法で調べることを可能にします。

リクエスト・ボディはレスポンスの request.body プロパティで利用可能です :

Gateway

const result = await generateText({
  model: "openai/gpt-4o-mini",
  prompt: 'Hello, world!',
});

console.log(result.request.body);

 

以上