この前、公園を散歩しながらスマホでウイークリー落合の番組を聞いていたら、そこで落合さんがChatGPTに謎の呪文?コマンド?のようなものを入力していた。

https://newspicks.com/movie-series/87?movieId=2528

その時はまったく意味がサーパリ分からなかったので、まったく意識に入ってこないでスルーしてしまった。

清水さんのnote記事によれば、新登場したGPT-4で物語を作って遊んでいたら、落合さんから例の呪文?が送られてきたそうだ。

それを入力したら何か物語の筋書きが生成されたらしい。

GPT-4使ってみた

コマンドを転載させてもらうが、このようなものだった↓

なんじゃこりゃ?

相変わらず何だかサーパリ分からないが、物語を作るのに役立つとなればにわかに興味が湧いて来る。
このコマンドのオリジナルの作者はシュンスケさんという方らしい。↓

何やらあの呪文はプロンプトデザインだかなんだかというテクらしい?

というわけで、シュンスケさんの動画などを参考にプロンプトデザインについて調べてみた。
完全に理解したわけではないので、間違ってる部分もあるかもしれないが、了解いただきたい。

プロンプトデザインについて

調べて理解して分かったのだが、さっきの呪文がまったくチンプンカンプンだったのは、あれはかなり上級者向けの呪文だからだ。いきなりアレを見ても到底理解できない。

あの呪文に至るまでの道筋を順を追って理解していく必要があるだろう。

参考になる動画、記事はこのあたりだ。

ChatGPTのPromptDesign AIを使いこなす技術。初級編

まず最初に、自分がChatGPTに何をさせようとしているかを決めよう。
まあ何でもいいんだが、とりあえず今回はシュンスケさんの動画の例に従って、ChatGPTにブログ記事を量産させる事がしたいとする。

「ChatGPTにブログ書かせたいなら”ブログ記事書いて”ってお願いすりゃいいだけじゃん!」と思うかもしれない。

しかし、それだとランダムな内容の記事を書かれてしまう。もう少し狙った内容の記事を書かせたい。

そこで、ターゲット読者層と記事のキーワード、読者の興味を指定する事にする。

そうした場合、普通に書くとこのようなプロンプトになるだろう↓

ブログ記事を書いてください。ターゲット層はスキルアップに興味を持っている30~35歳の男性です。記事のキーワードは副業です。まず記事のアウトラインを書いてから、それから記事の本文を1000字ほどで書いてください。

ためしにChatGPTに入力してみたが、このプロンプトは普通に機能するようだ。

じゃあこれでいいじゃんと言う気もするが、シュンスケさんはこれだけに飽き足らず、もっと工夫して便利にする方法を考えた。

そして作られたのがこういうものだ↓

これは、プロンプトをちょっとプログラムっぽくして制御しやすくしたものだ。
いわば、プロンプトのテンプレート(これは普通の文章のプロンプトと区別するために私が今考えた造語)だ。

テンプレートの緑で塗られたブロックは”宣言文”で、ここでChatGPTに何をさせたいかを宣言する。
ここでは、ブログを書いて欲しいという事を宣言している。

黄色で塗られたブロックは”変数”で、後から変えたい文言などを指定する。
ここでは、[アバター]、[キーワード]、[興味]の3つの変数を用意している。

赤色で塗られたブロックは”コマンド”で、ChatGPTにさせたい事を順番に書いていく。この中で変数を書いておくと、ChatGPTはいい感じに変数の中身を引っ張ってきて解釈してくれる。
C1、C2はコマンド1、コマンド2という意味で、最後のRun commandsでC1とC2を実行してくださいと指示している事になる。
C1では記事のアウトラインを書く事、C2では記事本文を書く事をそれぞれ指示している。

このようなテンプレート化を行って何が嬉しいのか?
例えばブログのターゲット層を「30~35歳の男性」から「60代の女性」に変えたい時に、普通の文章だと該当の部分を探して一つずつ書き換えるなんてのは手間が面倒だ。
テンプレート化しておけば、変数の項目を見て書き換えればいいから一目で分かる。

そしてプログラムっぽくする事で、プロンプト全体の構造の見通しが良くなるというメリットもありそうだ。

このプロンプトテンプレートが一つあれば、色んなターゲット層、キーワード、興味のパターンでブログ記事が無限に書けるだろう。

このようなプロンプトテンプレートを考え出す事をプロンプトデザインと呼んでいるらしい。

さて、プロンプトテンプレートは便利で素晴らしいものだが、ChatGPTにさせたい事は、ブログを書く事だけではない。物語を書かせたり、料理のレシピを考えさせたり、いくらでもやらせたい事が湧いて来る。

その度にそれ用のプロンプトテンプレートを考え出すのはそれなりに骨が折れる作業になるだろう。
そこでシュンスケさんが発明したのがプロンプトデザインを自動化するというアイデアだ。

プロンプトデザインの自動化

プロンプトデザインの自動化とはどういうことか?というと、「もうChatGPT自身にプロンプトテンプレートを作ってもらおう!」と言う事だ。

こちらの動画などで説明されている。↓

↑高解像度画像

ChatGPT自身にプロンプトテンプレートを考えてもらうとは、どうやればいいのか?

1.まず、最終的にChatGPTにやって欲しいゴールを決める。とりあえず先ほどと同様に”ブログ記事を書かせる”事がゴールだとしよう。

2.ゴールを決めたら、次にゴールを達成するために必要な手順を一つずつChatGPTに書き出してもらう。これはテンプレートのC1、C2とかのコマンドリストを考えてもらうようなもんだ。ただし、ここではコマンドと混同しないように、P1、P2、つまりプロセス1、プロセス2~という形で書き出してもらう。

3.次に、ゴール(ブログを書く事)を達成するために必要そうな変数を書き出してもらう。例えば[アバター]、[キーワード]、[興味]と言った変数を出してくれることを期待する。

4.それから、変数を組み込んだ形でゴール(ブログを書く事)を書き直してもらう。例えば「ブログ記事を書いてください。ターゲット層は[興味]に興味を持っている[アバター]です。記事のキーワードは[キーワード]です。」みたいな感じで書き直してくれる事を期待する。

5.この時点で2~4の出力結果がすでにプロンプトテンプレートになっている。ChatGPTによって自動的にテンプレートが作成されたことになる。ただし、動画の例では最後にそのテンプレートを実行する所までやらせようとしている。([C4]の部分)ただしあまり成功していないようで、手動で入力し直している。

と言うような流れである。

ここまで理解できたら、あらためて落合さんが貼ったテンプレートの中身を見てみよう。手元で実行してみた結果も載せている。

まず最初の部分↓

ここではゴールの宣言をしている。今回は[Goal]を「物語のあらすじを作る事」としているが、ここを書き換えればどんなテンプレートでも作る事ができる。

次に[C1](コマンド1)の部分↓

ここではゴールを達成するための手順をP1~P(END)までリストにして出力させている。

[C1]の実行結果はこうだ↓

物語のあらすじを作るのに必要な手順を分解してくれた。

[C2]のプロンプト↓

ここでは必要そうな変数を定義させている。

[C2]の実行結果はこうだ↓

V1~V6の6個の変数をそれっぽく作ってくれた。

[C3]のプロンプト↓

ここではあらためてゴールに変数を組み込んで書き直させている。

[C3]の実行結果はこうだ↓

ぶっちゃけ上手く行ってない。ゴールを書き直してくれていない。

[C4]のプロンプト↓

すでにプロンプトテンプレートは出力し終わっているが、ここではさらにそのテンプレートを実行させるところまでやろうとしている。動画を観る限りはあまり上手く行かず、手動で実行し直している感じだった。

最後のRun[C1][C2][C3][C4]でC1~C4のコマンドを実行せよ。と言っている事になる。

[C4]の実行結果↓

C3の出力は上手く行かなかったが、最終的には何やかんやいい感じにあらすじを書いてくれた。

プロンプトデザインの自動化については以上のようなものである。

すでに自動プロンプトデザインを実践し始めている人もいる↓

しょーてぃーさんもちょっと違うバリエーションの自動プロンプトデザインを紹介している。↓

自動プロンプトデザインが生まれた経緯?周りの話↓

ChatGPTと一緒にプロンプトをブラッシュアップするタイプのプロンプトデザイン

紛らわしいのだが、海外で発祥している、ちょっと文脈が違うタイプのプロンプトデザインもあるらしい。

【プロンプト勉強】サイコーのプロンプトを導くための方法

だいちさんのnote記事からプロンプトの翻訳を転載させてもらうが、このようなものだ。↓

私のプロンプトエンジニアになってほしい。 あなたの目標は、私のニーズに最適なプロンプトを作成できるようにすることです。 このプロンプトは、ChatGPT によって使用されます。 次のプロセスに従います。

1. あなたの最初の応答は、プロンプトが何についてであるべきかを私に尋ねることです。 私は私の答えを提供しますが、次のステップを経て、継続的な反復を通じて改善する必要があります。

2. 私の入力に基づいて、2 つのセクションを生成します。 a) 改訂されたプロンプト (書き直されたプロンプトを提供します。明確、簡潔で、簡単に理解できるものにする必要があります)、b) 質問 (プロンプトを改善するために私から必要な追加情報について、関連する質問をしてください)

3. この反復プロセスは、私があなたに追加情報を提供し、あなたが改訂されたプロンプト セクションのプロンプトを更新して、私が完了したと言うまで続けます。

プロンプトをChatGPTに伝えて、それをブラッシュアップしてもらいつつ、ブラッシュアップに必要な質問があったらなんでも訊いてね?とお願いしている。それを何度も繰り返す事でプロンプトがどんどん磨かれていくというワケだ。

反復プロンプトデザインとでもいうべき手法だ。

シュンスケさんは、この反復プロンプトデザインを日本語化して改善したものを公開してくれている↓

さらにそのシュンスケさんのプロンプトをだいちさんが解説してくれている↓

【プロンプト勉強メモ】【シュンスケ式】サイコーのプロンプトを導くための方法(シュンスケさんバージョン)

おわり

シュンスケさんはtwitterでも色々なプロンプトテンプレートを書いてくれてるから要チェックだ。

さて、このプロンプトデザインはまったく未知の概念過ぎて、恥ずかしながら私は最初見た時はビックリするくらい全く理解できなかった。
それから数日間、じっくり順を追って考えてようやくおぼろげに概要が理解できたといったところか。

これを思い付いたシュンスケさん達もすごいし、これ見てすぐ理解して食い付いた落合さんもすごいな。

こんな手法はAI研究者の人達だってまだ思い付いてないんじゃないのか?誰か論文にした方がいいのでは?

概要はなんとか理解したものの、まだ頭に馴染んでないので、これをどうやって活用していくか、まだなーんも思いついていない。
自分で色々と弄くりながらまたじっくり応用方法を考えてみる必要がありそうだ。

少し感想を書いておくと、シュンスケさんのプロンプトはあたかもそういうプログラミング言語が存在するみたいに書かれているように見えるが、あくまでChatGPTが解釈しやすくなるように何となくふわっとプログラムっぽく書いてるだけという事だろう。別に決められた文法があるわけではない。記述方法なんかはアドリブで自分流に色々変えて試してみてもいいだろう。
こんな風にプログラムっぽく書く事で、ChatGPTの打率が上がる?本当にそうなのか、ただのおまじないのようなもんなのか、実際の所はまだ分からないが、たしかにGPT-3.5やGPT-4はかなりプログラムコードを学習しているから、プログラムっぽく書けば理解度が上げられる可能性はある。本当だとしたら画期的だ。