【re:Invent 2023 新機能】Amazon Qの全体像を把握しよう！

## **注目の新機能Amazon Q**

最近、生成系AIに関するアップデートが次々と出てきていますね。
AWSのビックイベントの１つであるre:Invent 2023でも、沢山の生成系AIに関するアップデートが発表されましたが、その中でも私が注目しているのはAmazon Qの発表です。
公式ページでは「Amazon Qは、内部的にはBedrockを駆使した新たなビジネスアシスタントで、企業の情報システムと連携し、会話を通じて問題解決や情報の生成を行う」と紹介されていますが、これだけではイメージが湧きにくいかもしれません。そこで、実際にAmazon Qを使用し、その機能を探ってみました。

## Amazon Qとは

Amazon Qは機能がかなり多く、アップデートも激しいですサービスです。また、執筆時点では公式ドキュメント数も少ないため全体感を掴むことが難しいと感じております。
そこで、AWS re:Invent 2023でアダム・セリプスキーCEO（以下、セリプスキーCEO）のキーノートで紹介された言葉を軸にAmazon Qのサービスを４つに分類したいと思います。（動画のURLは[こちら](https://youtu.be/PMfn9_nTDbM?t=6432)）

### Amazon Qの各サービスの役割

1. **Amazon Q <font color="Salmon">Builder</font>**: 
AWSのエキスパートとして、開発者や技術者がAWSアプリケーションを学習・構築を支援。開発者向けの様々なサービスに統合され、開発プロセスの加速や、より効率的なコード生成をサポートし、AWSのベストプラクティスに関する質問にも回答。


2. **Amazon Q <font color="Salmon">Business</font>**: 
自社のビジネスの専門家として、企業内のあらゆる情報をもとに様々な企業活動の生産性向上に貢献。企業固有情報に対する質問応答はもちろん、インサイトの発見、文書作成などの業務をAmazon Qがサポートし、ビジネスプロセスを効率化。

3. **Amazon Q <font color="Salmon">in Amazon QuickSight</font>**:
ビジネスインテリジェンスの専門家として、Amazon QuickSightのデータに対して自然言語処理を利用してビジネス上の質問に迅速に回答。このサービスは、BIチームがデータモデルやダッシュボードを事前に定義する必要性を大幅に減少させ、業務の効率化を促進。

4. **Amazon Q <font color="Salmon">in Amazon Connect</font>**:
カスタマーサービスアシスタントとして、コンタクトセンターのエージェントをリアルタイムで支援。会話分析と自然言語理解（NLU）を使用して、通話やチャット中の顧客の意図を自動的に検出し、即座に実用的な回答や行動提案をエージェントに提供。

各サービスの大まかな役割が分かったところで、それぞれを詳細に見ていきたいと思います。
とはいえ全てを語ると１ページでは収まらないので今回はAmazon Q Builderに限定しております。

## Amazon Q Builderの詳細

Amazon Q Builderはその名の通り開発者（Builder）向けの機能となっています。
AWSを使用したさまざまな開発シナリオで生成型AIの技術によるサポートを受けられるため、開発プロセスを大幅に効率化できます。
これらのサポートはAWSのコンソール画面だけでなく、IDEから利用することができます。

Amazon Q Builderの中でも機能が多岐にわたるため、アクセスできる場所ごとに分けて紹介していきます。

## コンソール画面からアクセスできる機能

### 1. AWSドキュメントに対して自然言語で質問

AWSドキュメントページやコンソール画面から直接チャットを開き、自然言語で質問することが可能です。
例えばコンソール画面の左サイドバーにあるアイコン（赤枠のもの）をクリックすることでチャットを開始することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/626e1b15-a8e5-a2e7-8c51-94099f603d0f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/55f94f02-0ff2-6a7b-50be-635db02224e1.png)

また、幾つかのサービスではユーザがプロンプトを作成しやすくするためのツールも用意されており、例えばEC2のインスタンスタイプを選択する際のアドバイスを受けることができます。

以下の画像のように、インスタンスタイプを選択する画面の上部にある「Get advice on instance type selection...」をクリックすることでユーザがインスタンスに求めることをヒアリングしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/1bcc3c96-fab2-5e2f-81dd-e66950012ce0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/2a850f7d-1216-54d9-fb3c-a090b1ff51ba.png)


質問に答えた後はGet Instance type adviceをクリックすることで以下のようにプロンプトを生成＆Amazon Qチャットへ投稿までしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/5710a08d-61e0-9c82-4f16-a25ad7cc1c45.png)

ユーザは質問にしたがって答えるだけなので簡単ですね。

### 2. AWSサポートチケット起票の手助け

Amazon Qに質問しても解決しなかった場合、サポート起票をしたい旨をチャットに投稿することでサポート起票の手助けをしてくれます。
以下に試してみた手順を記載します。

1. **前提条件**

    今回は例として、「EC2インスタンスの起動時にエラーが発生し、VPCやEC2の設定に問題はなく、クォータの制約によるものと思われるが、次の手順が不明」というシナリオを想定します。

1. **Amazon Qチャットの起動**: AWSコンソールの右側にあるAmazon Qボタンをクリックしてチャットを開きます。
   - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/0d6a3bb0-982b-0857-786a-cad271c83b63.png)


2. **問い合わせ内容の入力**: Amazon Qチャットにサポートに問い合わせたい内容を記載します。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/2f1a9f12-cf8a-a936-421b-b29b8ed494cf.png)

3. **生成された回答のレビュー**: 少し待つと、Amazon Qがサポート起票に必要な情報を生成してくれます。これにはDescriptionやCategoryなどが含まれており、ユーザーが提供した情報を元に生成しています。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/0c94a7b7-ac04-02a1-5968-4e2cdb1d9299.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/c9ff7186-41c3-d211-0c2e-32c4bfd6da3b.png)


5. **サポートチケットの起票**: 本来であれば、Submitボタンを押してサポートチケットを起票しますが、この例では実際の起票は行わずに説明を終了します。


### 3. コンソールエラーのトラブルシューティング

次はコンソール画面で発生したエラーを解決するのに役立つ機能です。
この機能を使用することで、エラーの原因と解決策を迅速に把握できます。
以下に、実際にこの機能を試してみた体験を紹介します。

1. **前提条件**

エラーをわざと発生させるため、設定されたクォータ値を超えるEC2インスタンスの起動を試みました。
意図的にエラーを発生させ、その後Amazon Qがどのようにトラブルシュートを行うかを確認したいと思います。

1. **インスタンスの起動**: まず、適用されたクォータ値以上のインスタンスを起動しようとします。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/5247cba0-b962-d339-47ad-b29ac024bedf.png)
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/8809e7c7-c5ed-0a94-4b55-d0e516129032.png)


2. **エラー発生**: 期待通り、起動は失敗しました。コンソールに表示された「Troubleshoot with Amazon Q」をクリックします。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/4845bccd-c254-5601-aa04-0d029229d642.png)

4. **Amazon Qによる原因の調査**: Amazon Qが設定値などから原因を分析してくれます。チャットではvCPUのクォータ制限が原因と判断しており、正しいですね。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/6c592130-f405-6b34-4461-31fcadf69fe7.png)

5. **具体的な解決策の提示**: 「Help me resolve」をクリックすると、具体的な解決手順が提示されます。ハルシネーション（EC2のナビゲーションパンにLimitsは無かった）を起こしている部分もありますが、解決に役立ちそうです。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/7362cee6-60d6-2d63-279d-9c2d7db5390b.png)


<details><summary>参考：resolutionの内容</summary>

1. AWS Management ConsoleのEC2ダッシュボードに移動します。
2. 左側のナビゲーションペインで「Limits」をクリックします。
3. 容量超過のインスタンスファミリーの制限を見つけます。
4. 「Request limit increase」をクリックし、フォームに記入してvCPUクォータの増加をリクエストします。
5. AWSからvCPU制限の増加が承認されるのを待ちます。
6. 制限の調整が承認された後、EC2インスタンスの再起動を試みます。
</details>

### 4. Reachability Analyzerを使用したネットワークのトラブルシューティング

皆さんはネットワーク関連でトラブルが起きた際はどのように対応されていますか？
私はReachability Analyzerを使うことが多いのですが、次に紹介する機能はReachability Analyzerを使用したトラブルシューティングをAmazon Qがサポートしてくれるものです。

1. **Amazon Qにチャットから依頼する**: Amazon Qとチャットでトラブルシューティングをしている際、ネットワークに関連したトラブルであるとAmazon Qが判断した場合、以下の画像のように「Amazon Qと連携したVPC Reachability Analyzer」の利用を提案してくれます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/1f49f6ed-3a31-5831-989b-ff13b09de1f9.png)

1.  **Amazon Qと連携したVPC Reachability Analyzer**: Amazon Qチャットで送った情報をベースに対象アカウント内のリソースを調査してくれます。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/b7fe98ac-391a-77d7-4839-fef0c670960b.png)


この機能はトラブルシューティングにかなり役立ちそうです、東京リージョンでの一般公開が待ち遠しいですね。

## IDEからアクセスできる機能

続いて、IDEから使用可能なAmazon Q Builderの機能を紹介します。
今回はIDEとしてVisual Studio Codeを使用しております。

### 1. AWSドキュメントへの自然言語による質問

IDEではコンソール画面と同じように、Amazon Qに対して自然言語で様々な情報を検索することができます。

- **質問の仕方**: IDEで初期設定後、「Ask a question」をクリックすると、サイドバーにチャットウィンドウが表示されます。ここに質問を入力すると、Amazon Qが回答してくれます。
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/095b3c6c-ee51-f306-2cbd-6bc6bc0c4d9f.png)
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588946/1a653073-0067-3b2e-2c48-1d444e65f710.png)

#### 様々なコマンド

IDE版のAmazon Qには、以下の便利なコマンドが用意されています：

- **`/clear`**: これを使うと、チャットの履歴をクリアできます。会話をリセットして、新しい質問を始める際に便利です。
- **`/help`**: Amazon Qができることを教えてくれるコマンドです。様々な機能についての情報が得られます。

#### 次に紹介するコマンド

この次のセクションでは、以下のコマンドについて詳しく紹介します：

- **`/dev`**: 開発者向けのコマンドで、新しい機能の開発計画やコーディング支援に関する情報を提供します。
- **`/transform`**: コードの言語バージョンをアップグレードするためのコマンドです。

### /devコマンドの説明

/devコマンドは、開発者が新開発・修正を行う際に役立つコマンドです。
チャットに/devコマンドを送りユーザーが開発したい機能を説明すると、Amazon Qはその説明と現在のプロジェクトフォルダ内の既存のコードを基に、以下の手順で詳細な実装プランを立案してくれます。

1. **実装計画の立案**: 開発したい機能について説明すると、Amazon Qはその情報をもとに、どのようなコード変更や追加が必要かについての計画を提案してくれます。
1. **計画のレビュー**: Amazon Qが立案した開発プランは、ユーザーがレビューし、必要に応じて情報を追加することでより実態にあったプランにできます。
1. **注意点**: /devコマンドは実装計画の立案のみをサポートし、実際のコーディングは行いません。コーディングについては、CodeWhispererを使用する必要があります。

早速試したいところですが、本機能は「CodeWhisperer Professional」プランでのみ利用可能であり、筆者は利用できないため文章のみの説明といたします。。。
（利用できたら情報をアップデートする予定です。）

### /transformコマンドの説明

/transformコマンドは、re:InventのKeynoteで注目された「Code Transformation」機能を実行するためのものです。この機能を使うと、プロジェクトフォルダ内のコード言語バージョンを最新のものにアップデートすることが可能です。

- **対象言語**: 執筆時点でアップグレード可能なのは、Java 8とJava 11のコードでJava 17にアップグレードすることができます。
- **使い方**: プロジェクトフォルダ内で/transformコマンドを使用すると、古いバージョンのJavaコードを最新バージョンに自動的にアップグレードしてくれます。

このコマンドも試してみたいところですが、devコマンド同様に「CodeWhisperer Professional」プランでのみ利用可能なので、文章のみの説明といたします。。。。

以上がAmazon Q Builderの機能の説明でした。
Amazon Q Businessや Amazon Q in Amazon QuickSight、Amazon Q in Amazon Connectまで紹介すると膨大な量の記事になってしまうので今回は以上とします。

## まとめ


この記事を通じて、Amazon Qの幅広い機能の全体像とAmazon Q Builderの詳細を見ていきました。
Amazon Qはその多機能性から、全てを把握するのはなかなか大変です。
しかし、以下の4つの主要カテゴリに分類することで、少しは把握しやすくなるのではないでしょうか。
- **Amazon Q Builder**: AWSの開発プロセスをサポートし、コンソール操作やIDEでのコーディングを生成系AI技術を使って効率化
- **Amazon Q Business**: ビジネスプロセスを支援し、企業内の情報システムと連携して問題解決や情報生成を行実施
- **Amazon Q in Amazon QuickSight**: ビジネスインテリジェンスの分析やデータへの迅速なアクセスをサポート
- **Amazon Q in Amazon Connect**: コンタクトセンターのエージェントをリアルタイムで支援し、カスタマーサービスを向上

今回の記事では主にAmazon Q Builderに焦点を当てましたが、Amazon Qには他にも多くの機能があります。
今後、Amazon Q BusinessやAmazon Q in Amazon QuickSight、Amazon Q in Amazon Connectに関する情報も整理し、その機能と利用方法について詳しく紹介していきたいと思います。

それでは、この記事をお読みいただき、ありがとうございました。