ChatGPT APIの新機能 Function calling についてTodoリストを使って実践的に紹介
6月13日から、Function calling と呼ばれる新機能により、ユーザー(開発者)が ChatGPT Plugin のような機能を比較的簡単に実装することができるようになりました。
ただし、関数の実行自体は開発者側で制御する必要があります。
最新のモデル(gpt-3.5-turbo-0613とgpt-4-0613)は、(入力に応じて)関数を呼び出すべきタイミングを検出し、関数に準拠したJSONで応答するようになっています。
関数呼び出しにより、モデルから構造化されたデータをより確実に取得することができます。例えば、次のようなことができます:
外部API(ChatGPT Pluginsなど)を呼び出して質問に答えるチャットボットを作成する。
例えば、send_email(to: string, body: string) や get_current_weather(location: string, unit: 'celsius' | 'fahrenheit') などの関数を定義します。
自然言語をAPIコールに変換する
例)"Who are my top customers?" を get_customers(min_revenue: int, created_before: string, limit: int) に変換し、内部APIを呼び出す。
テキストから構造化データを抽出する
例えば、extract_data(name: string, birthday: string) や sql_query(query: string)という関数を定義します。
Function calling の基本的な流れは以下の通りです:
ユーザクエリと同時にfunctionsパラメータに関数の説明を渡してモデルを呼び出します。
モデルが関数を呼び出すことを選択します。呼び出す場合には、返答はカスタムスキーマに準拠した文字列化されたJSONオブジェクトになります(注意:モデルは無効なJSONを生成したり、ハルシネーションの可能性があります)。
コード内で文字列をJSONにパースし、提供された引数がある場合はそれを使って関数を呼び出します。
関数の応答を新しいメッセージとして追加してモデルを再度呼び出し、モデルに結果を要約させてユーザーに返します。