AI SDK 連携
Agents SDK は標準で、Responses API または Chat Completions API を介して OpenAI モデルと連携します。ただし、別のモデルを使用する場合は、Vercel AI SDK がサポートする各種モデルを、このアダプターを介して Agents SDK に導入できます。
セットアップ
Section titled “セットアップ”-
extensions パッケージをインストールして、AI SDK アダプターをインストールします。
Terminal window npm install @openai/agents-extensions -
Vercel の AI SDK から使用するモデルパッケージを選択し、インストールします。
Terminal window npm install @ai-sdk/openai -
アダプターとモデルをインポートして、エージェントに接続します。
アダプターのインポート import { openai } from '@ai-sdk/openai';import { aisdk } from '@openai/agents-extensions/ai-sdk'; -
エージェントが使用するモデルのインスタンスを初期化します。
モデルの作成 import { openai } from '@ai-sdk/openai';import { aisdk } from '@openai/agents-extensions/ai-sdk';const model = aisdk(openai('gpt-5.4'));
import { Agent, run } from '@openai/agents';
// Import the model package you installedimport { openai } from '@ai-sdk/openai';
// Import the adapterimport { aisdk } from '@openai/agents-extensions/ai-sdk';
// Create a model instance to be used by the agentconst model = aisdk(openai('gpt-5.4'));
// Create an agent with the modelconst agent = new Agent({ name: 'My Agent', instructions: 'You are a helpful assistant.', model,});
// Run the agent with the new modelrun(agent, 'What is the capital of Germany?');プロバイダーのメタデータの受け渡し
Section titled “プロバイダーのメタデータの受け渡し”メッセージとともにプロバイダー固有のオプションを送信する必要がある場合は、providerMetadata を介して渡します。値は基盤となる AI SDK モデルに直接転送されます。たとえば、Agents SDK の次の providerData は、
const providerData = { anthropic: { cacheControl: { type: 'ephemeral', }, },};AI SDK 連携を使用すると、次のようになります。
const providerMetadata = { anthropic: { cacheControl: { type: 'ephemeral', }, },};プロンプトキャッシュの保持
Section titled “プロンプトキャッシュの保持”プロバイダーが openai.responses である AI SDK モデルでは、モデルが AI SDK 仕様バージョン v3 または v4 を使用している場合、アダプターはストリーミングリクエストと非ストリーミングリクエストの両方で modelSettings.promptCacheRetention を転送します。Agents SDK の値 'in-memory' は AI SDK プロバイダーの値 'in_memory' に変換され、'24h' と null は変更されずに転送されます。
AI SDK v2 モデルはこのオプションをサポートしていないため、このオプションが設定されている場合、アダプターはモデルリクエストを行う前に UserError を発生させます。明示的な modelSettings.providerData.providerOptions.openai.promptCacheRetention の値は modelSettings.promptCacheRetention より優先され、アダプターはこの設定を他の AI SDK プロバイダーには転送しません。
この設定は従来の最大保持ポリシーを制御するもので、一部のモデルでのみサポートされています。現在のモデル互換性と新しいキャッシュ有効期間の制御については、プロンプトキャッシュの保持を参照してください。
PDF ファイル入力
Section titled “PDF ファイル入力”AI SDK アダプターは、Agents SDK の input_file コンテンツを、AI SDK v2、v3、v4 モデルが想定するファイルパート形式に変換します。PDF は次の形式で指定できます。
data:application/pdf;base64,...のような Base64 データ URL.pdfファイル名またはproviderData.mediaTypeのいずれかを伴う、空でない元の Base64.pdfパスまたはproviderData.mediaTypeのいずれかを伴う、公開 HTTP(S) URL
ファイル名または URL パスが .pdf で終わる場合、アダプターは application/pdf と推論します。それ以外の場合は、providerData: { mediaType: 'application/pdf' } を明示的に設定してください。アダプターは公開 URL をダウンロードせずに AI SDK モデルへ直接転送するため、選択したプロバイダーとモデルが URL ベースの PDF ファイルパートをサポートしている必要があります。サポートしていない場合は、Base64 表現を使用してください。OpenAI のファイル ID は AI SDK アダプター経由ではサポートされていません。ファイルデータまたは公開 URL を渡すか、OpenAI Responses モデルを直接使用してください。
確定済み出力テキストの正規化
Section titled “確定済み出力テキストの正規化”一部のプロバイダーは、JSON コードフェンスなどの余分なラッピングを含むプレーンテキストとして構造化出力を返します。Agents ランタイムが最終出力を検証する前にプロバイダー固有のクリーンアップが必要な場合は、アダプターの作成時に transformOutputText を渡します。
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 は、非ストリーミングレスポンスでは確定済みのアシスタントテキストに対して、ストリーミングレスポンスでは最後の response_done イベントに対して実行されます。増分の output_text_delta イベントは変更しません。
modelSettings.retry は AI SDK ベースのモデルでも機能します。これは、リトライがデフォルトの OpenAI プロバイダーだけでなく、Agents ランタイムによって実装されているためです。
つまり、他の場所で使用するものと同じリトライ設定を適用できます。
Agent、Runner、またはその両方にmodelSettings.retryを設定します。networkError()、httpStatus([...])、providerSuggested()などのretryPoliciesを組み合わせます。providerSuggested()が有効なのは、ラップされた AI SDK モデルがアダプターを介してリトライに関する推奨情報を提示できる場合に限られることに注意してください。
aisdk(openai(...)) を使用した完全な例については、examples/ai-sdk/retry.tsを参照してください。ストリーミングとステートフルなフォローアップリクエストの安全境界を含むリトライ API 自体については、モデルを参照してください。
適切な連携の選択
Section titled “適切な連携の選択”@openai/agents-extensions には、関連する 2 つの連携があります。
@openai/agents-extensions/ai-sdkは AI SDK モデルを適応させ、そのモデル上でAgentを実行できるようにします。@openai/agents-extensions/ai-sdk-uiは、ストリーミングされる Agents SDK の実行を適応させ、AI SDK UI ルートが標準のストリーミングResponseを返せるようにします。
AI SDK モデルに関する注意事項
Section titled “AI SDK モデルに関する注意事項”@openai/agents-extensions/ai-sdkアダプターはまだベータ版であるため、選択したプロバイダー、特に小規模なプロバイダーでは慎重にテストすることをおすすめします。- OpenAI モデルを使用する場合は、このアダプターではなく、デフォルトの OpenAI モデルプロバイダーを使用してください。
- サポートされる AI SDK プロバイダーは、
specificationVersionとしてv2、v3、またはv4を公開する必要があります。以前の v1 プロバイダー形式が必要な場合は、examples/ai-sdk-v1からモジュールをプロジェクトにコピーしてください。 - このアダプター経由でコンピューターツールを使用する場合は、ディスプレイのメタデータが必要です。ツールに
environmentとdimensionsの両方のメタデータが含まれていることを確認してください。 - Responses の遅延ツール読み込みフローは、ここではサポートされていません。これには、
toolNamespace()、deferLoading: trueを指定した関数ツール、toolSearchTool()が含まれます。ツール検索が必要な場合は、OpenAI Responses モデルを直接使用してください。ツールとモデルを参照してください。 - Programmatic Tool Calling は AI SDK モデルアダプターではサポートされていません。
programmaticToolCallingTool()、allowedCallersに'programmatic'を含むツール、Programmatic Tool Calling の履歴項目、Responses のoutputSchemaは拒否されます。これらの機能を使用するには、OpenAI Responses モデルを直接使用してください。
画像ツールの出力
Section titled “画像ツールの出力”アダプターは、リモート URL、Base64 データ、OpenAI のファイル ID を含め、関数ツールから返された ToolOutputImage の値を保持します。AI SDK v2 モデルは media パートを受け取ります。AI SDK v3 モデルは image-url、image-data、または image-file-id パートを受け取ります。AI SDK v4 モデルは、データが URL、インラインデータ、またはファイル ID のプロバイダー参照として表現された file パートを受け取ります。これにより、サポートされる各モデルバージョンは元の画像表現を利用できます。
完全な例については、examples/ai-sdk/image-tool-output.tsを参照してください。
AI SDK UI ストリームヘルパー
Section titled “AI SDK UI ストリームヘルパー”@openai/agents-extensions/ai-sdk-ui は、Agents SDK のストリームを AI SDK UI ルートに接続するためのレスポンスヘルパーを提供します。
- プレーンテキストのストリーミングレスポンスには
createAiSdkTextStreamResponse(source, options?) - 低レベルの
ReadableStream<UIMessageChunk>にはcreateAiSdkUiMessageStream(source) UIMessageChunkのストリーミングレスポンスにはcreateAiSdkUiMessageStreamResponse(source, options?)
これらのヘルパーは、StreamedRunResult、ストリームに似たソース、または互換性のあるラッパーオブジェクトを受け付けます。レスポンスヘルパーは、ストリーミングに適したヘッダーを持つ Response を返します。
ルートから AI SDK レスポンスを直接返す場合は、createAiSdkUiMessageStreamResponse(...) を使用します。保守されている Agents SDK から AI SDK の UIMessageChunk への変換を引き続き利用しながら、レスポンスまたはレンダリングレイヤーを独自に管理する場合は、createAiSdkUiMessageStream(...) を使用します。プレーンテキストのみが必要な場合は、createAiSdkTextStreamResponse(...) を使用します。
AI SDK モデルアダプター自体は Programmatic Tool Calling のフローを開始できませんが、UI ストリームヘルパーは、Programmatic Tool Calling を使用するストリーミングされた OpenAI Responses の実行をラップできます。プログラム項目は programmatic_tool_calling ツール入力として出力され、対応するプログラム実行結果は program_output ツール出力として出力されます。
レスポンスヘルパーでは、options を介してオプションのレスポンス設定も指定できます。
headers: ストリーミングレスポンスにマージする追加のレスポンスヘッダーstatus: 返されるResponseの HTTP ステータスコードstatusText: 返されるResponseの HTTP ステータステキスト
低レベルの UI メッセージストリームの例:
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 ルートの例:
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 ルートの例:
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 アプリを参照してください。