Prompt Engineering_1 プロンプトの基礎


https://www.promptingguide.ai/jp

この記事は上記のサイトを読んで自分のためにまとめた記事です。正しい情報は上のサイトにアクセスして確かめてくださいませ。

# はじめに
私はchatGPTが大好きです。
今は悩み相談に使っているだけなのですが、彼女の知能を最大限に利用するためによりよい指示を出せる様、上記サイトを訪れました。
chatGPTを有能な秘書に作り上げるためのprompting techniqueをまとめます。

### chatGPTを使っていた時に思ったことmemo
chatGPTを使っていて、意図していないのに送信してしまうこと、改行したい時などがありますが、変換　→　確定時にshiftを押しながら確定すればOKです！

# 前提
元サイトのすべての例はOpenAIの　text-davinci-003でテストされ、temperature = 0.7,top-p = 1を使用しているとのこと。
### 用語についてmemo
**LMs** 言語モデル
**LLMs** 大規模な言語モデル
**タスク**　課題
**プロンプト** 指示
**フォーマット**　書式
**サンプル**　実例
**デモンストレーション**　実演
**モデル**　雛形


# LLMのパラメータ設定について
パラメータによって異なる結果が出る。
### temperature
値が低いほど、最も確率が高い回答が常に選ばれる。値を上げると、ランダム性が増す。
例）事実に基づくQAなどでは低くする。詩の生成やクリエイティブな回答を得たい時は上げるなど。

### Top-p
応答を生成する際の決定性をコントロールする。正確で事実に基づいた回答を求めるときは値を低くする。より多様な回答を求めるときは、高くする。

※ 一般的には両方ではなくどちらかを変更するのがおすすめ、またバージョンによって結果が異なる。

# プロンプトの基礎
プロンプトには、モデルに渡す指示や質問の様な情報、文脈、入力、例などの情報を含めることができる。

# プロンプトの要素
プロンプトを構成する特定の要素がある。
**命令**
モデルに実行して欲しい特定のタスク、または命令のこと
**文脈**
外部情報や追加の文脈が含まれる場合があり、文脈を追加することでモデルをより良い応答に導くことができる
**入力データ**
応答を見つけたい入力または質問
**出力指示子**
出力のタイプや形式を示す

これらはすべてのコンポーネントが必要なわけではなく、フォーマットはタスクに依存します。

# プロンプトの設計に関する一般的なヒント
設計する際に注意すること
### 1.簡単に始める
シンプルなプロンプトからはじめて、結果を向上させるために要素や文脈を追加していく。ガイドには、具体性、簡潔さ、明確さがより良い結果をもたらす。
多くの異なるサブタスクを含む大きなタスクがある場合は、タスクをよりシンプルなサブタスクに分解して結果が改善んされるにつれて徐々に構築できる。また、こうすることでプロンプトの設計プロセスが複雑になりすぎるのを避けられる。
### 2.指示
「書く」「分類する」「要約する」「翻訳する」「並べ替える」などのコマンドを使用して、モデルに達成したいことを指示することで、シンプルなタスクに対する効果的なプロンプトを設計することができる。
最適な結果を得るために、異なるキーワード、文脈、データを使用した異なる指示を試して、特定のユースケースやタスクに最適なものを見つける必要がある。
また、指示はプロンプトの最初に配置し、指示と文脈を区切るために「＃＃＃」のような明確な区切り記号を使用することが推奨されている。
![スクリーンショット 2023-05-06 15.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/413d47cc-aa7d-8c20-a32b-9b82b172177a.png)
### 3.特異性
モデルに実行して欲しい指示やタスクについて、具体的に説明する方が良い。プロンプトが詳細で具体的であるほど、結果がよくなる。
特定の出力やスタイルを望む場合は特に重要。
よいフォーマットと詳細なプロンプトを用意することが重要。
プロンプトの長さには制限があるため、設計時には長さに注意する。余計な詳細を含めることは良いアプローチではない。
![スクリーンショット 2023-05-06 15.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/270ede06-90c6-cedd-904c-ab69cf3c645b.png)
（上記、6回目で犬種が出ました！ただ、日本語でコンマ区切りにはなっていない）
### 4.不正確さを避ける
具体的で直接的である方が良い結果を得られる。
ここでの類似性は、効果的なコミュニケーションと非常に類似している（直接的であるほど、効果的にメッセージが伝わる）
例
    ![スクリーンショット 2023-05-06 15.53.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/65ecb76e-70cb-e0cd-41c4-f194957ef7ce.png)

上記よりもより具体的かつ簡潔に、下記の様なプロンプトの方が良いかもしれない。
![スクリーンショット 2023-05-06 15.55.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/0fe22777-5e06-fd59-fb11-669c75266451.png)
### 5.するかしないか？
プロンプトを設計する際、「しないこと」をいうのではなく、「すること」をいうこと。これでより具体的になり、モデルから良い回答を得られる。

# 基本的なプロンプト
指示が曖昧だと予期しないものや、達成したいタスクからかけ離れた結果を出力することがある。
たとえば　「犬は」だけを入力するよりも「以下に続く文章を完成させてください：　犬は」とする方がより望んだ結果になる。
このように、より良い結果を得るためにプロンプトを設計するアプローチをプロンプトエンジニアリングという。
![スクリーンショット 2023-05-06 14.11.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/39c53da1-818b-f539-7969-5c149326ea30.png)

## zero-shot prompting
だいたい質問は以下の通り
    ほにゃららですか？（質問）
または
    なになにして（指示）
QAフォーマットで問うことが標準的
    Q:ほにゃららですか？
    A:
![スクリーンショット 2023-05-06 14.49.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/65f78357-ebec-5d76-faee-2381b918dd5a.png)

## few-shot prompting
サンプル（デモンストレーション）を提供すること
    ほにゃららですか？（質問）
    ほにゃららです（こたえ）
    ほにゃららではないですか？（質問）
    ほにゃららではないです（こたえ）
QAフォーマットは以下です。
    Q:ほにゃららですか？（質問）
    A:ほにゃららです（こたえ）
    Q:ほにゃららではないですか？（質問）
    A:ほにゃららではないです（こたえ）
![スクリーンショット 2023-05-06 14.59.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/595823b8-5988-3b71-0c41-db607d2be72a.png)

簡単なサンプルを提示すれば、QAフォーマットは必要ない。
![スクリーンショット 2023-05-06 15.02.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14960/16725699-849d-bf87-e9bf-e2ed848eca6c.png)

few-shot promptingにより、文脈に沿った学習が可能になる。
**さらに、、、**
1つの例（1ショット）を提供するだけでモデルが課題を実行する方法を学習しているが、より困難なタスクでは、デモを増やして実験するとよい。（3ショット、5ショット、10ショットなど）