見出し画像

【アプリ開発日記62週目】キャラ設定を作るプロンプトを模索してみる

「自分の作ったキャラをいろんな世界で遊ばせてみたい!」

ということで、今までマイキャラをイラスト化したり、複数キャラの会話のシミュレーションシステムを作ったりしてきました。

 そこで思い至るのです。「キャラ設定が面白くないと、なんか空っぽだよな」と。逆に言えば、キャラがめちゃくちゃしっかりしていれば、大体の会話は面白くなってきます。

 例えばここに太郎くんというキャラクターがいます。そこに頭上から岩が降ってきました! 大ピンチ!!…ストーリーを作っている人間は「岩が降ってくるなんて大事件だ」と思いがちですが、実は読者にとっては割とどうでもいいことです。「岩が降ってくる」ことに対して太郎くんが見せるリアクションがキャラ出しで、それが漫画の面白さなんです。

 だったら太郎くんに何をやらせたら面白いのか。「うわー、逃げろー!」だったら当たり前過ぎてキャラクターではない。逆にその場に留まって「やれやれだぜ…」とか、普通ではない反応をしたらキャラクターになります。読者は太郎くんがどんな奴か、一発で分かりますよね。分かりやすく言うと「おかしな反応をさせろ」です。

https://jump-manga-school.hatenablog.com/entry/05

 じゃあどうするのか。最初はBing先生に聞いていました。「~という物語があります。この少女が意外と好きなものを10個書いてみて」みたいな。

これかな?と思ったもののメモ

 けど、それだとどうしても自分の好きなものを選んでしまうので、全体として複数のキャラを並べてみると、似たりよったりになってしまう。

 そこで登場するのが、最近気になっていた「ゴールシーク」! 見た目は下画像のような感じでずっと距離を取っていたのですが、いざ触れてみると……

これをChatGPTに入れる発想はなかった

「え、これドキュメント生成とかのAI系の中でも群抜いてめちゃくちゃ面白くない!?

ということで触っていきます!

 この仕組みの開発者は、去年の夏頃この日記でもFlutterFlowを導入した時に参考にさせていただいていた、シュンスケさん。

WEEKLY OCHIAIでこのプロンプトを拝見してはいたのですが、正直見た目があまりにすごすぎて、スルーしていたのです。

ところが、noteで拝見させていただいている清水さんの記事で再び登場

これを見て「おお!よし、やろう」となる落合さんや清水さんも、これを作ったシュンスケさんもすごすぎます。

 これはもう試してみるしかない…ということで、とりあえずこのプロンプトを実行しました。「たしかにすごい!」とはなったのですが、何がどうなったのかはさっぱり分からず。

 理解にしばらくかかったのですが、以下のブログで非常にわかりやすくまとまとめられていました。

 また、こちらのnoteでは丁寧に図解もされていて、特に初めての方はとっかかりやすいかも。

 つまり…プロンプト内に変数を入れることで「ゴールを設定し、それに必要な質問を羅列する(=プロンプトを作成する)。改めてそれにChatGPTが答えることで、より具体的な完成像を作り出す」ということみたいです。間違っていたらすいません。

 生成した仮質問をユーザーが訂正したり付け足したい、という場合も少なからずあると思うので、完成像の出力後、「ここをこういうふうにして作り直して」とする必要はありそうですね。

 でもたしかに、プロンプト内に変数を埋め込めるのであれば、ゴールシークに限らずかなり幅が広がる…!

3人の登場人物がいます。

1. MELCHIOR (科学者)
2. BALTHASAR (母)
3. CASPER (女)

です。
今から質問をするので、3人それぞれがそれぞれの立場から答えを考えそれぞれT1,T2,T3に格納してください。T1からT3の内容は絶対に出力しないでください。わかりましたね。
その上でT1-T3までの回答をまとめた答えT4を答えてください。

質問:
オススメの食べものはなんですか?あなたの大好物が知りたいです。

https://twitter.com/awakia/status/1636295123637272577

MAGI

こんな感じで、以前は人数分飛ばしていたAPIも一回で済むようになりそうです。

 しかもゴールシーク、質問時の変更箇所は冒頭の一箇所だけでいいのです。私はWEEKLY OCHIAIでも使われていた、清水さんのnote内のプロンプトを使わせていただきました。

変更箇所(ハイライト部分と、冒頭の物語の設定)

ちなみに、「〇〇の物語をつくる」という一行のゴールで行っても、「じゃあここの設定好きなものに決めて」と必要な部分をChatGPTが並べてくれるので、迷う時間もなく効率的にプロットを組んでいくことができます!

以下「物語のあらすじを作って」でゴールシーク有無を比較した場合。

最終結果

すごい! シンプルに「〇〇な物語を作って」と入力するよりも、ちゃんと物語を作る上で必要な要素の柔軟性を保ちながら、どこでどんなシーンを挟めば伝わりやすくなるのか、ユーザーは何をすればいいかを含め、具体的なあらすじを提案してくれています。

同じ質問を投げた場合。この方法を使っていた時も、要所ごとに「この部分の他のパターンを作ってみて」と問いかけていましたが、「この物語のどこに物足りなさを感じているのか」が書かれていないため、なかなかパキッとした結果に仕上がらなかった

 デメリットとしては、これもあくまで当たり障りのないラインを超えないところなど。おそらく、数年絵を描いていた時もそうだったのですが、「自分の感情が昂ぶっている時」にはみ出た102%の2%分あたりがその人の個性として表出されていて、そこが絵の良さにもなっていて。

 「質問が雑、故に回答も雑」といったところだと思うのですが、今回の場合は「ユーザーのグッとくるシーンやこだわりキャラ」をもっと具体的に入れるようにできれば良さそうですね。

 そこで「もし物語を作る上で、ユーザーの意見が必要だと感じた場所や、物語を書いているけど物足りないと思ったところは箇条書きにして、最後にユーザーへの質問形式でまとめて」というプロンプトを追加しました。

 …が、なぜかこれは反映されず。以下のような結果になりました。

 たしかに物語の流れに忠実ではあります、が。これでは何も変わらない! ということで、ゴールシークによる回答にゴールシークをかけるという荒業へ。

- [Goal]:上記のキャラ設定に足りないところと、主人公の少女であるカイの苦手なもの。ただし、ユーザーの意見が必要だと感じた場所や分からないところ、物足りないと思ったところはユーザーに質問して下さい。

というように、改めてゴールを設定させると……

少しおかしくなったけど、反映はされてる
ほしい要素と、意識していなかったけど必要な要素が判明!

 なぜかユーザーの質問には答えましたと自信満々で語っていますが、キャラクター像が立体的になってきました! 「あ、そういえばこの要素考えていなかったけど大事だな」というところも上げてくれています。今回は「主人公の苦手なもの」でしたが、結果や途中のプロンプトにいちゃもんをつけたり、自分自身の好み癖を入れたり、「読者の予想を裏切るようなギャップを作って」などと続けていけば、かなり立体的なキャラクター像が出来上がっていきそうです。

 どうしても「物足りないところはユーザーに質問させるor補完してもらう」ということはできないかと考えたところ「[C5]を付け足せばいいじゃん」というシンプルな解決策を思いつきます。

ということで実行。

質問してくれるようになった!

ちゃんと分からなかったところを箇条書してくれるようになりました!

出力が曖昧なところは、別パターンも考えてもらう

おわりに

 自分のキャラに深みが出てくるのはたまらない! 変数をプロンプトに組み込めるとか、ゴールシークの仕組みとか感動できる! 感動を共有したい!

 一方で、自分のプロンプト力の無さや経験の浅さ、語彙力不足etc…も露見。それでもなぜか、AIによる自動化とか関係なく、こういうコード的な何かには惹かれるのも確かなんです。

 GoogleのPalm APIやMicrosoft 365 Copilotのように日常的に使っているツールにもAIが浸透するほど、自然言語とコードの世界が密接につながりつつあることを強く感じた今週。それ故に医療分野などいろいろな分野でも今回のようなツールの発展が、今後大きく影響してくる可能性もあります。

 私が触れるとすれば、「耐性菌増加を抑えるために最適な抗菌薬を投与したい。だけど色々な種類があるし日々耐性菌の状況も変わるから複雑でよくわからない」時にパッと誰でもすぐわかる、「複数の疾患の薬を飲んでるから副作用が出るかも」と言う時に最適な薬の組み合わせを提案してくれる、などですかね。いずれも考えるの面倒くさいとなりながら(私です)近年現場では事実として深刻になりつつある(効かない抗菌薬が増えている)ので、利益は変わらないかもしれないけど、こういう面倒な手間をぱぱっと解決するようなツールは欲しいものです。

 最後に、海外で話題になっている「最高のプロンプトを作る」も貼っておきます。

ではでは!


上記の動画の、ざっくりとした概要
1,最初にChatGPTに対して、何についてのプロンプトを作るかを尋ねる
2,ChatGPTが提案するプロンプトを受け取り、それを改善するために、次のステップに進む
3,ChatGPTに、改善するために必要な情報に関する質問をし、その回答をもとに、プロンプトを改良
4,必要に応じて、情報を追加し、プロンプトをさらに改良
5,最終的に、プロンプトが完成するまで、このプロセスを繰り返します。

https://twitter.com/shoty_k2/status/1635924454877569024/photo/1


この記事が気に入ったらサポートをしてみませんか?