こんにちは!TOPPANデジタル株式会社のエンジニア・青山です。
TOPPANデジタルでは、Webアプリ開発やインフラ構築をはじめとして、AI、IoT、メタバース…いろいろなジャンルで活躍するエンジニアが多く在籍します。私もその中の一角となれるよう日々奮闘していますが、この2023年度の中で特にときめいたチャレンジが、とあるサービスに導入した『ChatGPT』のプロンプト改善でした。その時の体験談を紹介します!
「ChatGPT大好きな青山さん、プロンプト改善やってみない?」
❝どんな課題があって、何を実施したのか?❞という本題の前に、この体験に至ったいきさつをお話しさせてください。
私はChatGPTが大好きで、普段から愛用しておりまして。業務中のメール作成、コーディングの補助はもちろん、プライベートでは断捨離や、趣味の作曲を手伝ってもらったりなどなど。
愛用している様子や得られた知見は、社内の勉強会やSlackなどで発信しているのですが…今回、そんな私の発信を見てくださった先輩エンジニアから「ChatGPT大好きな青山さん、『未就学児向けの個性診断サービス』のプロンプト改善、やってみない?」とお声がけをいただきました。
今までは❝ChatGPTを業務内・プライベートでどう使いこなすか?❞を追求していました。つまり、今回のような❝サービスの一機能の中で使われるChatGPTのプロンプト改善❞という経験は、はじめて。好きで日々積極的に情報収集をしているChatGPTプロンプトに関して、自分の興味や知見を活用して、このような形で携わることができるとは!「発信していてよかったな~」とうれしく思ったのと同時に、「やってみたかった業務内容、絶対によい結果を残すぞ!」とワクワクしながら参画しました💪
MISSION:納得性・意外性のある回答を引き出せ!
『個性診断サービス』で使用するChatGPTプロンプトを改善したい
ここで、まずは『未就学児向けの個性診断サービス』とはどのようなサービスなのか、簡単に説明いたします。
このサービスの対象は❝未就学児のお子さまのいるご両親❞です。ご両親に、お子さまに関する質問にいくつか答えていただくと、そのお子さまの❝得意なこと❞❝苦手なこと❞、そして❝お子さまにおススメしたい絵本❞がわかる!といったサービスとなっております。
このサービスでは、既にお子さまに関する情報は得られているので…その情報に『ChatGPT』をかけ合わせることによって❝ユーザーに新たな価値を提供したい!❞と考え、試しに❝そのお子さまにおススメの遊びを提案するチャット機能を試作した❞、とのことだったのですが…この時に使用していたプロンプトでは❝納得性・意外性のある回答❞が引き出せないという課題がありました。
3STEPに分け、プロンプトの❝改善・検証→提案❞を繰り返す
今回は以下のように大きく3STEPに分けて、プロンプトを❝改善・検証❞、そしてできあがったプロンプトをチームメンバーに❝提案❞…を繰り返し実施しました。
ほかの業務と平行で約3週間で実施し、第1弾プロンプトとしてFIX。実証実験も実施しました。
今回は(ファインチューニングなどの手法は実施せず)プロンプトの改善のみを実施しました。
というのも、まずはプロンプト改善だけでどれだけ結果がよくなるかを検証したかったからです。また、検証したところ、プロンプト改善だけでも第1弾プロンプトとしては十分によい結果も得られました。
この記事では、❝ChatGPTプロンプト改善❞に必要な考えが多く盛り込まれているSTEP1、STEP2に触れてきます!
STEP1:❝納得性❞を引き出すために
現回答を観察し❝目指す回答像を言語化❞する
今回の場合、ほしい回答が得られていないのは確かですが、既にプロンプトが存在していたので…まずは❝現段階のプロンプトからどんな回答が得られるのか❞傾向を観察し、目指す回答を言語化してみることにしました。
現段階プロンプトから得られる回答には、以下のような欠点が含まれる傾向にありました。
▼現回答の欠点①:不要な内容が出力されている
ChatGPTからの回答、という少ない文字数の中に、❝プロンプトの要約のような内容❞❝総括❞といった不要な内容が出力されていました。今ほしい回答は❝提案❞と、それから…
▼現回答の欠点②:複数件、提案がある傾向にあるが、一つ一つの内容が薄い
傾向として複数件、提案があることが多かったのですが…「おすすめの遊びは❝絵本の読み聞かせ❞です。また、❝ダンス❞もよいと思います」といった濃度の回答が多く。眺めた時に「なぜ?理由は?」「どんな風に遊ばせるのがよいのだろう。具体例は?」という疑問が沸くことが多かったです。提案だけでなく、提案内容の❝理由❞や❝具体例❞が出力されると納得しやすいですよね。
▼現回答の欠点③:指定した回答文字数をオーバーしている(プロンプトで指定したことを無視している)
上記2点とは違う視点ですが…現段階プロンプトの時点で❝回答文字数の指定❞をする文が含まれていました。この文自体は、システムのUI・DBを考慮するととてもよい指定なのですが…
実際の回答の文字数を数えてみると、なぜかその指示が無視され文字数オーバーする回答が出力されることが何度も!こちらも、上記の欠点①②とともに改善できないか検討することにしました。
これらの欠点を見つけたことにより、今回は❝提案は一つでよく、提案内容とともに、その提案の理由や具体例も聞きたい。そのほかは文字数の関係上、不要❞なのだ、と目指す回答像を言語に落とし込むことができました。
言語化した❝目指す回答像❞をプロンプトに落とし込む
では、先ほど言語化した❝目指す回答像❞=❝提案は一つでよく、提案内容とともに、その提案の理由や具体例も聞きたい。そのほかは文字数の関係上、不要❞をプロンプトに落とし込みましょう。
落とし込み方はいろいろあると思いますが、今回はフォーマットに落とし込み、❝フォーマットに沿って回答するようにプロンプト内で指示❞をしました。加えて、プロンプトの最後で❝ほしい回答(提案と、提案の詳細)以外は出力しないように念押し❞しました。
下記は、改善したプロンプトを一部抜粋したもので、太字部分が今回の改善箇所です。
「「{提案}」はいかがでしょうか? {提案の詳細}」というフォーマットで、 200文字以内で簡潔に出力してください。 提案と提案の詳細以外は 出力しないでください。
この改善によりChatGPTから、提案一つ+その提案の詳細(提案理由だったり、提案内容の具体例だったり)がかなり安定して出力されるようになりました。
加えて、余計な情報は出力されなくなったからか❝回答文字数オーバー❞という問題点も自然と解決しました!
STEP2:❝意外性❞を引き出すために
❝ロール❞を変更し、回答が変わるか検証してみた
次に、❝意外性❞のある回答をChatGPTから得るために、現時点…STEP1直後のプロンプトを観察してみました。現時点のプロンプトの例は下記の通りなのですが、このプロンプトの中で唯一変更可能な要素が、下記で太字にしている❝ロール❞部分でした。
あなたは子どもを育てる親です。
<子どもの情報>という子どもがいるとします。
この子ども に合う「おすすめの遊び方」を提案してください。 「「{提案}」はいかがでしょうか? {提案の詳細}」というフォーマットで、 200文字以内で簡潔に出力してください。 提案と提案の詳細以外は 出力しないでください。
また、プロンプト改善のための情報収集の中で❝ロールを変更することによって回答内容が変わる❞という情報も得ていたので、ロールを変更することで回答がどれだけ変わるのか検証してみることにしました。
ここで言っている❝ロール(ペルソナ、とも言います。)❞とは、ChatGPTに付与できる性格のようなものです。詳しくは公式ドキュメントも見ていただきたいのですが、❝ロール(ペルソナ)❞を指定することで、ChatGPTがどのように動作するか具体的に指示が出せるのだなと思っていただければ。
適したロールとは?ChatGPTに聞いてみた
まずは意外性のある回答をしてくれそうなロールの候補をいくつか挙げてみよう!ということで、人間がイチから考えてもよかったのですが…❝意外性を引き出すロール❞はなかなか見つけ出すことができず。
そこで、今のシーンに適したロールをChatGPTに聞いてみることにしました。
こうすることで、人間がイチから考えるよりも、よりよい回答の得られるロールを複数件、短時間で見つけ出すことができました!
検証結果も簡単にご紹介します。
今回は以下のプロフィールを用意し、そのプロフィールのお子さまにおススメしたい遊び方を提案する、としました。
・年齢:4歳
・得意:一人でゆっくり身体を動かし感情表現をすること ・苦手:音楽やリズムに関すること
まずは、人間がイチから考えたロールを用いた検証結果なのですが…❝納得性❞を引き出す際に使用していたロールからの提案とあまり変わらず。
下記では候補の中から❝哲学者❞を挙げていますが、そのほかのロールに関しても同様の結果でした。
では、ChatGPTから提案のあったロールを用いた検証結果を見ていきましょう。
下記では❝プロの料理人(料理・食育に通ずる提案が可能)❞❝経験豊富な宇宙飛行士❞というロール(括弧内もプロンプトに含めています。)を挙げていますが…これらのロールを用いると、それぞれ❝料理❞❝宇宙❞に関する提案もありましたが、❝科学実験❞といった今までは得られなかった遊びも提案してくれるようになりました。「プロフィールに寄り添った、でも少し変わった回答が提案されるようになり、面白い!」と検証をしながらワクワクしたのを覚えています。
❝シーンに適さないワード❞をプロンプトから削る
ほかにもChatGPTから提案のあったロール・プロンプトで、意外性のある面白い回答をしてくれるロールがいくつか存在したのですが…検証を続けていて「おや?」となったロール・プロンプトがあったのでご紹介します。それが、下記の❝プロのマジシャン(魔法や想像力に通ずる提案が可能)❞です。
このロールもプロフィールに寄り添った、でも少し意外な面白い遊びを提案してくれるロールではあったのですが…❝子どもが描いた絵に魔法をかけ、動かす❞というような、魔法を使った遊びを提案してくることがありました。残念ながら、このサービスを使用するユーザーの中に魔法を使用できるユーザーはほぼいないはず🤣
これはプロンプトに❝魔法❞というワードを含めていた影響と考え、このワードは削って検証を続けたところ、先ほどのような魔法を使った遊びの提案は無くなりました。
単語一つであろうと、プロンプトに含める単語によっては回答に大きな影響が出るのは、面白い点でもあり注意しなければいけない点でもありますね。
ChatGPTからの提案をそのまま採用するのではなく❝きちんと検証すること❞❝適した内容のみ採用すること(不要な内容は削除すること)❞が大事なのだな、と改めて実感した瞬間でした。
おわりに
実施したこと一つ一つは難しい内容ではないものの、一つずつ順を追って実施することで回答の精度が確実に上がりました。
普段ChatGPTを使用されている方がいらっしゃいましたら、よく使うプロンプトなどを一度見直してみてはいかがでしょうか?また、プロンプトによっては新サービスまではいかなくても、新機能が生まれる可能性もあるかも…?!
今回、❝興味の強い分野の知見を生かしての新機能開発(シーンに合わせた効果的なChatGPTプロンプトを見つけるための検証)❞といった貴重な経験ができました。
私の日頃の「ChatGPT大好き!」といった発信を見て声をかけてくださった先輩エンジニアへの感謝はもちろん、日々スキルアップしながら、私もその先輩エンジニアのようにモノづくりと並行して❝課題と、仲間たちの得意・興味のある分野をつなげ、生き生きと課題解決のできる環境を作れる❞エンジニアになりたいです!