「ChatGPT」の高度なプロンプト作成テクニック–適切な回答を引き出す7つのヒント

  • 2023.07.31
  • AI
「ChatGPT」の高度なプロンプト作成テクニック–適切な回答を引き出す7つのヒント

米ZDNETの過去の記事で、効果的なプロンプトを作成する方法について解説した

今回の記事では、1つレベルを上げて、さらに高度なAIプロンプト作成のテクニックを紹介する。この非常に興味深い7つのアプローチにより、「ChatGPT」やその他の生成AIツールとコミュニケーションをとる方法について、理解が格段に深まるはずだ。

では、ChatGPTをさらに使いこなす方法を見ていこう(編集部注:以下のプロンプトは、原文にある英語のプロンプトを和訳して記載しています)。

1. 出力形式を指定する

ChatGPTに質問をするときや課題を与えるときには、応答の形式を指定することができる。学生に課題を与えるときに、どのような形式で提出するかを指定するようなものだと考えてほしい。いくつか例を紹介しよう。

米国で最も長い幹線道路はどれか。上位4つのみを箇条書き形式でリストしてほしい。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

その情報を表にしてほしい。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

2. HTML形式で出力させる

結果を表示する方法について、多くのことを指定できる。たとえば、ウェブページに組み込むことのできる表を生成させることが可能だ。

米国で最も長い幹線道路はどれか。上位4つのみをリストしてほしい。結果はHTML形式で表示すること。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

 ここが興味深いところだ。その情報を好みのHTMLスタイルで表示させることもできる。ウェブデザイナーの中には、従来のtableタグを好まず、CSS形式で表を作成することを好む人もいる。こちらがCSSバージョンだ。

その情報を表示してほしい。ただしtableタグではなくCSSを使うこと。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

3. 何度も試行を繰り返す

多くの場合、ChatGPTと連携して、望む結果が得られるように手助けする必要がある。先ほどのCSSの結果を見てみよう。これが出力された表だ。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

残念ながら、筆者が求める美しさには達していない。修正できないか試してみよう。

やり直してほしい。ただし、すべての列を整えること。見出しは濃い青色にして、文字を白くし、すべて大文字と太字にする。各データ行は明るい灰色にするが、灰色の明るさを変えて、1行目は明るい灰色、2行目は少し暗い灰色、3行目は明るい灰色、といった具合にしてほしい。幹線道路の名前は必ず太字にすること。

生成されたコードは非常に長いため、ここには掲載しないが、求めているものに近づいてきた。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

もう一度試してみよう。

とてもきれいな表になったが、まだ列がそろっていない。列の幅を十分に広くとって、文字を折り返さなくていいようにしてほしい。すべてを左寄せにして、(見出しを含む)すべての列を完璧にそろえるように。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

ほぼ求めているとおりの表になったが、経路(ROUTE)に折り返しがある。修正できるか試してみよう。

ほぼ要望どおりになったが、経路が折り返されている。経路のデータも折り返しがないようにしてほしい。各データ行をちょうど1行に収めること。

これが簡単な作業だと考えてはならない。しかし、人間にプログラミングを教えたことがある人ならご存じだろうが、まさにこのような結果が返ってくるはずだ。受動的攻撃行動ではないかと思えることもあるが、自分が要件を十分に注意深く指定しなかった可能性の方が高い。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

4. 恐れずに長文のプロンプトや複数のプロンプトを使用する

幹線道路の情報が自分の望む形式で確実に生成されるプロンプトを作成するには、何度も繰り返し試す必要があった。重要なアプローチの1つは、プロンプトを非常に具体的な内容にするとともに、十分な長さにして、自分の求めていることを大規模言語モデルが理解できるだけの情報を持たせることだ。

指示の変更が必要になる場合もある。筆者は最終的に以下の行を削除した。

CSSのみを使用して、行、列、セルを書式設定する表を作成してほしい。HTMLのtableタグは使わないように。

代わりに、どのような見た目の表にしたいかだけを伝えて、その実行方法はChatGPTに決めさせた。かなり長くなったプロンプトの全文がこちらだ。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

このプロンプトはテキストエディター「Sublime Text」で書いて、ChatGPTに貼り付けた。以下がその結果で、筆者が望んでいたとおりの表になった。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

これを見ると分かるように、ChatGPTはタイトルを追加することを選択した。それは構わないが、うまく機能するプロンプトが手に入ったので、さらに微調整を加えられるようになった。たとえば、前の手順に戻って列指定子を変更した。

インデックス番号(これに「#」というラベルを付ける)、幹線道路の名前、長さ、経路の列を作成してほしい。

「回答を上位4つだけに絞る」という部分を「回答を上位20だけに絞る」に変更しようとしたが、ChatGPTは20の幹線道路すべてのデータを入力することを拒否した。そこで、完全にその行を削除して、プロンプトの最後に新しい行を追加した。

このプロジェクトの目的のために、上位20の幹線道路の完全なデータを提供してほしい。

これは実際のところ、部分的なHTML出力という結果になった。HTMLの残りの部分が出力されるまで処理を続けるように指示しなければならなかった。結果は以下のとおりだ。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

5. 応答に明確な制約を設ける

前項では、回答の数と表示したい列に関して、回答への制約を何度か修正した。だが、より自由回答式の質問にも制約を設けることができる。

このタイプのプロンプトには制限がある。たとえば、以下のプロンプトを考えてみよう。

第2次世界大戦について、当時の主要紙が報じた重要な出来事の要約を作成してほしい。

モデルは第2次世界大戦当時の新聞で訓練されていないため、この質問には答えられない(推測はするが)。

同様に、「過去数年」の結果を指定することもできない。このモデルへのデータ入力は2021年に終了したからだ。とはいえ、以下のように、モデルの範囲内のデータを指定することはできる。

2010年から2020年までの主な宇宙ミッションのリストを作成してほしい。

ここで注目すべきは、日付によって限定していることだ。しかし、さらに制約を加えることができる。米国の宇宙ミッションだけに限定してみよう。

2010年から2020年の間にNASAが実施した主な宇宙ミッションのリストを作成してほしい。

先ほど説明した書式設定のアプローチを使用して、以下のようなプロンプトを作成することもできる。

2010年から2020年の間に実施されたすべての主要な宇宙ミッションのリストを作成してほしい。ミッションを国別と宇宙機関別に分類し、国と宇宙機関の名前を太字にする。

指示をさらに明確にすることもできる。ここでは、大陸を追加して、宇宙ミッションを実施していない大陸をリストから除外するよう指示した。

2010年から2020年の間に実施されたすべての主要な宇宙ミッションのリストを作成してほしい。ミッションは大陸別に分類する。大陸の名前を太字にし、すべて大文字にすること。国と宇宙機関の名前を太字にし、宇宙機関の名前の表記に合わせて、各単語の最初の文字を大文字にするか、すべて大文字にする(NASAなど)。宇宙ミッションが実施されなかった大陸は、このリストに含めない。

興味深いことに、ChatGPTはちょっとしたハルシネーションを発生させることにした。宇宙ミッションと大陸は適切にリストしたが、ロシアを大陸だと判断したことだ。もう一度実行したところ、そのときはロシアを大陸と判断しなかった。

6. 単語、文、文字の数を指定する

制約といえば、ChatGPTが単語数に関してあまり正確ではないことにお気づきだろうか。回答を50語以内に制限しても、それより長くなることや短くなることがある。これは、言語モデルがトークン(データを表現したもの)で機能しており、トークンは個々の単語と直接対応するものではないからだ。

たとえば、ChatGPTに「テレビドラマ『ゲーム・オブ・スローンズ』の内容を要約してほしい」と伝えると、6段落にわたる294語の文章が返ってきた。しかし、応答の制限を試みることはできる。自分にとって最適な形が決まるまで、制限を課すさまざまな用語を試してみよう。いくつか例を紹介する。

ゲーム・オブ・スローンズのテレビシリーズを50語で要約してほしい。

ゲーム・オブ・スローンズのテレビシリーズを2文で要約してほしい。

ゲーム・オブ・スローンズのテレビシリーズを200文字以内で要約してほしい。

ゲーム・オブ・スローンズのテレビシリーズをツイートに収まる長さで要約してほしい。

ここでも、ChatGPTの制約に注意する必要がある。ChatGPTには2021年より後の訓練データが含まれていない。当時、ツイートの文字数の上限は280文字だったが、2023年2月の時点では、「Twitter Blue」のサブスクリプション契約者は4000文字もの長文をツイートすることができる。ChatGPTにツイートに収まる文字数にしてほしいと伝える場合、回答を280文字に制限するように指示することになる。当時はそれがツイートの唯一の上限だったからだ。

7. ChatGPTに自らの回答を評価する機会を与える

何度も取り上げてきたように、ChatGPTはよく「ハルシネーション」を起こして、的外れの答えを返すことがある。ChatGPTに中間的な結論を出させることで、会話を構築して、より正確な答えにたどり着くことが可能だ。以下の簡単なプロンプトを見てみよう。

devolveと同様の意味でBから始まる単語

想像がつかないかもしれないが、ChatGPTはこのリクエストに確実に失敗し、decay、degrade、degenerateなど、「D」で始まる単語を返す。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

この一見単純なプロンプトには、いくつか問題がある。まず、「devolve」には複数の意味があり、「移す」または「委任する」、「悪化する」または「退化する」、「受け継ぐ」または「遺贈される」といった意味で使われる。適切な答えを得るには、より具体的に説明して、求めているおおよその意味を示す必要がある。また、ChatGPTが意味を判断できるように、名詞ではなく動詞を求めていることを伝えるのもいいだろう。

-PR-

最初の文字が「B」で、「devolve」と同様の意味を持ち、特に何かが悪化する、または劣化するという概念を示す動詞を挙げてほしい。

困ったことに、ChatGPTは単語の最初の文字を特定するのが非常に苦手だ(これもChatGPTの知識がトークンで表されることが原因)。そのため、ChatGPTに最初の文字を見つけ出す時間を与えた方がいい。

生成した動詞の最初の文字を確認してほしい。

AI専門家はこれを「一呼吸置く時間を与える」と呼ぶ。このアプローチなら、最初の答えを急いで出すのではなく、ChatGPTに答えが正しいかどうか考える時間を与えることができる。

ChatGPTは最初の応答で正解を導き出せない場合があるため、正しい答えが見つかるまでこの手順を繰り返すように伝えよう。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

以下のやりとりでは、答えが見つかるまで苦労して進んでいる。

提供:Screenshot by David Gewirtz/ZDNET
提供:Screenshot by David Gewirtz/ZDNET

一連のやりとり全体を通して基準が存在していたにもかかわらず、適切な単語を見つけるまでに6回の試行を要した点に注目してほしい。2回目のダブルチェックの「呼吸」によって、ChatGPTは自らの答えを評価し、正解するまで処理を続ける機会を得られた。

結論

知っておくべき非常に重要な点の1つは、ChatGPTがユーザーの求めていることを最初からできるとは限らないということだ。最後の例では、2時間近くかけて約20回試し、実際に機能して確実に結果が生成されるプロンプトを見つけることができた。

その作業中は、ChatGPTが現在のセッションでのやりとりを記憶しているということに留意しよう。したがって、現在のセッションで正しい答えを得られたとしても、厳しくテストする必要があり、そのプロンプトを新しいセッションにコピーして、そこでも機能するかどうか確認してほしい。

今後、より高度なプロンプト作成に関するヒントや、個々のプロンプトの問題の詳細な解決方法を紹介したいと思う。

ZDNet より

AIカテゴリの最新記事