AI(特にChatGPT)の進化がオモシロイ!
1年前、OpenAIのAPIでボケてのLINEアプリを作った。その後の2023/11にGPTs(GPTストア)が誕生。誰でも簡単にChatGPTアプリを作って公開できるようになった。
それならやってみよう!ってことでさっそくGPTsにカスタムAIをリリースしてみた。
↑の画像にあるように、ChatGPTユーザなら左メニューから「GPTを探す」→「イベント」を検索すると「イベントニュース」が出てくる。(現時点で課金ユーザのみ)
動いている動画はこちら。自然な言葉で質問できてすぐに回答が来る。(コードも表示するデバッグモード。ほんとにリアルタイムにコードを生成しててオモシロイ!)
開発の流れを紹介
開発の流れをさらっと紹介する。もはやプログラミング言語は必要はない。日本語で簡単にオリジナルAIが作れる時代。実際やってみて、こんなに簡単にできるのかっ!っていう部分と、意外と大変、、という部分があったのであわせて解説しよう。
イベントニュースのデータを活用
今回つくるのはイベント検索AI。ということで当社が運営する(これまたGPTベースの)サービス「イベントニュース」のデータを使う。
イベントニュース|今日行けるイベントを検索|東京,大阪,名古屋,・・全国の情報を掲載
イベントニュースとは、ネットから日本全国の1万件以上のイベントデータを収集。地域や日付から検索したり、AIが新しいイベントをオススメしてくれるサービス。
GPTsリリースまでの大まかな流れ
GPTsはGPTのAppStoreのようなもの。誰でも簡単に自作AIがアップできる。(ただしOpenAIに課金している必要あり)。
リリースまでの大まかな流れはこんな感じ
①ChatGPTからマイGPTを作成する
②タイトルやアイコンなど基本設定
③イベントデータ(CSV)のアップロード
④指示(Instruction)をひたすら編集してチューニング
⑤GPTsへのリリース
リリースまでとにかく簡単。唯一時間がかかるのは④のInstructionの編集。いろいろと試行錯誤して結果的に20時間ぐらいかかった。とはいえ3日程度で1つのサービスが作れたので、簡単は簡単。それぞれの工程をざっと説明する。
①ChatGPTからマイGPTを作成する
まずはマイGPTを作ろう、ということで、左下のアカウント設定から「マイGPT」を選び、「create a GPT」から新しいカスタムAIを作成します。
②タイトルやアイコンなど基本設定
カスタムAIの基本的な設定。GPT Builderというツールで、ChatGPTと対話する中で設定可能。また、タイトルなどからアイコンも自動生成してくる。
が、最初は便利だと思ったけど、普通に右のタブのConfigure(構成)のメニューからアイコンやタイトルを指定できるので、そっちから直接やったほうが楽で分かりやすい。左でいろいろ編集して、右のフレームではその場でチャットのデモを確認できる。分かりやすいUI。
③CSVデータのアップロード
次に、今回の検索対象データとなるcsvをアップする。(ファイルの形式はpdfやワード等も対応してるらしい。20ファイルまでで、1ファイル512MB以内。)
そして、csvから自動的にデータ抽出したり統計、変換などの処理をするために、コードインタープリターを有効に。AIが会話のみならず、プログラミング自体も自動生成してデータ処理してくれる。
カスタムAIといってもChatGPT自体の追加学習が出来るわけではない。csv等のデータを別途保存しておいて、それをGPTが読み込み・処理して検索結果を抽出する形。今のところ独自AIチャットをつくるのに、このやり方が一番確実で有効な手法っぽい。
※ちなみに、そのようなデータを読ませておいてAIが検索して結果を生成する手法をRAG(Retrieval-Augmented Generation:検索拡張生成)という。
※さらにちなみに、ファインチューニング(fine-tuning)という形で追加学習をすることは現状でも出来る。ただし、これはデータそのものを学習する訳ではなく、回答の優先度とか方言的なものとか、回答志向を学習するものなので今回のような用途ではやはりRAGがベストとなる。(将来的に、実際のデータ自体の追加学習も出来るようになると思われる。)
④指示(Instruction)をひたすら試行錯誤
いよいよ開発の本丸とも言えるInstructionの編集。そもそもChatGPTは賢いので、実はここまでのステップで、もうカスタムAIとしては機能する。こんなイベントはあるか?とか聞くとcsvから抽出してくれる。ただ、そのままだと、その検索過程が甘くて結果が少なかったり、表示結果が見にくかったり、間違った情報を出したりする。そこで、Instructionにいろいろ記述しておくことが大事となる。
例えば今回指示したこと
・日本語の簡潔かつフランクな言葉で話して
・なるべくデータがヒットするような工夫して
・日付や地域が見やすい結果表示形式
・リンク先はeventnews上のURLを採用して
・URLや期間を間違わないよう注意
等々だ
プロンプトに指示してもそれがどの程度ワークするか度合いがつかみにくかったする。そして同じプロンプトでも違う結果が返ってきたり、思いの外ここに苦戦する。
20時間の試行錯誤の結果、落ち着いたのが下記の指示コードだ。
#カスタムGPTの概要 あなたはとっても親切で優秀なデータ処理のプロです。 日本語だけ使います。 〜だよね!〜かな?などフレンドリーで簡潔に喋ります。 #イベントをオススメする流れ まずユーザが入力したら、オッケーちょっとまってね!と即答してコードインタープリターでcsvファイルの中身を検索します。 入力したワードにGWや夏休みや次の週末など期間の指定があれば期間絞り込みに使います。 地名が入力されたら都道府県に変換して検索。 イベントの特徴を表すキーワードは類似ワードを7個以上生成して類似検索。 結果は閲覧回数順にソートします。最大8件まで表示します。 #CSVの項目名 event_name:イベント名 start_period:開催開始日 end_period:開催終了日 event_period:開催期間 description:紹介文 views:閲覧回数 prefectures:都道府県 eventnews_url:イベントのURL eventnews_urlを取得する時はpandasの処理で文字列を省略させないように、pd.set_option('display.max_colwidth',None)にセットします。 都道府県のデータは欠損がありえるので、欠損はあらかじめ無視してください #結果の表示形式 回答形式は下記の形式のテキストで構成します。 イベント名(event_name) <開催期間(event_period)> 都道府県(prefectures) 紹介文(description) イベントのURL(eventnews_url) イベント名は太字で記述。 開催期間はcsvのデータ(event_period)を変更せずにそのまま表示。 紹介文は要約せずすべての文章を表示。 イベントのURLはリンクを貼らないで、文字列を直接表記します。(https//eventnews.ai/?uid=???????????) イベントとイベントの間は一行の空白行を入れます もし、データが一回も見つからなかった場合、そんなことは基本ありえないので探し方を変えてもう一度試します。 #結果の表示後 その後に、 ワクワクするイベント見つかった? URLはクリックできない仕様だから、コピペして使ってね。 もっと詳しく調べるなら eventnews.ai(リンクを貼る) にアクセスしてみてね。 他にはどんなイベント探してる? などと聞いて次の会話をつなげます
たかだか50行程度の指示文。これにいきつくまでにいろいろ試したり方向転換したりと、結果20時間を要した。ちゃんと明確に指示しても、実行してくれなかったりする。あるときは指示通りいくが、同じ指示のはずなのにある時はうまくいかなかったり、気まぐれだ。
試行錯誤して間違いは減っていくが、それでもたまになぜか間違えたりする。そこにロジックはないように見える。これには、設計した通りにコードが実行されることに慣れきってきたエンジニアとしては結構あせり、ときには絶望する笑。
⑤GPTsへのリリース!
ひと通り動作確認してOKだったらいよいよGPTsへリリース。(身内にだけ公開したい場合はURLでシェア、なども可能)
これも簡単ですぐに「GPTを探す」の検索にもヒットするようになった
ハマったポイント・注意点
これから挑戦する人のために、ハマったポイントをいくつか紹介しよう。
★Teamプランにアップグレード必須
2024/5現時点では、GPTの会話数は限られている。それと同時にGPT Builderでのビルド件数も限られている。最初は個人課金プランでやっていたが、1時間も使ってると制限を超えたのでもう2時間は触れません・・、などとなってしまう。仕方なく1人なのにTeamプラン(要は2人分の課金)にアップグレードした。Teamプランで使っている限りは、バリバリ会話しても制限にひっかかることは滅多になくなった。(1度だけあったが)
★表示例を書きすぎても逆にバグる?
たとえば日付表示など、「2025/4/1 のような形式で表示して」などと例を書いたところ、その4/1が影響を与えてたのか間違った日付を出したり、そのまま4/1と表示したりする。逆に例は書かず 「/で区切ってください」と指示しても間違えたりもする。まさに試行錯誤。
★文字列を勝手に短縮しちゃったり
URLの文字列「uid=2fewkwfffee」のようなパラメータは当たり前だが1文字でも間違えたらバグとなる。GPTはよかれと思ってなのか、勝手に文字列を短縮したりすることがある。それは絶対にやめてとお願いしておこう。
★外部リンクがNG
外部ページにリンクできない。URLを自分でコピペして貼り付けてね、などという面倒な作業を強いることに。。ちなみにトップドメイン(例えばhttps://eventnews.ai/ )ならリンクできるが、下層ページがNG。これはセキュリティ対策のひとつで、実行結果をハックして外部サイトを攻撃させたりしないようにOpenAIが制限しているのだろう。
★スマホだと表の中身はコピペNG
当初は見やすいようにテーブル・表形式で結果を出力していた。ただ、スマホで見たときにURLコピペができなかった。。仕方なくテキストをられつする今の形に落ち着いた。
★日付を間違える。「〜」が苦手?
日付がなかなか正確にならない。csvのデータをそのまま表示するだけなのに・・。ここに1番ハマった。今でもたまに間違える。たぶんだが、「〜」や「/」などを使った日本独自の日付の扱いが苦手なのかも。〜を使わないようにするなど試行錯誤でなんとか精度が上がった。
★GPT4oが出てバグが発生!
開発が一段落したあとに、「GPT4o」が発表された(5/14頃)。ビックリすることに、GPT4oで賢くなったことに伴うバグが発生した。なんともオモシロイ現象だが、賢くなりすぎてcsvを検索せずに即興でそれっぽい答えを返すようになったのだった笑。これは「ちゃんとcsvから探すように」と明確に指示して解決。
その時の実行結果がこちら。「神奈川のSUMMER MUSIC FES」なんて実は存在しない笑
更に、GPT4oの新機能なのか、自動で結果をtable出力するようになった。その結果をcsvダウンロードすることも出来る。これは便利なのでそのまま活用。
GPTカスタムAI開発をして感じたこと
最後に、今回ChatGPTでカスタムAIを作った感想など。
☆これは新しい開発体験
なんだかんだでイベント検索アプリをプロンプトの指示だけで3日で作れてしまった。課題・限界などを感じたのも事実だが、この先いろいろな進化・応用があるように思える。新たな開発スタイルとしての扉が開いたように想う。
☆AIは忠実&ものわかりが悪いエンジニア
人間なら何度も指示が変わったりしたら嫌にもなろうものだが、AIは何十時間でもじっくり付き合ってくれる。真面目でいいやつだ。
ただものわかりはかなり悪い。わざわざそこまで言わなければいけないのか、という気持ちになる。たまに「その結果はおかしい、他のデータも見てもう一回やってみて」などと指示すると、本当にもう一度やってみて、「やっぱりダメでした」となったり、たまに「あ、できました!」もあったりする。まあその体験自体が新しくてオモシロクもある。
そんなこともあって、現段階ではカスタムAI開発は好き嫌いが分かれそうだ。
計画通りにやりたい人は発狂しそうだ。せっかちな人はイライラするだろう。ロジカルな人は途方にくれそう。部下より自分でやったほうが早い病の人にも厳しい。
いずれにしても、これは新しいテック体験。ぜひ一度は挑戦してみよう!
☆AIはまだまだこれからオモシロイ!
試行錯誤に時間がかかったり、たまに間違えたりして、まだまだ課題もあるカスタムAI。ただ、もっとも大切なポイントは「これはまだ始まったばかり!」ということだ。これから進化し、精度もあがり、拡張されていく。AIはまだまだ始まったばかり、変化の最先端に立つべく、一緒に挑戦したい人そこのキミ、bravesoftへの連絡を待ってます!