Function Calling

ChatGPTを提供しているOpenAI社はAPIも公開している。通常「OpenAI API」と呼ばれているようで、その中には複数のAPIがあるが、本記事では「Chat Completions API」の中のFunction Calling機能について触れる。

「Chat Completions API」は面倒なので「OpenAI API」と呼ぶ。わかりやすいし。

さて、OpenAI APIを使うと自作のプログラムを使って、GPTモデルのLLMと会話を行うことができる。「こんにちは」というメッセージを投げると、「こんにちは。何かお手伝いすることはありますか?」と言った応答を得ることができる。

ここまでは簡単に理解できるね。

でも、「京都の天気を教えて」というメッセージに対しては、「京都、日本の現在の天気については、私は直接情報を提供することができません…」といった応答が返ってくる。これはGPT-3.5-Turboをモデルとして指定した場合なのだが、過去の情報しか持っていないので、現在の天気は答えてくれない

そういう場合、本家のChatGPTではどうするか?

ChatGPT Plus(有償版)を契約しているならプラグインで解決できる。例えば「WebPilot」というプラグインを使えば、Webサイトか最新の天気をとってきて表示してくれる。

これは便利。

これと同じようなことがOpenAI APIでもできれば、自作プログラムにも自作プラグインが導入できるわけだ。

そう。その機能が「Function Calling」というわけだ。仕組みは以下の通り。

まず、あなたは天気を取得する関数(get_weatherとする)を自作して、プログラムの中に組み込んでおく。

そして、プログラム側から「get_weather関数の定義」と「京都の天気を教えて」というメッセージをOpenAI APIに投げる。

この「関数の定義」は「このget_weatherという関数は天気をとってくるための関数です。引数として場所をとります」という感じのもの。LLM側に教えてあげるわけだ。

LLMは「京都の今の天気は自分ではわからん。ん?get_weatherという関数があるらしいやん。これを使ったら天気が取れそう。引数は”京都”とすれば答えはとれるな」と判断して、「get_weather関数使いたいな。引数は”京都”にして」と返してくる。

プログラム側はこの応答を得たら「わかった。get_weather関数を使うよ。」というわけで、get_weather関数を呼び出して、戻り値をゲットする。

そして、再びOpenAI APIを呼び出してメッセージを送る「えっと、答えは”晴れ、気温は20度…”」(この時、最初の「京都の天気を教えて」などのメッセージも再度送信する。LLM側は前の会話を覚えてない)。

そうすると、get_weather関数の戻り値も含めて、自分の答えとして応答してくれる。

結構ややこしいやり取りになっているし、なかなかわかりにくいね。

だけど、ぼくは後半は省いても十分機能すると思ってる。「get_weather関数使いたいな。引数は”京都”」という答えさえ得られればいい。

本格的なプラグインとかチャットボットを開発するわけじゃなければ、このFunction Calling機能を使って、「GPTの会話機能+独自の関数」を持ったツールを開発することができると思う。

特にこのサイトでは「業務の自動化」をテーマにしているので、Function Callingを持ったOpenAI APIをPower Automate for desktopなどのRPAツールとどう組み合わせて価値を出すか?が大事。次の僕の書籍のテーマでもある。

具体的にどういうプログラムを作って、どう活用すればいいかは今年出版予定の書籍を参考にしてほしい。では。

コメント ログインすると書き込めます