Amazon Q の情報まとめ & 触ってみた (2023/12/1時点)

# はじめに
お疲れ様です。yuki_inkです。

AWS re:Invent 2023 に参加しています。
今回の最大のアップデートと目される「Amazon Q」。
本記事は、Qに関する情報をまとめ、また実際にマネコンから触ってみることで、Qの理解を深めようという趣旨のものです。

# Amazon Q とは
生成AIを活用した、エンタープライズ向けアシスタントサービスです。
re:Invent 2023 のCEO Keynoteで発表されました。

セキュリティを最優先事項とするAWSらしく、セキュリティ、そしてプライバシーにも配慮されており、企業のポリシーやデータアクセス制限に適合するように設計されています。
「Amazon Qは、その内部のモデルのトレーニングためにお客様の情報を一切使用しない」と明言されているため、今まで生成AIの活用に躊躇していた企業も安心して利用が可能です。

Qの立ち位置、現時点の機能の概要は、以下のブログが大変分かりやすかったです。

> マイクロソフトが「GitHub Copilot」や「Microsoft 365 Copilot」など「Copilot」を同社の生成AIサービスの包括的なブランドとしているように、AWSは「Amazon Q」ブランドにおいてコーディング支援やデータ分析、業務支援、コールセンター支援などの多様なAIサービスを発表しました。

https://www.publickey1.jp/blog/23/awscopilotamazon_qaiaiaws_reinvent_2023.html

https://dev.classmethod.jp/articles/amazon-q-builder-user-docs/

KeynoteはYouTubeにも上がってますので、ぜひご確認ください！
[こちらのリンク](https://youtu.be/PMfn9_nTDbM?si=lY6zeGScd1zXUfct&t=5269)から、Amazon Q発表のシーンに飛べます。

## Amazon Q の機能
本記事では、上記のブログを参考にしつつ、2023/12/1現在までに追加で発表された機能も踏まえ、Qの機能を以下の通り分類して記述を行います。
1. AWS上でのシステム開発支援（Amazon Q For AWS Builder Use）
1. 業務支援（Amazon Q For Business Use）
1. データ分析と可視化（Amazon Q in Amazon Quicksight）
1. コンタクトセンター支援（Amazon Q in Amazon Connect）
1. 外部チャットアプリとの連携（Amazon Q in AWS Chatbot）
1. ネットワークのトラブルシューティング（Amazon Q network troubleshooting）
1. SQLクエリの生成（Amazon Q generative SQL in AmazonRedshift）
1. ETL処理の支援（Amazon Q Data integration in AWS Glue）
1. コードの自動変換 （Amazon Q Code Transformation）
1. コーディング支援（Amazon Q in CodeWhisperer / Amazon Q in Amazon CodeCatalyst / Amazon Q in IDE）
1. AWS Console Mobile Appとの連携（Amazon Q in the AWS Console Mobile Application）

**AWS上でのシステム開発支援（Amazon Q For AWS Builder Use）** は、具体的には以下のような機能が含まれています。
> **チャット** – Amazon Q は、AWS のサービスの選択、AWS CLI の使用法、ドキュメント、ベストプラクティスなど、AWS に関する自然言語の質問に英語で回答できます。Amazon Q は、情報の概要または詳しい手順を返信し、情報ソースへの参照も含めます。
**メモリ** – 会話のコンテキストを使用して、会話中の今後の応答を通知します。
**コードの改善とアドバイス** – IDE 内でソフトウェア開発に関する質問に答え、コードを改善し、新しいコードを生成できます。
**トラブルシューティングとサポート** – AWS コンソールのエラーを理解するのに役立ち、AWS の質問や問題に対処するためのライブサポートエージェントへのアクセスを提供します。
**顧客フィードバック** – フィードバックフォームを通じて送信された情報とフィードバックを使用して、サポートを提供したり、技術的な問題を解決したりするのに役立ちます。

AWSのサービスに関連する機能ですね。
まさにAWS Expertとして、色々やってくれるようです。

https://docs.aws.amazon.com/amazonq/latest/aws-builder-use-ug/what-is.html

上記ウェブサイトに記載はないですが、EC2インスタンスタイプの推奨も「AWS Builder Use」に含まれると思います。

https://aws.amazon.com/jp/about-aws/whats-new/2023/11/amazon-q-optimal-ec2-instance-selection-workload/

**業務支援（Amazon Q For Business Use）** は、具体的には以下のような機能が含まれています。
> **メタデータを使用したフィルタリング** – ドキュメント属性を使用して、エンドユーザーのチャットエクスペリエンスをカスタマイズおよび制御します。現在、API または Amazon Q データソースを使用する場合にのみサポートされています。
**引用を伴うソースの帰属** – Amazon Q ソースの帰属を使用して応答を検証します。
**ファイルとチャットのアップロード** – エンドユーザーがファイルをチャットに直接アップロードし、アップロードされたファイルデータを使用して Webエクスペリエンスタスクを実行できるようにします。
**クイックプロンプト** – エンドユーザーに Amazon Q ウェブエクスペリエンスの機能を知らせる機能サンプルプロンプト。

こちらはAWSの外の世界のドキュメント・アプリケーションと連携し、業務を支援してくれる、エンタープライズチャットアシスタントを中心とした機能です。

https://docs.aws.amazon.com/amazonq/latest/business-use-dg/features.html


:::note warn
2023/12/1時点の情報です。
今後確実に機能追加が入ると思いますので、最新の情報は公式サイトで確認してください。
:::

# 触ってみた
本記事では以下の機能に着目し、実際に触ってみたいと思います。

**AWS上でのシステム開発支援（Amazon Q For AWS Builder Use）**
　・チャット
　・トラブルシューティングとサポート

**業務支援（Amazon Q For Business Use）**
　・メタデータを使用したフィルタリング
　・クイックプロンプト

※今後内容を追加していく予定です！！


## まずは権限を付与する
Qを触る前に、まずは権限を付与する必要があります。
Qを操作するための権限は以下に案内されています。
IAMユーザに付与しておきましょう。

https://docs.aws.amazon.com/amazonq/latest/aws-builder-use-ug/managed-policy.html


https://twitter.com/omuron/status/1729704288543555889

確かに、(^ q ^) みがありますねw

:::note warn
権限の許可ポリシーがついてないと、以下で触れるチャットもできません。
試しにDenyポリシーをIAMユーザに付与した上で、Qに質問をしてみたところ、`You don't have permission to use Amazon Q.`と言われました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/b0f60107-1eea-2efd-8b1e-70aaba18e16d.png)
:::


## AWS上でのシステム開発支援（Amazon Q For AWS Builder Use）
### チャット
マネコン画面上にQのチャット画面が追加されました。
AWS上でのアプリケーションの開発方法やサービスの使い方、トラブルシュートの方法、システム最適化の方法など、AWSの利用に関する質問を入力すると、Qが回答してくれます。

マネコン画面右端のQのアイコンをクリックすると、チャット画面が開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/3b42ca30-8bf2-a000-2c22-2e772f4d818a.png)

開いたチャット画面で質問すると、回答が返ってきます。
回答が返ってくるまでは数秒の時間がかかりましたが、大きなストレスというほどではありませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/c429359a-3053-aa75-e4ab-9ae05d1bb8db.png)

[FAQ](https://aws.amazon.com/jp/q/faqs/)によると、このチャット機能は既にほとんどのリージョンで使えるようです。
> この機能は米国東部 (バージニア北部) リージョンで実行されますが、任意の商用リージョンに設定されているコンソールからアクセスできます。

ただし、現時点では英語での質問のみ対応、、！
日本語対応が待たれます。

このチャット機能ですが、工夫次第で様々なことができそうです。
クラメソ様はチャットからサポートケースを起票されてました。

https://dev.classmethod.jp/articles/create-support-case-with-amazonq/

### トラブルシューティングとサポート
まず、[FAQ](https://aws.amazon.com/jp/q/faqs/)によると、この機能は2023/12/1時点で米国西部 (オレゴン) リージョンでしか利用できません。
なので、検証は米国西部 (オレゴン) リージョンで行います。
> プレビューでは、Amazon Q は、米国西部 (オレゴン) リージョンのコンソールのエラーのトラブルシューティングに役立ちます。

意図的にエラーを発生させるLambda関数を作成し、実行してみました。
コードは[こちらのクラメソ様の記事](https://dev.classmethod.jp/articles/sam-alert/)を参考にしました。

Lambda関数を実行し想定通りエラーが出たら、画面上に`Troubleshoot with Amazon Q`というボタンが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/fedacfc1-6ab9-3e59-7f0e-83752beebfa3.png)

`Troubleshoot with Amazon Q`ボタンを押下すると、以下のようにエラーとその原因分析の結果を表示してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/2a4073f0-0662-8e10-90a0-465f12126f3e.png)

さらに`Help me resolve`ボタンを押下すると、その解決策まで提案してくれました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/f100bb9c-09a9-0e04-f4b4-1e828cf28bcd.png)


## 業務支援（Amazon Q For Business Use）
### メタデータを使用したフィルタリング
いわゆるRAGを構築できます。
今回の検証は、S3バケットにドキュメントを配置し、それを読み込ませる形で進めていきます。

まずは読み込ませたいドキュメントをバージニア北部リージョンのS3バケットに格納。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/caa7af13-4858-70c2-e3c8-d0ee45ccd91c.png)

:::note warn
日本語を含むExcelファイルで試したところ、Syncing（indexing）が半日経っても終わらないという事象が起こりました。
裏でKendraが動いてるっぽく見えたので日本語のファイルもいけるかなと思っていましたが、ダメそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/2437c99b-aec4-048d-0be7-d2a3ecf0adfd.png)

> ドキュメントに基づくと、Amazon Q は現時点では英語ドキュメントのインデックス作成のみをサポートしています。 複数の言語での会話を理解できますが、英語以外のファイルのインデックス作成と変換の機能はまだ利用できません。 最高のユーザーエクスペリエンスを実現するには、インデックス作成と変換に Amazon Q で英語の言語ファイルを使用することをお勧めします。 将来のリリースでの追加言語のサポートに関する更新については、AWS ドキュメントまたは Amazon Q のリリースノートを確認してください。
:::

バージニア北部リージョンでAmazon Qの画面へ移動し、`Applications`メニューから`Create application`ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/674743a1-f0b5-64f9-5f5c-80636176e143.png)

Applicationの設定画面に遷移します。
`Application name`と`Service role name`はあらかじめ値が入っていた。
とりあえずこのままの設定で作ってみる。
`Create`ボタンを押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/b915bbd5-e92f-2922-3f77-93974db6a0b3.png)

続いてRetriever（データの取得先となるIndex）を選択します。
ここではQ標準の "native retriever" を利用。
Kendraも指定できるらしい。
また、コストを抑えるため`Index provisioning` > `Number of units`は初期値の2から1へ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/34cf6d63-4ac9-6153-e58c-3c450edf867a.png)

`Next`ボタンを押下すると、データソースの選択画面に移ります。
このコネクタ、Kendraでもみたことあるぞ、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/3d39bc07-33ba-14ed-43d7-b8efbbf329e2.png)

今回はS3を選択。
先ほどドキュメントを格納したS3にデータを取りに行けるよう、必要な設定を入れていきます。
この辺の操作感もKendraと一緒。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/4ead6a2f-18d7-d32b-a6b3-ace39ca8c836.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/f836ed3c-5d87-9199-7c74-e350e25aa050.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/e6a5ad0f-a78c-46b4-3efd-a6389c74e9b7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/30ef8ecf-de6b-450e-995d-7bb6f15b0403.png)

`Add data source`ボタンを押下すると、アプリケーションとデータソースが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/9e1bc3d2-ce61-8e2b-1d05-78f4de7c8663.png)

続いて`Finish`ボタンを押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/3fe4a3bc-42eb-5e8c-6b0b-e58c34ac9241.png)

Applicationの作成が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/e5e5d51a-6b1d-baa9-ce5a-8698c39aeecb.png)

先ほど`Sync run schedule`の項目で`Run on demand`を選んだので、`Data sources`から当該のデータソースを選択し、手動で同期をかけます。
Kendra同様、crawling→indexingと処理が走ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/eaea037b-637f-1e2e-7e32-f5748cbfe3eb.png)


S3に置いたドキュメントの内容についてのみ回答を返して欲しいならこのままでよいのですが、一般的な生成AIによる回答も期待したい場合、RAGに関する設定を変更する必要があります。
左ペインの`Admin controls and guardrails`メニューから、`Global controls`の`Edit`ボタンを押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/11572f94-28f5-3dff-6414-ae639b957ad7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/982b8297-df94-7a1b-6ee3-52a8a7697297.png)

`Only produce responses from retrieval augmented generation (RAG)`のチェックボックスを外し、設定を保存します。
これにより、一般的な生成AIによる回答と独自のドキュメントに関する内容の両方を回答してもらえるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/c7d33e16-e900-5bca-b26a-eab95c825d23.png)

それでは、`Preview web experience`ボタンからプレビュー画面を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/a4dd4dba-be04-a8b6-b5cb-0ba61927059b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/d55780bb-d669-6a63-07b8-b16302b0067b.png)

この画面では日本語のやりとりができるww
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731275/6f55ff57-9756-af51-f751-3b2c5268a172.png)


# 気になること
### RAG構築で利用するサービスの使い分け
AWS上でRAGを構築する手段はいくつかあり、 Bedrockを使う方法とQを使う方法に大きく分かれそうです。
その使い分けについては、みのるんさんがre:Invent中に確認されていました。

https://twitter.com/minorun365/status/1729688874442461683

re:Invent前に流行っていた(?) Kendra + Bedrock の構成であれば、利用者側でアプリケーションを作り込む必要がありますが、Qではマネコン上の操作だけでRAG構築ができました。
構築にかけられる時間やカスタマイズの要件によって、選択が変わってきそうです。

### コスト
様々な機能が利用できるQですが、「でもお高いでしょ？？」と思ってしまいます。
[FAQ](https://aws.amazon.com/jp/q/faqs/)によると、利用者１人あたり月額20ドル、オプションで5ドル追加すると、Amazon Q Builderを利用できるようです。

ただし、Qに何か他のAWSサービスの操作をさせた時は、当然そのサービスの利用料が発生します。
また、Qのページには追加料金に関する記載があったので、注意が必要です。

> __追加料金__
*Amazon Q インデックスは、ビジネス知識をサポートするために、20,000 ドキュメント単位で 1 時間あたり 0.14 ドル (月額 100 ドル) の料金がかかります。1 つのユニットから始めて、必要に応じてストレージ ユニットを追加できます。各ストレージ ユニットには、月あたり 100 時間のコネクタの使用が含まれます。

https://aws.amazon.com/jp/q/pricing/

「利用者１人あたり」という表現はちょっと曖昧なので、引き続き調べてみたいと思います。
※QのAPIを叩いたIAMの数？
　Qの権限を持っているIAMの数？
　アカウントに存在しているIAMの数？

# 終わりに
NRIネットコム佐々木さんがブログで『すべてはQになる」と書かれていますが、まさにその通りかと思います。
Qは今後AWSの様々なサービスと連携が進み、「Amazon Q in XXX」が増えていくのは明らかです。
今後も積極的にキャッチアップしていきたいと思います。

https://tech.nri-net.com/entry/reInvent2023_keynote?utm_campaign=NRI%E3%83%8D%E3%83%83%E3%83%88%E3%82%B3%E3%83%A0Blog&utm_content=273468970&utm_medium=social&utm_source=twitter&hss_channel=tw-1427218261691703306

# その他参考記事
https://qiita.com/piro877/items/0d5fc0623c0e1ba5d4a2

https://iret.media/88506?utm_campaign=3.0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%96%E3%83%AD%E3%82%B0&utm_content=273843316&utm_medium=social&utm_source=twitter&hss_channel=tw-106958965

https://iret.media/87342

https://dev.classmethod.jp/tags/amazon-q/

https://zenn.dev/topics/amazonq

https://qiita.com/tags/amazonq