コンテンツにスキップ

AI SDK 連携

Agents SDK は、初期設定のままで Responses API または Chat Completions API を通じて OpenAI モデルと連携できます。ただし、別のモデルを使いたい場合は、Vercel AI SDK が対応モデルを幅広く提供しており、このアダプターを通じて Agents SDK に組み込めます。

  1. extensions パッケージをインストールして、 AI SDK アダプターを導入します:

    Terminal window
    npm install @openai/agents-extensions
  2. Vercel’s AI SDK から使いたいモデルパッケージを選び、インストールします:

    Terminal window
    npm install @ai-sdk/openai
  3. アダプターとモデルをインポートして、エージェントに接続します:

    Import the adapter
    import { openai } from '@ai-sdk/openai';
    import { aisdk } from '@openai/agents-extensions/ai-sdk';
  4. エージェントで使用するモデルのインスタンスを初期化します:

    Create the model
    import { openai } from '@ai-sdk/openai';
    import { aisdk } from '@openai/agents-extensions/ai-sdk';
    const model = aisdk(openai('gpt-5.4'));
AI SDK Setup
import { Agent, run } from '@openai/agents';
// Import the model package you installed
import { openai } from '@ai-sdk/openai';
// Import the adapter
import { aisdk } from '@openai/agents-extensions/ai-sdk';
// Create a model instance to be used by the agent
const model = aisdk(openai('gpt-5.4'));
// Create an agent with the model
const agent = new Agent({
name: 'My Agent',
instructions: 'You are a helpful assistant.',
model,
});
// Run the agent with the new model
run(agent, 'What is the capital of Germany?');

プロバイダーメタデータの受け渡し

Section titled “プロバイダーメタデータの受け渡し”

メッセージと一緒にプロバイダー固有のオプションを送る必要がある場合は、providerMetadata を通して渡します。値は基盤となる AI SDK モデルに直接転送されます。たとえば、 Agents SDK で以下の providerData

Agents SDK providerData
const providerData = {
anthropic: {
cacheControl: {
type: 'ephemeral',
},
},
};

は、

AI SDK providerMetadata
const providerMetadata = {
anthropic: {
cacheControl: {
type: 'ephemeral',
},
},
};

AI SDK 連携を使用するとこのようになります。

確定済み出力テキストの正規化

Section titled “確定済み出力テキストの正規化”

一部のプロバイダーは、 JSON のコードフェンスのような余分なラッピング付きのプレーンテキストとして structured outputs を返します。 Agents runtime が最終出力を検証する前にプロバイダー固有のクリーンアップが必要な場合は、アダプター作成時に transformOutputText を渡します:

Normalize finalized output text
import { openai } from '@ai-sdk/openai';
import { aisdk } from '@openai/agents-extensions/ai-sdk';
const model = aisdk(openai('gpt-5.4'), {
transformOutputText(text) {
return text.match(/```(?:json)?\s*([\s\S]*?)\s*```/)?.[1]?.trim() ?? text;
},
});

transformOutputText は、非ストリーミング応答では確定済みの assistant テキストに対して、ストリーミング応答では最終的な response_done イベントに対して実行されます。増分の output_text_delta イベントは変更しません。

modelSettings.retry は AI SDK ベースのモデルでも機能します。これは、リトライが既定の OpenAI プロバイダーだけでなく Agents runtime 側で実装されているためです。

つまり、他の場所で使うのと同じリトライ設定を適用できます:

  • AgentRunner、またはその両方で modelSettings.retry を設定する
  • networkError()httpStatus([...])providerSuggested() などの retryPolicies を組み合わせる
  • providerSuggested() が役立つのは、ラップされた AI SDK モデルがアダプター経由でリトライに関する助言を公開できる場合だけであることに注意する

aisdk(openai(...)) を使った完全な例については、examples/ai-sdk/retry.ts を参照してください。ストリーミングや状態を持つ後続リクエストにおける安全境界を含むリトライ API 自体については、モデルガイド を参照してください。

@openai/agents-extensions には、関連する連携が 2 つあります:

  • @openai/agents-extensions/ai-sdk は AI SDK モデルをアダプトし、Agent がその上で動作できるようにします
  • @openai/agents-extensions/ai-sdk-ui はストリーミングされた Agents SDK の実行をアダプトし、 AI SDK UI ルートが標準のストリーミング Response を返せるようにします
  • @openai/agents-extensions/ai-sdk アダプターはまだ beta のため、特に小規模なプロバイダーでは、選択したプロバイダーで慎重にテストすることをおすすめします
  • OpenAI モデルを使う場合は、このアダプターではなく既定の OpenAI モデルプロバイダーを優先してください
  • 対応する AI SDK プロバイダーは specificationVersion v2 または v3 を公開している必要があります。古い v1 スタイルのプロバイダーが必要な場合は、examples/ai-sdk-v1 からモジュールをプロジェクトにコピーしてください
  • コンピュータツールをこのアダプター経由で使う場合は、表示用メタデータが必要です。ツールに environmentdimensions の両方のメタデータが含まれていることを確認してください
  • Deferred Responses のツール読み込みフローはここではサポートされていません。これには toolNamespace()deferLoading: true を持つ関数ツール、toolSearchTool() が含まれます。ツール検索が必要な場合は、OpenAI Responses モデルを直接使用してください。ツールガイドモデルガイド を参照してください

@openai/agents-extensions/ai-sdk-ui は、Agents SDK のストリームを AI SDK UI ルートに接続するためのレスポンスヘルパーを提供します:

  • createAiSdkTextStreamResponse(source, options?): プレーンテキストのストリーミングレスポンス用
  • createAiSdkUiMessageStream(source): 低レベルな ReadableStream<UIMessageChunk>
  • createAiSdkUiMessageStreamResponse(source, options?): UIMessageChunk のストリーミングレスポンス用

これらのヘルパーは、StreamedRunResult、ストリームライクなソース、または互換性のあるラッパーオブジェクトを受け取れます。レスポンスヘルパーは、ストリーミング向けヘッダー付きの Response を返します。

ルートが AI SDK のレスポンスを直接返す必要がある場合は createAiSdkUiMessageStreamResponse(...) を使います。保守された Agents SDK から AI SDK の UIMessageChunk への変換を使いつつ、レスポンスやレンダリング層を自分で管理したい場合は createAiSdkUiMessageStream(...) を使います。プレーンテキストだけが必要な場合は createAiSdkTextStreamResponse(...) を使います。

レスポンスヘルパーは、options を通じて任意のレスポンス設定も受け付けます:

  • headers: ストリーミングレスポンスにマージする追加のレスポンスヘッダー
  • status: 返される Response の HTTP ステータスコード
  • statusText: 返される Response の HTTP ステータステキスト

低レベルな UI メッセージストリームの例:

UI message stream
import { Agent, run } from '@openai/agents';
import { createAiSdkUiMessageStream } from '@openai/agents-extensions/ai-sdk-ui';
const agent = new Agent({
name: 'Assistant',
instructions: 'Reply with a short answer.',
});
export async function createStream() {
const stream = await run(agent, 'Hello there.', { stream: true });
return createAiSdkUiMessageStream(stream);
}

UI メッセージストリーミング用の Next.js ルート例:

UI message stream response
import { Agent, run } from '@openai/agents';
import { createAiSdkUiMessageStreamResponse } from '@openai/agents-extensions/ai-sdk-ui';
const agent = new Agent({
name: 'Assistant',
instructions: 'Reply with a short answer.',
});
export async function POST() {
const stream = await run(agent, 'Hello there.', { stream: true });
return createAiSdkUiMessageStreamResponse(stream);
}

テキスト専用ストリーミング用の Next.js ルート例:

Text stream response
import { Agent, run } from '@openai/agents';
import { createAiSdkTextStreamResponse } from '@openai/agents-extensions/ai-sdk-ui';
const agent = new Agent({
name: 'Assistant',
instructions: 'Reply with a short answer.',
});
export async function POST() {
const stream = await run(agent, 'Hello there.', { stream: true });
return createAiSdkTextStreamResponse(stream);
}

エンドツーエンドの使用例については、このリポジトリの examples/ai-sdk-ui アプリを参照してください。