RaRとは？ -プロンプトエンジニアリングの基礎-


#
ANGEL Calendar企画8日目の記事です。（2024/9/8）
記事一覧は下記のOrganizationアカウントの一覧をチェックしてみてください :sunny:
[2024-ANGEL-Dojo Organization](https://qiita.com/organizations/2024-angel-dojo)

https://qiita.com/organizations/2024-angel-dojo

#### この記事で言いたいことは、

* 普段やりがちなふんわりとした抽象的な質問よりも、具体的な情報のある質問の方がAIは正確な回答をしてくれる。けど、いつもそのような質問を作るのは大変
* **RaRのやり方は簡単。普段のプロンプトに数行の文章を加えるだけ！**

です。

## 生成AIを使いこなしたい！
皆さんは普段、どのくらい生成AIを使っていますか？
私は業務を効率化するため、積極的に生成AIを活用していこうという思いはあります。
しかし、これを生成AIにお願いしてみようと試してみるのですが、なかなかいい回答がしてもらえない…という場面がまだ多めというのが現実です。
結局人の手でやってしまった方が早いんじゃないか？と、生成AIを使うことにハードルを感じつついます。（※AIが不得意なことを求めているというのもあるかも）

そんな私は、ANGEL Dojoの期間中に、 **プロンプトエンジニアリング** という生成AIを上手に扱うための武器に出会いました。

## プロンプトエンジニアリング？
プロンプトエンジニアリングとは、自分が期待する回答をAIに生成してもらうために、指示(プロンプトの作成)を工夫したり調整したりする技術を指すようです。
これをうまく取り入れることができれば、生成AIマスターかも？ということで調べ始めました。

調査してみると、すでに様々な手法があるようです。研究は日々進んでおり、論文が多く発表されているので気になる方はぜひ調べてみてください！

この記事では、 特に気になった **Rephrase and Respond(RaR)** という手法を取り上げます。


## Rephrase and Respond(RaR)とは
RaRとは、LLM が答えやすい形に、LLM 自身が言い換えることで、回答の質向上を目指す手法です。

人間同士のコミュニケーションでも、すべて意図通りに話が進むわけはなく、あれ噛み合ってないぞ？というシーンをちょくちょく経験しますよね。
人間対AIのコミュニケーションとなると、もっと噛み合わないということがあってもおかしくありません。
これから、生成AIをどんどん使っていくぞという我々にとって、このような話の噛み合わなさをできるだけ少なくできるということは、とても重要なことだと思います。


## どうやるの？
One-step-RaR と Two-step-RaR という2つのパターンが存在します。

### One-step RaR
名前の通り１ステップで、質問の言い換えと質問の回答を指示します。
以下のプロンプトは、 LLM にとって意味が明確になるよう質問を言い換えてから回答するよう指示しています。あとで実際に試してみましょう。

```
＜ここに質問を入れる＞(質問)

上記の質問について、あなた自身がより良い回答ができるように質問を言い換えてください。
その後、言い換えた質問に対して回答してください。
ただし言い換えるときは、元の質問の情報は全て保持しつつ、不明瞭な点は補い、具体的な文脈を追加してください。
```

### Two-step RaR
Two-step RaRでは、質問の言い換えと質問の回答を２ステップに分けています。
はじめに、以下のプロンプトによって、質問を言い換えを指示します。

```
＜ここに質問を入れる＞(質問)

上記の質問について、あなた自身がより良い回答ができるように質問を言い換えてください。
ただし言い換えるときは、元の質問の情報は全て保持しつつ、不明瞭な点は補い、具体的な文脈を追加してください。
```
これで言い換えた回答が返って来ます。
続けて、以下のプロンプトで、元の質問と言い換え後の質問を用いて回答するよう指示しています。

:::note info
回答が元の質問から外れてしまう可能性を考慮して、元の質問もプロンプトに含めます。
:::

```
＜ここに質問を入れる-1＞（元の質問）

＜ここに質問を入れる-2＞（言い換え後の質問）

言い換え後の質問に対する回答を用いて、元の質問に対して回答してください。
```
こちらのパターンも、次項で試します。


## 回答に変化はあるのか？？
比較検証してみます。使用する質問は、以下としました。
```
AWSに関する記事を作成します。
その記事のテーマについて、良いアイデアを教えて。
```
「良いアイデア」の部分がふわふわしていますね。
誰向けの記事なのかややどんな場面で良いとされるのかという「具体的な背景情報」などがあると、誰でも同じ方向で質問の回答を考えられそうです。
こちらの質問を、そのまま、One-step-RaR、Two-step-RaRの３パターンで回答を生成し、比較してみます。

#### ☆そのままパターン
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871444/a490e0e8-8e1d-0686-4393-d11086c336e0.png" width=70%>


```:回答
AWSに関する記事のテーマとして、以下のアイデアはいかがでしょうか？

### 1. **「中小企業向けのAWS活用ガイド」**
   - 中小企業がAWSを使ってコストを削減しつつ、効率的にITインフラを構築する方法に焦点を当てます。AWSの無料利用枠や、使いやすいサービス（EC2、S3、RDSなど）を紹介し、実際の導入プロセスを具体的に解説します。

### 2. **「AWSの最新アップデートと新機能解説」**
   - AWSは頻繁に新しいサービスやアップデートを発表します。この記事では、最新の機能やアップデートについて解説し、実際にそれがどのようにビジネスに役立つのかを紹介します。

### 3. **「サーバーレスアーキテクチャの活用：AWS Lambdaの実践例」**
   - AWS Lambdaを中心に、サーバーレスアーキテクチャを活用した開発のメリットや具体例を取り上げ、アプリケーション開発や自動化の効率を上げる方法を紹介します。

### 4. **「AWSでのセキュリティ対策：クラウドの安全性を確保するには？」**
   - クラウド環境でのセキュリティは重要な課題です。この記事では、AWSのセキュリティ機能（IAM、KMS、CloudTrailなど）を活用した安全性向上の方法や、ベストプラクティスを解説します。

### 5. **「クラウド移行の成功事例：AWSでビジネスをスケールさせる方法」**
   - 実際の企業のクラウド移行事例を紹介し、AWSを活用することで得られるメリット（コスト削減、スケーラビリティ、運用効率の向上など）を具体的に示します。

### 6. **「AWS認定資格取得のための勉強法とキャリアパス」**
   - AWS認定資格の種類やそれぞれの勉強法、資格がキャリアにどのように役立つかを解説します。資格の取得に成功した人々のインタビューを取り入れると、より信頼性の高い記事になります。

これらのテーマは、初心者からエキスパートまで幅広い読者層に対応できる内容です。興味深いテーマはありますか？
```

#### ☆One-step-RaRパターン
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871444/68f1b747-8809-d1f4-566a-72ff8bbd1757.png" width=70%>

```:回答
### 質問の言い換え:

「AWSに関する記事を執筆する予定です。テーマとして魅力的で、読者にとって役立つ内容にするためのアイデアを提供してください。また、AWSに関連する現在のトレンドや技術的な進展を考慮した具体的なテーマも挙げてください。」

### 回答:

AWSに関する記事のテーマとして、以下のアイデアが考えられます。これらは現在の技術トレンドや実際の利用シーンを反映しており、読者にとっても実用的な内容です。

1. **「クラウドネイティブアーキテクチャの設計：AWSでのモダンなアプリケーション開発」**
   クラウドネイティブの設計やマイクロサービスアーキテクチャをAWS上でどのように活用して開発するかについて、実際のユースケースやベストプラクティスを紹介します。Amazon ECSやEKS、Lambdaなどのサービスに焦点を当てると良いでしょう。

2. **「AWS Well-Architected Frameworkの実践: 信頼性の高いシステムを構築する方法」**
   AWSのWell-Architected Frameworkは、信頼性やセキュリティ、効率性を重視したシステム設計のガイドラインを提供しています。このフレームワークに基づいた設計方法や、そのメリット、実際に活用する上での注意点を解説する記事です。

3. **「サーバーレスとコンテナ化の比較：AWS Lambda vs. Amazon ECS」**
   AWSのサーバーレス（Lambda）とコンテナサービス（ECS）の違いや、どのシチュエーションでどちらを選択すべきかを詳しく解説します。コストやパフォーマンス、スケーラビリティの観点から比較すると、読者にとって実用的なガイドラインになります。

4. **「AWSでのAIと機械学習: Amazon SageMakerの活用法」**
   機械学習はAWSの強力な分野です。SageMakerを使ったAIモデルのトレーニングからデプロイまでの流れを解説し、実際の活用シナリオやユースケースを紹介します。AI関連の話題は非常に人気が高いので、注目されるテーマです。

5. **「AWSセキュリティの最前線：IAMとクラウドセキュリティのベストプラクティス」**
   セキュリティはクラウド利用者にとって最も重要なトピックの一つです。AWSのIdentity and Access Management (IAM) やセキュリティグループの設定、監査ログ管理の方法など、クラウドセキュリティの基本から応用までをカバーした記事は需要が高いでしょう。

これらのテーマは、AWSに精通している読者にとっても、初心者にとっても価値ある情報を提供できるはずです。
```

#### ☆Two-step-RaRパターン
step1
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871444/40d20015-155d-158b-d65e-04b5e07168d8.png" width=70%>

```:質問を言い換え
AWSに関する記事を作成する際のテーマとして、どのような切り口が良いかアイデアを教えてください。また、記事の目的やターゲット読者を考慮した上で、AWSのどのサービスや技術が特に注目されているのか、どのように構成すべきかについてもアドバイスをいただけると助かります。

この質問を言い換えると、次のようになります：

「AWSに関する記事を執筆する際に、効果的なテーマや切り口を提案してください。この記事は、技術に精通している読者を対象としているのか、それとも初心者向けか、または特定の業界向けの記事なのかなど、目的や読者層に応じた具体的なアプローチがあれば、それも教えてください。また、AWSの最新トレンドや注目サービスを踏まえて、記事でどのようなポイントを押さえるべきかもアドバイスいただけると助かります。」

どうですか？
```
step2
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871444/43f7a117-ea92-3e5e-6ebe-1d4596f74b9c.png" width=70%>

```:回答
AWSに関する記事のテーマとして、いくつかの効果的な切り口を提案します。まず、ターゲット読者や目的に応じたアプローチを考慮することが重要です。

### 1. **AWS初心者向けガイド**：
初心者を対象にした記事では、AWSの基礎知識や主要サービス（EC2、S3、RDSなど）の説明、アカウントの作成方法、クラウド導入のメリットを解説するのが良いでしょう。AWSの柔軟性と拡張性を強調しながら、シンプルなデモやサンプルプロジェクトを含めると、初心者にとって理解しやすくなります。

### 2. **最新トレンドを活用した高度なテクニカルガイド**：
技術に精通している読者を対象とするなら、AWSの新機能や最新トレンド（例えば、AI/MLサービスであるSageMakerやデータレイクソリューションの活用）に焦点を当てた記事が効果的です。実際のプロジェクトにどのように適用できるか、アーキテクチャ図やコードスニペットを含めて詳しく解説すると、技術者にとって有益な内容となるでしょう。

### 3. **業界別のAWSソリューション紹介**：
特定の業界に特化したAWSのソリューションに焦点を当てるのも一つの方法です。例えば、ヘルスケアや金融業界向けのAWSサービス（例えば、Amazon HealthLakeやAWS Artifact）について掘り下げることで、業界の課題解決にAWSがどのように貢献できるかを説明できます。これにより、業界内でのAWSの利用価値を強調できます。

### 4. **コスト最適化とセキュリティベストプラクティス**：
多くの企業にとって関心が高いのは、コスト最適化とセキュリティです。AWSのリソースを効率的に利用し、コスト削減する方法、例えば、スポットインスタンスの活用や、自動スケーリング設定についての説明、または、AWSのセキュリティ機能（IAM、GuardDuty、WAFなど）に焦点を当て、セキュリティ強化のベストプラクティスを解説する記事は多くの読者にとって価値があります。

どのテーマを選ぶかは、読者の知識レベルや興味、記事の目的に応じて決まります。
```



#### 結果
* **そのままパターン** では、記事の対象を幅広く設定してテーマを提案してくれた。一方で、情報があまり絞られていないので、すでに記事の母数が多そうな概要やビジネス活用、資格といったテーマが提案された
* **One-step-RaRパターン** では、そのままでは不明瞭であった、何が「良い」としているかが明確になったことで、そのままパターンよりもAWSサービスの詳細にフォーカスされたテーマが提案された。数行追加しただけなのに、とても手軽に効果が実感できた
* **Two-step-RaRパターン** では、テーマに加えて、切り口の説明がさらに詳細化された。２ステップに分けたことにより、LLMが補完した情報に想定とズレがあったら、step2で軌道修正しやすそうというメリットが考えられる

#### まとめ
* **RaRを活用することで情報が明確になり、より効果的な回答が得られました！**　
* **RaRを比較すると、Two-step-RaRパターンの方が、より大きい効果が得られました！**
* **しかし、普段と質問数が変わらないOne-step-RaRパターンの手軽さは、効率化という観点でメリットが大きそうだと感じました！**



## 所感
多くのLLMが存在していますが、LLMによって特徴が様々です。そのため、利用目的に沿ったLLMの選定という工程が今後大事なスキルになってくると考えていました。確かに重要なことには変わりないですが、それだけではなかったということ今回の調査を通じて感じることが出来ました。生成AIの活用がさらに幅を利かせてくる世の中になれば、プロンプトエンジニアリングは、職種問わず重要なスキルになってくるのかもしれないですね。

まずは、色々な方がまとめてくれている手法の一覧をぜひ一読してみてほしいです。頭の片隅に置いておくだけでも、生成AIの活用の幅が広がるかもしれません！





## 参考
https://voice.pkshatech.com/n/n0287b42d78c5

https://arxiv.org/abs/2311.04205