Function Callingとは
Function Calling(ツール使用)は、LLMが外部関数・APIを呼び出す能力です。これによってAI Agentは、リアルタイムデータの取得、データベースの操作、外部サービスとの連携が可能になります。
OpenAI Function Callingの実装
import openai
import json
client = openai.OpenAI()
# ツールの定義
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定した都市の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "都市名(例: 東京, 大阪)"
}
},
"required": ["city"]
}
}
}
]
# AIへのリクエスト
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "東京の天気は?"}],
tools=tools,
tool_choice="auto"
)
# ツール呼び出しの処理
message = response.choices[0].message
if message.tool_calls:
for tool_call in message.tool_calls:
func_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
result = call_function(func_name, args)
# 結果をLLMに返す
Anthropic Tool Useとの比較
| 特徴 | OpenAI | Anthropic |
|---|---|---|
| 複数ツール同時呼び出し | ✓ Parallel | ✓ Parallel |
| ツール定義形式 | JSON Schema | JSON Schema |
| 強制ツール使用 | tool_choice: "required" | tool_choice: {type: "any"} |
| ビジョン連携 | ✓ | ✓ |
ベストプラクティス
1. ツール定義の精緻化
説明文は具体的に。LLMはツールの説明文を元にどのツールを使うかを判断します。
2. エラーハンドリング
ツール実行が失敗した場合も、LLMにエラー内容を返してリトライや代替手段を検討させます。
3. パラメータバリデーション
LLMが生成したパラメータは必ずバリデーション。型チェック・範囲チェックを実施します。
4. ログ・トレース
どのツールが何回呼ばれたかをログに記録することで、コスト管理と異常検知が容易になります。
並列ツール呼び出しパターン
GPT-4oやClaude 3.5以降は、複数のツールを並列実行できます。
# 並列呼び出しの例(天気と株価を同時に取得)
# LLMは自動的に並列化を判断する
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "東京の天気とトヨタの株価を教えて"}],
tools=[weather_tool, stock_tool]
)
セキュリティ考慮事項
- 入力サニタイズ: ツールに渡すパラメータは必ずサニタイズ
- 権限の最小化: 書き込み権限は必要最低限に
- 確認ステップ: 破壊的操作(DELETE等)は人間の確認を挟む
- タイムアウト: ツール実行には必ずタイムアウトを設定