見出し画像

chatGPTの新機能、function calling機能を使ってみた

こんにちは、buildサービス部の鈴木です。
いよいよ11月になりあれほど暑かった夏がようやく終わり、冬の寒さが顔を見せ出し始めましたね。巷ではコロナやインフルエンザが流行しているみたいですので皆さんくれぐれも体調管理には気をつけてください。

さて、今回は仕事においてchatGPTを使う機会があり、その際に数ヶ月前にリリースされた新機能であるfunction callingを使う機会がありましたので、今日はその機能について説明したいと思います。

function calling

必要になった背景

とあるアプリの開発において、あるユーザーの入力を元にchatGPTが採点をしアプリ上にその採点結果の点数とコメントを表示するという機能の開発が必要になりました。
表示するには当然chatGPTから帰ってきたレスポンスから点数とコメントをそれぞれ抽出する必要があるのですが、基本的にchatGPTはレスポンスを文章で返すので、その文章から点数とコメントというデータを構造化された状態にするのに非常に労力がかかるという課題がありました。

アプリイメージ

function calling機能の説明

こういったニーズを踏まえてopenAI社は2023年6月13日にfunction callingという機能をリリースしました。
これはプロンプトに応じたあらかじめ定義した関数を呼び出すことで、その定義した内容に沿った処理を行える新機能です。
主にできることとして、

  • プロンプトから構造化データの抽出

  • APIへのリクエストデータの作成

  • 判断ロジックの明示的な組み込み

といったことがあります。function callingはプロンプトに記述するのではなく、コード上で記述することで使用可能で、2023年10月現在では6月13日にリリースされたGPT3.5またはGPT4にて利用可能です。

function callingのコードの説明

function callingを利用する際は、まずは関数を定義したコードの作成が必要になります。
以下のように、関数の名前、機能の詳細、関数が返す返却値(パラメータ)の定義、必須パラメータといった情報を記述することによりchatGPTに関数動作を定義することができます。

functionの定義

以上で定義した関数を今度はchatGPTの呼び出しの際に渡す必要があり、引数functionsに定義した関数をいれます。また、関数を入れた後には、その関数を利用するようにchatGPTに伝える必要があり、それをfunction_callの引数で制御します。特段事情がなければ"auto"と記述すれば大丈夫です。

chatGPTの呼び出し

以上でfunction callingの実装は終了になります。あとはこれにプロンプトを与えればchatGPTが以下の実行結果例のようなjson形式の構造化されたデータの文字列を返してくれるので、文字列をオブジェクトに変換する処理といった後処理をあとはすれば完成になります。

実行結果

function callingの多彩な活用例

function callingは他にも下記のようなことができます。

  • OCRで抽出したテキスト情報を分かりやすく構造化する

  • 外部の天気予報APIで地名入力から詳しい天気情報を取得する

  • 関数を複数回呼び出すことによる逐次処理

このようにfunction calling機能により、chatGPTをシステム開発へとより組み込みやすくなりましたので、ぜひ活用してみてください。