ChatGPTを最大限に活用するためのプロンプトエンジニアリング入門

## プロンプトエンジニアリングとは
プロンプトエンジニアリングは、LLMを活用して最適なアウトプットを得るために、プロンプト（入力文）を工夫して設計することを指します。

## LLM（Large Language Model）とは
LLMは、大規模自然言語処理タスクを行うAIモデルの総称です。具体的な例としては、OpenAIの「GPT-3」「GPT-4」、Metaの「LLaMA」、Googleの「PaLM」、Amazonの「AlexaTM」などが挙げられます。LLMは人間の言語をAIに学習させ、さまざまなタスクを自律的に処理できるようになります。感情分析や文章の生成、翻訳などの多様な能力を持っています。

## 自然言語とは
人間が日常生活でコミュニケーションを行うために使用する言語のことを指します。日本語や英語はその代表例ですが、世界には多くの自然言語が存在します。ちなみに自然言語処理（NLP）は、これらの言語を扱うコンピューターサイエンスや人工知能の分野です。

## プロンプト設計のポイント
1. 具体的な指示を出す
曖昧な表現で指示を出すと、意図しない結果が返ってくることがあります。具体的な指示を出し、解釈の違いでずれが生じないように心がけましょう。

2. AIが理解しやすい構成にする
指示や命令文はプロンプトの最初に配置し、区切り記号（例：#）を使って指示と文脈を分けると、AIが理解しやすくなります。

3. フォーマットに沿ってプロンプトを作成する
[プロンプトエンジニアリングガイド](https://www.promptingguide.ai/jp/introduction/tips) でも推奨されてますが、プロンプト設計では、「命令・文脈・入力・出力」の順で構成することが望ましいです。特に文脈の役割は、命令・指示の曖昧さを解消し、より具体的なプロンプトにするために重要です。

4. 日本独自の文化や用語に関しては日本語の方が精度が高い場合がある
基本的には英語での質問の方が回答の質が高いことが多いですが、日本独自の情報や文化に関する質問の場合は、日本語での質問の方が適切です。

## 例：プロンプトの作成
プロンプトの各セクションには区切り文字を使い、次のように記述します。
  ```
  ## 指示
  以下のテキストを英語に翻訳してください。
  入力: "こんにちは"
  出力:
  ```
↓
![スクリーンショット 2023-05-06 13.39.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/e71de5f9-6943-6c74-6523-a26e77fac915.png)



## AIが理解しやすいフォーマット例
入力するフォーマットもAIが理解しやすいフォーマットを活用することで、より精度の高い回答が得られやすくなります。
  ```
  命令・指示: モデルに実行してほしいタスクや命令を与える
  文脈（コンテキスト）: 命令や指示に対する補足情報や背景情報を提供して、より適切な回答を得れるように導くための文章
  入力: 命令に関連する情報や制約など
  出力: どのような回答を求めているのかフォーマットや型式などを指定
  ```

# プロンプトの要素を繰り返し指定する
一度のプロンプトで複数のタスクを実行したい場合、それぞれのタスクの要素を繰り返し指定することで対応できます。

例えば、複数の文を翻訳したい場合、以下のようにプロンプトを設計できます。
```
## 指示
以下のテキストを英語語に翻訳してください。
入力1: "こんにちは"
入力2: "あなたの好きな食べ物はなんですか？"
出力: マークダウン形式にしてください
```
↓
![スクリーンショット 2023-05-06 13.32.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574875/a314473a-fe3a-bfc3-f9a2-4e7379e66332.png)


複数のタスクを一度に行う場合でも、各タスクの指示が具体的であることが重要です。これにより、AIがそれぞれのタスクの意図を正確に理解し、期待通りの結果を返す確率が上がります。

## プロンプトの改善と評価
プロンプトを改善するためには、実際にAIに質問して返ってきた結果を評価し、問題点を特定して改善することが重要です。

問題点を特定する際には、以下の観点で評価を行ってみましょう。

- 命令・指示が具体的であるか
- 文脈（コンテキスト）が適切であるか
- 入力情報が適切であるか
- 出力結果のフォーマットや型式が期待通りであるか

問題点を特定したら、プロンプトの各要素を改善し、再度AIに質問して結果を評価することで、プロンプトの質を向上させることができます。

## より効果的なプロンプトの例示
問題解決型の質問をする場合、具体的な状況や問題について説明することで、より適切な解決策を得ることができます。
```
例:「スマートフォンのバッテリーがすぐに切れてしまいます。どのような対策があるか教えてください。」
```

複数の選択肢から最適なものを選ぶ場合、選択肢とそれぞれの特徴や条件を明確に提示することで、適切な選択肢を提案できる可能性が高まります。
```
例:「次の3つのスマートフォンの中から、バッテリー寿命が最も長いものを教えてください。1. iPhone 13, 2. Samsung Galaxy S22, 3. Google Pixel 6」
  ```

さまざまな情報源から情報を取得する場合、具体的な情報源や、どのような情報が欲しいかを指定することで、より適切な情報を得ることができます。
```
例:「2020年のアカデミー賞で最優秀作品賞を受賞した映画とその監督を教えてください。」
```

## 誤解を避けるための工夫
質問や指示が複数の解釈が可能な場合、AIはどの解釈が正しいのか判断できないことがあります。そのため、誤解を避けるために、質問や指示を明確にすることが重要です。

質問や指示に「〜かもしれない」といった曖昧な表現を避け、できるだけ具体的で明確な言葉を使いましょう。これにより、AIが正確に理解し、期待通りの結果を返す確率が上がります。

文脈によって意味が異なる言葉がある場合、その言葉の意味を明確にすることで、AIが適切な回答を返す確率が上がります。
```
例:「プロジェクトマネジメントにおけるリーダーシップの重要性について説明してください。」
```

AIと効果的にコミュニケーションするためには、プロンプトの工夫や質問の仕方に注意を払うことが重要です。ここで、更にいくつかのテクニックをご紹介します。

## 分割して質問する
複雑な質問や複数の質問が含まれる場合、それらを分割して一つずつ質問することで、AIが適切に回答しやすくなります。

```
例:「プロジェクトマネジメントにおけるリーダーシップの重要性とその実践方法について説明してください。」
```
↓
```
分割例1:「プロジェクトマネジメントにおけるリーダーシップの重要性について説明してください。」
分割例2:「プロジェクトマネジメントでリーダーシップを実践する方法を教えてください。」
```

# 制限や条件を明確にする
質問や指示に制限や条件を明確に設定することで、AIが期待通りの結果を返す確率が上がります。
```
例:「子供向けのSF映画を教えてください。ただし、暴力的なシーンが少なく、ファミリーで楽しめるものを探しています。」
```

## フィードバックを活用する
AIが期待通りの結果を返さなかった場合、フィードバックを与えて改善点を明確にすることで、次回の質問でより良い回答が得られることがあります。
```
例:「先ほどの回答では、私が求めている情報が得られませんでした。もう少し具体的な解決策を提案していただけますか？」
```

AIとのコミュニケーションを向上させるためには、明確で具体的な質問や指示を心がけることが大切です。また、適切なフィードバックを与えることで、AIの回答の質も向上し、より有益な情報が得られるようになります。

## 多段階推論（ステップバイステップ）の活用
より複雑な推論を必要とする質問や問題解決に対して、多段階推論（ステップバイステップ）を活用するのもおすすめです。

具体的には、**「ステップバイステップで考えてください」** と指示を加えることで、AIがより洗練された回答を導き出すことができます。

### 多段階推論のプロセス
多段階推論のプロセスは以下の通りです。

1. 問題を分析し、現状把握を行い、コンテキストなどを含む情報を整理する
2. 原因や課題を特定する
3. 特定された情報をもとに、質問に対する最も適切な回答を生成する

ただし、多段階推論は以下のケースでは適さない場合があります。
- **シンプルな質問の場合**
  - 多段階推論で余計な情報が含まれてしまうため、逆にAIが答えを導き出すのを邪魔してしまうことがあります。
- **曖昧な質問の場合**
  - 曖昧な表現で指示をした際、多段階推論が違う方向に進んでしまい、全く違う結論になってしまう可能性があります。


## まとめ
プロンプトエンジニアリングは、AIモデルに対して最適なアウトプットを出力させるために重要なスキルです。具体的な指示を出し、曖昧な表現を避けることが大切です。

また、プロンプトの構成要素を適切に設計し、複数のタスクを一度に行う場合でも、各タスクの指示が具体的であることが重要です。プロンプトの改善と評価を繰り返すことで、AIとのコミュニケーションが円滑になり、期待通りの答えを得られる確率が上がります。

とにかくAIには自分が求める回答のゴールまでの道筋をしっかりと敷く整理をすること。

ChatGPTは推論を用いて答えを導くことが多いため、解釈の余地が生じる可能性があります。
できる限り解釈の余地を減らすように意識して、自分の求める回答のゴールまでの道筋を明確にして、ゴールまでの道筋を正確に絞っていくことが重要だと感じました。

## 最後に
本記事は私がインプットしてまとめた内容をChatGPTに添削していただきながら書いた内容になっております。
これからプロンプトエンジニアリングに入門される方のお役に少しでも立てれれば幸いです！