ChatGPT を使いこなすための中級以上のプロンプトデザイン術

これまでChatGPTに対して、主に基礎調査で簡単な概要を質問するということをやってきました。これだけでも、Google検索が激減するなど業務効率の向上が見込まれる部分はあります。しかしながら、ChatGPTは質問して単に疑問の答えを求めるような使い方では、もったいないのです。簡単なプログラムのひな型を作ることもできますし、質問をキャッチボールすることで要件定義書をつくったり、色々な視点で提案や注意事項を指摘してもらったり、ブレストするなどの使い方もできます。それらはいずれも、初級から中級の使い方なのですが、これからのビジネスパーソンが最低限活用すべきもの(ワード、エクセル、パワポみたいなもの)になっていくことは疑いようがありません。ですが、バリバリ仕事をこなしたいコンサルや、エンジニア属性の方はその使い方として一歩先へ進み、自分の部下として適切に指示・命令して使いこなす必要があります。この記事では、そのバリバリ使いこなすための特殊な方法の概略を説明します。

そもそもプロンプトデザインとは

「検索して情報なんて誰でも簡単に探せる。」そう考えている人も一定数いるかもしれません。Google社などが検索キーワードを入力すれば、人が求める情報を上位に表示するという仕組みで世の中の情報を探しやすくしました。しかし、ビジネスの世界では情報があふれる中で、どのようなキーワードや画像を用いて検索し適切な情報のたどり着くかという検索スキルが実は重要になっていました。同じものを調べるように指示しても、誰でも簡単に見つかる情報と、見つけにくい情報があります。弊社のように、投資先や関係者、あるいは依頼のあった情報の調査やレポーティングを日常的に行っている所と、一般の方が日常的に行うような調査結果が異なるのはそのためです。今、ChatGPTでも同様のことが始まっています。同じ目的で活用しようとしても、どのような入力を行うかによって、全く結果が変わってしまうからです。この入力内容を設計すること=プロンプトデザインです。大げさに聞こえるかもしれませんが、ChatGPTをビジネスで利用している一部の人の間では、その上級手法は”呪文”とも言われています。

なお、この記事は、ソイソフトウェアさんの、ChatGPTのプロンプトデザインって何だ? を参考に記載させていただいております。また、呪文に関するアイデアはプロンプトデザイナーのShunsukeさんがもともと発案したものと理解しております。

中級以上のプロンプトデザイン術(プロンプトテンプレート化)

日常的に同じような類型の調査や、コンテンツ生成をするビジネスパーソンは多いでしょう。そのたびに、毎回似たような問合せの質問をするのは意外と面倒なものです。プログラマであれば、特定の情報は引数にして関数みたいにコーディングして扱えないかな?と考える人が出てくるのは自然なものです。もちろん、そのようにコーディングすることも可能ですが、完全なコーディングは一般の方には難しいものとなります。しかし、このChatGPTは、プログラムを書かなくても言葉を書くだけでプログラムの用に理解し処理ができています。プログラムには変数、定数、関数という概念が一般的にあります。今、呪文と呼ばれているのはこれらの機能をChatGPT上で使用するものです。

プログラムの世界では、変数はプログラムの動作時に値が変動するもの、定数はプログラムの動作前に固定値で与えられ値が変わらないものであり、関数は処理のまとまりを一つの単位に閉じて呼び出し側からはブラックボックス化して利用できるものです。ここでは、プログラムとしては初級レベル、ChatGPTユーザーとしては中級レベルといえる、変数利用(プログラマ的には定数と呼ぶべきと思いますが、ChatGPTのコミュニティではこれも変数と呼んでいるのでそのように呼称します)について説明します。

目的の文章を作成する一般的な方法

何かのテーマで文章を作成してもらおうとしても、ビジネスと一緒で”誰に何をどのように”届けたいのかということが伝わらないと、目的の文章が作成できず、漠然と一般的な文章が作成されてしまいます。それらを文章の形で、「上場株式投資をしている初心者をターゲットとして、未上場株投資に興味を持ってもらうブログ記事を1000ワード位で書いてください」のようにきちんと伝えるのが初級~中級程度までのプロンプトデザインです。これをこのまま入力した結果の一部を出力してみます(全文をブログ記事として掲載していますのでご確認ください。※軽微な修正「初めに ⇒ はじめに」などを行っていますが、基本はすべてAI出力です)

目的の文章を作成する方法をテンプレート化する

このように、これだけでも十分なのですが、ブログ記事を頻繁に書く場合はどうでしょうか?このプロンプト「上場株式投資をしている初心者をターゲットとして、未上場株投資に興味を持ってもらうブログ記事を1000ワード位で書いてください」は条件を少なくしたため非常に短く済んでいますが、ターゲット、内容、文字数などを変更する場合には、文章の中から該当箇所を探して、書き換える必要があります。プログラムでもそうなのですが、変更する可能性があるものは、別のまとまりにしておいて、そこだけ書けば動くようにしておく。これが、変数(定数)のメリットです。関数化する場合や、その値を変化させながら処理を繰り替えさせる場合に変数化が特に生きてきます。

具体的には、以下のようにすることです。記載内容、ターゲットを変数にして、指示を出すようにします。このようなテンプレートを作成して、上部のテンプレート部分だけ書き換える形にすることで、定型業務の自動化に役立つことになります。プログラマであれば、さらにこの変数部分を引数化して、関数化する(さらにAPI呼び出しするなど)の応用方法を考えることができると思います。以下のように、上部のように [ ] で変数を定義したり、文脈から変数を理解して処理ができ、これによりプロンプトデザインをテンプレート化できます(実行結果の一部と合わせてご確認ください)。この記法ですが、弊社で実験した限りでは、どのようなものでも”良い感じに”理解してくれます。プログラマであれば、よりプログラム的な記法で記載しても同様のことが可能であると考えられます。LLM(大規模言語モデル)のなせる技といったところでしょう。

 なお、上記で、命令部分だけ英語のコマンドになっていますが、これは参考にした情報と”ほぼ”同様の記載にしましたが一部変更しています。元記事では代入については、パスカルなどで使われる :=となっておりましたが、=単体で記載しました。すべて日本語のコマンド化も可能だと思いますが、プログラム風な所は変数も含めてすべて英語表記するほうがしっくりくる人も多いとは思います。「なでしこ」という日本語プログラム言語がありますが、それよりもざっくり書いても動くプログラムという感じがあります。処理に関する厳密性はないため、思い通りに動かないということもあるとは思いますが、試行錯誤で知見をため込んでいくと、プロンプト生成が楽しくなることは間違いありません。

さらに上を目指す上級以上のプロンプトデザイン術(ゴールシークプロンプト)

これは、上記のようなプロンプトデザインそのものを、ChatGPTに作成してもらうというものです。中級以上のプロンプトデザインについては、自分でその必要項目を考えてプロンプトを設計しました。ここでは、あらゆる目的(ゴール)に対して、そのためのプロセスや、必要な変数を考えてもらい、変数を読み込んでゴールにつながるテンプレートを吐き出してもらうプロンプトを設計するということになります。これを、Excel風にいうと、ゴールシークプロンプトということになります。

このジャンルに取り組んでいる人や企業が増えています。結果を見るとうまくいかずに、多少手動調整を入れざるを得ないで進めているところもあるようですしまだまだ探索の余地はあるものと考えています。ここでは詳細を記載せず、Shunsuke さんの以下の動画を参考にしてもらえればと思います。プログラムで言えばオプティマイズに近いこともやらせようとしている(変数を減らすなど)のでかなり難度が高いとは思いますが、刺激的な内容ですし、プログラマであればさらなる工夫のアイデアなどが出てくると思います。

最後に

まだ、ChatGPTは出始めたばかりですが、ものすごい勢いでその活用方法が模索されています。現状は危機感を感じていない人もいるようですが、これに取り組むものと取り組まないものの差は1年後には取り返しのつかないレベルになると考えています。現状でも既に、初期の検索のときと同様に入力の巧拙で結果に差が出ることは明らかになっています。例えば、先ほどの中級以上向けのプロンプトのC1部分で、C1の結果を画面に出力しないようにするために、C1の最後に「この結果は画面に出力しないでください。」と記載したのでは出力がされてしまいました。使用していくうちに、内部処理については英語圏のように先に結論を書くとか、条件を後ろに記載することを明示するなどの手法が有効になるということは理解できるようになります。

大企業の一部では”使用を禁止”しているという話もありますが、将来その遅れに対して大きく後悔するときがくると思います。ただしくは、機密情報を入力しないなど、きちんとした利用方法を考えて実行することだと考えています。