[無料です][GPTs]knowledgeファイルの検証と考察
GPTsクリエイターのAIMUです。
これまで様々なGPTsを作成してきて、最近不具合修正を重ねたGPTsの検証からknowledgeファイルのChatGPTでの扱い方のようなものが分かってきましたので、今回はそのお話です。
GPTsはChatGPTの日々のアップデートでメンテナンスが必要そう
これまで30以上のMyGPTsを作成しPublicしてきたAIMUですが、まだまだ新しいGPTsを作成するアイデアはあるものの、GPTストアのローンチとともにGPT自体のクオリティを上げる必要性を感じて、過去にリリースしたGPTのクオリティチェックをしています。
中でも、広範な人にアプローチしているタイトルで、一時期チャット数が増えたものの、急に伸びなくなったGPTsタイトルについて、なんらか問題があるのではと考えて、そこを優先順位を高くチェックしていました。
その中で顕著だったのが、下記のMyGPTs
四柱推命占いをするGPTsです。
リリース直後も不具合修正のためにいろいろ手を掛けていたので、ある程度問題なく動くことを確認していたのですが、最近になってChat数が増えないので気になってチェックしてみました。
すると、直っていたはずの占いの基本情報の検索システムがエラーを繰り返し吐くようになっていて、うまく動かなくなっていました。
GPTsのKnowledgeの扱いについての推測と検証
ChatGPTがGPTsとしてknowledgeを参照する方法として、当初は以下のような方法であると考えていました。
直接引用
キーワード検索して直接引用
ベクターストアを構築してリトリーブ
元データとしてそのまま利用
前述の占いGPTsに関しては、ユーザーの生年月日から命式という占いに必要なデータを計算で求める必要があり、その計算式をPythonで作成してpyファイル自体をknowledgeにアップロードしたり、JavaScriptで書いたプログラムをjsファイルとしてアップロードして利用していましたが、どうもうまく行きません。
そこでエラーが起きた内容を確認したところ、エラーを起こしたプログラムはChatGPT自体が作成したPythonコードで、knowledgeにあったファイルを一部は参考にしていたのかも知れませんが、そのまま利用するということはありませんでした。
よって、元データとしてそのまま利用するということはない、ということが分かりました。
計算式自体を埋め込むのであれば、Instructionsに入れる必要があるのかも知れません。
とは言えInstructionsには8,000文字の制限があるため、今回の占いのような複雑な計算のためのコードを入れると他のプロンプトを入れる余地が無くなってしまいます。
この場合は予め計算したデータベースを使うのが良さそうだという判断に至り、当初はCodeInterpreterの利用をオンにしEXCELのファイルを投入しました。
ただ100年分毎日のデータを10年分づつのシートに分けて入れたものから正しく検索ができず、試行錯誤の末EXCEL形式は諦めJSONファイルにしたところ、正しくデータを抽出できるようになり安心していました。
大きなデータベースを扱うにはコツがありそう
100年分毎日のデータ、およそ36,500件+20件くらいのJSONデータベースは3.5MBくらいでしたが、当初はうまく検索できていたものが、今週のチェックではエラーが連続して検索ができなくなっていました。
従来アメリカが日中となる日本時間夜10時前後にChatGPTの動きが悪くなる傾向は以前より少なくなったのですが、たまにリソース不足か、OpenAIによる帯域制限かなと思うこともまだまだあり、その影響かも知れないと考えるようになりました。
特に後者の帯域制限は、ChatGPTもエンタープライズ版に加えてチーム版をリリースしたこともあり、そちらが優先してChatGPTのリソースを使えるようにしているため、現実発生しているのかなと思っています。
そのため、3.5MBあるファイルから検索するのが辛いのであれば、参照ファイル自体を小さくした方が良いのではと考え、1MB程度のファイル4つに分割してアップロードしました。
これが当たりでした。
格段にエラーを吐く確率が減り、必要なデータの抽出時間も早くなりました。
実際JSONがそのままなのか、チャンクされてVectorStoreになっているのかまでは分かりませんが、一つの大きなデータベースよりも、小分けしたデータベースからの方が安定するということは、JSONファイルをそのまま参照している可能性が高いということが分かりました。
実際検証を進めた中で出たエラーを見たところ、CodeInterprterが自身で作ったPythonでは、4つのファイルのパスを指定し、そのファイルから該当するファイルを見つけ、その中を検索するようにというプログラムになっていましたので、これは間違いありません。
よって、CodeInterprterを利用したデータベース参照のGPTsは、CIが作成したPythonプログラムをSandboxの中で動かして、DBのファイルを参照する動きになるということです。
となればエラーレートや検索時間を下げるためには、DBファイル自体を小さめにして置いた方が良いということになりそうです。
(一応占いGPTsの生成内容がどういう感じか参考にリンクしておきますね)
ドキュメントファイルはどうなのか
対してCodeInterprterを使わない場合のドキュメントファイルはどうなのか?
ここはエラーの内容が見えないので分かりませんが、いろいろ試した結果としては、txtファイルやjsonファイルにしたデータはInstructionsの延長線上として扱ってくれているようです。
Instructionsは前述の透り8,000文字の制限があるため、ここに長大な文章は入れられません。
これまでゲーム関連の設定データを入れた感じでは、txtとjsonは結果に問題なく反映されていて、特に構造化されているjson形式のファイルはGPTs的には扱いやすいのかなと考えています。
対して、wordのdocファイルやPDF形式のファイル、あるいはpptはファイルによってうまく行くものと行かない物があり、装飾が多い印象です。
そういった場合の対策ですが、特にdocファイルの場合は、一旦プレーンテキストにしてから、重要な項目(見出しなど)を太字にして上げることで、データ量も減り、読み出しもうまく行くような印象です。
いずれにせよドキュメントファイルはアップしてすぐに反映する場合と、すぐに反映しない場合があることも感じていて、直接キーワード検索もしつつ、ベクトル化もされていて、Q→A的な一問一答の内容ではキーワード検索、そうでない場合はベクターストア化されたRAGとして二面的な動きがあるのかもと想像しています。
画像ファイルを上げるなら直接出力のみ
一時期自分の思ったような画像がGPTsから出ない時に、「この画像を参考に」と指示して画像ファイルをアップしていた時期もあったのですが、これはあまり意味がなさそうです。
画像自体を解析してそのプロンプトを元に画像生成しているような形跡がなく、おまじない程度のものかなと思います。
ただ、DALL-E3で画像を生成する参考にするのではなく、「この画像を出力してくれ」なのであればアップロードした画像をそのまま出力するという手はあるのかなと思うので、DALL-E3の気まぐれさを嫌うのであれば、直接出力用の画像を上げた方が良さそうです。
ただDALL-E3の気まぐれさは別に有効利用すれば良いと考えていて、下記のようなおもしろ画像を作ってくれるのはメリットと感じています。
上記はAIMUが一番最初に作ったGPTs「Photo-to-Recipe - レシピの王様!」に食材以外の画像を読み込ませてレシピを作ってもらった際にDALL-E3が生成した画像。
こんなことが出来るは本当に面白いなと思ってます。
皆さんもぜひ試してみて面白画像を作ってNOTEのネタにしてみてください。
ということで応援お願いします!
MyGPTsの機能を安定させるためにいろいろとやってきたなかで得た知見を共有してきましたが、いかがでしたでしょうか。
今回(も)無料で公開してますので、GPTsクリエーター、GPTビルダーのみなさまの参考になれば幸いです。
この記事が為になった、参考になったという方いらっしゃいましたら、ぜひスキ、フォロー、SNSへの拡散などでAIMUを応援していただければと思います。
それでは今回はこの辺で。
またおAIしましょう!
チャオ!