🔧

ツール使用パターン — LLMに手足をつける

関数呼び出しでLLMが外部世界と相互作用する構造

LLMは「今日の天気は?」に本物の天気APIを呼べない。学習データから推論するだけ。ツールを繋げると変わる。

動作原理

  1. LLMにツールスキーマを渡す:「get_weather(city: string)関数が使えるよ」
  2. ユーザー:「ソウルの天気教えて」
  3. LLM応答:tool_use: get_weather(city="Seoul")
  4. クライアントが実際にAPI呼び出し → 結果をLLMに渡す
  5. LLMが結果を自然言語で整理:「ソウルは現在18°C、晴れです。」

LLMが直接APIを呼ぶのではない。「このツールをこのパラメータで呼んで」と要求し、クライアント(開発者コード)が実行して結果を返す構造。

良いツール設計

名前が明確: read_filesearch_coderun_test — 名前を見ただけで何をするかわかる。

説明が詳細: LLMはツールの説明を見ていつ使うか決める。「ファイルを読みます」より「指定されたパスのファイル内容をテキストで返します。バイナリファイルは未対応です」の方が良い。

パラメータが簡潔: 必須パラメータを最小化し、オプショナルには適切なデフォルト値を設定。

結果が有用: 成功/失敗、エラーメッセージ、実行結果を構造的に返す。

MCP(Model Context Protocol)

Anthropicが作ったツール標準化プロトコル。ツールを作る人と使う人(LLM/エージェント)を分離する。

MCPサーバーがツールを提供し、MCPクライアント(エージェント)が接続して使用する構造。ツールを一度作れば複数のエージェントで再利用できる。

動作フロー

1

LLM API呼び出し時にtoolsパラメータに利用可能なツールスキーマを渡す

2

LLM応答にtool_useが含まれていれば該当関数を実行

3

実行結果をtool_resultとしてメッセージに追加 → LLM再呼び出し

4

MCPを使えばツールをサーバーに分離して複数エージェントで再利用

ユースケース

チャットボットにDB照会、メール送信、決済処理機能を追加 コーディングエージェントにファイル読み書き、ターミナル実行ツールを提供