見出し画像

[無料です]GPTsを作る上で得た学び。正確な情報の出力について[GPTs][ChatGPT]

GPTsクリエイターのAIMUです。
いやぁ長かった。GPTsは簡単に作れそうな見た目をしていながら、その中身はやっぱり深いというか、使っていくなかで学ぶしかないなという印象です。

ということで今回はGPTsを作成するうえでの学びを共有したいとおもいます。


GPTsから正確な情報が出ない

今回何に手間取ったかというところからの説明ですが、以下のGPTsがまず問題のGPTsです。

四柱推命という生年月日を元にした占いのGPTsです。
作成した当初はちゃんと動いていると思っていたのですが、四柱推命で使う干支のデータが正しくでない場合があることに気づいてしまったのです。
当然そうなればユーザーの方にもご迷惑を掛けてしまうので、占いの内容はまだしも四柱推命の根幹のところの動きを間違いなく出力しようと思いました。

四柱推命の複雑な算出方法

四柱推命という占いは、本来は生まれた生年月日と時間を用いてその人の性質や運命を占うものなのですが、その前提として生年月日時を元に4つの干支を取得します。
60干支といって10の天干と12の地支を組み合わせた干支を、生まれ年、月、日、時間それぞれに求めるという占い方法で、その算出方法も旧暦を元に閏年も踏まえて計算しなければいけない複雑な体系の占いです。
占い師になろうとしてここで躓く方もいらっしゃるのかなと思ったので、そこをAIが肩代わりしてはどうかというのが、当初の発想でした。
で、生まれた時間まで要求するのはユーザー側でも戸惑う方も多いかも知れないと思い、スコープに入れたのは生年月日から占えるというコンセプトでした。

それで生年月日から得られるのは「年干支」「月干支」「日干支」で、年干支は比較的求めやすいのですが、月干支は年干支を元に月の初旬の決められた日を境に変わる部分もあり、日干支もやや面倒な計算をして求めなくてはなりません。

当初書いていたプロンプトである程度は近しいところに落ち着いてはいたのですが、詳しく調べると違っている出力も出ることが分かったので、修正をしようと思い立ったです。

GPTsが役割を果たすために、どうデータを渡すべきか?

基本的に当初の計算による計算で出せる物だと思っていたのですが、調べれば調べるほど、当初の算出方法とは違うことが分かり、まずは占いの基礎となる干支のデータの正確に出力することを目指しました。

当初は計算式をJavascriptで作成したjsファイルをKnowledgeに入れて計算できるか試してみたのですが、JSファイルは実行できない様子でした。

次に計算式をChatGPTと相性のよりPythonで書いたコードを実行させるようにしました。
この考え方は半分正しく半分間違っていました。

計算式をPythonのpyファイルにしてknowlegeに入れたところ、最終的にはうまくいくことが多いのですが、かならずエラーが発生する。
Pythonでモジュールを読めない、だとか、引数の形式が違うだとか、2,3回はエラーを出したのちに取得した干支を生成してきても、5割はハズレという状態。
最初はChatGPTの「揺れ」かなと思いリリースして放置していたのですが、どうもそうではない。GPT側も頑張ってはいるのですが、一発でうまくいくことがなく、そこで出るエラーをGPTに出力するようお願いしてみてみたところ、GPTからPythonへ渡す引数の形式違いであったり、ナレッジに入れたpyプログラムを呼び出すのにモジュールとして呼び出せなかったり、計算上の問題であったりと色々ありました。
それぞれのエラーについて改善できるか探っていったのですが、毎回同じものが出るわけでもなく、特に引数の問題ではチャットで入力されたSTR形式の生年月日を整数形式でPythonプログラムに引き渡すようにインストラクションのプロンプトに書いてみましたが、うまく行くときもあれば行かないときもあるという状態に苦しみました。

なんども繰り返すなかで掴んだのは、ChatGPT自体はPythonプログラムを扱えるのですが、自分が生成したPythonのコードを使う際に、毎回違うものが生成されているということでした。

生成されるプログラムの揺れは防げないが


GPTが出力する計算の予備段階でのプログラムは毎回異なり、使う変数の名称も都度異なるため、意図したプログラムを実行させるにしても、その間を取り持つプログラムが固定できないため、計算により正確な情報を出すという用途には限界があると考えました。

そうなれば計算して算出するという方法を捨て、データベースを参照して出力するしかないと、時間を掛けてデータベースを作成したのですが、ここにも落とし穴が……。
生年月日に対応した値が三項目あるため、当初はEXCELファイルで表を作って渡したのですが、ここでまたテキストデータと、日時データのアンマッチでデータはあるのに、参照できないという状態が発生し、改善に取り組んだのですが、いろいろ面倒。
致し方ないので、そのEXCELファイルをChatGPTにお願いしてJSON形式に変換すると、日時データが数値化されて読めなかったり、日時データで出したら時間データまで付いてきたり、それを直しても今度は本来出力すべき干支のデータ文字化けしてしまって使えなかったりと、なんども修正加えることになりました。

最終的にはUTF-8形式で出力したデータをJSON化したデータベースとして年月日からデータを引っ張ってくることが出来るようになったという状況です。

GPTの出力の正確性を保つための気付き

ということで、結局生成AI自体がベクトルをベースとした方法で回答を生成する以上、その揺れは防ぎようがない。
1対1で参照すべき内容があるのであれば、DBを作ってそれを見に行かせる方が間違いがない、ということになるでしょうか。
それでも生成エラーやネットワークエラーがあると、ナレッジを見に行くことを忘れることもしばしばあり、ここはもっとChatGPT側に頑張って欲しいところでもあります。

最終的に、生成で作って欲しい内容の前段階というか、正確性を担保しなければならない領域ではなるべく間違いが起こりにくいデータベース参照方式の方が良いですよということですね。
今回の四柱推命GPTでは、その後の占い部分でしっかりChatGPTに働いてもらっているので、そいういう面ではやはり生成AIの力を感じています。

最後に

かなり時間を掛けて試行錯誤やデータベース作りをしましたが、とにかくいろいろ勉強になりました。
おかげでMyGPTsの下記も、リリース当初よりも安定して結果を出せるようになったと思います。
https://chat.openai.com/g/g-ZSwzF8GIM-the-4pillars-of-destiny-si-zhu-tui-ming-nozhan-ishi

2024年を占う意味でも試してみてはいかがでしょうか。
(利用にあたってはChatGPTplusへの加入が必要です)

またなにか問題やご感想などあればコメントでお知らせいただけると助かります。

ということで今回はここまで。
今回の投稿が参考になった、頑張って欲しいなどありましたらば、ぜひスキ、フォロー、拡散お願いできればと思います。
ではまた次回お会いしましょう!
チャオ!

いいなと思ったら応援しよう!