Amazon Q Business Applicationの設定方法（2024/5/1更新）

# はじめに
re:Invent 2023で発表されたアップデートの中で、特に話題となったのがAmazon Qでした。発表されてからしばらくプレビューの状態が続いていましたが、2023/4/30にようやくGAとなりました。

https://aws.amazon.com/jp/blogs/aws/amazon-q-business-now-generally-available-helps-boost-workforce-productivity-with-generative-ai/

以前この記事でAmazon Q Business Applicationのプレビュー版での設定方法をまとめましたが、GAにともない情報が古くなってしまったため、内容を一新しました。

# Amazon Q Business Applicationとは
一言でいうと「エンタープライズ向けの生成AIチャットアプリ」です。企業のデータに基づき、質問に答えたり、必要な情報を検索したり、内容を要約したりといったことが可能となります。

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

「責任あるAI」の考えに基づき、アプリケーションにアクセスできるユーザは制限可能で、企業のガイドラインに基づき不要なトピックやキーワードの使用した回答を禁止することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/1c44d4d9-16ba-46db-94a1-e1bae3a4ee8a.png)

# 構成
Amazon Q Business Applicationの構成を整理してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/3076bf52-d23b-8e25-1cf1-3c6d1edc075d.png)

Amazon Qに外部からアクセスするにあたり、SAML 2.0準拠のアイデンティティプロバイダー（IdP）が必要となります。
プレビュー期間中はExtara IDやOktaなど外部サービスを利用することができましたが、現在はIAM Identity Centerに限定されています。（外部IdPを利用している場合は、IAM Identity Centerへの移行が求められています）

https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/app-idp-integration.html

https://dev.classmethod.jp/articles/q-business-iam-identity-center

またIAM Identity CenterのインスタンスはAmazon Qと同じリージョンで設定する必要があります。執筆時点で、Amazon Qはバージニア北部とオレゴンリージョンのみ利用可能ですので、東京リージョンでIAM Identity Centerを設定している方はご注意ください。

本記事では、AWS Organizationsを有効化にした状態で、バージニア北部リージョンにてIAM Identity Centerの組織インスタンスを設定しています。

# 設定方法
## アプリケーション作成
AWSマネジメントコンソール上で、Amazon Qを開き、「Get Started」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/93b53066-c5be-fca3-34f2-23f4509c9fbb.png)

IAM Identity Centerの設定に移りますので、「Enable」を押下し有効化してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/afdb8442-3c30-a475-63bb-8b37007569b7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/3426e955-847a-0d79-ce06-2ab822561b04.png)

Amazon Qには、LiteとProの2プランが用意されユーザー単位で課金が発生します。(Liteは3ドル/月、Proは20ドル/月)
今回はAmazon Q Business Proを利用しますが、先に進むボタンが見当たらないので、ひとまず「Amazon Q Business Lite」の「Subscribe in Q Business」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/6ecdf861-25cb-172f-7301-50295fa79f8b.png)

Amazon Q Businessの画面に遷移しますので、「Create Application」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/7b2ba176-e098-c6c8-fc7a-ae73ee65231b.png)


任意のアプリケーション名を入力します。サービスロールについて、未作成の場合は「Create and use a new service-linked role (SLR)」を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/869781a9-4b1a-bc23-e7ae-6205ca97ac12.png)

画面下部の「Create」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/7ea2f4b8-ef1f-1f9d-d3ed-aa0db1501ec2.png)

RAGとして利用するためにRetrieverの設定が必要です。Amazon Q専用のnative retrieverと既存のretrieverから選択します。

前者はAmazon S3やGoogleDriveなど約30種類のデータソースを指定することが可能です。

一方後者はKendraのみ指定できます。今回はnative retrieverを選択しました。

またIndexのユニット数も指定可能です。大量のドキュメントを読み取る場合は、より高いユニット数（上限50）を設定する必要がありますが、コストもその分発生するため、今回はデフォルト値の「1」で設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/7c648557-f03c-e2d7-9e16-48b24153b22e.png)


最後にデータソースを設定します。AWS以外のサービスも選択可能ですが、認証設定が求められる点はご注意ください。今回は「Web crawler」を選択し、Webサイトを読み込ませることにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/9cb764e9-f663-df74-f7a9-897df41c1f40.png)


任意のデータソース名を入力し、対象のURLを入力します。今回はハリーポッターのWikipedia（英語サイト）を登録しています。
「Source URLs」を選択し、当該ページのURLを入力します。URLは10まで登録可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/be8d55c6-88b1-418c-4e52-68e37d985e13.png)


IAMロールは「Create a new service role」を選択し新規作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/855e82dd-a39b-77aa-5d3d-9b7fcee6fd1f.png)


Sync run scheduleはデータソースからAmazon Qに同期する頻度のことです。自動更新も選択できますが、今回は「Run on demand」を選択し、任意のタイミングで手動更新することとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/3ba3fac8-9f5a-0b39-52c4-9dbf31da0db2.png)


他の項目はそのままで、「Add data source」を押下します。作成が完了するまで数分待ちましょう。

「Applications」の画面に戻り、先ほど設定した設定のステータスが「Created successfully」となったら、当該設定を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/6cd0c95e-4eb2-e7e1-079c-939c2c2ed77f.png)

「Data sources」より、登録したデータソースを選択し、「Sync Now」を押下し設定の同期を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/fb993b28-9cc0-1cb9-7beb-137a907542f5.png)



## ユーザー／グループ設定
IAM Identity Centerで作成したユーザーを、Amazon Qの利用者として登録します。

Amazon Qのアプリケーションの編集画面にある「Groups and users」より、アプリケーションを利用するユーザーを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/93d605c9-193a-b4b7-9b44-8304f43531b8.png)

今回はグループではなくユーザーのみ登録します。「Users」より「Add groups and users」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/da794e4f-b65e-c9eb-c52e-c3971eb76a30.png)

「Assign existing users and groups」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/178747ba-032b-be5c-aba5-605a1ee4827d.png)

IAM Identity Centerで登録されているユーザーを検索し、選択します。登録されたら「Done」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/a2334e97-07d8-0d1b-fe84-e07c75fb191b.png)

「Manage access and subscriptions 」を開き、先ほど登録したグループまたはユーザを確認し、「Subscription」からプランを選択します。今回はBusiness Proを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/9575de23-77c7-5400-9a66-4a5b4dd125f5.png)

サブスクリプションの確認画面が表示されます。問題がなければ「Confirm」を押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/77b9cbe2-d206-f867-ba79-93d21168791f.png)


## ガードレール設定
機密情報の漏洩や公序良俗に反する応答を制御するために、ガードレールの設定が可能です。作成したアプリケーションを選択したうえで、コンソール画面の左ペインから「Admin controls and guardrails」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/95a4b205-9a27-d10d-ce2d-89ea6e4f430b.png)


特定のキーワードが入力されたときに回答を拒否するGlobal controlsと、特定のトピックが出たときに指定のメッセージを表示させるTopic speciffic controlsが設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/df42eddf-b65a-ef3d-27d3-9159ec4274e6.png)


まずはGlobal controlsから見ていきますResponse settingsでは、インデックスで情報がヒットしなかった場合、独自のナレッジで回答するかどうかを選択できます。

Blocked wordsでは、特定のキーワードが入力された場合に、回答を中断することができます。今回は「Lord Voldemort (ヴォルデモート)」を登録しました。当該ワードが入力された際に、返答するメッセージも自由に決めることができます。Feature settingsでは、利用者がチャット内にファイルをアップロードすることを許可できます。
設定が完了したら「保存」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/33775ff6-28c6-9a5c-3a61-84461164dead.png)

Topic speciffic controlsも見てみましょう。制御したいキーワードが膨大な場合、トピックのレベルで集約的にルールを設定することができます。今回は「Slytherin (スリザリン)」の話題になったとき、出力を禁止することにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/5ad8b61f-1fdd-5bd2-4e30-75e8d32c8ba3.png)

「Add New Rule」を押下すると、ワードがヒットしたときのアクションとメッセージを設定することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/4b96d9e1-2497-d321-105d-19a947615ec8.png)



# Webエクスペリエンスのカスタマイズ
アプリケーションを作成した段階で、Webエクスペリエンスと呼ばれるチャットインターフェースが自動的にデプロイされます。

Webエクスペリエンスのカスタイマイズをすることも可能で、アプリケーションの設定画面から「Customize web experience」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/b357113f-8f4c-d405-ef5b-86c278c66edb.png)

設定項目を見ると、アプリケーションの名称やウェルカムメッセージ等の内容を変更することができます。また「メールの下書き作成」や「レポートの要約」といった用途に沿ったサンプルプロンプトを表示させることも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/442ec3b1-5b9e-88f9-b319-3632a30924b0.png)

## プレビュー
アプリケーションの設定画面より、「Web experience settings」を選択し、「Deployed URL」を押下すると、作成したWebエクスペリエンスに接続できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/b178e8af-ce8e-611a-b40d-e76f0ab3392e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/a618ecb0-7a94-0b34-a402-bec98f482610.png)


チャットのページが表示されますので、設定したデータソースの内容に関する質問をしてみましょう。
言語については公式ドキュメントでは英語で応答するよう最適化していると記載がありましたが、日本語で質問しても適切な回答がありました。

まずは「ハリーポッターの映画は何作公開されましたか？」と質問してみます。すると「2001年～2011年の間に8作品が公開された」と回答がありました。回答の根拠となるソースも確認することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/8983d7c1-de60-dd11-256d-a5cd549a9495.png)


続いて「ヴォルデモート卿とは誰ですか？」と入力します。Blocked wordsでは英語で登録していたため、禁則文字と判別されず回答が返ってしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/56291c76-4412-84a9-393f-ffdd55f6d061.png)

同じ質問を英語で入力します。すると今度は、「管理者によって禁止されている」と回答がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/3867958e-c0a6-7e3e-690b-178233b163ed.png)


また「ホグワーツに存在する寮は何がありますか？」と入力したところ、スリザリンに関するトピックに該当すると判定され、こちらも回答が拒否されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/bcfa5bfd-acaa-abd5-d2c5-e62de9019a3b.png)


## IAM Identity Centerからの接続確認
IAM Identity Centerのログイン画面より、「Applications」を選択し、「AmazonQ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/11901ffd-7690-832b-73a4-d41494ebf160.png)

しばらく待ったのち、アプリケーションが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/041861b3-c398-a3ab-685d-2e926b566b8f.png)


ちなみにIAM Identity Centerでの設定状況を見てみましょう。IAM Identity Centerを開き、「アプリケーション」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/fd8e539b-0fa6-75a9-a1d0-a31dfacbb204.png)

Amazon Q側の設定でIAM Idntity Centerを有効化したことで、AWSマネージドアプリケーションに登録されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665293/292b1fd3-685c-4ecb-45b4-465f76603c3a.png)




# Bedrockを利用した場合の違い
Amazon Bedrockを利用してもRAGのアプリケーションは構築可能です。Amazon Bedrockと比較したAmazon Qのメリデメは以下の通りです。

## メリット
* ノーコードで構築可能
非エンジニアでも作成が容易です。Bedrockを利用する場合、Knowledge BaseやAgentを活用することでコンソール上でも設定可能ですが、フロント部分の作りこみは必要となります。
* 短時間で作成可能
Amazon Qは構成がシンプルのため、短時間でデプロイし、PoCを実施することができます。
* 利用者を制限可能
IAM Identity Center利用した認証設定の実装が容易で、社外の第三者による不正アクセスを防ぐことができます。

## デメリット
* 柔軟性に乏しい
基盤モデル(FM)を自由に選択できません。(そもそもどのモデルがAmazon Qの裏で動いているのか公表されていない)
* 日本語対応が不十分
日本語で質問することは可能ですが、先のBlock Wordsのように言語の違いから意図しない出力結果が得られてしまうことがあるため、注意が必要です、こちらは今後のアップデートに期待しています。
* ユーザ数分の課金が発生する
利用頻度にかかわらず利用させたいユーザの数だけサブスクリプションの登録が発生するため、全社規模で提供する場合は費用対効果が低くなる可能性があります。

# 最後に
2024/6/30までは、請求なしで利用可能のため、導入可否を検討している方はお早めに触れてみてはいかがでしょうか。

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