「ウォンバットのかわいいところを3つ答えてください!」と聞いてみる

田中正吾氏:ではまず、ウォンバットの質問を例にやっていこうかなと思っています。Web版で「ウォンバットのかわいいところを3つ答えてください!」と聞くと素敵ですね。

私はウォンバットがとても好きなので、1日1ウォンバットぐらい検索しています。情報のストックや周辺のウォンバットの豆知識とかいろいろとやっています。そういうところを見たとしても、やはりChatGPTはいろいろな文献をきちんと溜め込んでいるモデルなので、このように自然言語で返してくれます。

やはり丸い体型がかわいいですね。あと耳と鼻もとてもかわいいです。毛皮もちょっとタワシみたいな感じですが、非常にかわいいんです。オーストラリアの保護動物ですが、日本にもちょっといるので触ってみたらそんな感じでした。かわいいです。このようなかたちで返してくれます。

ということで、今回は(スライドを示して)このようなフローで、質問チャレンジです。今回は、ただただきっかけで、文言は入れていないんですけど、メッセージ内容に「ウォンバットのかわいいところを3つ教えてください!」と書いてあります。

これを流し込むとデバッグノードに結果が出て、ChatGPTノードに先ほど言ったとおりAPI Keyなどを入れます。System Stringというのは、先ほど言った前提を決めるものですね。ChatGPTノードに送り込むものは、手前のchangeノードで仕込んでおくので、まさに平文でこう置いてあります。

ウォンバットに関する質問デモのポイント

ということで、今日初のデモをやっていきましょう。ChatGPTは、トークンが丸見えなので見せられないのですが、このようなかたちで文言もありますね。ここの緑になにか結果が来ると出ます。

今ChatGPTのサイトとかが落ちていなければちゃんといくはずです。いけ! どん。処理しています。おいっ、頼むぞ! ババン、さぁどうでしょう。メチャメチャ時間がかかります。返って来ました、よかったぁ。はい、ちょっと小さいので、拡大してみようかな。来るかな。

ちょっと拡大率が良くないな。ああ、ここは読めますね。やはりフサフサの尾っぽ。今回はちょっと違うネタが出てきましたね。あとクマのような体型もね。かわいい。やはり鼻がかわいいですね、みたいなことをガッツリこのように返してくれる。

もう1回やってみましょうかね。ドン! がんばれ。(時間がかかるのは)みんながアクセスしているからかなぁ。まぁそういうこともあります。はい、ちょっと変わってきますね。フワフワの毛並み。食べ物を食べる時、前足でやってね、あと動きがのろいのですが、元気に飛び跳ねたりしてかわいい。いろいろ手を替え品を替えやってくれるんですよ。えらい。

ということで、最初のデモはうまくいきました。イェイッ! 

ウォンバット質問のデモのポイントですね。ChatGPT APIは、Web版のような返答ができます。応答ができます。Web版だと徐々に応答が出てくるので緩和されて見えますが、基本的に全部できるのは、同じくらいの時間がかかるかなと思っています。同じ質問を聞くたびに(返答が)少しずつ変わっておもしろいですね。

ChatGPTはこういったカジュアルな質問もいい感じに返してくれるわけです。先ほどお見せしたとおり、人間の言葉を理解して、回答ジャンルは万能です。ウォンバットもいけます。人間の言葉で回答してくれます。

なぜあえてChatGPT APIを使うのか?

では、Web版とChatGPT APIというところについてお話しします。「なぜあえてChatGPT APIを使うの?」という、ちょっと閑話休題でいきたいと思います。APIを使う理由は1つあって、プライバシーが保たれるであろうというところで使っています。最近、OpenAIのAPIを利用する場合、オプトインしない限りユーザーが送信した情報を学習に利用することはないと改定されました。これは非常にありがたいですね。

逆にWeb版は、「使う可能性がある」という表現になっています。確かに無料で使えるような状態であれば、まぁ使うこともあるというところで、うまくバランスを保っているというのはわかる気がします。

(スライドを示して)実際にこちらの部分は私も自分で読む分にはいいのですが、このようなかたちでまとめていただいている、クラスメソッドさんのページにはとても感謝しています。日本語でまとめていただいていると非常にありがたいですね。このように書いています。

ということで、自分が無邪気に使ったものが(学習に)使われることがないという安心感が高い。今後はわかりませんが、少なくとも今は大丈夫なのでいいのかなというところですね。本当に買収されたりしたらわからないですからね。

ともあれ、こういうところでWeb版にはもう1つの側面があります。自然言語で答えてくれてとてもありがたいのですが、これをやられてしまうとすごく悩ましいことがありました。僕もあらためてハッと気づいたのですが、他のITの仕組みに入れにくいという悩みがありますね。

事例を話します。「ごく簡単なindex.htmlでください」と言うと、一見いいように見えます。素敵な回答ですよね。勉強になりますが、ここからコピー&ペーストする手間があったんですね。人間が目視してコピー&ペーストして取り出すみたいな、説明が前後にありますからね。こういうところがちょっと使いにくいなと思っていました。

このようにAPI経由でデータをもらえれば、そのままの文言を使うことができるので、非常に良いということで注目しています。

「人間の言葉で回答」部分をうまくブラッシュアップしてみる

さらにITの仕組みにChatGPTをなじませるアプローチというところで、実際にChatGPT APIでどうしていくかを話していきましょう。

先ほどのように、返答されたものを他で扱うためには、やはり加工・抽出が重要です。ChatGPT APIでも困るんですよ。ウォンバット例のように返答が返されて、その文言をhtmlでただただ他のところに表示するとかだったらいいですが、そうじゃないとちょっとやりにくい部分もあります。(僕は)Web出身なので、JSONで返したほうが扱いやすいと思いました。

ということで、こんなチャレンジをしました。人間の言葉で返される特性はChatにはいいですが、システムには組み込みにくいということで、こんなカスタマイズをしようかと(思いました)。人間の言葉で回答する末端の部分がありましたね。(スライドを示して)こちらの部分ですが、うまくブラッシュアップしてみます。

ChatGPT、APIでもWeb版でも共通して大事なのは、良い質問を作ることだと思います。質問をプロンプトと言いますが、これをうまく組んでみる。プロンプトというと、コマンドプロンプトを思い起こす方もいると思うので、今日はなるべく「質問」という言葉に寄せます。

「JSON データで質問をうまく返す」実験

うまくJSONで返ってくる質問を試行錯誤して、こんな実験をしてみました。「いい感じのエアコン設定温度をJSONデータで返答し、HTTP API的にChatGPTが答えてくれる質問のメモ」ということで、このようなかたちです。

これを設定時を使ってエアコンの自動設定ができたらいいなとちょっと思ったんですね。こんなことをやりました。実際にこれをWeb版で実験して、ChatGPTでも同じようなことができるので、まずこっちで置き換えた、というところですね。

実際にはこのようになりました。ちょっと拡大してみましょう。「“東京における快適な暖房温度の設定は30度”のように、必ず1つの値でください。できれば省エネを意識した値でください。JSONでは返さないでください」というところで、きちんと設定温度の20で来ます。冷房の設定温度も聞いたら、28度だったので、このような聞き方をすると省エネを意識した温度がJSONで固定されることがわかりました。これはけっこう自分の中で気持ちが燃え上がりました。

さらにこれがすごいんですよ。「省エネ」という言葉を抜くと、暖房温度の設定を2度ぐらい上げて、冷房は下げてくれるんですね。ああ、理解している、すごいと思いました。これを設定値にして赤外線の発信とかで設定するのもおもしろいかもしれないですね。というところで、だんだんと対話できるようになりました。

JSON縛り質問デモのポイント

ということで、いざデモをしてみます。先ほどの質問をAPIで聞いてみましょう。Node-REDです。温度設定のJSONのタブを見て、実際にはこちらのJSONの質問で、このようなかたちで先ほど言った定義を書きました。ではやっていきます。じゃかじゃん!

はい、なんとテンプラちゃん28というかたちで、きちんと来ています。Node-REDの場合は文字列の状態で、ありがたくもJSONに変換するというノードがあります。これを噛ませると最高ですね。やってみましょう。じゃかじゃん!

はい、このようになぜ色が変わったかというと、JSONデータをきちんと扱えたからです。このデータ・ドット・テンプラちゃんとやると、28と書いてあるところで、そのままシステムに組み込むと万々歳になります。いいですね。

ということで、2回目のデモもうまくいった感じですし、APIもけっこうレスポンスが速くて調子が良くなってきました。では、JSON縛り質問のデモのポイントをお伝えします。人間の言葉での回答はシステムに組み込みにくいので、JSONデータで返すようにして親和性を高めました。

JSON例をきちんと質問の中に明示すると、ChatGPTが理解して返答してくれました。人間の言葉を理解するという特性が、より尖った感じですね。JSONの回答を理解した上で聞きたいことの値をうまく返答してくれたというところで、こういうふうに理解してくれるんだなという驚きがありました。

ということで、このようにブラッシュアップしました。ChatGPTはこちらの質問やルール次第で回答もJSONに合わせてくれました。(スライドを示して)この右側のところがブラッシュアップされました。人間の言葉を理解して、回答ジャンルは万能で、JSONデータに加工して回答するというところで、システムに組み込みやすくなりました。

ルールを決めて絞り込むことで回答精度をアップしたい

では次。ルールを決めて絞り込むことで、回答精度をアップしたいなと思いました。ウォンバットの質問もいいのですが、けっこうブレがありましたよね。きちんとした値で返してほしい。そんな思いがあります。

回答精度の実用を目指してみたら、もどかしい部分がありました。これは若干もどかしい途中経過ですね。LEDに設定するRGB値をJSONで返して、HTTP API的にChatGPTが答えてくれる質問のメモということで、このようなかたちでやってみたんですね。こちらも文献がまとめてあります。

実際にはこのように出題してみました。要するに1、例えば赤というメッセージの場合はRGBできちんとこの値を返してください。2の他の色名を聞いた場合は、1のルールに従って回答してください。3、2のやり方で色名が置き替わらない場合はnocolorで返してください。最初の問題は黄色です。ここがいろいろ自由に入るようにすると、きちんと黄色を返してくるんですね。素敵です。

このように返ってきますが、定義をけっこうがんばらないとうまく返してくれない時がありました。赤はいいのですが、存在しない色の場合はおしゃべりなんですよ。違う例の場合に該当なしだと、説明がけっこう入れられちゃったりするんですよね。

これなんかわかりやすいですね。メッセージとして「ほげほげ」という文字を入れると、JSONデータじゃなくて混ざったデータなのでエラーが起きますって話ですよね。けっこう例外に弱い。このナレッジもフローを作りました。

色の質問デモver.1のポイント

ということでちょっとやってみましょう。このデモもきっとうまくいくはず。質問ver. 1というところでやっていきますね。JSON質問に先ほどゴリゴリと決めた質問が書かれています。失礼しました。2のほうですね。今、2になっています。1と2がちょっと逆になっていましたね。

じゃあいってみます。とりあえずこの中身がこのような質問になっています。では赤、バン! はい、きちんとRGBを返します。では、藤色という曖昧な色を返します。はい、そうすると藤色の色を返してくれます。これで何回かアクセスすると、ちょっとブレます。

「ほげほげ」とやりますね。no finded color。きちんと出るようになりました。どどめ色を出してみます。これが……ああ〜、今日は大丈夫ですが、聞き方によってはやりにくいという説明が混ざってきます。

とりあえずうまくいきました。先ほどの質問でも、確率的には85パーセントぐらいはうまくいくのですが、やはり例外に弱い。このtemplateノードを使って、赤など指定された言葉を質問文に入れて、ルールを決めて、さぁ問題です。今回の赤をどう答えますかと今日のやり方でやったら、かなりうまくいくようになりました。

ということで、先ほどのようにやらせていただきました。ver. 1の質問で、しっかり問題を定義すれば柔軟に返してくれる。同じ質問でも、違うカラーに変えて返してくれておもしろい。

テンプラちゃんは、0.7がデフォルト値で解答の揺れを設定しているので、これをもっと絞り込めばうまくいくのかもしれませんが、まぁ揺れがあってもいいですね。例外については、たまにJSON縛りを忘れたりする結果になりました。これをやるとJSONが壊れちゃうのでやめてって思うんですけど。

(次回へつづく)