【ChatGPT】ゴールシークプロンプトについての学習①

ChatGPTのゴールシークプロンプトについて最近ずっと勉強していたので少しずつまとめていこうと思う。

まず説明すると、「ゴールシークプロンプト」とは曖昧なゴールから明確なプロンプト（指示）をAIが作成してくれるプロンプトです。
ChatGPTを使用するにあたって非常に重要となるのが「プロンプト」です。最新の技術に敏感な方たちはすでにたくさんのプロンプトを発明したり、プロンプト商品として売り出したりということがすでに起きています。そんな中でプロンプトを作成するプロンプトの1つが「ゴールシークプロンプト」です。（たぶん）

日本ではプロンプトエンジニアリングを専門に行う方はまだ数名ほどしかおりませんが、ここでは林駿甫
さんの発明した「ゴールシークプロンプト」を落合陽一さんがNewsPicksで使用していたものをご紹介します。

```
#[このコンテンツは [Goal] を SeekするためのTemplateです］
- [コンテンツの詳細]:
- [Goal]：
- Goalを達成するために必要な手順を分解します。
- 分解した手順は「P#」に願番にNumberを付けて格納していきます。
- 変数を定義します。
- [Goal]:Aという主人公がなんらかの出来事を経験して、自分の能力を使ってA’という状態になった　　というのが物語である UberEats配達員を主人公とした物語のあらすじをひとつ考えてみてください
- {Goal}
- このコンテンツを作成するための{Goal}です。
- Command
- [C1]:
- Goalを選成するために必要なことをStep by Stepで1つづつ実行していけるように手順:[P#]に分解して下さい。
- [Output style] :
[P1]=
....
[P#]=
....
[P(END}]=
- [C2]:
- 各種変数を使用して、変数を減らすことができないか検対する
- [Goal]は必要条件として必ずinputする。
- [Goal]の定義を変数を使用して表すことで、［Goal]の設定だけで手順を分解できるようにしたい
- 一般化して、変数を追加して[Goal]の定義を書き表して下さい
- [Output style] :
- [Added variable]をリスト形式で一般化して書き出して下さい
- 続けて、[Goal]の定義を[Added variable]を使用して書き出して下さい
- [Goal] :{Goal}
- 追加の変数を質問して下さい一つづつ定義を書き表して書く．
- [C3]:
- [C2]のアウトプットの[Added variable]を一般的に解釈して，補完してください．
- 補完した変数を使用して[Goal]を再定義してください．
- [Output style] : 再定義した [Goal]を
- [Goal]:{Goal}で書き出してください
- [C4]
- [コンテンツの詳細]を元に[Goal]を達成するために，Step by Stepで実行していきます．
- [P1]から[P#]を経て順番に[P{End}]までひとつづつ実行していってください．
- [Output style] :
- [O1] = {Output[P1]}
....
[O#] = {Output[P#]}
....
[O{END}] = {Output[P{END}]}
- Run[C1][C2][C3][C4]
```

これはもはやプログラミングですね。
ここでポイントとなることが数点あります。

### ゴールを設定する



１．まず最終的にChatGPTにやって欲しいゴールを決める。

２．ゴールを決めたなら、ゴールを達成する手順をChatGPTに書き出してもらう。

###  変数を利用する
３．ゴールを達成するために必要そうな変数を書き出してもらう。[]で囲まれているところがそれにあたります。

４．変数を組み込んだ形でゴールを書きなおす。

なにやら説明するのがむずかしいですが、まずゴールを設定しそのゴールをプロセスに分解。そしてそのプロセスをさらに変数を利用することによってプロンプトにしていくというのが大まかな流れです(たぶん)

「ゴールシークプロンプト」の概念についてはシュンスケさんのYouTube動画にて詳しく説明されていてとてもわかりやすいです。
https://www.youtube.com/watch?v=kgfjzIJGD2k


では本題に戻りまして、先ほどの落合さんのプロンプトを実行していきましょう。

```
- [Goal]:Aという主人公がなんらかの出来事を経験して、自分の能力を使ってA’という状態になった　　というのが物語である UberEats配達員を主人公とした物語のあらすじをひとつ考えてみてください
```

 こちらの行が示しているのがこのコンテンツのゴールになります。
[Goal]を「物語のあらすじを作る事」という部分を書き換えることでさまざまなテンプレートでも作る事ができます。

```
#[このコンテンツは [Goal] を SeekするためのTemplateです］
- [コンテンツの詳細]:
- [Goal]：
- Goalを達成するために必要な手順を分解します。
- 分解した手順は「P#」に願番にNumberを付けて格納していきます。
- 変数を定義します。
- [Goal]:Aという主人公がなんらかの出来事を経験して、自分の能力を使ってA’という状態になった　　というのが物語である UberEats配達員を主人公とした物語のあらすじをひとつ考えてみてください
- {Goal}
- このコンテンツを作成するための{Goal}です。
```

そしてつぎからはいよいよCommandを作っていきます。
```
- Command
- [C1]:
- Goalを選成するために必要なことをStep by Stepで1つづつ実行していけるように手順:[P#]に分解して下さい。
- [Output style] :
[P1]=
....
[P#]=
....
[P(END}]=
```

頭のいい人たちはすごいこと考えますね。
つまりC1ではプロセスに分けていきます。[P1]〜[P#]とすることでプロセスを複数作ります。


```
- [C2]:
- 各種変数を使用して、変数を減らすことができないか検対する
- [Goal]は必要条件として必ずinputする。
- [Goal]の定義を変数を使用して表すことで、［Goal]の設定だけで手順を分解できるようにしたい
- 一般化して、変数を追加して[Goal]の定義を書き表して下さい
- [Output style] :
- [Added variable]をリスト形式で一般化して書き出して下さい
- 続けて、[Goal]の定義を[Added variable]を使用して書き出して下さい
- [Goal] :{Goal}
- 追加の変数を質問して下さい一つづつ定義を書き表して書く．
```

ここのコマンドは必要な変数を定義ということだろう。さらにその変数をChatGPTにさらに考えさせてスリム化している。

```
- [C3]:
- [C2]のアウトプットの[Added variable]を一般的に解釈して，補完してください．
- 補完した変数を使用して[Goal]を再定義してください．
- [Output style] : 再定義した [Goal]を
- [Goal]:{Goal}で書き出してください
```

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

```
- [C4]
- [コンテンツの詳細]を元に[Goal]を達成するために，Step by Stepで実行していきます．
- [P1]から[P#]を経て順番に[P{End}]までひとつづつ実行していってください．
- [Output style] :
- [O1] = {Output[P1]}
....
[O#] = {Output[P#]}
....
[O{END}] = {Output[P{END}]}
- Run[C1][C2][C3][C4]

```

プロンプトテンプレートはすでに出力済みですが、さらにそのテンプレートを実行させている。

最後のRun[C1][C2][C3][C4]でC1～C4が見ていて気持ちいい…こんなの自分で作れるようになりたい。

じつは実際に実行してみたのですが、なんか途中で止まったり意図しないことをやりだしたりしたのでコマンドを途中で切り分けたりしてなんとかNewsPicksのような出力をすることができました。

ただこの動画自体少し前なのでまたプロンプトは進化しているでしょう。とにかくAIの世界は動きが早すぎてついていくのに必死、、というかついていけてない。笑

これからも面白そうなプロンプト見つけたら学習ついでにここでアウトプットしたい。