OpenAIのFunction Calling(関数呼び出し)機能を使うと、AIが外部APIやデータベースと連携して、リアルタイムの情報を取得できるようになります。天気予報の取得、商品検索、データベースクエリなど、実践的なユースケースを解説します。
Function Callingとは
Function Callingは、GPT-4やGPT-4oに「使える関数」を定義しておくと、ユーザーの質問に応じて適切な関数を呼び出してくれる機能です。AIが直接関数を実行するのではなく、「この関数をこの引数で呼んでください」という指示を返します。
基本的な実装
商品検索を例に実装してみましょう。
from openai import OpenAI
import json
client = OpenAI()
# 利用可能な関数を定義
tools = [
{
"type": "function",
"function": {
"name": "search_products",
"description": "商品データベースからキーワードで商品を検索する",
"parameters": {
"type": "object",
"properties": {
"keyword": {
"type": "string",
"description": "検索キーワード(例: 赤いTシャツ)"
},
"max_price": {
"type": "integer",
"description": "最大価格(円)"
}
},
"required": ["keyword"]
}
}
}
]
# 実際の検索関数
def search_products(keyword, max_price=None):
# 本番ではDBクエリを実行
products = [
{"name": "赤いTシャツ", "price": 2980},
{"name": "青いTシャツ", "price": 3480},
]
if max_price:
products = [p for p in products if p["price"] <= max_price]
return [p for p in products if keyword in p["name"]]
AIとの対話フロー
Function Callingの対話は3ステップで進みます。
# Step 1: ユーザーの質問をAIに送信
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "3000円以下の赤いTシャツはありますか?"}],
tools=tools,
)
# Step 2: AIが関数呼び出しを要求
tool_call = response.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
# args = {"keyword": "赤いTシャツ", "max_price": 3000}
# Step 3: 関数を実行して結果をAIに返す
result = search_products(**args)
final_response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "3000円以下の赤いTシャツはありますか?"},
response.choices[0].message,
{"role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(result, ensure_ascii=False)}
],
tools=tools,
)
print(final_response.choices[0].message.content)
複数関数の定義
実際のアプリケーションでは複数の関数を定義し、AIに状況に応じて使い分けてもらいます。商品検索に加えて、注文状況の確認や在庫確認なども追加できます。AIは質問の内容から最適な関数を自動で選択します。
注意点とベストプラクティス
- 関数のdescriptionは詳しく書く。AIはこれを見て関数を選択します
- パラメータのdescriptionも具体例を含めると精度が上がります
- AIが不要な関数呼び出しをしないよう、tool_choice パラメータで制御可能
- 関数の実行結果は構造化されたJSONで返すと、AIの応答品質が向上します
まとめ
Function Callingを使うことで、AIは単なるテキスト生成を超えて、実際のデータやサービスと連携する強力なアシスタントになります。ECサイトの商品検索、カスタマーサポート、社内ツールの自動化など、応用範囲は広大です。