OpenAI Function Callingの実装ガイド:AIに外部ツールを使わせる

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サイトの商品検索、カスタマーサポート、社内ツールの自動化など、応用範囲は広大です。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

IP: 取得中...
216.73.216.31216.73.216.31