見出し画像

ChatGPT用に、汎用問合せテンプレートを作ってみる

発想


細かいステップに分けて問わないといけないとはいえ、ある程度は自動化したい。また、毎回、問いたい内容を記述するのもめんどくさい。複数行に跨った記述をするとき、シフトを押し忘れて命令となってキーっとなったり、無駄なトークン代がと悔やむなら、命令書をコピペすればいいじゃない、という発想。

ということで、いろいろな記事を読んで、以下のようにしてみた。
提案をする人とされる人というテンプレートとして作ってある。
非エンジニアが自分でいじれるように、日本語の自然言語でのみ記述している。


プロンプト

#命令書
以下を守って、会話を進めよ。

#会話の開始
「Chatが提案する立場を記述してください」と記述し、人間による記述内容をproposerという変数に格納せよ。
「Chatが提案する相手の立場を記述してください」と記述し、人間による記述内容をpersonという変数に格納せよ。
「Chatが提案する内容を記述してください」と記述し、人間による記述内容をcontentという変数に格納せよ。
以上3項目に対して回答を受けたのち、提案前提の理解に移れ。
ただし、入力プロンプトの表示から120秒経っても、3項目についての記述がない場合は、「前提条件がわからないので、一旦おしまい」と記述して、終了せよ。

#提案の選択
contentについてproposerの立場でpersonの立場の人に提案する。
提案ポイントを7つ設定。重要な順にソートする。
会話には、この7つを箇条書きで記述する。

人間(Chatに対応する私)に対して、どの点について議論を進めるか、1-7の中から選択させる。
0が入力されたときは、命令書の最初に戻る。
人間から0-7以外の回答があった時は、上記1-7とは異なるポイントを再度提案する。3回連続で1-7以外が返ってきた時は、「うまく提案できなくて申し訳ありません。おしまい」と記述し、会話を終了する。
提案のブレイクダウンに移動する。

#提案のブレイクダウン:
1-7の中で人間から返答があった場合は、その内容について重要度順にA,B,Cの3つにブレイクダウンして簡潔な説明を行う。
説明後、どの点について反駁モジュールに移行するか、A-Cの中から選択させる。
Fが返ってきた時は、提案の選択モジュールの1-7を箇条書きで再度表示し、選択させる。
反駁に移動する。

#反駁:
人間によって選択された議題(A-C)について、personはBlack Sheepの立場で、反論の論拠となるweb URLを3つ挙げ、これらについて説明を行う。
記述は、日本の一般的な高校生が理解できる内容に噛み砕いて行う。
これ以降はチャットとして会話を続けよ。

なお、会話の途中でも、Fを人間が入力した場合は、A-Cを再表示し、反駁の冒頭に戻れ。
会話の途中でZを人間が入力した場合は、会話の開始に戻れ。

解説

会話の開始

人間に、提案する人の立場、される人の立場、提案内容を入力させる。
これにより、議題、立場が別の人であっても、汎用的に利用できるはず。

提案内容だけでも動くが、立場を明確化することで、より深い議論が可能になるので、立場は強制的に書かせるようにしている。
立場を書かないと、自分の会社にChatGPTに導入すると言う話をした時に、マクロ経済的に導入する価値というような返事が返ってくることがある。だから立場はとても大事。

今思いついたが、どう言う立場の人が考えられるか、と言うのを最初に聞くと、自分でも思ってもみなかった立場が出てくる可能性もある。このプロンプトを入れる前の下処理としてやってみると良いかも。

あとは、時間切れルーチンを入れてみた。なくても良い。

提案の選択

立場を明確にして提案させる。
まずは、箇条書きで7つ書かせる。別に5つでも10個でも良いのだが、ここは説明よりもタイトルだけにして、その中から選んでもらうことを考えた。理由は:

  • いきなり説明させると、自分で知りたいこと以外が垂れ流されても困る。

  • 自分で気づいていなかったポイントがあれば、深ぼれる。

  • この中に聞きたいことがない場合は再提案させられることで、自分の視点に見落としがないか確認できる。

提案のブレイクダウン

「提案の選択」で提示させるのはタイトルだけなので、内容は書いていない。そこで、3つにブレイクダウンさせた上で、簡単な解説をさせる。

反駁

三つの内容のうち、どれかを選んで深掘りをさせる。

視点はいわゆる black sheep、あえて反論をする。
立場は、被提案者(person)というのをダメ出しで書いておく。
ハルシネーション対策として、論拠のURLを提示させる。
説明は詳細にさせる。

あとは、今までの文脈をもとにチャットができるので、好きなように会話を続ければ良い。

なお、うまく会話して情報を引き出すコツには、Chain-of-Thought というものがあるらしい。前回でも触れた、小分けにして話すも含まれていると思うのだが、後で読む。


今後

「生産性を向上させることができる」という問いに対する反駁が「コストがかかる」だったりと、真正面から答えていない場合がある。
「生産性を向上させられるとは限らない。理由はこれこれ」というこ反駁をして欲しいのに、という不満に繋がる。
これは、もしかすると生成AIの特徴かもしれない。人間でも真正面に応えるのではなく、よく言えば水平思考的に別の観点を急に持ち出して、ミクロな意味だと反論になっていないが、マクロな意味では反論になっていることを言うことがあるので。
だとすれば、これはこう言うものだと受け入れて、追加の質問などで答えを引き出す必要がある。

となると、自動的に反復して深化させると言うのは、少ない回数で行って、必要なら軌道修正を人力で行って、また反復させる、と言うのがいいかもしれない。

参考

命令書という書き方は以下のツイートを参考にした。ありがとうございます。
https://twitter.com/bukuta_3/status/1636936746226319360



いいなと思ったら応援しよう!