AI SDK 連携
Agents SDK は標準で、Responses API または Chat Completions API を介して OpenAI モデルと連携します。ただし、別のモデルを使用したい場合は、Vercel AI SDK がさまざまな対応モデルを提供しており、このアダプターを介して Agents SDK に導入できます。
-
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 “確定した出力テキストの正規化”一部のプロバイダーは、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は、Agentが AI SDK モデル上で実行できるように、そのモデルを適合させます。@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 “画像ツール出力”このアダプターは、関数ツールが返す ToolOutputImage の値を保持します。これには、リモート URL、base64 データ、OpenAI ファイル ID が含まれます。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(...) を使用します。
UI ストリームヘルパーは、AI SDK モデルアダプターがそのフローを開始できない場合でも、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 アプリを参照してください。