GPT Function callingに新機能が追加|自動化を保証する「tool_choice: "required"」設定の解説
外部APIとの連携を強化し、1つ以上の関数(Function)を任意ではなく必ず呼び出す新機能「tool_choice: "required"」が導入されました。この記事では、これを機に関数呼び出し(Function callin:ファンクションコーリング)の機能を振り返るとともに、この新機能も解説します。自動化を一層強化し、確実に業務を遂行させるためにお役立てください。
(1)APIを介した外部ツールへの接続方法
概要
APIを通じてGPTを外部ツールに接続する方法について学びます。API呼び出しでは、関数を記述し、モデルが適切に機能を選択してJSONオブジェクトを出力します。このJSONは、コード内で関数を呼び出すために使用できます。
モデルの能力
最新のモデル(gpt-4-turbo-2024-04-09およびgpt-3.5-turbo-0125など)は、入力に応じて関数を呼び出すタイミングを検出し、関数シグネチャにより密接に従うJSONを生成する能力を持っています。この機能にはリスクも伴うため、ユーザーの代わりに実世界に影響を与える行動(メール送信、オンライン投稿、購入など)を取る前にユーザー確認のフローを構築することが強く推奨されます。
(2)共通の使用例
関数呼び出しの利点
関数呼び出しを使用すると、モデルから構造化されたデータをより信頼性高く取得できます。例えば、次のようなアシスタントを作成できます。
使用例
外部APIを呼び出して質問に答えるアシスタント:
send_email(to: string, body: string) や get_current_weather(location: string, unit: 'celsius' | 'fahrenheit') などの関数を定義します。
自然言語をAPI呼び出しに変換:
「私のトップ顧客は誰ですか?」を get_customers(min_revenue: int, created_before: string, limit: int) に変換し、内部APIを呼び出します。
テキストからの構造化データの抽出:
extract_data(name: string, birthday: string) や sql_query(query: string) などの関数を定義します。
これらの例は、モデルがより効果的に外部リソースを利用し、具体的なタスクを遂行する方法を示しています。
(3)関数呼び出しの基本ステップ
基本的な手順
関数呼び出しを使用する際の一連のステップを以下に説明します。
モデル呼び出し:
ユーザーのクエリと関数パラメータが定義されたfunctionsを含むAPIを呼び出します。
関数の選択:
モデルは一つまたは複数の関数を呼び出すかどうかを選択し、その内容はカスタムスキーマに従った文字列化されたJSONオブジェクトになります(ただし、モデルはパラメータを創出することがあります)。
JSONの解析と関数呼び出し:
生成された文字列をJSONに解析し、存在する場合は提供された引数で関数を呼び出します。
結果の要約:
関数応答を新しいメッセージとしてモデルに追加し、モデルがユーザーに結果を要約して返します。
この手順により、モデルは自然言語のクエリを効果的にAPI呼び出しに変換し、具体的なアクションを実行できます。
(4)サポートされているモデル
モデル一覧
関数呼び出し機能は、特定のモデルバージョンでのみサポートされています。この機能を利用できるモデルは以下の通りです:
GPT-4シリーズ:
gpt-4-turbo
gpt-4-turbo-2024-04-09
gpt-4-turbo-preview
gpt-4-0125-preview
gpt-4-1106-preview
gpt-4
gpt-4-0613
GPT-3.5シリーズ:
gpt-3.5-turbo
gpt-3.5-turbo-0125
gpt-3.5-turbo-1106
gpt-3.5-turbo-0613
これらのモデルは、関数呼び出しデータでトレーニングされており、APIを通じて具体的なタスクを効果的に処理することができます。
並列関数呼び出しのサポート
以下のモデルでは並列関数呼び出しもサポートされています:
gpt-4-turbo
gpt-4-turbo-2024-04-09
gpt-4-turbo-preview
gpt-4-0125-preview
gpt-4-1106-preview
gpt-3.5-turbo-0125
gpt-3.5-turbo-1106
並列関数呼び出しにより、同時に複数の関数を呼び出して、それぞれの結果を並行して処理することが可能です。これにより、関数の実行にかかる時間が短縮され、APIとの往復回数も削減されます。
(5)関数呼び出しの動作
デフォルトの振る舞い
関数呼び出しのデフォルト設定はtool_choice: "auto"です。これにより、モデルは関数を呼び出すかどうか、またどの関数を呼び出すかを自動で決定します。
カスタマイズオプション
関数呼び出しの振る舞いをカスタマイズする方法は以下の三つです:
関数を常に呼び出す:
tool_choice: "required"を設定することで、モデルは一つ以上の関数を必ず呼び出します。
特定の関数のみを呼び出す:
tool_choice: {"type": "function", "function": {"name": "my_function"}}を設定することで、モデルは指定された関数のみを呼び出します。
関数呼び出しを無効にする:
tool_choice: "none"を設定することで、モデルはユーザー向けのメッセージの生成のみを行い、関数呼び出しは行いません。
これらの設定を利用することで、様々なシナリオに応じて関数呼び出しの振る舞いを最適化できます。
(6)並列関数呼び出し
並列関数呼び出しのメリット
並列関数呼び出しは、モデルが同時に複数の関数を呼び出し、それらの効果と結果を並行して解決する能力です。これは特に関数の実行に時間がかかる場合や、APIとの往復を減らす場合に便利です。
具体例
例えば、3つの異なる場所で天気を取得する関数を同時に呼び出す場合、モデルはtool_calls配列内で3つの関数呼び出しを生成します。各関数呼び出しは独自のIDを持ちます。これに対応する関数呼び出しの結果を新しいメッセージに含め、それぞれのtool_call_idを参照することで、複数の関数結果を一度に処理することが可能です。
このように、並列関数呼び出しを活用することで、複数のタスクを効率的に処理し、ユーザーへの応答時間を短縮することができます。
(7)関数呼び出しの例
実際の利用例
関数呼び出しの具体的な利用方法を例を通じて理解しましょう。
例1: 天気情報の取得
関数名: get_current_weather
呼び出し: モデルはサンフランシスコ、東京、パリの天気を同時に取得する関数を呼び出します。
応答: 各地の天気情報が返された後、モデルはこれをユーザーに報告するメッセージを生成します。
例2: 顧客データの抽出
関数名: get_customers
呼び出し: 「私のトップ顧客は誰ですか?」というクエリに応じて、特定の収益、作成日、制限数をパラメータとして顧客データを取得する関数を呼び出します。
応答: 抽出された顧客リストをモデルが要約し、ユーザーに提供します。
これらの例は、モデルがどのように自然言語のクエリを解釈し、関連するAPI関数を呼び出すかを示しており、日常業務の自動化や効率化に貢献することができます。
参考文献
あとがき
今回ご紹介した「tool_choice: "required"」設定は、AIを用いた自動化プロセスにおいて、より確実性を求める場面で非常に有効です。この設定を利用することで、AIが自動的に外部の関数を呼び出し、業務の自動化を一層強化することが可能になります。どのようにしてこの新機能を自分のプロジェクトに取り入れるか、具体的なアイデアが湧きましたでしょうか?急速な技術進化は止まることなく、私たちの業務手法もそれに応じて進化していかなければなりません。今後も新機能の活用方法に注目し、実務に役立てていきましょう!