[2025年AWS認定全冠を目指す君へ〜]AWS新規資格の出題チャットボットを作ろう！

# [2025年AWS認定全冠を目指す君へ〜]AWS新規資格の出題チャットボットを作ろう！

## はじめに  
先日、[JAWS-UG東京支部のLT会](https://jawsug.connpass.com/event/334931/)で本内容を発表したところ、意外と好評で詳細を知りたいとの声もありました。
そこで、5分では話しきれなかったプロンプトの内容などもまとめたものをQiitaで共有します。  



## 使用した技術・データの概要  
以下の技術やデータを活用して出題チャットボットを構築しました。  

### 使用技術  
- **Dify**: 生成AIアプリ開発ツール  
- **テキスト埋め込み**: `text-embedding-3-small` ($0.020/1M トークン)  
- **チャットモデル**: Gemini 1.5 Pro  

なぜにGemini？と思う方も多そうです。入出力トークン数が十分だったのと、無料で使えたからです。GeminiのFlashも使いました。早いですが、出題の質が落ちるように感じたので、結局Proの方を使っています。

### 使用データ  
1. **試験ガイドの要約**: ドメイン毎に求められる知識・スキルを記載→ [LINK](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-data-engineer-associate/AWS-Certified-Data-Engineer-Associate_Exam-Guide.pdf)
2. **Exam Prep Standard Courseのまとめ**: サービスのユースケースやキーポイントを記載  → [LINK](https://explore.skillbuilder.aws/learn/course/20744/Exam%2520Prep%2520Standard%2520Course%253A%2520AWS%2520Certified%2520Data%2520Engineer%2520-%2520Associate%2520%28DEA-C01%29%2520%28Japanese%29)



## Difyについて
### Difyとは？  
Difyは、生成AIアプリを簡単に構築するためのツールです。  
ローカル環境でも動作可能で、開発者が迅速にAI機能を活用できる点が特徴です。  

### コミュニティエディションのDocker導入手順  
以下のコマンドを実行してDifyをローカル環境に簡単にセットアップできます。  

```bash
# リポジトリをクローン
git clone https://github.com/langgenius/dify.git

# ディレクトリの移動と環境変数の設定
cd dify/docker
cp .env.example .env

# Dockerコンテナの起動
docker compose up -d

# サービスの確認
docker compose ps
```
管理者アカウントの設定
ブラウザで以下のURLにアクセスし、管理者アカウントを設定します。

ローカル環境: http://localhost/install

詳細な手順や追加情報については、[公式ドキュメント](https://docs.dify.ai/)をご参照ください。

# システムプロンプト  
ボットがどのような形で動作するかを定義するプロンプト内容です。以下の形式を採用しました。あまり工夫はしておらず、要件を考えてGPTsの[Dify AI Helper](https://chatgpt.com/g/g-qIztHhtPO-dify-ai-helper)に英語で出力してもらいました。
要件としては以下を考えていました
• 知識ドメインから出題テーマを選んでね  
• 問題は4択にしてね  
• 複数のサービスの知識を問うてね  


```plaintext
[システムプロンプト全文]
You are a quiz bot for the AWS DEA (Certified Data Engineer - Associate DEA-C01) exam. Your task is to create challenging, advanced-level questions based on the AWS DEA Domains, with a focus on testing in-depth knowledge and complex skills. Each question should simulate real-world scenarios, requiring the user to understand intricate relationships and use cases involving multiple AWS services. Refer to the AWS DEA Exam Guide and randomly select domains and task statements to keep the questions diverse and comprehensive.

### Advanced Question Creation Rules
1. Generate questions that align with a randomly selected AWS DEA Exam Domain and Task Statement in Japanese.
2. Questions should require high-level analytical skills, such as selecting optimal AWS service combinations to meet complex requirements.
3. Each question must include two or more AWS services (e.g., Amazon S3 and AWS Glue), especially services that must be configured or integrated in specific ways for best practices.
4. Each question should provide four answer options: A, B, C, and D.
5. Each option should contain plausible combinations, with only one clearly optimal solution. The correct answer should reflect the most efficient, secure, or scalable approach to the problem described.

### Question Format
Present the question and answer choices in the following format:
「
質問：{{question}}
選択肢：
A) {{option_a}}
B) {{option_b}}
C) {{option_c}}
D) {{option_d}}
」

### User Response Handling
After the user submits an answer, process the response as follows:
1. Determine if the user’s answer is correct.
2. If the answer is correct, respond with「正解です！」and provide a concise, advanced-level explanation of why this option is the best choice in Japanese.
3. If the answer is incorrect, respond with「不正解です。」and provide the correct answer with a detailed explanation of why it is superior to other options, including insights on AWS best practices or advanced configurations in Japanese.
4. Conclude the explanation with a note about the specific domain and task statement covered by the question, reinforcing the key concepts and skills assessed.

```
## 使用データ  
以下のCSV形式にまとめたデータをナレッジベースとして活用しました。  

### 試験ガイドの要約  
- ドメインごとに求められる知識・スキルを整理したCSVデータ。  

![スクリーンショット 2024-11-18 14.30.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/858e74ab-0658-057d-da81-20197018803c.png)

### Exam Prep Standard Courseのまとめ  
- 各サービスのユースケースやキーポイントを詳細に記載したテキストデータ。  
![スクリーンショット 2024-11-18 14.28.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/bdbf52e2-ed96-10b8-539b-dc222aa145de.png)



## テキスト埋め込みのパラメータについて  
以下は、テキスト埋め込みに使用した主要なパラメータの設定です。  

### パラメータ設定  
- **最大チャンク長**: 1000  
  - テキストを分割する際の最大長さを指定しています。  
- **チャンクオーバーラップ**: 500  
  - チャンク間で重複させる文字数を設定しています。
- **セグメント識別子**: \n\n  　
  - CSVの各行事にセグメントに区切りたかった。

詳細はあまり理解できていないですが、１セグメントが大きく、狙いの検索のために各セグメントにドメイン・タスクステートメントの知識なのかを含めたかったので、大きめに設定しています。
### 検索設定  
- **ハイブリッド検索**: デフォルト設定を使用  
  - こちら工夫する知識不足です。とりあえずおすすめ設定のデフォルトにしています。


## 出題例  
以下は試験ガイドをコンテキストに入れて実際に生成された出題例です。  
![スクリーンショット 2024-11-18 13.49.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/01beeccc-109b-9f95-ddc7-5c41c46a2158.png)![スクリーンショット 2024-11-18 13.51.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/8080ba33-9c6d-6ac4-fe77-d502d2f7dea9.png)

意外と見たことありそうな問題が出題されて解説もそれなりに感じます。
## 果たしてこのチャットボットは使えるのか
それなりの問題と解説は出力してくれている。実際に１０問ほど出題してみたが
### 懸念
- 出題範囲全体の網羅性が不足しているかもしれない...

「出題してください」と入力するとほとんどIoTのリアルタイムストリーミング処理の問題が出題される。
当然ながら、プロンプトの内容に出題内容が影響される。例えば「ドメイン4の問題を出題してください」と入力すればドメイン４の問題を出題してくれるが、出題の偏りや漏れには自分で気付く必要がある。

### 改善案  
1. **ドメイン別出題の強化**  
   - ドメインを変数として受け取り、特定の分野を指定して出題できる仕組みを追加。  

2. **ランダム出題のロジック実装**  
   - 出題範囲をランダムに選定するロジックを導入。  

3. **プロンプト・モデル選定の見直し**  
   - プロンプト設計を精緻化し、より高精度なモデル選定を検討。  

***まだまだ知識不足。改善アイデアを常に募集しています。***


## 使えるのかどうかは結果が示してくれるはず...
1. この出題ボットを活用して、12月後半にAWS DEA試験へ挑戦！
2. 新規資格の問題演習に困っている方、ぜひ出題チャットボット作成にトライしてみてください！