Tool Use・Function Calling
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 学習方法
- テキスト中のツールが有効な位置を特定
- ツール呼び出しを挿入したデータを生成
- ツールの結果が予測に役立つ場合のみ保持
- このデータでファインチューニング
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