Einsteinプロンプトビルダーのテンプレートの各AIモデルの特徴

### はじめに
この記事では、Einsteinプロンプトビルダーで使用可能な各AIモデルの特徴を解説します。

### AIモデル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/b4eb5569-0e17-7731-9577-7a166754759d.png)

プロンプトテンプレートでは、生成に使用するAIモデルの種別を選択することができます。

現在、以下のモデルが選択可能です：
- Open AI GPT 3.5 Turbo
- Open AI GPT 3.5 Turbo 16k
- Open AI GPT 4
- Open AI GPT 4 32k
- Open AI GPT 4 Turbo
- Azure Open AI GPT 3.5 Turbo
- Azure Open AI GPT 3.5 Turbo 16k
- Azure Open AI GPT 4 Turbo
- Anthropic Claude 3 Haiku

それぞれの特徴を以下に解説します。

### 生成AIのトークンについて
生成AIでは指示（インストラクション）に記入できる文字数は無限ではありません。指示のコンテキストの長さは文字数ではなく、トークンで制限されてます。英語では１トークンが４文字を表せます。
日本語のトークン化は複雑で、1トークンが表す文字数は一定ではありません。一般的に:
- 漢字1文字は約1トークン
- ひらがな・カタカナは2〜3文字で1トークン
- 英数字は2〜4文字で1トークン

トークンは文字ではなく単語を表せます。
以下は「My Favorite color is Red.」から取ってきたトークンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/d1573107-d118-aa40-d43e-f59d655cccbd.png)

そして、こちらは上記の文章のそれぞれのトークンID。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2262/6476ce1f-f2f9-5bdd-280a-4660a38ba5db.png)

### テスト・調査仕方

#### 平均応答速度
平均応答速度は自分で実際のセールスメールのテンプレートの実行してから生成されたまでの時間を平均的には測ります。

#### ネット検索または情報取得
以下のテンプレートでテキストを生成することができるかどうか。
```text
以下のリンクから情報まとめてください
https://qiita.com/arufian/items/675a61af6c765d1977db
```

#### 生成されたテキスト
プロンプトビルダーで以下のテンプレートでメールの文章を生成させていただきます。
```text
あなたは新しい営業担当者として、以下の宛先に自己紹介メールを送る必要があります。
宛先名：{!$Input:Recipient.Name}
宛先の部署名：{!$Input:Recipient.Department_Title_Name__c}
あなたの名前：{!$Input:Sender.Name}

メールの構成以下の順番に作成してください。
1. 新しい営業担当者として自己紹介。挨拶文は省略して、純粋な自己紹介のみを記述してください。

3. 最後に「宜しくお願いします。」という挨拶を、改行を加えて記述してください。メールの中にこのような挨拶を必ず一回のみ記述してください。

4. 最後に自分の名前を記述してメールを締めくくります。

上記の指示に基づき、メールを作成してください。
```

### Open AI GPT系
GPT系のAIモデルはOpenAI社が開発されたLLMです。この系のモデルはChatGPTやDall-Eなどにも使われてます。

#### OpenAI GPT-3.5 Turbo
- 平均応答速度: 約5秒。
- 機能: 高速なテキスト生成を行い、自然言語理解と生成において広範囲なタスクをこなすことができます。
- 使用用途: チャットボット、自動テキスト生成、短文の内容生成などに使用されます。
- ネット検索または情報取得: 不可。
- 指示のテキスト限度: 約4096トークンです。
- 生成されたテキスト:  
   ```text
   新しい営業担当者のAlfian Busyroと申します。
   営業部に配属されました。業務を通じて、お力添えできるよう努めて参ります。

   宜しくお願いします。
   Alfian Busyro
    ```
####  OpenAI GPT-3.5 Turbo 16k
- 平均応答速度:  約6秒。
- 機能: 一般的なGPT-3.5 Turboの機能に加え、より長いコンテキストを扱う能力があります。
- 使用用途: 長い文書の生成や、複雑な会話における継続性が求められる場面での利用に適しています。
- ネット検索または情報取得: 不可。
- 指示のテキスト限度: 最大16000トークンまで扱えるため、より長いコンテキストの理解が可能です。
- 生成されたテキスト:  
   ```text
   高橋麻美様
   お世話になっております。私は新たに営業担当として配属されたAlfian Busyroと申します。
   
   この度は、高橋麻美様の部署で働くことを大変光栄に思っております。営業部長としてのご経験とご指導のもと、一層の成果を上げるために努力いたします。
   
   どうぞよろしくお願いいたします。
   Alfian Busyro
    ```
#### OpenAI GPT-4
- 平均応答速度: 約11秒。GPT-4はGPT-3.5よりもさらに精度が高いが、応答速度はやや遅いです。
- 機能: GPT-4はより広範な知識と複雑な推論能力を備えており、より難解な問題にも対応可能です。
- 使用用途: 教育、研究、専門的な文章生成、より複雑な対話システムなどに使用されます。
- ネット検索または情報取得: 不可。
- 指示のテキスト限度: 約4096トークン。
- 生成されたテキスト:  
   ```text
   営業部長 高橋 麻美 様
   
   新しい営業担当者のAlfian Busyroと申します。
   
   これからお手伝いさせていただくことになりました。
   
   宜しくお願いします。
   
   Alfian Busyro
    ```
#### OpenAI GPT-4 32k
- 平均応答速度: 約8.5秒。
- 機能: GPT-4の機能に加え、非常に長い文書やデータを処理する能力があります。
- 使用用途: 長文書の自動生成、大規模なデータセットの解析、長期にわたる対話などに適しています。
- ネット検索または情報取得: 不可。
- 指示のテキスト限度: 最大32000トークン。
- 生成されたテキスト:  
   ```text
   営業部長 高橋麻美様
   
   新しい営業担当者のAlfian Busyroと申します。
   これからお世話になりますので、どうぞよろしくお願いいたします。
   
   Alfian Busyro
    ```
#### OpenAI GPT-4 Turbo
- 平均応答速度: 約7.5~8秒。（他のGPT-4よりやや早い）
- 機能: 高速なテキスト生成と複雑な自然言語理解を行うことが可能です。
- 使用用途: 高速な対話応答、リアルタイムでのテキスト生成、効率的なデータ処理に利用されます。
- ネット検索または情報取得: 不可。
- 指示のテキスト限度: 約4096トークン。
- 生成されたテキスト:  
   ```text
   営業部長　高橋 麻美様
   
   新しい営業担当者として、この度はご挨拶申し上げます。私の名前はAlfian Busyroと申します。
   
   宜しくお願いします。
   
   Alfian Busyro
    ```

### プロンプトエンジニアリングのガイド
OpenAIが[プロンプトエンジニアリングのガイド](https://platform.openai.com/docs/guides/prompt-engineering)のガイドを公開しました。このガイドは、大規模言語モデル、特にGPT系のモデルを使って何かを作るときに、どうやってプロンプトを書くといいのか、ということを教えてくれます。このガイドは、EinsteinプロンプトテンプレートでGPT系のAIモデルを基にテンプレートを作成する際にも役立つと思います。

このガイドによると、プロンプトを作成するための重要なポイントは以下の通りです：

-  **具体的かつ明確な指示を与える**
具体例: 「2023年の日本の経済成長率について説明してください。」より、「2023年の日本のGDP成長率とそれに影響を与えた主要な要因について説明してください。」の方が具体的で明確です。

- **コンテキストを提供する**
プロンプトに関連する背景情報や目的を含めると、AIはより適切な応答を生成しやすくなります
具体例: 「AIによる医療診断のメリットについて説明してください。」より、「高齢化社会におけるAIによる医療診断のメリットについて、患者と医療従事者の観点から説明してください。」の方がコンテキストが明確です。

- **シンプルで簡潔な言葉を使う**
 複雑な言葉や長い文章は避け、シンプルで分かりやすい言葉を使うことで、AIは意図を正確に理解しやすくなります。
 具体例：
 **複雑**: 「新たに導入されたこの革新的な技術は、従来の方法と比較してどのように優れているかを教えてください。」
**シンプル**: 「この新技術が従来の方法より優れている点を教えてください。」

- **モデルに「考える」時間を与える**
モデルに思考プロセスを促すことで、より深い分析や論理的な結論を導き出させることができます。これは、単純な回答では不十分な複雑な質問に対して特に有効です。

- **外部ツールを使用する**
外部ツールやリソースを活用することで、モデルの能力を拡張し、特定のタスクをより正確に、効率的に実行できます。これにより、モデルの応用範囲が広がります。

- **変更を体系的にテストする**
プロンプトの変更やモデルの調整を行う際には、それが全体的なパフォーマンスにどのように影響するかを体系的に評価することが重要です。これにより、改善点を明確にし、より効果的なプロンプト設計を行うことができます。

### 戦略
上記の6つの重要点は、以下の戦略で詳しく実現できます。

#### 具体的かつ明確な指示を与える
 ```text
NG: Excelで数字を足し算する方法は？
OK: Excelで、A列に入力された複数のドル金額を自動で合計し、その合計をB1セルに表示するマクロの作成方法を教えてください。具体的には、VBAコードを使用した手順を知りたいです。
 ```
#### モデルにペルソナを採用させる
例：
```text
あなたは経験豊富なプログラマーであり、コーディングのヒントを提供する際には、例として実際のコードスニペットを提供し、それに加えて軽いジョークや遊び心のあるコメントを含めてください。
```
テキストの区切りを明確にすることで、モデルが入力のどの部分に注目すべきかを理解しやすくなり、タスクの処理精度が向上します。

#### 入力の異なる部分を明確に示すためにデリミタを使用する
例：
```text
以下の三重引用符```で囲まれた文章を、俳句形式で要約してください。俳句は5-7-5の音節構成でお願いします。

```文章
ここに長いテキストが入ります。これを基に俳句を作成してください。
```
テキストの区切りを明確にすることで、モデルが入力のどの部分に注目すべきかを理解しやすくなり、タスクの処理精度が向上します。

#### タスクを完了するために必要な手順を指定する
例：
```text
タスクを完了するために必要な手順を指定する

**指示**: 以下の手順に従って、ユーザーが提供したテキストを要約してください。
1. ユーザーが三重引用符```で提供したテキストを読んでください。
2. そのテキストを要約し、一文で表現してください。
3. 要約の前に"要約: "という接頭辞を付けてください。
```
タスクをステップごとに分けて指示することで、モデルは各ステップを明確に理解し、順序立ててタスクを処理することができます。


#### 例を提供する
例：
```text
ユーザーの質問に回答する際は、以下の例に倣って一貫したスタイルで回答してください。
例: ユーザーが「忍耐について教えてください」と尋ねた場合、具体的な例を交えつつ、教訓的な回答を提供してください。
```
具体的な例を提供することで、モデルは求められている回答スタイルや内容のレベルを理解しやすくなり、タスクの遂行が容易になります。

#### 出力の望ましい長さを指定する
例：
```text
以下のテキストを、約50語で要約してください。情報を可能な限り凝縮し、要点を的確に捉えた回答を目指してください。
<グラウンディングテキスト>。このテキストの要点を50語以内で要約してください。
```
出力の長さを指定することで、モデルは指定された制約内で情報を凝縮し、目的に沿った回答を生成するよう努めます。

#### モデルに参照テキストを使って回答させる
例：
```text
以下の文献に基づいて、気候変動における二酸化炭素排出量の影響について詳しく説明してください。
参照文献: [山田太郎、『気候変動の科学』、2021年、第3章]
```
このプロンプトでは、モデルに特定の参照文献を基にして情報を提供するよう指示しています。文献の明確な指定により、モデルは与えられたテキストから関連する内容を抽出し、質問に対する根拠のある回答を生成することが期待されます。これにより、回答の信頼性と正確性が向上します。

#### 参照テキストからの引用を含めてモデルに回答させる
例：
```text
IPCCの最新報告書を参照して、2020年代の気候変動における主要な発見とその影響について説明してください。特に、海面上昇に関する部分を引用して、その推定値と影響を解説してください。
参照文献: [国際気候変動パネル、『気候変動2021: 物理科学的基礎』、2021年]
```
このプロンプトでは、モデルがIPCC報告書から直接引用を行いながら回答するよう指示しています。これにより、モデルの回答に対する信頼性を高め、読者が提供された情報の出典を確認できるようになります。引用を含めることで、情報の正確性を検証しやすくなり、より信頼できる回答を生成することが期待されます。

#### 意図分類を使用してユーザークエリに最も関連する指示を特定する
例：
```text
次のクエリをカテゴリーに分類し、適切な回答を提供してください。
クエリ: "先月の請求書が予想よりも高かったのですが、なぜですか？" 
カテゴリー: [請求に関する問題]
```
このプロンプトでは、ユーザーの問い合わせを「請求に関する問題」というカテゴリーに明確に分類し、その上で具体的な回答を求めています。カテゴリー分類により、モデルは問い合わせの意図を正確に理解し、適切な対応を提案できます。

#### 対話アプリケーションで非常に長い会話が必要な場合、以前の対話を要約またはフィルタリングする
例：
```text
以下の対話の要点を要約し、次の質問に最適な形で回答してください。
これまでの対話: "お客様はインターネット接続に問題を抱えており、すでにルーターの再起動を試み、ケーブルの接続を確認しています。しかし、問題は解決していません。"
次の質問: "ルーターのモデル番号を教えてください。"」
```
ここでは、長い対話の要点をまとめてモデルに提供し、次のステップに進むための具体的な質問を行っています。これにより、モデルはコンテキストを正確に捉え、対話を効果的に進めることができます。

#### 長いドキュメントを部分的に要約し、再帰的に全体の要約を構築する
例：
```text
以下のテキストの章ごとの要約を提供し、その後で全体の要約を作成してください。
テキスト: "第1章: 気候変動の科学的根拠、第2章: 気候変動の影響、第3章: 緩和策と適応策。" 
全体の要約を作成する際には、各章の要約を参考にしてください。
```
このプロンプトでは、長いドキュメントを章ごとに分けて要約し、それらの要約を基にして全体の要約を作成するよう指示しています。各章の個別の要約から全体の概観を捉えることで、ドキュメント全体の理解を深めることができます。

#### モデルが自分の解決策を導き出す前に結論を急がないよう指示する
例：
```text
次の数学の問題について、解答に至るまでの過程を詳しく説明してください。
問題: "あるクラスには男子が15人、女子が10人います。クラス全体での男女比を求めてください。"
```
このプロンプトでは、モデルに対して、単に答えを提供するのではなく、問題解決の過程を詳細に説明するよう求めています。これにより、モデルは問題を段階的に分解し、各ステップでの思考を明らかにすることが期待されます。このアプローチは、モデルがより論理的で根拠のある回答を提供するのを助けます。

#### 内部モノローグやクエリのシーケンスを使用してモデルの推論プロセスを隠す
例：
```text
生徒が次の数学問題をどのように解くべきか、内部的な思考プロセスを通じてヒントを提供してください。
問題: "方程式 2x + 3 = 7 を解いてください。"
内部モノローグを用いて解決策を考え、最終的にはヒントのみを提供してください。
```
このプロンプトでは、モデルが問題解決の内部的な推論を行いつつ、そのプロセスをユーザーには直接示さずに、最終的なヒントのみを提供するよう求めています。これにより、生徒は自らの思考を促され、問題解決のプロセスを学習することができます。モデルの内部的な考察は、生徒への直接的な答えの提供を避けることで、より教育的な価値を提供します。

#### 以前のパスで何かを見逃していないかモデルに尋ねる
例：
```text
以下の文書を要約した回答について、初回の要約で見落としている重要なポイントがないか再検討してください。
文書: "気候変動による海面上昇の影響に関する最新の研究結果についての詳細なレポートです。" 
初回の要約後、見落としている可能性のあるポイントがないか確認し、必要に応じて追加情報を提供してください。
```
このプロンプトでは、モデルによる初回の文書要約の後、可能性として見落としている重要な情報がないかを確認するよう求めています。これにより、要約の品質を向上させ、文書の全体像をより正確に捉えることができます。このアプローチは、情報の抽出や要約タスクにおいて、より完全で正確な結果を得るために有効です。

#### 埋め込みベースの検索を使用して効率的な知識検索を実装する
例：
```text
以下のトピックについて最新の研究結果を基にして詳細な解説を提供してください。
トピック: "人工知能によるがん診断の進歩"
関連する最新の研究論文やレビュー記事から、重要な発見や技術の進化についての情報を引用して回答を構成してください。
```
このプロンプトでは、人工知能とがん診断に関する最新の研究を対象とし、埋め込みベースの検索を通じて関連する文書や記事を特定し、その内容を基にして詳細な解説を求めています。このアプローチにより、モデルはテキストの意味的な類似性を利用して効率的に情報を収集し、精度の高い回答を生成することが期待されます。

#### コード実行を使用してより正確な計算を行うか、外部APIを呼び出す
例：
```text
次の数式に基づいて計算を行い、結果を提供してください。
数式: "x^2 - 2x + 1 = 0"の解。
この計算にはPythonコードを使用してください。
また、計算過程も説明してください。
```
このプロンプトでは、特定の数学的問題を解決するために、モデルにPythonコードの実行を指示しています。この方法により、モデルは数値計算をより正確に行うことができ、計算過程の説明を通じて、ユーザーが解法を理解しやすくなります。

#### モデルに特定の機能へのアクセスを与える
例：
```text
ユーザーからの次のリクエストに応じて、指定されたデータベースから必要な情報を検索し、その結果を提供してください。
リクエスト: "最近5年間で発表された、機械学習を利用したがん治療に関する論文の一覧を教えてください。" 
データベースアクセス機能を使用し、検索結果を回答として整理してください。
```
このプロンプトでは、モデルが特定のデータベースにアクセスし、機械学習とがん治療に関する最近の論文を検索することを求めています。モデルに特定の機能へのアクセスを与えることで、単にテキストを生成するだけでなく、具体的なデータベース操作を実行し、必要な情報を効率的に収集して提供することが可能になります。

## 最後に
以上がGPT系のAIモデルの特徴です。次回はClaudeやAzure系のAIモデルの特徴を解説します。