質問力の重要性
よくビジネススキルの一つとして「質問力」が挙げられるが、ChatGPTに与えるプロンプトも同様で対象が人ではなく機械に変わっただけである。
「XXX(ざっくりした内容)について教えてください」といった、自分の中でもふわっとしていて言語化出てきていない質問を、プロンプトとしてChatGPTに投げてしまうと、意図した答えが返ってこない。逆に言えば、ChatGPTは、自分の対人に対する質問力向上のツールとしても有用である。
プロンプトを投げる段階で、「自分はこの質問でどういう回答を期待しているんだっけ?もしそうだとしたら、もっと具体的にこうした質問をした方が良さそう」などと自問自答して良い質問に昇華させることが、最終的にはChatGPTと何度も対話する過程を省略することができて効率的である。
そのための手助けとなる戦術がOpenAI公式から6つ紹介されてあるので、まとめておく。
https://platform.openai.com/docs/guides/prompt-engineering
いずれも、型を作り、その質問文(プロンプト)の中にある変数を埋めるという作業をすることで、質問をする段階で具体的に考えるという作業を促すものになる。
良い結果を得るための6つの戦術
取り上げられている、6つの戦術は以下。
- 明確で具体的な指示を書く
- ペルソナを指定する
- 区切り文字を使用して、入力の異なる部分を明確に示す
- タスクを完了するために必要な手順を指定する
- 例を提供する
- 出力の希望の長さを指定する
明確で具体的な指示を書く
悪い例
- Excelで数値を追加するにはどうすればよいですか?
- 大統領は誰ですか?
- 会議のメモを要約します。
良い例
- Excel で金額の行を合計するにはどうすればよいですか? これを行のシート全体に対して自動的に実行し、すべての合計が右側の「合計」という列に表示されるようにしたいと考えています。
- 2021 年のメキシコ大統領は誰でしたか?選挙はどのくらいの頻度で行われますか?
- 会議のメモを 1 つの段落に要約します。次に、講演者とその要点のマークダウン リストを作成します。最後に、講演者が提案した次のステップやアクション項目がある場合は、それをリストします。
これは先ほどの質問力そのままになってしまうが、抽象的な段階でそのまま質問を投げてはいけないということ。とはいえ、どうやったら具体化できるんだ?という話になるので、一案としては、最初に思い浮かんだ質問を、さらに明確な指示に昇華させるためにChatGPTをさらに活用して、質問するというのが良さそう。
例えば、最後の「会議の議事録の要約」に関してだと、「会議のメモを要約したいです。ChatGPTから良い結果を得るために、さらに明確な指示にして欲しいです。どのような点を考慮すれば良いか、列挙してください」と質問すると、考慮すべき項目を列挙してくれた。
この結果を読んで、なるほど、こうした具体的な指示を盛り込めば良いのか、いくつか採用してプロンプトに盛り込もうとしていけば良いと思う。
あとは、ChatGPTに「情報が足りない場合は質問して」と逆質問させるのも有用。
ペルソナを設定する
これはよく知られた内容だが、プロンプトの冒頭に役割を設定する。
「優秀なAIの研究者」「経験豊富なライター」「プロのマーケター」など。
例)
あなたは優秀なAIの研究者です。
下記の文章を中学生にもわかるように
段階的に考えて明確で正しい要約をしてください。
#
(ここに文章を貼る)
区切り記号を使って入力の異なる部分を明確に示す。
区切り記号として、#と”が推奨されている。
区切り記号は1つ(#)で良い。複数(###)である必要はない。
先ほどのプロンプトだと
#
(ここに文章を貼る)
となっている部分である。
タスクを完了するために必要な手順を指定する
モデルは、時間をかけて答えを導き出すよりも、すぐに答えようとするときに推論エラーが多くなる。答えの前に「思考の連鎖」を尋ねることは、モデルがより確実に正しい答えに向かう道筋を推論するのに役立つ。
「段階的に考えて」「段階的にタスクを行なって」などと指示することで、言語モデルに考える時間を与えることができる。
例)あなたはAI機械学習の専門の研究者です。
各セクションとそれに基づく内容を日本語で出力します。
与えられた文章において、次のステップで段階的にタスクを行なってください
1. 各セクションのタイトルを抽出する
2. そのタイトルの要約を明確に意味がわかるように行う。必要に応じて専門知識で補完する
3. 中学生にもわかるようにどのような技術なのかを説明してください。
#
(ここに文章を貼る)
例を提示する(few shot prompting)
Zero-shotプロンプティングとは、あらかじめ情報を与えずに、質問のみを投げかけるプロンプトのこと。一方で、Few-shotプロンプティングとは、少しだけ例を出してあげて回答を生成させるプロンプトのこと。
下記のように、例題と正解を提示した上で、本来の質問をすることで、回答精度が上がる。
算数や、詩的な文章を出力したい場合とかに有効そう。
問題:4, 2, 5, 7, 10, 13の偶数を合計するといくつになりますか?
答え:16
問題:4, 2, 5, 6, 10, 15の偶数を合計するといくつになりますか?
出力の希望の長さを指定する
目標の出力の長さは、単語、文、段落、箇条書きなどの数で指定する。
三重引用符で区切られたテキストを約 50 語に要約します。
"""ここにテキストを挿入"""
三重引用符で区切られたテキストを 2 つの段落にまとめます。
"""ここにテキストを挿入"""
三重引用符で区切られたテキストを 3 つの箇条書きで要約します。
"""ここにテキストを挿入"""
表形式で出力したいときは、下記のようにカラム名を添える。
#出力
表形式:|質問|意図|
大規模言語モデルの返答が向上する「プロンプト26の原則」という論文に記載されていて、へぇと思った原則をいくつか列挙しておく。
https://arxiv.org/abs/2312.16171v1
- 礼儀を省く:「お願いします」などの礼儀用語は不要。
- 明確化のための指示:「簡単な言葉で説明して」「中学生にも分かるように説明して」など。
あとは、
「今だした回答を最初から得られるように、プロンプトを修正して」
も有用。プロンプトを試行錯誤して、目的の回答が得られた場合で、今後も同じような回答を入力情報からえたい場合に使う。すると、ChatGPTが自ら最適なプロンプトを教えてくれる。
その他、マルチモーダル入力に対応したGPT-4Vの場合のプロンプト戦術はこちら。
- 複数の画像とテキスト情報を組み合わせて処理できる(Interleaved Image-text Pairs)
- Following Text Instructions
- 制約付きプロンプティング(Constrained prompting)
- 良好なパフォーマンスへの条件付け(Condition on good performance)
まとめ
巷ではプロンプトエンジニアリングと称して、より良いプロンプトに関する記事が溢れているが、全部読んでいては情報の海に溺れてしまうし、考えることは実は下記の4つでシンプルである。
- 質問したいと思ったら、冒頭はペルソナ設定になるので、質問内容を的確に答えてくれそうな役割(プログラミングに関する質問なら、プロのエンジニアなど)を設定して冒頭文に組み込む
- 頭の中でフワフワと描いている目的の出力結果を具体化(形式・文字数など)させる
- その出力結果に至る前のステップを考えて、プロンプトに入れ込む
- 例を挿入した方が良い結果が得られそうと思ったら、Aの質問ならBの答えになるという例文を付け加える。
テンプレ例
あなたはプロのXXXです。
以下の制約条件と入力文をもとに、段階的に考えて正しい回答を得られるようにしてください。#制約条件
#事例(必要であれば)
入力と出力の事例を掲載します。
– 入力文:
– 出力文:#手順の実行プロセス(必要であれば)
1.
2.
3.
#出力
どちらかというと、ふわっとした段階ですぐにgptに質問したくなる気持ちを、一旦押さえて質問の具体化に意識を向けることが一番難しそうである。まぁ、訓練の問題だが。
小出しのジャブをたくさん打つのではなく、ストレート一発を狙うイメージ(違。
ChatGPTをプログラミングで活用する際に注意すべきことに関しては、こちらで記載。
プロンプト例を読み漁る
と、ここまで、公式サイトに紹介されていた良い結果を得るための6つの戦術を紹介したが、それを踏まえた上で、公式サイトに紹介されているプロンプト例を読み漁るのも重要だと思う。
様々なカテゴリでのプロンプト例が記載されている。
https://platform.openai.com/examples
例えば、面接の質問というプロンプトを読んで、「人材採用の面接の質問作成としてもChatGPT使えるのか」などと、着想を得ることもできる。
また、仕様からコードを作成するプロンプトに関しては、このレベルまでプロンプトが具体化されていると、一発で目的に合致したコードを書いてくれるのかと参考になる。
家庭教師のプロンプトも面白い。そのまま教育ツールとして使えそう。
会議メモの要約などは、そのままコピペで使えそうである。
コメント