コンテンツにスキップ

ツール

ツールにより、エージェントは アクションを実行 できます。データの取得、外部 API の呼び出し、コードの実行、さらにはコンピュータの使用も可能です。JavaScript/TypeScript SDK は 7 つのカテゴリーをサポートしています。

どのエージェントがタスクを担当すべきか分かっており、そのエージェントに機能を与えたい場合は、エージェント を読んだ後でこのページを読んでください。委任パターンをまだ検討中の場合は、エージェントオーケストレーション を参照してください。

  1. OpenAI がホストするツール – OpenAI サーバー上でモデルと並行して実行されます。(Web 検索、ファイル検索、Code Interpreter、画像生成、ツール検索)
  2. 組み込み実行ツール – モデルの外部で実行される、SDK 提供のツールです。(コンピュータ操作と apply_patch はローカルで実行されます。shell はローカルまたはホストされたコンテナで実行できます)
  3. 関数ツール – 任意のローカル関数を JSON スキーマでラップし、LLM が呼び出せるようにします。
  4. Agents as tools – エージェント全体を呼び出し可能なツールとして公開します。
  5. MCP サーバー – Model Context Protocol サーバー(ローカルまたはリモート)を接続します。
  6. サンドボックス機能 – ワークスペーススコープの shell、filesystem、skills、memory、compaction ツールを SandboxAgent に接続します。
  7. 実験的: Codex ツール – Codex SDK を関数ツールとしてラップし、ワークスペースを認識したタスクを実行します。

このガイドの残りでは、まず各ツールカテゴリーを説明し、その後で横断的なツール選択とプロンプトのガイダンスをまとめます。

1. 組み込みツール(Hosted)(OpenAI Responses API)

Section titled “1. 組み込みツール(Hosted)(OpenAI Responses API)”

OpenAIResponsesModel を使用する場合、次の組み込みツールを追加できます。

ツール型文字列目的
Web 検索'web_search'インターネット検索
ファイル / retrieval 検索'file_search'OpenAI 上でホストされているベクトルストアをクエリします
Code Interpreter'code_interpreter'サンドボックス環境でコードを実行します
画像生成'image_generation'テキストに基づいて画像を生成します
ツール検索'tool_search'遅延された関数ツール、名前空間、検索可能な MCP ツールを実行時に読み込みます
組み込みツール(Hosted)
import {
Agent,
codeInterpreterTool,
fileSearchTool,
imageGenerationTool,
webSearchTool,
} from '@openai/agents';
const agent = new Agent({
name: 'Travel assistant',
tools: [
webSearchTool({ searchContextSize: 'medium' }),
fileSearchTool('VS_ID', { maxNumResults: 3 }),
codeInterpreterTool(),
imageGenerationTool({ size: '1024x1024' }),
],
});

SDK は、ホスト型ツール定義を返すヘルパー関数を提供します。

ヘルパー関数注記
webSearchTool(options?)searchContextSizeuserLocationfilters.allowedDomains など、JS フレンドリーなオプション
fileSearchTool(ids, options?)1 つ以上のベクトルストア ID を最初の引数として受け取り、maxNumResultsincludeSearchResultsrankingOptions、フィルターなどのオプションも受け取ります
codeInterpreterTool(options?)container が指定されていない場合、既定で自動管理コンテナを使用します
imageGenerationTool(options?)modelsizequalitybackgroundinputFidelityinputImageMaskmoderationoutputCompressionpartialImages、出力形式などの画像生成設定をサポートします
toolSearchTool(options?)組み込みの tool_search ヘルパーを追加します。遅延関数ツールや、deferLoading: true を設定したホスト型 MCP ツールと組み合わせて使用します。既定ではホスト型実行をサポートし、execution: 'client'execute を指定するとクライアント実行もサポートします

これらのヘルパーは、JavaScript/TypeScript フレンドリーなオプション名を、基盤となる OpenAI Responses API ツールペイロードにマッピングします。ランキングオプションやセマンティックフィルターなど、完全なツールスキーマと高度なオプションについては、公式の OpenAI ツールガイド を参照してください。また、現在の組み込みツール検索フローとモデルの利用可否については、公式の ツール検索ガイド を参照してください。


これらのツールは SDK に組み込まれていますが、実行自体はモデルのレスポンスの外側で行われます。

  • コンピュータ操作Computer インターフェイスを実装し、computerTool() に渡します。これは常に、あなたが提供するローカルの Computer 実装に対して実行されます。
  • Shell – ローカルの Shell 実装を提供するか、shellTool({ environment }) でホスト型コンテナ環境を設定します。
  • Apply patchEditor インターフェイスを実装し、applyPatchTool() に渡します。これは常に、あなたが提供するローカルの Editor 実装に対して実行されます。
  • サンドボックス shell と filesystem ツール – これらのアクションをサンドボックスワークスペース内で実行する必要がある場合は、SandboxAgent 上で shell()filesystem()skills()memory()、または compaction() を使用します。

ツール呼び出しのリクエストは引き続きモデルによって行われますが、作業はアプリケーションまたは設定された実行環境が実行します。

サンドボックス機能ツールは、プロセス全体の組み込みツールとは異なります。これらは、現在の SandboxAgent 実行におけるライブのサンドボックスセッションにバインドされます。ツールがアプリケーションプロセスではなく、エージェントの分離されたワークスペース上で動作する必要がある場合は、クイックスタート を使用してください。

組み込み実行ツール
import {
Agent,
applyPatchTool,
computerTool,
shellTool,
Computer,
Editor,
Shell,
} from '@openai/agents';
const computer: Computer = {
environment: 'browser',
dimensions: [1024, 768],
screenshot: async () => '',
click: async () => {},
doubleClick: async () => {},
scroll: async () => {},
type: async () => {},
wait: async () => {},
move: async () => {},
keypress: async () => {},
drag: async () => {},
};
const shell: Shell = {
run: async () => ({
output: [
{
stdout: '',
stderr: '',
outcome: { type: 'exit', exitCode: 0 },
},
],
}),
};
const editor: Editor = {
createFile: async () => ({ status: 'completed' }),
updateFile: async () => ({ status: 'completed' }),
deleteFile: async () => ({ status: 'completed' }),
};
const agent = new Agent({
name: 'Local tools agent',
model: 'gpt-5.4',
tools: [
computerTool({ computer }),
shellTool({ shell, needsApproval: true }),
applyPatchTool({ editor, needsApproval: true }),
],
});

computerTool() は次のいずれかを受け取ります。

  • 具体的な Computer インスタンス
  • 実行ごとに Computer を作成する初期化関数
  • 実行スコープのセットアップとティアダウンが必要な場合の { create, dispose } を持つプロバイダーオブジェクト

OpenAI の現在のコンピュータ操作パスを使用するには、gpt-5.4 のようなコンピュータ対応モデルを設定します。リクエストモデルが明示されている場合、SDK は GA の組み込み computer ツール形式を送信します。有効なモデルが保存済みプロンプトや別の古い連携から来ている場合は、modelSettings.toolChoice: 'computer' で明示的に GA パスを選択しない限り、SDK は互換性のために従来の computer_use_preview ワイヤ形式を維持します。

GA の computer 呼び出しでは、単一の computer_call 内にバッチ化された actions[] を含めることができます。SDK はそれらを順番に実行し、各アクションに対して needsApproval を評価し、最終的なスクリーンショットをツール出力として返します。interruption.rawItem から承認 UI を構築する場合は、存在する場合は actions を読み取り、従来のプレビュー項目では action にフォールバックしてください。

影響の大きいコンピュータ操作をユーザーレビューのために一時停止する必要がある場合は needsApproval を使用し、computer 呼び出しに対して報告された保留中の安全性チェックを承認または拒否したい場合は onSafetyCheck を使用します。モデル側のガイダンスと移行の詳細については、公式の OpenAI コンピュータ操作ガイド とその 移行ノート を参照してください。

shellTool() には 2 つのモードがあります。

  • ローカルモード: shell を提供し、必要に応じて environment: { type: 'local', skills }、さらに自動承認処理のために needsApprovalonApproval を指定します。
  • ホスト型コンテナモード: type: 'container_auto' または type: 'container_reference' を持つ environment を提供します。

ローカルモードでは、environment.skills により、namedescription、filesystem の path でローカルスキルをマウントできます。

ホスト型コンテナモードでは、次のいずれかを使って shellTool({ environment }) を設定します。

  • type: 'container_auto' で、その実行用の管理コンテナを作成します。
  • type: 'container_reference' で、containerId により既存のコンテナを再利用します。

ホスト型の container_auto 環境は次をサポートします。

  • domainSecrets を含む許可リストなどの networkPolicy
  • アップロード済みファイルをマウントするための fileIds
  • コンテナサイズ指定のための memoryLimit
  • skill_reference またはインライン zip バンドルによる skills

ホスト型 shell 環境では、実行がローカルプロセスではなくホスト型コンテナ環境で行われるため、shellneedsApprovalonApproval は受け付けません。

エンドツーエンドの使用方法については、examples/tools/local-shell.tsexamples/tools/container-shell-skill-ref.tsexamples/tools/container-shell-inline-skill.ts を参照してください。

applyPatchTool()shellTool() のローカル承認フローを反映しています。ファイル編集の前に一時停止するには needsApproval を使用し、アプリレベルのコールバックで自動承認または拒否したい場合は onApproval を使用します。


tool() ヘルパーを使うと、任意の 関数をツールに変換できます。

Zod パラメーターを使った関数ツール
import { tool } from '@openai/agents';
import { z } from 'zod';
const getWeatherTool = tool({
name: 'get_weather',
description: 'Get the weather for a given city',
parameters: z.object({ city: z.string() }),
async execute({ city }) {
return `The weather in ${city} is sunny.`;
},
});
フィールド必須説明
nameいいえ既定では関数名(例: get_weather)になります
descriptionはいLLM に表示される、明確で人間が読める説明
parametersはいZod スキーマまたは元の JSON スキーマオブジェクトのいずれかです。Zod パラメーターは自動的に strict モードを有効にします
strictいいえtrue(既定)の場合、引数が検証に失敗すると SDK はモデルエラーを返します。あいまいなマッチングには false を設定します
executeはい(args, context, details) => string | unknown | Promise<...> – ビジネスロジックです。文字列以外の出力はモデル向けにシリアライズされます。context は任意の RunContext です。details には toolCallresumeStatesignal などのメタデータが含まれます
errorFunctionいいえ内部エラーをユーザーに見える文字列に変換するためのカスタムハンドラー (context, error) => string
timeoutMsいいえ呼び出しごとのタイムアウト(ミリ秒)。0 より大きく、2147483647 以下である必要があります
timeoutBehaviorいいえタイムアウトモード: error_as_result(既定)はモデルに見えるタイムアウトメッセージを返し、raise_exceptionToolTimeoutError を投げます
timeoutErrorFunctionいいえtimeoutBehaviorerror_as_result の場合のタイムアウト出力用カスタムハンドラー (context, timeoutError) => string
needsApprovalいいえ実行前に人間の承認を要求します。人間の介入(HITL) を参照してください
isEnabledいいえ実行ごとにツールを条件付きで公開します。boolean または述語を受け取ります
inputGuardrailsいいえツール実行前に実行されるガードレールです。拒否または例外を投げることができます。ガードレール を参照してください
outputGuardrailsいいえツール実行後に実行されるガードレールです。拒否または例外を投げることができます。ガードレール を参照してください

各関数ツールの呼び出しを制限するには、timeoutMs を使用します。

  • timeoutBehavior: 'error_as_result'(既定)は、Tool '<name>' timed out after <timeoutMs>ms. をモデルに返します。
  • timeoutBehavior: 'raise_exception'ToolTimeoutError を投げます。これは エージェントの実行 の一部として捕捉できます。
  • timeoutErrorFunction により、error_as_result モードでのタイムアウト文言をカスタマイズできます。
  • タイムアウトは details.signal を中断するため、長時間実行されるツールはキャンセルをリッスンしていればすばやく停止できます。

関数ツールを直接呼び出す場合は、通常のエージェント実行と同じタイムアウト動作を適用するために invokeFunctionTool を使用します。

無効または部分的な入力をモデルに 推測 させる必要がある場合は、元の JSON スキーマを使用するときに strict モードを無効にできます。

非 strict JSON スキーマツール
import { tool } from '@openai/agents';
interface LooseToolInput {
text: string;
}
const looseTool = tool({
description: 'Echo input; be forgiving about typos',
strict: false,
parameters: {
type: 'object',
properties: { text: { type: 'string' } },
required: ['text'],
additionalProperties: true,
},
execute: async (input) => {
// because strict is false we need to do our own verification
if (typeof input !== 'object' || input === null || !('text' in input)) {
return 'Invalid input. Please try again';
}
return (input as LooseToolInput).text;
},
});

ツール検索による遅延ツール読み込み

Section titled “ツール検索による遅延ツール読み込み”

ツール検索により、すべてのスキーマを事前に送信するのではなく、モデルが実行時に必要なツール定義だけを読み込めます。SDK では、遅延されたトップレベルの関数ツール、toolNamespace() グループ、deferLoading: true を設定したホスト型 MCP ツールを扱うための仕組みです。

ツール検索は、Responses API でこれをサポートする GPT-5.4 以降のモデルリリースでのみ使用してください。

ツール検索による遅延ツール読み込み
import { Agent, tool, toolNamespace, toolSearchTool } from '@openai/agents';
import { z } from 'zod';
const customerIdParams = z.object({
customerId: z.string().describe('The customer identifier to look up.'),
});
// Keep a standalone deferred tool at the top level when it represents a
// single searchable capability that does not need a shared namespace.
const shippingLookup = tool({
name: 'get_shipping_eta',
description: 'Look up a shipment ETA by customer identifier.',
parameters: customerIdParams,
deferLoading: true,
async execute({ customerId }) {
return {
customerId,
eta: '2026-03-07',
carrier: 'Priority Express',
};
},
});
// Group related tools into a namespace when one domain description should
// cover several deferred tools and let tool search load them together.
const crmTools = toolNamespace({
name: 'crm',
description: 'CRM tools for customer profile lookups.',
tools: [
tool({
name: 'get_customer_profile',
description: 'Fetch a basic customer profile.',
parameters: customerIdParams,
deferLoading: true,
async execute({ customerId }) {
return {
customerId,
tier: 'enterprise',
};
},
}),
],
});
const agent = new Agent({
name: 'Operations assistant',
model: 'gpt-5.4',
// Mixing namespaced and top-level deferred tools in one request is supported.
tools: [shippingLookup, ...crmTools, toolSearchTool()],
});

この例では意図的に両方のスタイルを混在させています。

  • shippingLookup は、単独の検索可能な機能であるためトップレベルのままです。
  • crmTools は、関連する CRM ツールが 1 つの高レベルなラベルと説明を共有するため、toolNamespace() を使用します。
  • 名前空間化された遅延ツールとトップレベルの遅延ツールを同じリクエストで混在させることがサポートされています。ツール検索は、crm のような名前空間パスと、get_shipping_eta のようなトップレベルパスの両方を読み込めます。

ツール検索を使用する場合:

  • 各遅延関数ツールに deferLoading: true を指定します。
  • 複数の関連ツールで 1 つのドメイン説明を共有し、グループとして読み込む必要がある場合は、toolNamespace({ name, description, tools }) を使用します。
  • 単一の独立した機能であり、ツール名自体が適切な検索対象である場合は、ツールをトップレベルのままにします。
  • 遅延関数ツールまたはホスト型 MCP ツールが deferLoading: true を使用する場合は、必ず同じ tools 配列に toolSearchTool() を追加します。
  • modelSettings.toolChoice'auto' のままにします。SDK は、組み込みの tool_search ツールや遅延関数ツールを名前で強制することを拒否します。
  • ホスト型実行が既定です。toolSearchTool({ execution: 'client', execute }) を設定した場合、標準の run() ループは組み込みの { paths: string[] } クライアントクエリ形式のみをサポートします。カスタムのクライアント側スキーマには、独自の Responses ループが必要です。
  • 名前空間には即時メンバーと遅延メンバーを混在させることができます。即時メンバーはツール検索なしで呼び出し可能なままで、同じ名前空間内の遅延メンバーはオンデマンドで読み込まれます。
  • 遅延関数ツールと toolNamespace() は Responses 専用です。Chat Completions はそれらを拒否し、AI SDK アダプターは遅延 Responses ツール読み込みフローをサポートしません。

会話を完全にハンドオフせずに、あるエージェントに別のエージェントを 支援 させたい場合があります。その場合は agent.asTool() を使用します。

agent.asTool()handoff() のどちらを選ぶかまだ検討中の場合は、エージェントエージェントオーケストレーション のパターンを比較してください。

Agents as tools
import { Agent } from '@openai/agents';
const summarizer = new Agent({
name: 'Summarizer',
instructions: 'Generate a concise summary of the supplied text.',
});
const summarizerTool = summarizer.asTool({
toolName: 'summarize_text',
toolDescription: 'Generate a concise summary of the supplied text.',
});
const mainAgent = new Agent({
name: 'Research assistant',
tools: [summarizerTool],
});

内部では SDK が次を行います。

  • 単一の input パラメーターを持つ関数ツールを作成します。
  • ツールが呼び出されたときに、その入力でサブエージェントを実行します。
  • 最後のメッセージ、または customOutputExtractor によって抽出された出力を返します。

エージェントをツールとして実行すると、Agents SDK は既定の設定で runner を作成し、関数実行内でその runner を使ってエージェントを実行します。runConfigrunOptions のプロパティを指定したい場合は、それらを asTool() メソッドに渡して runner の動作をカスタマイズできます。

Human in the loop (人間の介入) フローや条件付きツール可用性と連携するために、asTool() オプションを通じてエージェントツールに needsApprovalisEnabled を設定することもできます。

customOutputExtractor 内では、現在の Agent.asTool() 呼び出しを調べるために result.agentToolInvocation を使用します。このコールバックでは結果は常に Agent.asTool() から来るため、agentToolInvocation は常に定義され、toolNametoolCallIdtoolArguments を公開します。通常のアプリコンテキストには result.runContext を使用し、ツール入力には toolInput を使用します。このメタデータは現在のネストされた呼び出しにスコープされ、RunState にはシリアライズされません。

エージェントツール呼び出しメタデータの読み取り
import { Agent } from '@openai/agents';
const billingAgent = new Agent({
name: 'Billing Agent',
instructions: 'Handle billing questions and subscription changes.',
});
const billingTool = billingAgent.asTool({
toolName: 'billing_agent',
toolDescription: 'Handles customer billing questions.',
customOutputExtractor(result) {
console.log('tool', result.agentToolInvocation.toolName);
// Direct invoke() calls may not have a model-generated tool call id.
console.log('call', result.agentToolInvocation.toolCallId);
console.log('args', result.agentToolInvocation.toolArguments);
return String(result.finalOutput ?? '');
},
});
const orchestrator = new Agent({
name: 'Support Orchestrator',
instructions: 'Delegate billing questions to the billing agent tool.',
tools: [billingTool],
});

agent.asTool() の高度な構造化入力オプション:

  • inputBuilder: 構造化ツール引数を、ネストされたエージェント入力ペイロードにマッピングします。
  • includeInputSchema: スキーマをより強く意識した動作のために、入力 JSON スキーマをネストされた実行に含めます。
  • resumeState: ネストされたシリアライズ済み RunState を再開するときのコンテキスト照合戦略を制御します。'merge'(既定)はライブの承認/コンテキスト状態をシリアライズ済み状態にマージし、'replace' は代わりに現在の実行コンテキストを使用し、'preferSerialized' はシリアライズ済みコンテキストを変更せずに再開します。

エージェントツールからのストリーミングイベント

Section titled “エージェントツールからのストリーミングイベント”

エージェントツールは、ネストされたすべての実行イベントをアプリにストリーミングできます。ツールの構築方法に合うフックスタイルを選んでください。

ストリーミング対応のエージェントツール
import { Agent } from '@openai/agents';
const billingAgent = new Agent({
name: 'Billing Agent',
instructions: 'Answer billing questions and compute simple charges.',
});
const billingTool = billingAgent.asTool({
toolName: 'billing_agent',
toolDescription: 'Handles customer billing questions.',
// onStream: simplest catch-all when you define the tool inline.
onStream: (event) => {
console.log(`[onStream] ${event.event.type}`, event);
},
});
// on(eventName) lets you subscribe selectively (or use '*' for all).
billingTool.on('run_item_stream_event', (event) => {
console.log('[on run_item_stream_event]', event);
});
billingTool.on('raw_model_stream_event', (event) => {
console.log('[on raw_model_stream_event]', event);
});
const orchestrator = new Agent({
name: 'Support Orchestrator',
instructions: 'Delegate billing questions to the billing agent tool.',
tools: [billingTool],
});
  • イベントタイプは RunStreamEvent['type'] と一致します: raw_model_stream_eventrun_item_stream_eventagent_updated_stream_event
  • onStream は最もシンプルな「すべてを受け取る」方法で、ツールをインラインで宣言する場合(tools: [agent.asTool({ onStream })])に適しています。イベントごとのルーティングが不要な場合に使用してください。
  • on(eventName, handler) は、選択的に(または '*' で)購読できます。より細かな処理が必要な場合や、作成後にリスナーを接続したい場合に最適です。
  • onStream またはいずれかの on(...) ハンドラーを指定すると、agent-as-tool は自動的にストリーミングモードで実行されます。指定しない場合は非ストリーミングパスのままです。
  • ハンドラーは並列に呼び出されるため、遅い onStream コールバックが on(...) ハンドラーをブロックすることはありません(その逆も同様です)。
  • ツールがモデルのツール呼び出し経由で呼び出された場合、toolCallId が提供されます。直接の invoke() 呼び出しやプロバイダーの癖によっては省略される場合があります。

Model Context Protocol (MCP) サーバー経由でツールを公開し、エージェントに接続できます。たとえば、MCPServerStdio を使って stdio MCP サーバーを起動し、接続できます。

ローカル MCP サーバー
import { Agent, MCPServerStdio } from '@openai/agents';
const server = new MCPServerStdio({
fullCommand: 'pnpm exec mcp-server-filesystem ./sample_files',
});
await server.connect();
const agent = new Agent({
name: 'Assistant',
mcpServers: [server],
});

完全な例については filesystem-example.ts を参照してください。また、MCP サーバーツール連携の包括的なガイドを探している場合は、詳細は MCP 連携 を参照してください。複数のサーバー(または部分的な失敗)を管理する場合は、connectMcpServersMCP 連携 のライフサイクルガイダンスを使用してください。


@openai/agents-extensions/experimental/codexcodexTool() を提供します。これはモデルのツール呼び出しを Codex SDK にルーティングする関数ツールで、エージェントがワークスペーススコープのタスク(shell、ファイル編集、MCP ツール)を自律的に実行できるようにします。このインターフェイスは実験的であり、変更される可能性があります。

まず依存関係をインストールします。

Terminal window
npm install @openai/agents-extensions @openai/codex-sdk

クイックスタート:

実験的な Codex ツール
import { Agent } from '@openai/agents';
import { codexTool } from '@openai/agents-extensions/experimental/codex';
export const codexAgent = new Agent({
name: 'Codex Agent',
instructions:
'Use the codex tool to inspect the workspace and answer the question. When skill names, which usually start with `$`, are mentioned, you must rely on the codex tool to use the skill and answer the question.',
tools: [
codexTool({
sandboxMode: 'workspace-write',
workingDirectory: '/path/to/repo',
defaultThreadOptions: {
model: 'gpt-5.4',
networkAccessEnabled: true,
webSearchEnabled: false,
},
}),
],
});

知っておくべきこと:

  • 認証: CODEX_API_KEY(推奨)または OPENAI_API_KEY を指定するか、codexOptions.apiKey を渡します。
  • 入力: strict スキーマです。inputs には少なくとも 1 つの { type: 'text', text } または { type: 'local_image', path } を含める必要があります。
  • 安全性: sandboxModeworkingDirectory と組み合わせて使用します。ディレクトリが Git リポジトリでない場合は skipGitRepoCheck を設定します。
  • スレッド化: useRunContextThreadId: true は最新の thread ID を runContext.context から読み取り/保存します。これはアプリ状態でターンをまたいで再利用する場合に役立ちます。
  • Thread ID の優先順位: ツール呼び出しの threadId(スキーマに含まれる場合)が最優先され、次に run context thread ID、最後に codexTool({ threadId }) が使われます。
  • Run context キー: name: 'codex' の場合は既定で codexThreadIdname: 'engineer' のような名前の場合は codexThreadId_<suffix>(正規化後は codex_engineer)になります。
  • 可変コンテキスト要件: useRunContextThreadId が有効な場合は、run(..., { context }) として可変オブジェクトまたは Map を渡します。
  • 命名: ツール名は codex 名前空間に正規化され(engineercodex_engineer になります)、エージェント内で Codex ツール名が重複すると拒否されます。
  • ストリーミング: onStream は Codex イベント(推論、コマンド実行、MCP ツール呼び出し、ファイル変更、Web 検索)を反映するため、進行状況をログまたはトレースできます。
  • 出力: ツール結果には responseusagethreadId が含まれ、Codex トークン使用量は RunContext に記録されます。
  • 構造: outputSchema には descriptor、JSON スキーマオブジェクト、または Zod オブジェクトを指定できます。JSON オブジェクトスキーマでは、additionalPropertiesfalse である必要があります。

Run context thread の再利用例:

Codex run-context thread の再利用
import { Agent, run } from '@openai/agents';
import { codexTool } from '@openai/agents-extensions/experimental/codex';
// Derived from codexTool({ name: 'engineer' }) when runContextThreadIdKey is omitted.
type ExampleContext = {
codexThreadId_engineer?: string;
};
const agent = new Agent<ExampleContext>({
name: 'Codex assistant',
instructions: 'Use the codex tool for workspace tasks.',
tools: [
codexTool({
// `name` is optional for a single Codex tool.
// We set it so the run-context key is tool-specific and to avoid collisions when adding more Codex tools.
name: 'engineer',
// Reuse the same Codex thread across runs that share this context object.
useRunContextThreadId: true,
sandboxMode: 'workspace-write',
workingDirectory: '/path/to/repo',
defaultThreadOptions: {
model: 'gpt-5.4',
approvalPolicy: 'never',
},
}),
],
});
// The default key for useRunContextThreadId with name=engineer is codexThreadId_engineer.
const context: ExampleContext = {};
// First turn creates (or resumes) a Codex thread and stores the thread ID in context.
await run(agent, 'Inspect src/tool.ts and summarize it.', { context });
// Second turn reuses the same thread because it shares the same context object.
await run(agent, 'Now list refactoring opportunities.', { context });
const threadId = context.codexThreadId_engineer;

ツール戦略とベストプラクティス

Section titled “ツール戦略とベストプラクティス”

モデルがいつどのようにツールを使用する必要があるか(modelSettings.toolChoicetoolUseBehavior など)を制御する方法については、エージェント を参照してください。


  • 短く明示的な説明 – ツールが 何を するのか、 いつ使うか を説明します。
  • 入力の検証 – 可能な場合は、厳密な JSON 検証のために Zod スキーマを使用します。
  • エラーハンドラーでの副作用の回避errorFunction は例外を投げるのではなく、有用な文字列を返すべきです。
  • ツールごとに 1 つの責務 – 小さく構成可能なツールは、モデルの推論を向上させます。

  • ツールを持つエージェントの定義と toolUseBehavior の制御については、エージェント
  • agents as tools とハンドオフのどちらを使うかを判断するには、エージェントオーケストレーション
  • 実行フロー、ストリーミング、会話状態については、エージェントの実行
  • ホスト型 OpenAI モデル設定と Responses トランスポートの選択については、モデル
  • ツール入力または出力を検証するには、ガードレール
  • tool() と各種組み込みツール(Hosted)タイプについては、TypeDoc リファレンスを参照してください。