ChatGPTへの効果的なプロンプトを考えてみた

# はじめに
ChatGPTは質問を驚くようなレベルの返答文を返してくれます。
ChatGPTは現在も学習中なので中立派や否定派の方も日々のプロンプトで学習にお手伝いください

# ChatGPTに聞いてみた
手始めに「敵」ChatGPTにプロンプトのテンプレートを聞いてみました(プログラミングについてのもの）
※質問文(プロンプト)は雑に作りました。ので省略。
```
ChatGPTへのプロンプトは、ある程度自由形式ですが、プログラミングに関する質問を投げる際の一般的なテンプレートや形式がいくつかあります。以下はその例です：

1. **概念の説明**:
   - 「[技術や概念]について説明してください。」
     - 例：「オブジェクト指向プログラミングでの継承について説明してください。」

2. **エラー解決**:
   - 「[動作]を試みたところ、[エラーメッセージ]が出ました。これは何のエラーで、どう修正すればよいですか？」
     - 例：「Pythonのリストで要素にアクセスしようとしたら、「IndexError: list index out of range」が出ました。これは何のエラーで、どう修正すればよいですか？」

3. **コードレビュー**:
   - 「この[プログラミング言語]のコードをレビューして、改善点はありますか？」
     - 例：「このPythonのコードをレビューして、改善点はありますか？」

4. **実装方法**:
   - 「[プログラミング言語]で[機能やアルゴリズム]を実装する方法は？」
     - 例：「Javaで二分探索アルゴリズムを実装する方法は？」

5. **ベストプラクティス**:
   - 「[技術や概念]でのベストプラクティスは何ですか？」
     - 例：「API設計のベストプラクティスは何ですか？」

6. **ライブラリやフレームワークの使用**:
   - 「[ライブラリやフレームワーク]を使って[タスク]を達成する方法は？」
     - 例：「TensorFlowを使ってニューラルネットワークを訓練する方法は？」

7. **比較**:
   - 「[技術A]と[技術B]の違いは何ですか？」
     - 例：「RESTとGraphQLの違いは何ですか？」

8. **リソース推薦**:
   - 「[技術や概念]を学ぶための良いリソースを教えてください。」
     - 例：「Web開発を学ぶための良いリソースを教えてください。」

これらは一例であり、質問のスタイルや内容は個々のニーズに合わせて調整できます。効果的なプロンプトは通常、何を達成したいのか、何が問題なのか、どのような背景情報があるのかを明確にするものです。それによって、より的確な回答を得られる可能性が高くなります。
```

# 様々なプロンプト
### 1.ChatGPTに役割を設定する
プロンプトに関連性を持たせることで返答の精度を上げる可能性が高まります
例えば
```
あなたは、Rubyに精通しているアプリケーションエンジニアです
ログイン処理の実装を作成してください
```
![screencapture-chat-openai-2023-09-03-10_47_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/3e36cac4-8c20-a9f7-74c9-871abc1c6e2e.png)



自分の場合は
```
あなたは偉大なPythonエンジニアです
○○を教えてください
or
○○エラーの解決方法を教えてください
```
などのように「偉大」という単語を使っています。返答をいただいたら特大の感謝のメッセージを送る対話をしています。

子持ちの方であれば、先生という設定を与えて子供からの質問を打ち込むと、子供が理解やすい説明文を作成することができると思います。

### 2.　目的や対象者を設定する
Pythonは、大きく分けてWebアプリか機械学習系の2つに用途があると思います
ChatGPTにPythonの学習ロードマップを聞く時に、「機械学習のエンジニアになる」という目的を設定します
```
私は機械学習エンジニアになりたいです。Pythonの機械学習を学ぶロードマップを作成してください
```
![screencapture-chat-openai-2023-09-03-11_11_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/d0679c16-94c4-d846-55e1-0e9952885266.png)

### 3.質問を繰り返す
1回の質問で良い回答を得られなかった場合に、具体的な質問をしていく方法です
例えば
```
1回目：Pythonは何ですか？
2回目：どういうアプリに使われていますか？
3回目：データ分析でどのように使われますか？
```
または
```
1回目：Pythonでログイン処理を作成してください
2回目：Djangoを使用してください
3回目：セキュリティを考慮してください
```
このように質問を繰り返していき、より欲しい回答を得られるようにすることができます

### 4.マークダウン形式で出力する
通常の場合、ChatGPTの返答はプレーンテキストです。
2.の例に挙げたロードマップなどはマークダウンで出力した方が見やすいと思います

### 5.ChatGPTにプロンプトを作成してもらう
ChatGPTに成果物(返答)を作成してもらう上で、その目的や対象者などを埋め込んだプロンプトを作成してもらうことも可能です
例えば
```
プロンプトを作成してください

・私の目的と対象が考慮されている必要があります
・プロンプトの作成に必要な質問をしてください。十分な情報が得られるまで質問をしてください
```
![スクリーンショット 2023-09-04 13.35.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/3f1bd9ab-9892-fae6-9e0f-981d8277ecdf.png)
このような返答が来るので、会話を続けていくとChatGPTがプロンプトを作成してくれると思います。
作成されたプロンプトはユーザの意図を理解していると思うので、良い回答が得られると思います。

### 6.個性を設定する
ChatGPTに性格やキャラクターを設定することが可能です
例えば
![screencapture-chat-openai-2023-09-04-13_48_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/12e69ca7-97df-9f0e-a19f-21e6fa7c4079.png)
このような回答が得られたので、今度は「ユーモア」を交えて回答してもらいます
```
ユーモアを交えて教えてください
```
![screencapture-chat-openai-2023-09-04-13_53_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603047/90dfdefb-9849-8f9c-9e41-b470744c33e4.png)

### 7.COTプロンプト
COT(Chain of Thought：思考の連鎖)プロンプトという言語モデルを効率的に使用するためのプロンプト設計手法があります。一連の関連する質問や命令を順序立てて命令（プロンプト)することで、ChatGPTがより精度の高い回答を得られると思います。

一般的なプロンプトでは、単一の質問または命令がモデルに与えられ、それに対する単一の回答が生成されます。しかし、COTプロンプトでは、最初のプロンプトに続いて関連するいくつかの追加のプロンプトが続けて与えられます。これにより、モデルは最初のプロンプトに対する回答を元に、次のプロンプトに対するより詳細な回答を得られると思います。

例えば、Pythonの実行時にエラーが発生した場合、単に「このエラーを解決してください」というプロンプトではなく、以下のような一連のプロンプトを与えることができます。

```
プロンプト1: このPythonスクリプトは何を目的としていますか？
モデルの回答: このスクリプトは、CSVファイルからデータを読み込んで、それを元にグラフを生成することが目的です。

プロンプト2: 何のエラーメッセージが出ていますか？
モデルの回答: FileNotFoundErrorが表示されています。

プロンプト3: FileNotFoundErrorは一般的にどのような状況で発生しますか？
モデルの回答: このエラーは、指定したファイルが存在しないか、またはスクリプトがそのファイルにアクセスできない状況で発生します。

プロンプト4: このエラーを解消するためにどのような手順を踏むべきですか？
モデルの回答: 最初に、スクリプトが探しているファイルのパスが正しいか確認してください。次に、そのファイルが実際に存在する場所にあるか確認してください。最後に、ファイルへの適切なアクセス権が与えられているか確認することが重要です。
```

このように、各プロンプトが前の回答に基づいているため、モデルはより総合的な理解と詳細な回答を生成する可能性が高まります。この手法は、特に複雑な問題や多層的な調査において、有用な場合があります。

# おわりに
最後のCOTプロンプトはInstagramを見ていた時に海外のITメディアの投稿で発見しました。
SNSでインフルエンサーや情報商材屋以外に、旬な話題で優良な情報があるんだなと思いました。
Instagramだと画像になるので情報は少ないですが、TicTokだと動画なので情報が多く、分かりやすい説明ができるので、より良いアカウントがあるのか気になったのでウォッチしてみます。

また、noteの深津さんの深津式のプロンプトが有名なので引用しつつ掲載しておきます
```
# 命令書:
あなたは{プロの編集者}です。
以下の制約条件と入力文をもとに{最高の要約}を出力してください。
# 制約条件:
•文字数は300文字程度。
•小学生にもわかりやすく。
•重要なキーワードを取り残さない。
•文章を簡潔に。
# 入力文：
{入力文章}
# 出力文：
```
### ポイント
①ChatGPTの役割を明確にする
②入力文から出力文を作ることを明確にする
③何を出力するのか明確にする
④マークアップ言語を用いて、本文ではない箇所を明確にする
⑤命令を箇条書きで明確にする
⑥条件を追加することでChatGPTからの出力をコントロールする

👇コチラから引用させていただきました

https://bocek.co.jp/media/exercise/chatgpt/3713/

深津さんは堀江貴文さんのYouTubeに出られていました


https://youtu.be/SbMyKR9OoII?si=QlvQ_5NLNYoFzDWv

https://youtu.be/3jlIx0V-Gl8?si=rGf-k-OePAgO4uIV

https://youtu.be/e5-OPMKkhIY?si=-3m0_1occLFc9Fp3