AIエージェント活用実践編 / 単一エージェント実装 — ReAct ループの基本
Tool 定義の基礎
無料公開レッスン / 読了目安 7 分
学習のねらい
ReAct ループにおいて、LLM が外部世界と対話するための「Action (行動)」の核となるのが Tool Use (ツール利用) です。 LLM がどのようなツールを、どのような目的で、どのような引数 (パラメータ) で使うべきかを理解できるよう、私たちはツールを適切に定義する必要があります。 本レッスンでは、Anthropic Claude などの LLM がツールを理解するために必要な ツール定義 (Tool Definition) の基礎を学び、特に重要な3つの要素と JSON Schema の書き方を習得しましょう。
Tool 定義の3つの要素
LLM にツールを使わせるためには、そのツールの機能や使い方を LLM に伝える必要があります。 Anthropic Claude では、主に以下の3つの要素を使ってツールを定義します。
name(ツール名):- ツールの機能を表す、ユニークで分かりやすい名前をつけます。
- LLM がツールを呼び出す際に使う名前なので、簡潔で具体的な名前が推奨されます (例:
search_wikipedia,get_current_weather)。
description(説明):- この要素が最も重要です。 LLM がツールを正しく選択し、適切に利用するための詳細な説明を記述します。
- 「このツールは何ができるのか」「どのような時に使うべきか」「どのような情報が入力として必要か」などを、平易な言葉で具体的に説明しましょう。
- 良い
descriptionは、LLM がツールを「賢く」使えるように導きます。
input_schema(入力スキーマ):- ツールが受け取る引数 (パラメータ) の構造を JSON Schema 形式で定義します。
- これにより、LLM はツールを呼び出す際に、どのような引数が必要で、それぞれの引数がどのような型 (文字列、数値など) であるべきかを正確に理解できます。
propertiesで各引数を定義し、requiredで必須の引数を指定します。
良い description の例
悪い例: Web検索 (これだけでは、いつ使うべきか不明瞭)
良い例: インターネット上で最新の情報を検索するために使用します。特に、現在の出来事や特定のキーワードに関する事実を知りたい場合に役立ちます。
JSON Schema の最小書式
input_schema は JSON Schema という標準的な形式で記述します。
複雑なスキーマも書けますが、まずは最小限の書式を覚えましょう。
基本的な構造
{
"type": "object",
"properties": {
"param1_name": {
"type": "string",
"description": "param1 の説明"
},
"param2_name": {
"type": "integer",
"description": "param2 の説明"
}
},
"required": ["param1_name"]
}
type: "object":input_schema全体がオブジェクトであることを示します。properties: ツールが受け取る引数 (パラメータ) を定義する場所です。- 各キーが引数名 (例:
param1_name) になります。 type: 引数のデータ型 (例:"string","integer","boolean","array") を指定します。description: その引数が何を表すのかを説明します。LLM が引数の値を決定する際に参考にします。
- 各キーが引数名 (例:
required: 必須の引数名を文字列の配列で指定します。ここに記載された引数は、LLM がツールを呼び出す際に必ず渡す必要があります。
例: 天気予報ツールの input_schema
「特定の都市の天気予報を取得するツール」を考えてみましょう。必要な引数は「都市名」です。
{
"name": "get_current_weather",
"description": "指定された都市の現在の天気予報を取得します。現在の気象状況を知りたい場合に利用します。",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "天気予報を取得したい都市の名前。例: 東京、大阪、ニューヨーク"
}
},
"required": ["location"]
}
}
この定義を LLM に渡すと、LLM はユーザーが「東京の天気は?」と尋ねたときに、get_current_weather ツールを選び、location 引数に "東京" を渡して呼び出すべきだと判断できるようになります。
まとめ
Tool 定義は、LLM エージェントが外部ツールを適切に利用するための設計図です。
特に description を丁寧かつ具体的に書くこと、そして input_schema を JSON Schema で正確に定義することが重要です。
これらの要素を理解し、適切に記述することで、LLM はより賢く、意図した通りにツールを使いこなせるようになります。