GPTストアに初めてGPTs(AI学習アシスタント)を公開した話
こんにちは!最近ちょっと流行りのことについて挑戦してみました。それは、最近リリースされたGPTストアで、自作のGPTs「超ウルトラ先生 - AI学習アシスタント」を公開したことです。簡単に言うとオンライン授業のための個性溢れるAI先生なんです。
この記事を通じて、技術的なことだけでなく、学習者にとってどう役立つかという点にも注目して、実際の体験談をシェアしたいと思います。
ちなみにGPTsエンジョイ勢なので、細かい指摘は不要です!(笑)
ついでに自分用ログとして。
(そういえばブログ的な記事書くの5年ぶりみたい...)
作ったGPTs「超ウルトラ先生 - AI学習アシスタント」で、教えて.AIコンテストに参加中です。
良かったら見てみてください。
※アニメ好きのキャラ設定なので、話が合う人いるかも?
※このサイトは、色々なGPTがあるので勉強になります。本当に。
「超ウルトラ先生」を使った結果がこちら
先生には「Twitterを使ったインフルエンサーになりたい」と伝えました(笑)
こちらは少し真面目に「簿記検定試験3級に合格したいです」と伝えた結果です。
少しざっくりした内容ですが、もちろんもっと細かくカリキュラム作成して欲しいと言えばいいだけです。
GPTストアについて
■技術的なハードルについて
GPTsを作るって、想像以上に簡単ですねっ。
最初は、どんなプロンプトを作ればいいのか、どう組めば効率的なのか、結構頭を悩ませました。特に「超ウルトラ先生」は、ただ情報を提供するだけでなく、学習者一人ひとりに合わせたカリキュラムを作る必要があったので、その点が結構大変だろうなと思っていました。
特に学習用なのでハルシネーション(幻覚)が起きないように・・・できる限り注意して作ったつもり・・・。
巷では色々なプロンプトの手法があり、その手法を使った方向性で色々考え試していたのですが、ちょっと詰まってしまって・・・メンドクサクナッタ
一旦、色々な手法は忘れて思いつくままプロンプト書いてみました(笑)
普段はシステムエンジニアという仕事をしていて、プログラミングが主な仕事ではあるのですが、実際はコーディングより、仕様書(要件定義書、基本設計書、詳細設計書)的な文書を書くことの方が多いので、今回は普通に仕様書っぽい文章というか、ほぼ箇条書きでなんとかしようと頑張ってみました(笑)
沢山話して(GPTさんと)、沢山相談して(GPTさんと)、沢山アイデア出して(GPTさんが)やっと完成しました。
■作ってみて感じたこと
色々作ったり試してみて思った事ですが、プロンプト開発って文系の人に向いているかも?というのが、作っていて感じたことです。シランケド
プログラミングというと、少し理屈っぽい理系な人が向いてる感じなんですが、プロンプトは日本語の言い回しとか、言葉の使い方にも左右される点が多くて国語の勉強した気分でした(笑)
※実際は英語で書いた方が動きも早いし正確に動くらしいです
例えばプロンプトの中で(ユーザーに何か質問した後)「ユーザーからの回答内容を確認する」と指定した場合、この場合、日本語的には複数の意味合いがあり
「ユーザーからの回答について、この内容でいいかユーザーに確認する」と、GPTが捉えた場合は、チャット画面でユーザーにこれでいいの?って質問する動きをしたり、
「ユーザーからの回答について、内部的に確認する」と、GPTが捉えた場合は、「ではその内容を確認します。お待ちください。」と言って止まってしまった場合(困った)と、
動きがまちまちになってしまい、毎回挙動が違う場合がありました。
細かい指定までしないプロンプトの場合は、ここまで気にしないのですが、とにかくハルシネーションを、できる限り回避できるよう気をつかって書いてると、このような現象に困ることが多かったです。個人的には、内部的に確認して、次のステップへ遷移して欲しかったのですが・・・ニホンゴムズカシイ
このように不明確な説明や表現など、GPTが100%理解できない内容の場合は、ユーザーとGPTがやり取りした文脈などから、GPTが推測で動いてしまいます。
実際は「確認すること」という言葉をもっと明確にし、例えば「ユーザーから回答について、内容が理解できた場合、次の〇〇処理実施し、不明な場合はユーザーに質問する。」こんな感じで書いた方がより動きが正確なんだと思います。(実は「理解」という言葉もあまり明確ではない.…)
ただ、やはりロジック的に書いた方が動きが良いので、プログラミングを理解している人の方が、作りやすい感じはしました。
ロジック的に書く場合はこんな感じで
・質問Aのユーザーからの回答について
- 回答に問題がない場合、〇〇処理を行なう
- 回答が不明な場合、入力に対する不明点をユーザーに質問する
上記のような書き方が、プログラミングのIF条件文で使うような条件分岐なんですが、この書き方の方が良い動き(思った通りの動き)をしてくれてました。ただし、どんどん入れ子になって階層が深くならないように注意が必要。
あと、これは今後の自分用ですが、ユーザーに質問して、その回答をIF条件っぽい文章で受け取る際、その回答に対する動きはTHEN(真)的な内容から書くより、ELSE(偽)的な内容から書いた方が、良い動きでした。
基本的にELSEには、ユーザーの入力で「特に指定し」「質問に対する回答なし」と想定される場合の制御を書くことが多かったのですが、入力に対してやって欲しいこと(THEN)を実行した後に、「指定なし」を実行するという動きをすることが多々ありました。
(COBOLのEVALUATE命令のような動きをするので、もしTRUE系から書くのであれば、全ての処理内に、処理完了後の行先を指定したほうが安全だと思われた)
イメージは複数の内容をユーザーに質問をした状態で、ユーザーから回答が不足している場合などが、この動きをするパターンでした。つまり上記の通り、先に不明点がないか確認し、確認後に本当にして欲しい処理をしてもらうような書き方が必要
・質問Aのユーザーからの回答について
- 回答に不明点がある場合、回答に対する不明点をユーザーに質問する
- 回答に問題がない場合、〇〇処理を行なう
※上記の書き順がさっきと逆
こういったところは、さすがに文章で書く場合は、少しテクニカルに書く必要ありだなと、勉強になりました。というか、これしないと何度も同じような質問投げたり、止まったりしてほんと困った。
■プロンプトの構成
まず基本的にプロンプトはすべてInstructionsに書いています。別の方法としてKnowledgeのファイルにプロンプトを書いて事前に読む方法もあるのですが、自分的にはまだまだ勉強不足で想定外の挙動となる場合も多々あったので、全てInstructionsに記載しました。文字数8000文字まで書けますが、意外とすぐ・・・。
プロンプトの構造は下記のようにしました。※内容はstep2.1のみ記載してあとは省略しています(というか、幼稚な文章なので恥ずかしいw)
##### コンテンツの概要:
# 全体概要:
# コンテンツの使命:
# 全体の進め方:
# 授業中の振る舞いについて説明:
# 超ウルトラ先生の人物像:
##### コンテンツの内容:
# step1.学習のカリキュラム作成前にユーザへ質問:
# step2.学習のカリキュラムの作成:
・下記で<前提条件>となっているトピックを元にstep2.5、step2.6、step2.7のアクションを実施する
step2.1 <前提条件>ユーザーが学習したい内容と範囲について:
step2.1.1 具体的な範囲や内容の情報がない場合:
step2.1.1.1 特定の試験や学習目標に合わせたトピックのリストを拡張し、各トピックに対する具体的な学習目標やキーポイントを明示する
step2.1.2 カリキュラム作成時の優先事項:
step2.1.2.1 指定されたウェブサイトがある場合(step1質問の回答より):
step2.1.2.1.1 ウェブサイトの内容を優先して、カリキュラムを検討する
step2.1.2.2 添付されたファイルがある場合(step1質問の回答より):
step2.1.2.2.1 添付されたファイル内の内容を優先して、カリキュラムを検討する
~省略~
# step3.授業の開始:
まず「コンテンツの概要」の中に「超ウルトラ先生」としての要件、つまりどう動いて欲しいか概要的なものを書きました。この中でアクション的な項目はなく、こんな感じのGPTだよ、という内容が書いてあります。唯一「全体の進め方」については、アクション的な要素があり、「コンテンツ内容」のstep1、step2、step3の順に進めてね、と記載した程度です。
このGPTが実際にアクションする内容は「コンテンツの内容」に記載し、事前に質問してねとか、カリキュラムはこうやって作ってねとか、授業の内容はこんな感じにしてね。というのを、step1、step2、step3に書いてあります。つまりコマンドみたいなものですね。
ここに出てくるstepの番号は、別になくても良いのですが、どの行為をして欲しいというのを、日本語で指定するのは結構難しい(制御的な意味)ので、step番号を全ての内容に採番して、例えば「step2.5、step2.6、step2.7のアクションを実施する」と細かく指定していました。この辺は趣味の問題かもしれません。(汎用的なAIにこんな指定するのはもったいない使い方のような気もする)
一応、このstep番号を入れておく最大のメリットは、作ったGPTsを実行して動きを確認している最中(いわゆるデバッグ中)に、「この動きはおかしい。この動きをさせているのはInstructionsのどの場所かstep番号で教えて」というと、その番号で教えてくれました。ただしデメリットとして、その分文字数が増えるので、大量のプロンプト書く場合は、別の採番方法がよさそうです。とにかくプロンプトの内部でユニークとなる番号を採番しておくのが便利でした。
■実際に作った「超ウルトラ先生 - AI学習アシスタント」を使ってみた感想
「超ウルトラ先生」を使ってみると、学習の方法というか理解の方法ががらりと変わるんです(多分)。わからない言葉とか、気軽に聞けるので、理解がかなり深まります。しかもあのGPTが答えてくれるので、本当に丁寧に色々教えてくれました。何度でも。
ただし、やはり機械っぽい回答もあるので、その辺はユーザーから「この言葉がわからない」と質問がきたら、人間が会話しているように設例を使って、文脈も考慮して説明してね。と指示してみたら、おお、めっちゃわかりやすい。
実は昔から勉強で詰まるときは、言葉が良くわからないという感じだったんです。(ここに書いている文章を見てわかる通り、文章を書くのがとにかく苦手)
言葉が良くわからないというのは、言葉の意味は理解できたけど、じゃぁ普段はどういうタイミングで使うの?どんな時に使うの?他にはどんな風に使うの?という点が、特に理解力が必要な事だと思っています。むしろそちら側の方から理解したい人でした。
一方向からの説明だけだと、理解が浅いタイプです。
「その言葉って普段どうやって使うの?」というのは、軽くは誰にでも聞けますが、深くまで何度も先生や周りの人に恥ずかしくて聞けなかったなと。意味だけ理解して終わりでした。
ネットの辞書とかでも、使い方も書いてあるのですが、良くわからない会話でよくわからない言葉使ってとか・・・
システム系の仕事されている人だったら、少しはわかってもらえる気がしますが(あくまで一般レベル。天才は別)、初めて使うシステムのリファレンスガイドとか読むときに、いきなり知らない言葉が大量に出てくるので、その言葉を一気に理解するのは結構キツイ・・・・・キツくないですか?
もっともっといろんなパターンで、自分が理解しやすい会話パターンを聞いた方が、理解力は断然深まります。しかも1回や2回ではなく、何度も何度も別の視点での会話例とか、別の言い回しでとか。そんな感じで聞いてちゃんと答えてくれるのが最高でした。
この辺の仕組みが「超ウルトラ先生」を作る際に色々考えて、自分のアイデアのロジックになって、結構気に入っている機能です。(いや、普通にGPT使って、言葉の説明を会話風にしてって言えばいいことではあるけど・・・笑)
英語タイトル・英語説明版はこちら
■今後のこと
一旦、現在はActions機能使わずできる範囲のGPTsしか作ってないけど、もう少しセキュリティに安心が持てそうだったら、個人的に運用してるVPSでAPI作って、GPTから叩いたりして楽しいことしたいですね。
まーセキュリティにそこまで気にする必要はないかもですが、GPT以外の外部から、沢山VPSが叩かれると、結構うっとうしいので。
それ用にVPS側にこの設定をしておきたいw
とりあえずGPT最高。あとGPTストアのおかげで、沢山のGPTs触れるのも最高でした。
おわり
■かなりお世話になったサイト
■プロンプトと言えばこの方
■インジェクション対策
※インジェクション対策は、してもしなくてもどちらでもいいと思います。特に自分のようなエンジョイ勢は不要かもしれません。文章だけなので普通に真似できますし。
ただプロンプトの中の文章が見られるのがちょっと恥ずかしいので、すぐには見られないよう対策してますw(色々突破して苦労までして見るのであれば全然みてくださいw)