# プロンプトの設計に関する一般的なヒント

プロンプトを設計する際には以下のことに注意するとよいでしょう。

### 簡単に始める
プロンプトの設計を始める際には、プロンプトの設計が、最適な結果を得るために多くの実験を必要とする反復的なプロセスであることを念頭に置く必要があります。OpenAIやCohereのようなシンプルなプレイグラウンドから始めると良いでしょう。

シンプルなプロンプトから始め、結果を向上させるために要素や文脈を追加していくことができます。そのためにはプロンプトのバージョン管理が重要です。このガイドを読むと、具体性、簡潔さ、明確さがより良い結果をもたらすことがわかるでしょう。

多くの異なるサブタスクを含む大きなタスクがある場合、タスクをよりシンプルなサブタスクに分解し、結果が改善されるにつれて徐々に構築していくことができます。こうすることで、プロンプトの設計プロセスが複雑になりすぎるのを避けられます。

### 指示
「書く」「分類する」「要約する」「翻訳する」「並べ替える」などのコマンドを使用して、モデルに達成したいことを指示することで、さまざまなシンプルなタスクに対する効果的なプロンプトを設計することができます。

最適な結果を得るためには、異なるキーワード、文脈、データを使用した異なる指示を試して、特定のユースケースやタスクに最適なものを見つける必要があります。通常、タスクに関連した文脈が具体的であるほど、結果が良くなります。次のガイドで、サンプリングやより多くの文脈を追加することの重要性について触れます。

また、指示はプロンプトの最初に配置し、指示と文脈を区切るために「###」のような明確な区切り記号を使用することが推奨されています。

例えば：

*プロンプト:*
```
### 指示 ###
以下のテキストをスペイン語に翻訳してください。

Text: "hello!"
```

*出力:*
```
¡Hola!
```
### 特異性
モデルに実行してほしい指示やタスクについて、非常に具体的に説明してください。プロンプトが詳細で具体的であるほど、結果はよくなります。特定の出力やスタイルを望む場合には、特に重要です。より良い結果をもたらすトークンやキーワードはありません。良いフォーマットと詳細なプロンプトを用意することが重要です。実際、プロンプトに例を提供することは、特定のフォーマットで出力を得るために非常に効果的です。

プロンプトの長さには制限があるため、プロンプトの設計時にはその長さを念頭に置かねばなりません。どの程度具体的かつ詳細にするかを考える必要があります。余計な詳細を含めることは必ずしも良いアプローチではありません。詳細は関連性があり、課題に貢献する必要があります。これは多くの実験と反復を必要とすることです。アプリケーションに最適なプロンプトを最適化するために、多くの実験と反復をお勧めします。

例えば、次のテキストから特定の場所の名前を抽出する簡単なプロンプトを試してみましょう。

*プロンプト：*
```
以下のテキストから場所の名前を抽出してください。

望ましいフォーマット：
Place: <comma_separated_list_of_places>

入力：「これらの進展は研究者にとって励みになっていますが、まだ多くのことが謎のままです。リスボンのシャンパリマウド・センター・フォー・ジ・アンノウンの神経免疫学者であるヘンリーク・ヴェイガ・フェルナンデスは、「脳と周辺部で見られる効果の間にはしばしばブラックボックスがあります」「治療的な文脈で使用したい場合、実際には作用機序を理解する必要があります。」」

```

*出力：*
```
Place: リスボンのシャンパリマウド・センター・フォー・ジ・アンノウン
```

入力テキストは、[このNature記事](https://www.nature.com/articles/d41586-023-00509-z)から取得されています。

### 不正確さを避ける

詳細に記述したりフォーマットを改善したりする上記のようなヒントを考慮すると、プロンプトを巧みに操ろうとしたり、不正確な説明を作り出してしまったりするといった罠へ陥りやすくなります。具体的で直接的である方が良い結果が得られます。ここでの類似性は、効果的なコミュニケーションと非常に類似しています--直接的であるほど、効果的にメッセージが伝わります。

例えば、プロンプトエンジニアリングの概念を学びたいと思うかもしれません。

```
プロンプトエンジニアリングの概念を説明してください。説明は短く、数文で、あまり詳しくしないでください。
```

上記のプロンプトから、どのように文を数え、スタイルを指定するかは明確ではありません。上記のプロンプトでも、まだ良い回答を得ることができますが、非常に具体的かつ簡潔で、的を射たプロンプトの方が良いでしょう。以下のようなものです。

```
高校生に対して、プロンプトエンジニアリングの概念を2〜3文で説明してください。
```

### するかしないか？
プロンプトを設計する際のもう一つの一般的なヒントは、「しないこと」を言わず、「すること」を言うことです。これにより、より具体的になり、モデルから良い回答を得るための詳細に焦点が当てられます。

以下は、映画の推薦チャットボットが、私が指示を書いた方法のために、正確にやりたくないことに失敗した例です--何をしないでくださいということに焦点を当てています。

*プロンプト：*
```
以下は、顧客に映画を推薦するエージェントです。興味を尋ねないで、個人情報を尋ねないでください。

顧客：私の興味に基づいて映画をお勧めください。
エージェント：
```

*出力：*
```
はい、あなたの興味に基づいて映画をお勧めできます。アクション、コメディ、ロマンス、それともその他の何か、どのような映画がお好きですか？
```

以下は改善されたプロンプトです：

*プロンプト：*
```
以下は、顧客に映画を推薦するエージェントです。エージェントは、上位のグローバルトレンド映画から映画をお勧めする責任があります。ユーザーの好みを尋ねることを避け、個人情報を尋ねることを避ける必要があります。エージェントがおすすめ映画を持っていない場合は、「申し訳ありませんが、今日お勧めする映画が見つかりませんでした。」と返答する必要があります。

顧客：私の興味に基づいて映画をお勧めください。
エージェント：
```

*出力：*
```
申し訳ありませんが、あなたの興味に関する情報はありません。しかし、ここに今一番トレンディーな映画のリストがあります：[リストの映画]。お好きなものが見つかることを願っています！
```

上記の例のいくつかは、['Best practices for prompt engineering with OpenAI API'](https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api)から採用されました。