モデル
最終的にすべての エージェント は LLM を呼び出します。SDK はモデルを次の 2 つの軽量インターフェースの背後に抽象化します。
Model– 特定の API に対する リクエストを 1 回 行う方法を知っていますModelProvider– 人が読めるモデルの names(例:'gpt‑5.2')をModelインスタンスに解決します
日常的には通常、モデルの names と、時折 ModelSettings のみを扱います。
import { Agent } from '@openai/agents';
const agent = new Agent({ name: 'Creative writer', model: 'gpt-5.2',});デフォルトモデル
Section titled “デフォルトモデル”Agent の初期化時にモデルを指定しない場合、デフォルトモデルが使用されます。現在のデフォルトは互換性と低レイテンシのために gpt-4.1 です。アクセス可能であれば、より高品質のために エージェント を gpt-5.2 に設定し、明示的な modelSettings を維持することをおすすめします。
gpt-5.2 のような他のモデルに切り替えるには、エージェント を設定する方法が 2 つあります。
まず、カスタムモデルを設定していないすべての エージェント で特定のモデルを一貫して使用したい場合は、エージェント を実行する前に OPENAI_DEFAULT_MODEL 環境変数を設定します。
export OPENAI_DEFAULT_MODEL=gpt-5.2node my-awesome-agent.js次に、Runner インスタンスにデフォルトモデルを設定できます。エージェント にモデルを設定しない場合は、この Runner のデフォルトモデルが使用されます。
import { Runner } from '@openai/agents';
const runner = new Runner({ model: 'gpt‑4.1-mini' });GPT-5.x モデル
Section titled “GPT-5.x モデル”この方法で gpt-5.2 などの GPT-5.x モデルを使用する場合、SDK はデフォルトの modelSettings を適用します。ほとんどのユースケースで最適に機能する設定が適用されます。デフォルトモデルの推論負荷を調整するには、独自の modelSettings を指定してください:
import { Agent } from '@openai/agents';
const myAgent = new Agent({ name: 'My Agent', instructions: "You're a helpful agent.", // If OPENAI_DEFAULT_MODEL=gpt-5.2 is set, passing only modelSettings works. // It's also fine to pass a GPT-5.x model name explicitly: model: 'gpt-5.2', modelSettings: { reasoning: { effort: 'high' }, text: { verbosity: 'low' }, },});低レイテンシのためには、gpt-5.2 で reasoning.effort: "none" の使用をおすすめします。gpt-4.1 ファミリー(mini や nano のバリアントを含む)も、インタラクティブな エージェント アプリの構築に引き続き堅実な選択肢です。
非 GPT-5 モデル
Section titled “非 GPT-5 モデル”カスタムの modelSettings なしで 非 GPT-5 のモデル名を渡した場合、SDK はあらゆるモデルに互換性のある汎用の modelSettings にフォールバックします。
OpenAI プロバイダー
Section titled “OpenAI プロバイダー”デフォルトの ModelProvider は OpenAI の API を使って名前解決を行います。次の 2 つの別個のエンドポイントをサポートします:
| API | 用途 | setOpenAIAPI() の呼び出し |
|---|---|---|
| Chat Completions | 標準的なチャットと関数呼び出し | setOpenAIAPI('chat_completions') |
| Responses | 新しい ストリーミング ファーストの生成 API(ツール呼び出し、柔軟な出力) | setOpenAIAPI('responses') (default) |
import { setDefaultOpenAIKey } from '@openai/agents';
setDefaultOpenAIKey(process.env.OPENAI_API_KEY!); // sk-...ネットワーク設定をカスタマイズする必要がある場合は、setDefaultOpenAIClient(client) を使って独自の OpenAI クライアントを差し込むこともできます。
ModelSettings
Section titled “ModelSettings”ModelSettings は OpenAI のパラメーターを反映しますが、プロバイダーに依存しません。
| フィールド | 型 | 備考 |
|---|---|---|
temperature | number | 創造性と決定性のバランス |
topP | number | Nucleus サンプリング |
frequencyPenalty | number | 繰り返しトークンにペナルティ |
presencePenalty | number | 新しいトークンの使用を促進 |
toolChoice | 'auto' | 'required' | 'none' | string | ツール使用の強制 を参照 |
parallelToolCalls | boolean | サポートされる場合に関数呼び出しの並列化を許可 |
truncation | 'auto' | 'disabled' | トークンの切り詰め戦略 |
maxTokens | number | レスポンス内の最大トークン数 |
store | boolean | レスポンスを永続化して取得や RAG ワークフローに利用 |
promptCacheRetention | 'in-memory' | '24h' | null | サポートされる場合のプロバイダーのプロンプトキャッシュ保持を制御 |
reasoning.effort | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | gpt-5.x モデル向けの推論負荷 |
reasoning.summary | 'auto' | 'concise' | 'detailed' | モデルが返す推論サマリーの量を制御 |
text.verbosity | 'low' | 'medium' | 'high' | gpt-5.x など向けのテキスト冗長度 |
providerData | Record<string, any> | 基盤モデルに渡されるプロバイダー固有のパススルーオプション |
設定はどちらのレベルにも付与できます:
import { Runner, Agent } from '@openai/agents';
const agent = new Agent({ name: 'Creative writer', // ... modelSettings: { temperature: 0.7, toolChoice: 'auto' },});
// or globallynew Runner({ modelSettings: { temperature: 0.3 } });Runner レベルの設定は、競合するエージェント個別設定よりも優先されます。
エージェント は prompt パラメーターで構成でき、エージェント の挙動を制御するために使用される サーバー保存 のプロンプト設定を指示します。現在、このオプションは OpenAI の
Responses API を使用する場合のみサポートされます。
| フィールド | 型 | 備考 |
|---|---|---|
promptId | string | プロンプトの一意な識別子 |
version | string | 使用したいプロンプトのバージョン |
variables | object | プロンプトに代入する変数のキー/値ペア。値は文字列、またはテキスト・画像・ファイルのようなコンテンツ入力タイプにできます |
import { parseArgs } from 'node:util';import { Agent, run } from '@openai/agents';
/*NOTE: This example will not work out of the box, because the default prompt ID will notbe available in your project.
To use it, please:1. Go to https://platform.openai.com/chat/edit2. Create a new prompt variable, `poem_style`.3. Create a system prompt with the content: Write a poem in {{poem_style}}4. Run the example with the `--prompt-id` flag.*/
const DEFAULT_PROMPT_ID = 'pmpt_6965a984c7ac8194a8f4e79b00f838840118c1e58beb3332';const POEM_STYLES = ['limerick', 'haiku', 'ballad'];
function pickPoemStyle(): string { return POEM_STYLES[Math.floor(Math.random() * POEM_STYLES.length)];}
async function runDynamic(promptId: string) { const poemStyle = pickPoemStyle(); console.log(`[debug] Dynamic poem_style: ${poemStyle}`);
const agent = new Agent({ name: 'Assistant', prompt: { promptId, version: '1', variables: { poem_style: poemStyle }, }, });
const result = await run(agent, 'Tell me about recursion in programming.'); console.log(result.finalOutput);}
async function runStatic(promptId: string) { const agent = new Agent({ name: 'Assistant', prompt: { promptId, version: '1', variables: { poem_style: 'limerick' }, }, });
const result = await run(agent, 'Tell me about recursion in programming.'); console.log(result.finalOutput);}
async function main() { const args = parseArgs({ options: { dynamic: { type: 'boolean', default: false }, 'prompt-id': { type: 'string', default: DEFAULT_PROMPT_ID }, }, });
const promptId = args.values['prompt-id']; if (!promptId) { console.error('Please provide a prompt ID via --prompt-id.'); process.exit(1); }
if (args.values.dynamic) { await runDynamic(promptId); } else { await runStatic(promptId); }}
main().catch((error) => { console.error(error); process.exit(1);});tools や instructions のような追加の エージェント 設定は、保存済みプロンプトで設定している値を上書きします。
カスタムモデルプロバイダー
Section titled “カスタムモデルプロバイダー”独自のプロバイダーの実装は簡単です。ModelProvider と Model を実装し、プロバイダーを Runner コンストラクターに渡します:
import { ModelProvider, Model, ModelRequest, ModelResponse, ResponseStreamEvent,} from '@openai/agents-core';
import { Agent, Runner } from '@openai/agents';
class EchoModel implements Model { name: string; constructor() { this.name = 'Echo'; } async getResponse(request: ModelRequest): Promise<ModelResponse> { return { usage: {}, output: [{ role: 'assistant', content: request.input as string }], } as any; } async *getStreamedResponse( _request: ModelRequest, ): AsyncIterable<ResponseStreamEvent> { yield { type: 'response.completed', response: { output: [], usage: {} }, } as any; }}
class EchoProvider implements ModelProvider { getModel(_modelName?: string): Promise<Model> | Model { return new EchoModel(); }}
const runner = new Runner({ modelProvider: new EchoProvider() });console.log(runner.config.modelProvider.getModel());const agent = new Agent({ name: 'Test Agent', instructions: 'You are a helpful assistant.', model: new EchoModel(), modelSettings: { temperature: 0.7, toolChoice: 'auto' },});console.log(agent.model);OpenAI 以外のモデル向けの既製アダプターが必要な場合は、Vercel の AI SDK で任意モデルを指定 を参照してください。
トレーシングエクスポーター
Section titled “トレーシングエクスポーター”OpenAI プロバイダーを使用する場合、API キーを指定することで自動トレースエクスポートにオプトインできます:
import { setTracingExportApiKey } from '@openai/agents';
setTracingExportApiKey('sk-...');これによりトレースが OpenAI ダッシュボード に送信され、ワークフローの完全な実行グラフを確認できます。