Tool Use・Function Calling

LLMが外部ツールを使用する能力。Function Calling、API連携、計算・検索・コード実行。

最終更新:2025年11月

エージェント・ツール利用

※画像は生成AIによるイメージです。

1. Tool Useの概要

1.1 なぜツール利用が必要か

LLMの限界を補完:

  • 計算:大きな数の計算が苦手
  • 最新情報:訓練データ以降の情報を持たない
  • 外部システム:データベース、API等との連携
  • アクション:実世界への働きかけ

1.2 Tool Useの発展

時期 発展
2022 Toolformer(自動ツール使用学習)
2023/6 GPT Function Calling
2023 Claude Tool Use
2024 並列ツール呼び出し、Computer Use

1.3 基本的な流れ

1. ユーザー: 「東京の天気を教えて」
2. LLM: ツール呼び出しを決定
   → get_weather(location="東京")
3. システム: ツールを実行、結果を取得
   → {"temp": 15, "condition": "晴れ"}
4. LLM: 結果を自然言語で回答
   → 「東京は現在15℃で晴れています」

2. Function Calling

2.1 概要

LLMが構造化されたJSON形式でツール呼び出しを出力。

  • OpenAI(2023年6月)で導入
  • 関数の定義をプロンプトに含める
  • モデルが適切な関数と引数を選択

2.2 関数定義の例

{
  "name": "get_weather",
  "description": "指定した場所の現在の天気を取得",
  "parameters": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "都市名(例:東京、大阪)"
      },
      "unit": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "description": "温度の単位"
      }
    },
    "required": ["location"]
  }
}

2.3 モデルの出力

{
  "function_call": {
    "name": "get_weather",
    "arguments": "{\"location\": \"東京\", \"unit\": \"celsius\"}"
  }
}

2.4 並列ツール呼び出し

複数のツールを同時に呼び出し:

ユーザー: 「東京と大阪の天気を比較して」

モデル出力:
[
  {"name": "get_weather", "arguments": {"location": "東京"}},
  {"name": "get_weather", "arguments": {"location": "大阪"}}
]

2.5 ツール選択の制御

  • auto:モデルが自動判断
  • none:ツール使用禁止
  • required:必ずツールを使用
  • 特定の関数:指定した関数のみ

3. Toolformer

3.1 概要

Toolformer(Schick et al. 2023):自己教師ありでツール使用を学習。

3.2 学習方法

  1. テキスト中のツールが有効な位置を特定
  2. ツール呼び出しを挿入したデータを生成
  3. ツールの結果が予測に役立つ場合のみ保持
  4. このデータでファインチューニング

3.3 対応ツール

  • 電卓(Calculator)
  • Wikipedia検索
  • 機械翻訳
  • カレンダー(日付計算)
  • Q&Aシステム

3.4 意義

  • 人間のアノテーションなしでツール使用を学習
  • いつ・どのツールを使うべきかを自動判断

4. ReAct

4.1 概要

ReAct(Reasoning + Acting)(Yao et al. 2023):

推論と行動を交互に行うフレームワーク。

4.2 フォーマット

Thought: [現在の状況の分析・次に何をすべきか]
Action: [実行するツール/アクション]
Observation: [アクションの結果]
... (繰り返し)
Thought: [最終的な結論]
Answer: [回答]

4.3 例

Question: アルバート・アインシュタインの妻の出身国は?

Thought: アインシュタインの妻を調べる必要がある
Action: Search[アルバート・アインシュタイン 妻]
Observation: ミレヴァ・マリッチ(最初の妻)...

Thought: ミレヴァ・マリッチの出身を調べる
Action: Search[ミレヴァ・マリッチ]
Observation: セルビア出身の数学者・物理学者...

Thought: 答えが分かった
Answer: セルビア

4.4 利点

  • 解釈可能性:思考過程が可視化
  • エラー回復:中間結果を見て修正可能
  • 複雑なタスク:多段階推論に対応

5. ツールの種類

5.1 情報取得ツール

ツール 機能
Web検索 最新情報の取得
RAG/検索 ドキュメント検索
API呼び出し 天気、株価等
データベース SQLクエリ

5.2 計算・処理ツール

ツール 機能
電卓 数値計算
コード実行 Python等の実行
画像生成 DALL-E等
ファイル操作 読み書き、変換

5.3 アクションツール

ツール 機能
メール送信 メール作成・送信
カレンダー 予定の追加・確認
タスク管理 Todo作成
Computer Use 画面操作

5.4 Computer Use

Anthropic(2024):LLMがコンピュータを直接操作。

  • 画面のスクリーンショットを「見る」
  • マウス・キーボード操作を出力
  • 任意のGUIアプリケーションを操作可能

6. 実装パターン

6.1 シンプルなループ

while not done:
    response = llm.generate(messages, tools)
    
    if response.has_tool_call:
        result = execute_tool(response.tool_call)
        messages.append(tool_result(result))
    else:
        done = True
        return response.text

6.2 ツール定義のベストプラクティス

  • 明確な説明:いつ使うべきかを明記
  • 型の指定:パラメータの型を厳密に
  • 例の提供:使用例を説明に含める
  • エラーハンドリング:失敗時の対応を定義

6.3 MCP(Model Context Protocol)

Anthropic(2024):ツール連携の標準プロトコル。

  • ツールの発見・利用を標準化
  • 異なるLLMで共通のインターフェース
  • サーバー・クライアントアーキテクチャ

6.4 LangChain / LlamaIndex

ツール統合フレームワーク:

  • 多数の事前定義ツール
  • カスタムツールの簡単な追加
  • エージェントの構築支援

7. 課題と展望

7.1 現在の課題

  • ツール選択の誤り:不適切なツールを選ぶ
  • パラメータのミス:引数の形式エラー
  • 過剰なツール使用:不要な呼び出し
  • ループ:同じツールを繰り返し呼ぶ

7.2 セキュリティ

  • 権限管理:ツールの実行権限
  • インジェクション:悪意ある入力
  • 情報漏洩:意図しないデータアクセス
  • 確認ステップ:重要なアクションの承認

7.3 今後の展望

  • より自然なツール選択
  • ツールの自動発見・学習
  • マルチモーダルツール(画像・音声)
  • 協調的なマルチエージェント

8. 参考文献

  • Schick et al. (2023). "Toolformer: Language Models Can Teach Themselves to Use Tools" NeurIPS
  • Yao et al. (2023). "ReAct: Synergizing Reasoning and Acting in Language Models" ICLR
  • Patil et al. (2023). "Gorilla: Large Language Model Connected with Massive APIs" arXiv
  • Qin et al. (2023). "Tool Learning with Foundation Models" arXiv