OpenAIが教えるChatGPTプロンプトを解説!

OpenAIが教えるChatGPTプロンプトを解説! ChatGPT

今回の記事では、OpenAIの公式ページで公開されているChatGPTのプロンプトガイド「GPT best practices」について解説します。

Just a moment...

プロンプトとは?

ユーザーからAIへの命令や質問を指します。
ChatGPTにおけるプロンプトとは、ChatGPTに対するテキストでの指示や質問を指します

公式が教えるプロンプト6選

より良い結果を得るための6つのプロンプトを例を紹介します。

  1. 明確な指示を書く
  2. 参照テキストを提供する
  3. 複雑なタスクをより単純なサブタスクに分割する
  4. GPTに「考える」時間を与える
  5. 外部ツールを使用する
  6. 変更を体系的にテストする

ではさっそく解説していきます。

明確な指示を書く

GPTはユーザーの意図を推測することはできません。
そのため、簡潔な回答や専門的な文章、特定のフォーマットなど、具体的に何を求めているのかを明確に指示することが重要です。

各プロンプトの設定の説明は以下のようになっています。

“SYSTEM”:AIの初期設定で、AIがどのように振る舞うべきかを定義します。

“USER”:これはユーザーからの入力を表します。これは質問、要求、またはAIに対する指示など、ユーザーがAIに伝えたいことを表します。

“ASSISTANT”:これはAIからの応答を表します。これはユーザーの質問に対する答え、要求された情報、または指示されたタスクの実行結果などを表します。

例を紹介

タスク:論文からタイトル案を5つ生成

プロンプト:SYSTEM

あなたには論文の抄録とそれに対する提案タイトルが提供されます。論文のタイトルは、読者に論文の主題を良く理解させるべきであり、同時に目を引くものであるべきです。タイトルがこれらの基準を満たしていない場合は、5つの代替案を提案してください。

プロンプト:USER

抄録:我々は、画像とテキストの入力を受け付け、テキストの出力を生成できる大規模な多モーダルモデル、GPT-4の開発について報告します。多くの現実世界のシナリオでは人間よりも能力が低いものの、GPT-4は、模擬弁護士試験を受験者の上位10%程度のスコアで合格するなど、さまざまな専門的および学術的なベンチマークで人間レベルのパフォーマンスを発揮します。GPT-4は、ドキュメントの次のトークンを予測するために事前学習されたTransformerベースのモデルです。訓練後のアライメントプロセスにより、事実性と望ましい行動への遵守の指標におけるパフォーマンスが向上します。このプロジェクトの中心的な部分は、広範なスケールで予測可能に振る舞うインフラと最適化方法を開発することでした。これにより、我々はGPT-4のパフォーマンスの一部を、GPT-4の計算量の1/1,000以下で訓練されたモデルに基づいて正確に予測することができました。

タイトル:GPT-4技術報告書

プロンプト:ASSISTANT

1."テキストと画像から学習:GPT-4の多モーダルモデル開発についての洞察"
2."GPT-4とその人間レベルのパフォーマンス:専門的ベンチマークにおける一歩先へ"
3."大規模な Transformer モデル:GPT-4 の開発とその可能性"
4."予測の精度を向上させる:GPT-4の事前学習と事実性遵守"
5."GPT-4: 多モーダルモデルの開発とその人間レベルの応用可能性"

タイトルに求める内容を詳細に指定し、5つ案と指定することで内容に沿った結果になりました。

参照のテキストを提供する

GPTは、複雑なトピックや引用、URLについて問われたときに、もっともらしい嘘をつくことがあります。
しかし、テストで学生がノートを参考にするのと同じように、GPTに参照テキストを提供することで、誤った情報を減らし、より正確な回答を得ることができます。

例を紹介

タスク:質問に対する回答と引用

プロンプト:SYSTEM

トリプルクォーテーションで区切られた文章と一つの質問が出されます。あなたの仕事は、その文章のみを使用して質問に答え、回答に使用した文章の部分を示すことです。もし文章がその質問に答えるのに必要な情報を含んでいなければ、「情報が不足しています」と書いてください。回答が出される場合、それは引用を使って示す必要があります。次の形式で関連する文章部分を引用してください:({"引用": …})。

プロンプト:USER

"""
「蒸気機関」とは、その作業流体として蒸気を使用する熱機関で、蒸気圧により生じた力を使ってピストンをシリンダー内で前後に動かします。この押す力は、接続ロッドとクランクによって、作業用の回転力に変換することができます。"蒸気機関"という用語は一般的には上述のような往復動エンジンにのみ適用され、蒸気タービンには適用されません。蒸気機関は外部燃焼エンジンであり、作業流体は燃焼生成物から分離されています。このプロセスを分析するために使用される理想的な熱力学的サイクルはランキンサイクルと呼ばれます。一般的な使用では、"蒸気機関"という用語は完全な蒸気プラント(ボイラーなどを含む)、例えば鉄道の蒸気機関車や移動式エンジン、あるいはビームエンジンや定置蒸気機関のようなピストンまたはタービン機械単体を指すこともあります。

蒸気で駆動する装置は、紀元1世紀のアエオリピレにまで遡ることができますが、16世紀にもいくつかの利用例が記録されています。1606年にヘロニモ・デ・アヤンス・イ・ボーモントが最初の蒸気動力水ポンプを特許取得し、鉱山の排水に利用しました。トーマス・セイヴァリーは、蒸気圧が直接水に作用する蒸気ポンプという、最初の商業的に利用された蒸気動力装置の発明者と見なされています。最初に連続したパワーを機械に伝えることができる商業的に成功したエンジンは、1712年にトーマス・ニューコメンによって開発されました。ジェームズ・ワットは1764年に大きな改良を行い、使用済みの蒸気を別の容器に移して凝縮させることで、消費燃料当たりの仕事量を大幅に改善しました。19世紀には、定置式蒸気機関が産業革命の工場を動力供給していました。船舶における帆はパドルスチーマーの蒸気機関に、鉄道では蒸気機関車に取って代わられました。

往復動ピストン型の蒸気機関は、20世紀初頭まで主要なパワー源でしたが、電動モーターや内燃機関の設計の進歩により、商業的な使用における蒸気機関の徐々の置き換えが始まりました。蒸気タービンは、コストが低く、運転速度が高く、効率が高いため、発電において往復動エンジンを置き換えました。

https://en.wikipedia.org/wiki/Steam_engineより抜粋
質問:最初の商業的に成功した蒸気機関は何ですか?
"""

プロンプト:ASSISTANT

最初の商業的に成功した蒸気機関は、「1712年にトーマス・ニューコメンによって開発された」エンジンです。({"引用":"1712年にトーマス・ニューコメンによって開発されました。"})

例を示すことで、その内容に合わせた参照をしてくれました。

複雑なタスクをより簡単なサブタスクに分割する

ソフトウェアエンジニアリングにおいて、複雑なシステムを一連のモジュラーなコンポーネントに分解するのは有効な手法です。
これはGPTのプロンプトでも活用できます。
複雑なタスクも小さなタスクにすることで、より最適な結果が期待できます。

例を紹介

タスク:お問い合わせのカテゴリー分け

プロンプト:SYSTEM

「お客様からの問い合わせを取り扱います。それぞれの問い合わせを主要カテゴリと副カテゴリに分類してください。出力はJSON形式で、「primary」および「secondary」というキーを使用してください。

主要カテゴリ: 請求に関する問題、技術サポート、アカウント管理、一般的な問い合わせ。

請求に関する問題の副カテゴリ:

サービスの退会またはアップグレード
支払い方法の追加
請求内容の詳細説明
請求に対する異議申し立て
技術サポートの副カテゴリ:

トラブルシューティング
デバイスとの互換性
ソフトウェアの更新
アカウント管理の副カテゴリ:

パスワードのリセット
個人情報の更新
アカウントの閉鎖
アカウントのセキュリティ
一般的な問い合わせの副カテゴリ:

製品情報
価格設定
フィードバック
スタッフとの直接対話

プロンプト:USER

インターネットを再び使えるようにしたいです。

プロンプト:ASSISTANT

{
  "primary": "技術サポート",
  "secondary": "トラブルシューティング"
}

複雑なタスクですが、順序立てて小さなタスクに分けることで、望んだ結果が得られました。

考える時間を与える

17と28を掛けると求められたとき、直ぐには答えられないかもしれません。
しかし一つずつ計算していくことが答えにたどり着けます。
同様に、GPTはすぐに答えようとするとより多くの推論エラーが発生します。
答えを出す前に推論の過程を求めると、GPTがより確実に正確な答えにたどり着くのに役立ちます。

例を紹介

タスク:生徒の回答の答え合わせ

プロンプト:SYSTEM

質問に答えるための以下の手順を守ってください。

ステップ1 - まず、問題に対する自身の解決策を考えてください。生徒の解決策に頼るのは避けてください。それは間違っている可能性があります。このステップでの全ての作業はトリプルクオート(""")で囲んでください。

ステップ2 - 自身の解決策と生徒の解決策を比較し、生徒の解決策が正しいかどうかを評価してください。このステップでの全ての作業はトリプルクオート(""")で囲んでください。

ステップ3 - もし生徒が間違えていた場合、答えを教えずに何かヒントを出すことができるかを考えてください。このステップでの全ての作業はトリプルクオート(""")で囲んでください。

ステップ4 - もし生徒が間違えていた場合、前のステップで考えたヒントを生徒に提供してください(トリプルクオートの外側で)。"Step 4 - ..."と書く代わりに "ヒント:" と書いてください。

プロンプト:USER

問題の文: 箱には赤いボールが4つ、青いボールが6つ入っています。ボールを取り出した後に戻さず、2つのボールを抽出します。抽出されたボールが一つが赤で、もう一つが青である確率は何ですか?

生徒の解答: (4/10)*(6/9) = 24/90 = 4/15

プロンプト:ASSISTANT

ステップ1 - まず、問題に対する自身の解決策を考えてください。生徒の解決策に頼るのは避けてください。それは間違っている可能性があります。このステップでの全ての作業はトリプルクオート(""")で囲んでください。

"""
まず、ボールが一つが赤で、もう一つが青である確率を求めるためには、以下の2つの場合を考慮する必要があります。

1. 最初に赤いボールを抽出し、次に青いボールを抽出する場合
2. 最初に青いボールを抽出し、次に赤いボールを抽出する場合

これらの2つの場合は互いに排他的なので、それぞれの確率を計算し、それらを足し合わせることで求めることができます。

1. 最初に赤いボールを抽出する確率は4/10で、次に青いボールを抽出する確率は6/9です。したがって、この場合の確率は(4/10)*(6/9) = 24/90 = 4/15です。

2. 最初に青いボールを抽出する確率は6/10で、次に赤いボールを抽出する確率は4/9です。したがって、この場合の確率は(6/10)*(4/9) = 24/90 = 4/15です。

したがって、ボールが一つが赤で、もう一つが青である確率は4/15 + 4/15 = 8/15です。
"""

事前に問題の答えをGPTに考えさせることで、より正確な出力をしてくれました。

外部ツールやプログラムコードを利用する

他のツールの出力をGPTに提供したりプログラムコードを利用することで、GPTの弱点を補うことができます。

例を紹介

タスク:メールの返信

プロンプト:SYSTEM

Pythonのコードを記述し、実行するには、そのコードをトリプルバッククォート(```)で囲んでください。さらに、友人にメッセージを送るのを手助けする以下のモジュールを利用できることをご確認ください:
```python
import message
message.write(to="Bob", message="Hey, want to meetup after work?")```

プロンプト:USER

アリスに私が10時にコーヒーショップで会うと伝えてください。

プロンプト:ASSISTANT

以下のPythonコードを使用して、アリスにメッセージを送ることができます。

```python
import message
message.write(to="Alice", message="Let's meet at the coffee shop at 10.")
```

ChatGPTでメールは送れないですが、コードを生成して実行することでメールを送るというタスクも実行できます。

正解と比較して評価する

特定の質問に対する、答えが分かっている場合。
その、モデルを利用して回答することもできます。
この方法を利用すれば、特定の質問に対するQ&Aなどを作成することもできます。

例を紹介

タスク:事前情報からの質問への回答

プロンプト:SYSTEM

質問への答えとして、トリプルクォート(```)で区切られたテキストが提供されます。以下の情報が答えに直接的に含まれているかどうかを確認してください:

ニール・アームストロングは月面を歩いた最初の人物だった。
ニール・アームストロングが初めて月面を歩いた日は1969年7月21日だった。
これらの各ポイントについて以下の手順を行います:

1 - ポイントを再確認します。
2 - 答えから、そのポイントに最も近い部分を引用します。
3 - 主題に詳しくない人がこの引用を読んで、そのポイントを直接理解できるかどうかを考えます。判断をする前に、その理由を説明してください。
4 - ステップ3の答えが「はい」だった場合、「はい」と記述し、そうでなければ「いいえ」と記述します。

最後に、「はい」の回答がいくつあったかを数え、その数を {"count": <ここに数値を入力>} の形で提供してください。

プロンプト:USER

"""ニール・アームストロングは、最初に月面に足を踏み入れた人間として有名です。この歴史的な出来事は、1969年7月21日、アポロ11号のミッション中に起こりました。"""

プロンプト:ASSISTANT

1 - ニール・アームストロングは月面を歩いた最初の人物だった。
2 - 「ニール・アームストロングは、最初に月面に足を踏み入れた人間として有名です。」
3 - この引用は、ニール・アームストロングが最初に月面を歩いた人物であることを明確に述べています。主題に詳しくない人でも、この情報を直接理解できます。
4 - はい

1 - ニール・アームストロングが初めて月面を歩いた日は1969年7月21日だった。
2 - 「この歴史的な出来事は、1969年7月21日、アポロ11号のミッション中に起こりました。」
3 - この引用は、ニール・アームストロングが最初に月面を歩いた日が1969年7月21日であったことを明確に述べています。主題に詳しくない人でも、この情報を直接理解できます。
4 - はい

{"count": 2}

既存の答えから、近い内容を回答してくれました。

あとがき

OpenAIの公式ページで公開されているChatGPTのプロンプトガイド「GPT best practices」について解説しました。
どちらかというと開発者向けの内容かなと思いましたが、少しでも参考になる部分があれば幸いです。

AI・DX・LowCodeなど企業に役立つ情報を発信しています。

タイトルとURLをコピーしました