戻る
タイムライン

shimojik

しもじま

2023/07/30 17:38

記事

OpenAIのAPIとファンクションコーリングの利用

今回のこの長文に文ごとに解説をつけるっていうアップデートについては、OpenAIのAPIの中でファンクションコーリングっていうのを使ってるので、これの紹介をしたいなと思うんですけど。このファンクションコーリングの利用例っていうのは、いろいろ書いてる人いるんですけど、なかなかイメージが持ちづらかったんですね、僕。なのでどこで使うかなみたいな、圧倒的にこういう便利そうっていうところも、はまるところあるんですけど、何が便利かっていうのをぼやっと考えると、行き着けないみたいなところがあったので、これ一つの参考例になるかなと思うので、紹介しようと思います。

ファンクションコーリングの概要

まずファンクションコーリングについては、ちょっとドキュメントを見ていただきたいんですが、ちょっとだけ解説すると、まずここのファンクションコーリング自体のイメージが付きづらいっていう問題があるので、ここはちょっとだけ解説したいんですけど。

ファンクションコーリングのイメージのしづらさの原因となるのが、2回プロンプトを送るっていうことなんですよね。やっぱり1回、例えば今から例として出す、「ボストンの8月の平均企業を教えてください」って、これ1回送って1回でパンと返ってくるんだ、AIすげえっていうのは分かりやすいと思うんですけど、これが1回送って帰ってきたものを、こっちでもう1回送り返して、帰ってきたものが最終的に答えであるっていう、これがめちゃくちゃ分かりにくいと、分かりにくいっていうかイメージがしづらい、アイディアが生まれづらいっていうのが、ここなんですよね。

ファンクションコーリングの利用例

例えばどういうことかっていうと、こちらから送るプロンプトを今みたいに、「ボストンの8月の平均企業を教えてください」って送るわけですけど、そのときに本当はこっちで、「ボストン8月平均企業」っていう三つ指定されたら、何度、例えば30度って出せるデータシステムを僕が持ってるとするじゃないですか。

そうすると別にわざわざAPIを経由させて、AIということにしたら、その相手のAIにそれの答えを出してほしいわけではないんですよ。こっちが正確なデータ持ってるわけですから、この正確なデータを返したいわけですよ。でもユーザーから文章で、「ボストンの8月の平均企業は何度ですか」っていう、この文章に対して、「ボストン8月平均企業」っていう三つの要素を抜き出すっていうのは、これはいろんな書き方が、自然言語ですからあるっていう意味で、ここが難しいわけですよね。

そこで関数は僕のほうで持ってると、「ボストン8月平均企業」って言ったら、30度ってやるシステムは持ってるから、それを発動させられるようにしてくれっていうのが、これが最初のラリーなんですよ。2つある2回ラリーするうちの最初のラリー。

なのでその最初の「ボストンの8月の平均企業は何度ですか」っていうテキストをAIに送ると、OpenAIのAPIに送ると、そこで「ボストン8月平均企業」っていう三つの情報を返してくれるという、このラリーが最初に行われます。

この時に僕がその「ボストン8月平均企業」っていう三つの情報が欲しいっていうことを、もちろん伝えてないと返ってこないじゃないですか。なのでこの時にその三つの情報があれば、平均企業を出せるシステムを持ってますよっていう情報、この三つを返してくださいねっていう情報を一緒に投げるわけです。

つまり最初に送るのは、プロンプトの「ボストンの平均企業は何度ですか」っていう文章と、こちら側に平均企業を取得するメソッド関数を持ってます、使いたいなら使えるんでいつでも呼んでねって送るわけです。

もちろん使わないこともあるわけですから、テキストの内容によっては、「ボストンで今流行っているものは何ですか」とかっていうのが来たら、別に関数使えないですから。だからあくまで使えるかどうかの判断も含めて、一回やってくださいと。

返してくるときには、「ボストン」と「8月平均企業」の三つの情報を返してねっていうのを、最初のプロンプトで送りますと、そしたらそこから返ってくるわけですよ。使えそうなのでっていうことが判断されればっていうのを受け取ります。

この段階では別にユーザーにもちろん30度とかっていう、その基本だけポンと出すんだったら、そのまま出せばいいわけですけど、その情報がこっち来て、こっちで30度っていうデータが抽出できるならば、なんですけど、せっかくなら「ボストンの基本は30度です」っていう、割と暑いですねとか、気が利いた文章にしたいわけですよ。

ファンクションコーリングの2回目のラリー

っていうことを考えると、もう1回作ってほしいっていうのがこれ2回目ですと。ここで分岐が起きるのは、今言ったように30度ですという情報はこっちでもゲットできるので、30度っていう情報が分かったら、ポンと30度って返してもいいし、もう1回その内容を、もう1回ヨシナにやってくれっていうのを、もう1回AIに頼んでいい文章を作ってもらう、適切というか気の利いた文章を作ってもらう、っていうことをしてもいいという、この2個の選択肢が生まれるわけです。

校舎を選んだ場合には、校舎には最初に送った「ボストンの平均気温は何度ですか」っていうのと、関数項に使いますよって送った最初のデータと、もう1個こっち側で情報を取得しましたよっていう、その30度ですよっていう、30度っていうのを一緒に送ってあげるわけです。

そしたらその30度を組み込んで、「ボストンの8月の平均気温は30度でした、ほどほど暑いですね」みたいなことが、AI側から返ってくるので、それをシステムは取得して表示するみたいなことをするという、こういう形になってるわけですけど。

今回のエグボックスの文の解説に関して

今回のエグボックスのこの文の解説に関しては、まず最初に文ごとに区切らないといけないので、それはシステム側で先にやっちゃいます。その文1個1個区切った文に対して、その文ごとに1個1個ファンクションコーリング使って、この文に対してこっち側で欲しい情報は、キーワードとかあとは文法的な解説とか、こういうものですよって4つ5つぐらい指定しておいて、それを送ってもらいます。

それを文ごとに全部やるので、7文あったら7回それを送って、7個の文に対してキーワードである単語とか、熟語のリスト、その文法的な解説とかっていうのが、1個1個に対して返ってくるという形になってます。

さっき言ったようにこれをシステム側に組み、システムとしてもそこから表示しちゃうのか、もう1回ラリーを行うのかでいうと、このエゴボックスの今回のアップデートに関しては、もう1ラリーは行ってません。なので、こちらが欲しいデータの形で1回もらったら、それをそのまま保存してそれを表示してるという形になっています。

話してて思ったよりややこしいなというのは、難しいというよりややこしいですね、というのを思ったんですけど、こういう形になっているので、ファンクションコーリングのこの2択含めて、どっちも使えるマインドに持っていくのを、意外といろんなパターンを実装してみないと難しいなと思ったので、参考になるかなと思って紹介してみました。少しでも参考になると嬉しいです。

ということで本数字リートはちょっとずれましたけど、技術的な紹介も少しだけしてみました。とにかく本題としてはこの本文のほうですね。ぜひ使ってみていただけると嬉しいです。