はじめてのAmazon Qアプリケーション

Amazon Qが来た。

![スクリーンショット 2023-11-29 20.42.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/b4f14034-8295-9763-705f-1c71bad9d052.png)

https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-amazon-q-preview/

Amazon Qはビジネス仕様のAIアシスタントで、企業内に蓄積したプライベートなデータを元に対話することで、ハルシネーションを抑制しつつ精度の高い応答を得ることができる、らしい。

何はともあれ触ってみる。

## Amazon Qアプリの作成

2023年11月30日現在、まだプレビュー中で東京リージョンでは使えないので、バージニア北部リージョンに移動した上でアプリ作成開始。

### 1. ユーザーの作成

Amazon Qはユーザー課金であるため、まず最初にユーザーを作る必要がある。

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

ユーザー名、Eメールを入力して作成する。
[公式ドキュメント](https://docs.aws.amazon.com/amazonq/latest/business-use-dg/deploy-experience.html)を見る限り、後続で作成するWeb UIには外部IdPからログインするようで、正式にはIdPのユーザー名と合わせる必要がありそうだが、今回はそこまではやらないので適当なユーザー名を入れておく。

![スクリーンショット 2023-11-29 20.52.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/456b5bb1-f303-fed2-0510-1db41b42f156.png)

### 2. アプリの作成

アプリ名、（IAM）サービスロール、暗号化などを設定する。
今回は全てデフォルトで進む。

![スクリーンショット 2023-11-29 20.57.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/e66c0765-5e2b-5204-c899-cf692f7c4774.png)

### 3. Retrieverの設定

待つこと数分。次にRetrieverを設定する。
その前に、Retrieverとは何か。全くわからないので、再び[公式](https://docs.aws.amazon.com/amazonq/latest/business-use-dg/concepts-terms.html)を読む。

> **Retriever**
> A retriever pulls data from an index in real time during a conversation. Amazon Q 
> provides retrievers for Amazon Kendra indexes and also for a native index.

RAGのインデックスを検索するための主体、を指すらしい。
既存のKendraインデックスを使うか、Amazon Qのネイティブインデックスを使うかを選べる、とあるので、今回はKendraインデックスを使うことにする。

注記）　実はネイティブインデックスも試してみたのだが、サンプルデータセット、自前のS3ともうまく追加できなかったので、ここではいったん諦めた経緯がある。
- S3バケット ... 一晩経ってもSync完了せず。
- サンプルデータセット ... 以下のエラーでSync失敗。
```
S3-5110 Error message: Unable to connect with provided S3 bucket,Please try again with valid bucket.
```

昨日プレビューで出たばかりなので、まだ色々あるっぽい。まあ、そのうち解決するだろう。

ちなみにネイティブインデックスを選択した場合はインデックス数を指定して進んだのち、後行程でデータソース（S3やサンプルデータセットなど）を選択・同期することになる。つまり、Kendraインデックスの場合とやることはほとんど変わらない。

![スクリーンショット 2023-11-30 11.12.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/f9352492-1bdd-8bc3-1a2f-68ed5bada8f5.png)

### 4. Kendraインデックスの作成

いったん別タブでAmazon Kendraの画面を開く。

Kendraのインデックスはサンプルドキュメントを使用して新規に作成する。
Kendra側の細かい作成方法は省略するが、大まかなステップとしては、

1) インデックスを作成し、
1) データソース（サンプルデータセット）を指定し、
1) Syncする。

という流れになる。

最終的に以下のようなインデックスができていればOK。なおSearch ExperienceはAmazon Qの側で作るので必要ない。

![スクリーンショット 2023-11-30 11.03.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/5ce40070-4136-15d7-4681-2b66770c291d.png)

Kendraインデックスが作成されたら、Amazon Qに戻ってインデックスを指定すればOK。

![スクリーンショット 2023-11-30 9.59.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/2b8c2e6d-75f7-a948-87d4-6f99b0d75303.png)

これでデータ部分は調った。

### 5. Web UIのカスタマイズ

WebアプリのUIが提供されるようで、そのフロントエンド画面をカスタマイズできる。
意外にも日本語OK...と思ったら、そんなに甘くはなかった。

![スクリーンショット 2023-11-29 22.00.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/5fcbc6b3-aabc-1af6-c7d9-c9d53511b82d.png)

ただ、Welcomeメッセージだけは例外的に日本語が使えるようだ。

UIはともかく、真に大事なのは検索対象のドキュメントと検索ワードに日本語が使えるようになることなので、これについては早期のアップデートを期待したいところ。

なお、兄弟分？のKnowledge Bases for Amazon Bedrock（マネージドRAG）の方は、手元で試してみた限りでは、Claude v2を使えば日本語ドキュメント/日本語検索も問題なくこなせた。実装も簡単なので、興味のある方は是非試してみて欲しい。

https://aws.amazon.com/jp/about-aws/whats-new/2023/11/amazon-bedrock-knowledge-bases/

### 6. Web UIのテスト

インデックスのSyncが完了していることを確認した上で、Web UIから検索を実施する。
ちなみにSync完了前に試すと、以下のようなやり取りで終わる。存在しない想像上の情報で回答される（ハルシネーション）ことがない点に注目したい。

![スクリーンショット 2023-11-30 0.25.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/c8831104-c96e-e0ff-63f2-f49ddd3e3ef0.png)

Sync完了後の成功例はこちら。ちゃんと出典も明示されている。

![スクリーンショット 2023-11-30 14.37.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609876/547448ad-5cff-6ff8-d8c2-5a18edbb5ef4.png)

### 7. Web UIのデプロイ

ここは、どうやらIdPとの連携設定をしないと完了しないようなので、今回は省略。
また時間を見つけてトライする。

---

今回はここで終了。
インデックスで試行錯誤したが、ステップ自体はいたってシンプルだった。

## その他のAmazon Qファミリー

Amazon Qには、いわゆるAIアシスタント機能の他にもIT技術者/開発者向けの機能セットがあり、以下のようなことができる。
- マネジメントコンソールで、AWSについてあれこれ質問する
- EC2インスタンスの作成時に、用途に応じて最適なインスタンスクラスとサイズをご案内してもらう
- Lambdaをテストしていてエラーを吐いた時に、エラーの原因と対策を調べてもらう
- VSCodeなどのIDEでコードレビューしたりコードの解釈をお願いしたりする
- AWS ChatbotでSlack上で`@aws 何々`と呼びかけて相談に乗ってもらう

詳しくは以下。

https://aws.amazon.com/jp/blogs/aws/amazon-q-brings-generative-ai-powered-assistance-to-it-pros-and-developers-preview/

まだ表示されなかったLambda連携以外は一通り試してみたが、どれもなかなか便利そうだった。
（唯一、Chatbotだけは関連しそうな文書を列挙するだけで今ひとつ生成AI感が薄かったが、そのうち改善されるだろうか...）

他にもAmazon QuickSight連携（生成BI）やAmazon DataZoneのアセット説明生成機能などもプレビューリリースされており、これからもいろんなAWSサービスにAmazon Qがビルトインされて便利になっていく未来が期待できそうだ。

## おわりに
生成AIの登場とその後の激しい競争により、ITやビジネスの現場を取り巻く日常は、一年前とは様変わりした感覚がある。
一年後には、果たして何がどうなっているのだろうか。