【ChatGPT】プロンプトパターンのスニペット


# 概要

- chatgptに関する個人的に良く用いるプロンプトパターンのスニペットを記述
- 応用的な使い方と便利な外部ツールとの連携について紹介

# A. 【基本】


## 1. ロール・制約条件を与える

### テンプレ

```
あなたは、プロの〇〇〇です。
以下の入力文と制約条件を元に、【出力内容】を出力してください。

# 制約条件：
1. 【満たすべき制約条件1】
2. 【満たすべき制約条件2】

# 入力：
・【入力文章】

# 出力：
```

### 例

![image](https://user-images.githubusercontent.com/60212785/230727086-57457d78-3b3d-42ea-a5b5-7967d0557d74.png)

## 2. 要約タスク

### テンプレ

```
以下のテキストを要約し、各項目20文字程度の箇条書きでまとめてください。

テキスト: """【テキスト】"""
```

### 例

![image](https://user-images.githubusercontent.com/60212785/230727634-692a6a5c-0467-4ad6-b728-d7df5b11cebd.png)


## 3. [コード生成](https://github.com/dair-ai/Prompt-Engineering-Guide/blob/main/guides/prompts-basic-usage.md)

### テンプレ

```
/*
【実装して欲しい内容】
*/
```

### 例

![image](https://user-images.githubusercontent.com/60212785/230727344-8e224def-5c7d-437c-b457-7ae3791d37cd.png)


## 4. [コードレビュー](https://zenn.dev/ryome/articles/c1f229822efb96#%E8%A6%81%E7%B4%84%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88)

### テンプレ

```
ロール：
あなたはプロの〇〇として振舞ってください。

あなたに解決してほしい問題：
以下の【内容】を【直してほしい内容】に直してください。

【内容】

タスク1：
あなたは【プロの〇〇】として、最適なプログラムを書いてください。

タスク2：
あなたは【プロの〇〇】として、そのプログラムに対してレビューを行ってください。
```
### 例

```python
ロール：
あなたはプロのpythonエンジニアとして振舞ってください。

あなたに解決してほしい問題：
以下の関数と挙動が一致する関数を、再帰とlist内包表記を用いてシンプルに書き直してください。

def fibonacci(n):
    if n <= 0:
        return []
    elif n == 1:
        return [0]
    elif n == 2:
        return [0, 1]
    else:
        fib = [0, 1]
        for i in range(2, n):
            fib.append(fib[i-1] + fib[i-2])
        return fib

タスク1：
あなたはプロのエンジニアとして、最適なプログラムを書いてください。

タスク2：
あなたはプロのエンジニアとして、そのプログラムに対してレビューを行ってください。
```

![image](https://user-images.githubusercontent.com/60212785/230729122-044df932-70f0-4456-bdeb-3de2a5ed2173.png)


# B. 【応用】


## 1. Zero-shot プロンプト

- Zero-shotプロンプトはGPTに対して、直接指示を与えるタスクです。


![image](https://user-images.githubusercontent.com/60212785/230723513-7b44edf9-237a-4875-a3fc-31ae3654b7fc.png)




## 2. Few-shot プロンプト

### テンプレ

- あらかじめ答え方の例を与えることで、タスクの実行方法を学習させる手法
    - 答え方のフォーマットを揃えて、例を複数(1つ以上・few-shot)提供することでGPTがより正確に答えを出します。

```
〇〇〇してください
Q: 【問題】
A: 【問題の答え】

Q: 【問題】
```


### 例

![image](https://user-images.githubusercontent.com/60212785/230724222-bb1a02c0-97fb-45ec-bd34-e1fd5c651520.png)

## 3. Chain-of-Thought ([CoT](https://arxiv.org/abs/2201.11903)) プロンプト


- few-shotでは、【問題】と【答え】を対にして渡したが、CoTでは【問題】に対して、**【問題の解法 ＋ 答え】** を対にする。
    - GPTに思考経路を与える手法

### テンプレ

```
〇〇〇してください
Q: 【問題】
A: 【問題解法 + 答え】

Q: 【問題】
```

### 例

![image](https://user-images.githubusercontent.com/60212785/230725381-9819f6ed-99d1-42bd-85a7-f3a7f9a7333d.png)


## 4. Zero-shot / CoT プロンプト

### テンプレ

```
ステップバイステップで考えて
```

- 通常プロンプトに+αで、`ステップバイステップで考えよう`という一文を追加することにより、モデルの性能を上げる[手法](https://arxiv.org/abs/2205.11916)です。

### 例

- 以下の例の場合、リンゴの個数は3+2+8=13個が正解ですが、リンゴの個数を1個と間違えています。

![image](https://user-images.githubusercontent.com/60212785/230720116-d60d42d6-2fa4-4520-9f01-f76922259b03.png)


- このプロンプトの最後の行に`ステップバイステップで考えよう`という文を追加します。
    - 推論の手順を項目で並べ、リンゴの個数計算に成功します。

![image](https://user-images.githubusercontent.com/60212785/230720349-d6547595-d04b-4fe0-9a9e-99c6c50d823a.png)


- [参考](https://twitter.com/forestone05/status/1639598446662524928)





# C. 【外部ツールとの連携】

## 【自動翻訳】Google chrome拡張ツール`Voice in`との連携

- chrome拡張機能 [Voice in](https://chrome.google.com/webstore/detail/voice-in-speech-to-text-d/pjnefijmagpdjfhhkpljicbbpicelgko?hl=ja) とchatgptを組み合わせて用いる

### テンプレ

```
以降のスレッドで以下のルールを設けます。
・ スレッドに投下された文字列の先頭が「Start GPT」という単語で始まっている場合、以下のフォーマットでテキスト出力を行ってください。

[原文]
入力された元の文章を表示 (ただし、先頭についている「Start GPT」のキーワードは除く。また元の文章は音声の文字起こしなので、明らかに文脈からそれている内容は補間・修正を行って表示)

[訳文]
上の[原文]を英訳した内容を表示
```

### 例

![Videotogif](https://user-images.githubusercontent.com/60212785/230729743-80a5a6a3-b3cc-4e06-8517-065751ef53af.gif)


# D. 参考

- [プロンプトエンジニアリング](https://chatgpt-lab.com/n/na4b6676093b1#41837569-dcda-4ba1-82b2-6b51281c0527)
- [プロンプトパターン](https://zenn.dev/ryome/articles/c1f229822efb96#%E8%A6%81%E7%B4%84%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88)
- [チートシート](https://blog.finxter.com/wp-content/uploads/2023/03/Finxter_Prompting_OpenAI-2.pdf)