ツール
ツールを使うと、エージェントは アクションの実行 ができます。データの取得、外部 API の呼び出し、コードの実行、さらにはコンピュータ操作も可能です。JavaScript / TypeScript SDK は 6 つのカテゴリーをサポートしています。
このページは、どのエージェントがタスクを担当すべきかを把握し、機能を持たせたい段階で エージェント の後に読むことをおすすめします。委譲パターンをまだ検討中の場合は、エージェントオーケストレーション を参照してください。
- OpenAI がホストするツール – OpenAI サーバー上でモデルと並行して実行されます。(Web 検索、ファイル検索、Code Interpreter、画像生成、ツール検索)
- 組み込み実行ツール – SDK が提供する、モデル外で実行されるツールです。(コンピュータ操作と apply_patch はローカル実行、shell はローカルまたはホストコンテナで実行可能)
- 関数ツール – 任意のローカル関数を JSON スキーマでラップし、LLM が呼び出せるようにします。
- Agents as tools – エージェント全体を呼び出し可能なツールとして公開します。
- MCP サーバー – Model Context Protocol サーバー(ローカルまたはリモート)を接続します。
- 実験的: Codex ツール – Codex SDK を関数ツールとしてラップし、ワークスペースを認識したタスクを実行します。
ツールのカテゴリー
Section titled “ツールのカテゴリー”このガイドの残りでは、まず各ツールカテゴリーを説明し、その後に横断的なツール選択とプロンプト設計のガイダンスをまとめます。
1. Hosted tools(OpenAI Responses API)
Section titled “1. Hosted tools(OpenAI Responses API)”OpenAIResponsesModel を使う場合、次の組み込みツールを追加できます。
| ツール | Type 文字列 | 用途 |
|---|---|---|
| Web 検索 | 'web_search' | インターネット検索 |
| ファイル / 取得検索 | 'file_search' | OpenAI 上でホストされるベクトルストアをクエリ |
| Code Interpreter | 'code_interpreter' | サンドボックス環境でコードを実行 |
| 画像生成 | 'image_generation' | テキストに基づいて画像を生成 |
| ツール検索 | 'tool_search' | 遅延ロードされた関数ツール、namespace、または検索可能な MCP ツールを実行時に読み込み |
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 は、Hosted tool 定義を返すヘルパー関数を提供しています。
| ヘルパー関数 | 備考 |
|---|---|
webSearchTool(options?) | searchContextSize、userLocation、filters.allowedDomains などの JS 向けオプション |
fileSearchTool(ids, options?) | 第 1 引数で 1 つ以上のベクトルストア ID を受け取り、maxNumResults、includeSearchResults、rankingOptions、filters などのオプションも利用可能 |
codeInterpreterTool(options?) | container 未指定時は自動管理コンテナがデフォルト |
imageGenerationTool(options?) | model、size、quality、background、inputFidelity、inputImageMask、moderation、outputCompression、partialImages、出力形式などに対応 |
toolSearchTool(options?) | 組み込みの tool_search ヘルパーを追加。deferLoading: true を設定した遅延関数ツールや Hosted MCP ツールと組み合わせて使用。既定でホスト実行、execution: 'client' と execute によるクライアント実行も対応 |
これらのヘルパーは、JavaScript / TypeScript 向けのオプション名を基盤となる OpenAI Responses API のツールペイロードにマッピングします。完全なツールスキーマや ranking options / semantic filters などの高度なオプションは公式の OpenAI tools guide を参照してください。現在の組み込みツール検索フローとモデル対応状況は公式の Tool search guide を参照してください。
2. 組み込み実行ツール
Section titled “2. 組み込み実行ツール”これらのツールは SDK に組み込まれていますが、実行はモデル応答そのものの外側で行われます。
- コンピュータ操作 –
Computerインターフェースを実装し、computerTool()に渡します。これは常に、あなたが提供するローカルComputer実装に対して実行されます - Shell – ローカル
Shell実装を渡すか、shellTool({ environment })でホストコンテナ環境を設定します - Apply patch –
Editorインターフェースを実装し、applyPatchTool()に渡します。これは常に、あなたが提供するローカルEditor実装に対して実行されます
ツール呼び出し自体はモデルが要求しますが、実際の処理はアプリケーションまたは設定済み実行環境が行います。
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 }), ],});Computer ツールの詳細
Section titled “Computer ツールの詳細”computerTool() は次のいずれかを受け取ります。
- 具体的な
Computerインスタンス - 実行ごとに
Computerを作る初期化関数 - 実行スコープのセットアップとクリーンアップが必要な場合の
{ create, dispose }を持つ provider オブジェクト
OpenAI の現在のコンピュータ操作パスを使うには、gpt-5.4 のような computer 対応モデルを設定します。リクエストモデルが明示されている場合、SDK は GA 組み込み computer ツール形式を送信します。実効モデルが保存済みプロンプトや古い統合由来の場合は、modelSettings.toolChoice: 'computer' で明示的に GA パスへ切り替えない限り、互換性のため従来の computer_use_preview 形式を維持します。
GA の computer 呼び出しは、1 つの computer_call にバッチ化された actions[] を含められます。SDK は順に実行し、各アクションに対して needsApproval を評価し、最終スクリーンショットをツール出力として返します。interruption.rawItem から承認 UI を構築する場合、actions があればそれを読み、従来 preview 項目向けに action へフォールバックしてください。
影響の大きいコンピュータ操作をユーザー確認で一時停止したい場合は needsApproval を使い、computer 呼び出しで報告される保留中の安全性チェックを承認または拒否したい場合は onSafetyCheck を使います。モデル側ガイダンスと移行詳細は、公式の OpenAI computer use guide とその migration note を参照してください。
Shell ツールの詳細
Section titled “Shell ツールの詳細”shellTool() には 2 つのモードがあります。
- ローカルモード:
shellを渡し、必要に応じてenvironment: { type: 'local', skills }と、自動承認処理用のneedsApproval/onApprovalを指定 - ホストコンテナモード:
type: 'container_auto'またはtype: 'container_reference'を持つenvironmentを指定
ローカルモードでは、environment.skills により、name、description、ファイルシステム path でローカル skill をマウントできます。
ホストコンテナモードでは、shellTool({ environment }) に次のいずれかを指定します。
type: 'container_auto'で実行用の管理コンテナを作成type: 'container_reference'でcontainerIdにより既存コンテナを再利用
Hosted container_auto 環境は次をサポートします。
domainSecretsを使った allowlist を含むnetworkPolicy- アップロード済みファイルをマウントする
fileIds - コンテナサイズ調整用の
memoryLimit skill_referenceまたはインライン zip バンドルによるskills
Hosted shell 環境では実行がローカルプロセスではなくホストコンテナで行われるため、shell、needsApproval、onApproval は受け付けません。
エンドツーエンドの使用方法は examples/tools/local-shell.ts、examples/tools/container-shell-skill-ref.ts、examples/tools/container-shell-inline-skill.ts を参照してください。
Apply-patch ツールの詳細
Section titled “Apply-patch ツールの詳細”applyPatchTool() は shellTool() のローカル承認フローを踏襲します。ファイル編集前に停止するには needsApproval、アプリ側コールバックで自動承認 / 拒否するには onApproval を使います。
3. 関数ツール
Section titled “3. 関数ツール”tool() ヘルパーを使うと 任意の 関数をツール化できます。
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.`; },});オプション一覧
Section titled “オプション一覧”| フィールド | 必須 | 説明 |
|---|---|---|
name | No | 既定は関数名(例: get_weather) |
description | Yes | LLM に表示される、人が読める明確な説明 |
parameters | Yes | Zod スキーマまたは raw JSON スキーマオブジェクト。Zod parameters は自動で strict モードを有効化 |
strict | No | true(既定)の場合、引数の検証に失敗すると SDK はモデルエラーを返します。あいまい一致を許容する場合は false |
execute | Yes | (args, context, details) => string | unknown | Promise<...> – ビジネスロジック。文字列以外の出力はモデル向けにシリアライズ。context は任意の RunContext、details は toolCall、resumeState、signal などのメタデータを含む |
errorFunction | No | 内部エラーをユーザー可視文字列に変換するカスタムハンドラー (context, error) => string |
timeoutMs | No | 呼び出しごとのタイムアウト(ミリ秒)。0 より大きく 2147483647 以下 |
timeoutBehavior | No | タイムアウトモード: error_as_result(既定)はモデル可視のタイムアウトメッセージを返し、raise_exception は ToolTimeoutError を throw |
timeoutErrorFunction | No | timeoutBehavior が error_as_result のときのタイムアウト出力を生成するカスタムハンドラー (context, timeoutError) => string |
needsApproval | No | 実行前に人間の承認を要求。人間の介入(HITL)ガイド を参照 |
isEnabled | No | 実行ごとにツール公開を条件分岐。boolean または predicate を受け付け |
inputGuardrails | No | ツール実行前に動作するガードレール。reject または throw 可。ガードレール を参照 |
outputGuardrails | No | ツール実行後に動作するガードレール。reject または throw 可。ガードレール を参照 |
関数ツールのタイムアウト
Section titled “関数ツールのタイムアウト”各関数ツール呼び出しの上限を設定するには timeoutMs を使います。
timeoutBehavior: 'error_as_result'(既定)はモデルへTool '<name>' timed out after <timeoutMs>ms.を返しますtimeoutBehavior: 'raise_exception'はToolTimeoutErrorを throw し、実行時例外 の一部として捕捉できますtimeoutErrorFunctionを使うと、error_as_resultモードのタイムアウト文言をカスタマイズできます- タイムアウトは
details.signalを中断するため、キャンセル監視している長時間ツールは速やかに停止できます
関数ツールを直接呼び出す場合は、invokeFunctionTool を使うと通常のエージェント実行と同じタイムアウト挙動を適用できます。
Non‑strict JSON-schema ツール
Section titled “Non‑strict JSON-schema ツール”モデルに不正または部分的な入力を 推測 させたい場合は、raw JSON schema 使用時に strict モードを無効化できます。
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 を設定した Hosted 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()を使います- 同一リクエスト内で namespaced とトップレベルの遅延ツールを混在させることはサポートされており、ツール検索は
crmのような namespace パスとget_shipping_etaのようなトップレベルパスの両方をロードできます
ツール検索を使うときは次を守ってください。
- 各遅延関数ツールに
deferLoading: trueを設定する - 複数の関連ツールを 1 つのドメイン説明でまとめてグループロードしたい場合は
toolNamespace({ name, description, tools })を使う - 単一の独立機能で、ツール名自体が良い検索ターゲットならトップレベルのままにする
- いずれかの遅延関数ツールまたは Hosted MCP ツールが
deferLoading: trueを使う場合は、同じtools配列にtoolSearchTool()を追加する modelSettings.toolChoiceは'auto'のままにする。SDK は組み込みtool_searchツールや遅延関数ツールを名前指定で強制することを拒否します- Hosted 実行が既定です。
toolSearchTool({ execution: 'client', execute })を設定した場合、標準run()ループがサポートするクライアントクエリ形式は組み込みの{ paths: string[] }のみで、カスタムクライアント側スキーマは独自 Responses ループが必要です - namespace は即時メンバーと遅延メンバーを混在可能です。即時メンバーはツール検索なしで呼び出し可能で、同じ namespace 内の遅延メンバーは必要時にロードされます
- 遅延関数ツールと
toolNamespace()は Responses 専用です。Chat Completions はこれらを拒否し、AI SDK アダプターも遅延 Responses ツールロードフローをサポートしません
4. Agents as tools
Section titled “4. Agents as tools”会話を完全にハンドオフせずに、あるエージェントに別のエージェントを補助させたい場合があります。その場合は agent.asTool() を使います。
agent.asTool() と handoff() のどちらを使うか検討中なら、エージェント と エージェントオーケストレーション のパターン比較を参照してください。
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 でエージェントを実行します。runConfig または runOptions のプロパティを渡したい場合は、asTool() メソッドに渡して runner の挙動をカスタマイズできます。
また、asTool() オプションで needsApproval と isEnabled を設定することで、Human in the loop (人間の介入) フローや条件付きツール公開と統合できます。
customOutputExtractor 内では result.agentToolInvocation を使って現在の Agent.asTool() 呼び出しを確認できます。このコールバック内の result は常に Agent.asTool() 由来のため、agentToolInvocation は常に定義され、toolName、toolCallId、toolArguments を公開します。通常のアプリコンテキストと toolInput には result.runContext を使ってください。このメタデータは現在のネスト呼び出しにスコープされ、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'(既定)は live の承認 / コンテキスト状態をシリアライズ状態へマージ、'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_event、run_item_stream_event、agent_updated_stream_event onStreamは最もシンプルな「全件受け取り」で、ツールをインライン宣言する場合(tools: [agent.asTool({ onStream })])に有効です。イベントごとの振り分けが不要ならこれを使いますon(eventName, handler)は選択的(または'*')に購読でき、より細かい処理や作成後のリスナー追加が必要な場合に適していますonStreamまたはいずれかのon(...)ハンドラーを指定すると、agent-as-tool は自動でストリーミングモードで動作します。指定しなければ非ストリーミング経路のままです- ハンドラーは並列実行されるため、遅い
onStreamコールバックがon(...)ハンドラーをブロックすることはありません(逆も同様) toolCallIdはモデルのツール呼び出し経由で実行された場合に提供されます。直接のinvoke()呼び出しや provider 側の差異によっては省略されることがあります
5. MCP サーバー
Section titled “5. MCP サーバー”Model Context Protocol (MCP) サーバー経由でツールを公開し、エージェントへ接続できます。たとえば MCPServerStdio を使うと、stdio MCP サーバーを起動して接続できます。
import { Agent, MCPServerStdio } from '@openai/agents';
const server = new MCPServerStdio({ fullCommand: 'npx -y @modelcontextprotocol/server-filesystem ./sample_files',});
await server.connect();
const agent = new Agent({ name: 'Assistant', mcpServers: [server],});完全な例は filesystem-example.ts を参照してください。MCP サーバーツール統合の包括的ガイドは、詳細を MCP 連携ガイド で確認できます。複数サーバー管理(または部分障害)では、connectMcpServers と MCP 連携ガイド のライフサイクル指針を使用してください。
6. 実験的: Codex ツール
Section titled “6. 実験的: Codex ツール”@openai/agents-extensions/experimental/codex は codexTool() を提供します。これは、モデルのツール呼び出しを Codex SDK にルーティングする関数ツールで、エージェントがワークスペーススコープのタスク(shell、ファイル編集、MCP ツール)を自律実行できるようにします。この機能は実験的であり、変更される可能性があります。
まず依存関係をインストールします。
npm install @openai/agents-extensions @openai/codex-sdkクイックスタート:
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, }, }), ],});知っておくべき点:
- Auth:
CODEX_API_KEY(推奨)またはOPENAI_API_KEYを指定するか、codexOptions.apiKeyを渡します - 入力: strict スキーマ。
inputsには少なくとも 1 つの{ type: 'text', text }または{ type: 'local_image', path }が必要です - Safety:
sandboxModeはworkingDirectoryと組み合わせます。ディレクトリが Git リポジトリでない場合はskipGitRepoCheckを設定します - スレッド:
useRunContextThreadId: trueは最新の thread id をrunContext.contextで読み書きし、アプリ状態でのターン横断再利用に有用です - Thread ID 優先順位: ツール呼び出し
threadId(スキーマに含める場合)が最優先、次に run-context thread id、最後にcodexTool({ threadId }) - Run context key:
name: 'codex'では既定でcodexThreadId、name: 'engineer'のような場合はcodexThreadId_<suffix>(正規化後はcodex_engineer) - 可変コンテキスト要件:
useRunContextThreadId有効時は、run(..., { context })に可変オブジェクトまたはMapを渡してください - 命名: ツール名は
codexnamespace に正規化されます(engineerはcodex_engineer)。同一エージェント内で重複する Codex ツール名は拒否されます - ストリーミング:
onStreamは Codex イベント(reasoning、コマンド実行、MCP ツール呼び出し、ファイル変更、Web 検索)を反映し、進行をログ / トレースできます - 出力: ツール結果には
response、usage、threadIdが含まれ、Codex のトークン使用量はRunContextに記録されます - 構造:
outputSchemaは descriptor、JSON schema オブジェクト、または Zod オブジェクトを指定可能。JSON object schema ではadditionalPropertiesはfalseである必要があります
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 “ツール戦略とベストプラクティス”ツール使用挙動
Section titled “ツール使用挙動”モデルがいつどのようにツールを使うかの制御(modelSettings.toolChoice、toolUseBehavior など)は エージェントガイド を参照してください。
ベストプラクティス
Section titled “ベストプラクティス”- 短く明示的な説明 – ツールが 何をするか と いつ使うか を説明する
- 入力を検証 – 可能な限り Zod スキーマで strict な JSON 検証を行う
- エラーハンドラーで副作用を避ける –
errorFunctionは throw せず有用な文字列を返す - ツールは 1 つの責務ごと – 小さく合成可能なツールはモデルの推論品質を高める