# プロンプトの基礎

## 基本的なプロンプト

シンプルなプロンプトでも多くを達成できますが、結果の品質は提供する情報の量とそのクオリティによって異なります。プロンプトには、モデルに渡す*指示*や*質問*のような情報、*文脈*、*入力*、または*例*などの他の詳細を含めることができます。これらの要素を使用して、モデルをより適切に指示し、より良い結果を得ることができます。

まずは、シンプルなプロンプトの基本例について説明しましょう。

*プロンプト*
```
空が
```

*出力:*
```
青い

晴れた日には空は青く、曇った日には空は灰色や白色になることがあります。
```

おわかりのように、言語モデルは、文脈「"空が"」に合った文字列の続きを出力します。出力は予期しないものであり、私たちが達成したいタスクからはかけ離れている可能性があります。

この基本例は、より多くの文脈や指示を提供する必要性を強調するものでもあります。

少し改善してみましょう。

*プロンプト:*
```
以下の続きとなる文を完成させてください：

空が
```

*出力:*

```
青くとてもきれいです。
```

これでより良くなりましたか？ これで文を完成するようにモデルに指示したため、結果ははるかに良くなりました（「文を完成する」という指示に忠実に従っているため）。このように、タスクを実行するために最適なプロンプトを設計するアプローチを**プロンプトエンジニアリング**と呼びます。

上記の例は、LLM（Language Model）で実現できることの基本的な例です。今日のLLMは、テキスト要約から数学的推論、コード生成まで、あらゆる種類の高度なタスクを実行できます。

## プロンプトのフォーマット

上記で非常にシンプルなプロンプトを試しました。標準的なプロンプトのフォーマットは次のとおりです。

```
<質問>?
```

または

```
<指示>
```
 
これは、質問応答（QA）フォーマットにフォーマットすることができます。これは、多くのQAデータセットで標準的です。

```
Q: <質問>?
A: 
```

上記のようにプロンプトを行う場合、*zero-shot prompting*とも呼ばれます。つまり、どんな例やデモンストレーションもなく、直接モデルに応答を求めています。いくつかの大規模言語モデルには、zero-shot promptingを実行できる機能がありますが、それは対象のタスクの複雑さと知識に依存します。

上記の標準フォーマットを考えると、*few-shot prompting*と呼ばれる人気の高い効果的なプロンプティング技術があります。フューショットプロンプティングでは、サンプル（デモンストレーション）を提供します。フューショットプロンプティングは、以下のようにフォーマットすることができます。

```
<質問>?
<答え>

<質問>?
<答え>

<質問>?
<答え>

<質問>?

```

QAフォーマットバージョンは以下のようになります。

```
Q: <質問>?
A: <答え>

Q: <質問>?
A: <答え>

Q: <質問>?
A: <答え>

Q: <質問>?
A:
```

QAフォーマットを使用する必要はないことに注意してください。プロンプトフォーマットは、対象のタスクによって異なります。たとえば、簡単な分類タスクを実行し、以下のようにタスクを示すサンプルを提供することができます。

*プロンプト:*
```
これは素晴らしい! // ポジティブ
これは酷い! // ネガティブ
あの映画は最高だった! // ポジティブ
なんてひどい番組なんだ! //
```

*出力:*
```
ネガティブ
```

few-shot promptingにより、文脈に沿った学習が可能になります。言語モデルがタスクを学習するために、わずかなサンプルを提供することができます。