コンテンツにスキップ

ツール

ツールはエージェントに 行動を取らせる 手段です。データの取得、外部 API 呼び出し、コード実行、さらにはコンピュータの使用まで可能にします。JavaScript/TypeScript SDK は次の 4 つのカテゴリーをサポートしています:

  1. 組み込みツール(Hosted) – OpenAI のサーバー上でモデルと並行して実行されます。(Web 検索、ファイル検索、コンピュータ操作、Code Interpreter、画像生成)
  2. 関数ツール – 任意のローカル関数を JSON schema でラップし、LLM が呼び出せるようにします
  3. エージェントをツールとして – エージェント全体を呼び出し可能なツールとして公開します
  4. ローカル MCP サーバー – お使いのマシン上で動作する Model context protocol のサーバーを接続します

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

ツールType string目的
Web search'web_search'インターネット検索
File / retrieval search'file_search'OpenAI 上でホストされるベクトルストアの検索
Computer use'computer'GUI 操作の自動化
Shell'shell'ホスト上でのシェルコマンド実行
Apply patch'apply_patch'V4A の diff をローカルファイルに適用
Code Interpreter'code_interpreter'サンドボックス環境でのコード実行
Image generation'image_generation'テキストに基づく画像生成
Hosted tools
import { Agent, webSearchTool, fileSearchTool } from '@openai/agents';
const agent = new Agent({
name: 'Travel assistant',
tools: [webSearchTool(), fileSearchTool('VS_ID')],
});

詳細な rankingOptions やセマンティックフィルターなど上級オプションは OpenAI Responses API と完全に一致します。公式ドキュメントを参照してください。


tool() ヘルパーで 任意の 関数をツールにできます。

Function tool with Zod parameters
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 schema か 元 JSON schema オブジェクトのいずれか。Zod の parameters を使うと自動的に strict モードが有効になります
strictいいえtrue(デフォルト)の場合、引数が検証に失敗すると SDK は model error を返します。あいまいなマッチングを許すには false に設定します
executeはい(args, context) => string | Promise<string>– ビジネスロジック。2 つ目の引数は任意で、RunContext です
errorFunctionいいえ内部エラーをユーザーに見える文字列へ変換するカスタムハンドラー (context, error) => string

不正または部分的な入力をモデルに推測させる必要がある場合、元 JSON schema を使用するときに strict モードを無効化できます:

Non-strict JSON schema tools
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;
},
});

3. エージェントをツールとして

Section titled “3. エージェントをツールとして”

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

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 の動作をカスタマイズできます。


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

Local MCP server
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],
});

完全な example は filesystem-example.ts を参照してください。MCP サーバーツール統合の網羅的なガイドをお探しの場合は、詳細は MCP 連携 を参照してください。


モデルがいつどのようにツールを使用すべきか(tool_choicetoolUseBehavior など)については、エージェント を参照してください。


  • 短く明確な説明 – ツールが何をするのか、いつ使うのかを記述する
  • 入力の検証 – 可能な限り Zod schema で厳密な JSON 検証を行う
  • エラーハンドラーで副作用を避けるerrorFunction は有用な文字列を返し、throw しない
  • ツールごとに 1 つの責務 – 小さく合成可能なツールはモデルの推論を向上させる

  • エージェント で強制的なツール使用について学ぶ
  • ツールの入力や出力を検証するために ガードレール を追加
  • tool() と各種 Hosted ツールタイプの TypeDoc リファレンスを参照