Amazon Bedrock Agent と KnowledgeBase を利用したコスト最適化 Slack Bot(Cost Optim Slack Chatbot Genai Agent)を試してみた
先日、興味深いソリューションを紹介する記事を見かけたため、試してみたいと思います。
アーキテクチャ:
利用イメージ:
事前準備(前提要件)
- 下記モデルが利用可能であること(バージニア北部やオレゴンが可能、東京は現時点では不可)
- Anthropic Claude
- Amazon Titan Embeddings v2.0
- Cloud Intelligence Dashboards(CID) - CUDOS v5 が作成済みであること
- Slack アプリケーションが作成可能であること
事前準備の記録は省略版で、結果だけ記載します。
モデルへのアクセス
※ 今回はバージニア北部リージョンで進めていきます。
下記のモデルアクセスを申請します。
- Titan Text Embeddings V2
- Anthropic
結果:
CID - CUDOS v5 構築
下記手順からダッシュボードを構築します。
Bedrockを利用するリージョンと揃えておきたいので、こちらもバージニア北部を利用します。
結果:
Slack アプリ作成
こちらの手順を参考に作成します。
結果:
環境構築
今回は CloudShell を利用して環境構築していきます。
OpenSearch Serverless を構築
手順:
- 各種バージョン確認
$ sam --version
SAM CLI, version 1.131.0
$ aws --version
aws-cli/2.23.5 Python/3.12.6 Linux/6.1.119-129.201.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
- Github からクローン
$ git clone https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent.git
Cloning into 'cost-optim-slack-chatbot-genai-agent'...
remote: Enumerating objects: 46, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 46 (delta 7), reused 3 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (46/46), 1.42 MiB | 17.51 MiB/s, done.
Resolving deltas: 100% (7/7), done.
- ARN などを変更し、デプロイするとエラーに... どうもパスが通っていない様子
$ cd cost-optim-slack-chatbot-genai-agent/cfn-templates
$ sam deploy --guided --stack-name AOSS --region us-east-1 --capabilities CAPABILITY_NAMED_IAM --parameter-overrides IAMUserArn=arn:aws:iam::<AccountId>:role/<devopsrole> --template ./OpenSearchDB.yml
・
・
・
Error: Unable to upload artifact .\src\OpenSearchIndexLambda.py referenced by CodeUri parameter of OpenSearchIndexLambda resource.
Parameter CodeUri of resource OpenSearchIndexLambda refers to a file or folder that does not exist /home/cloudshell-user/cost-optim-slack-chatbot-genai-agent/cfn-templates/.\src\OpenSearchIndexLambda.py
- 直接指定に変更
$ cp OpenSearchDB.yml OpenSearchDB.yml.bk
$ vi OpenSearchDB.yml
$ diff OpenSearchDB.yml OpenSearchDB.yml.bk
151c151
< CodeUri: /home/cloudshell-user/cost-optim-slack-chatbot-genai-agent/cfn-templates/src/OpenSearchIndexLambda.py
---
> CodeUri: .\src\OpenSearchIndexLambda.py
- 再度、デプロイ
$ sam deploy --guided --stack-name AOSS --region us-east-1 --capabilities CAPABILITY_NAMED_IAM --parameter-overrides IAMUserArn=arn:aws:iam::<AccountId>:role/<devopsrole> --template ./OpenSearchDB.yml
Successfully created/updated stack - AOSS in us-east-1
その他の AWS リソースを構築
手順:
- デプロイすると arn に関する変数がクリアされてしまっているので、再度入力しながら進める(再入力しないとエラーになりました)
$ sam deploy --guided --stack-name COC --region us-east-1 --capabilities CAPABILITY_NAMED_IAM --parameter-overrides AmazonBedrockExecutionRoleForKnowledgeBasearn=<arn:aws:iam::AccountId:role/AmazonBedrockExecutionRoleForKnowledgeBase-aosscollection> CollectionARN=<arn:aws:aoss:us-east-1:AccountId:collection/Collection ID> Region=us-east-1 --template ./CostOptimChatbot.yml
Stack Name [COC]:
AWS Region [us-east-1]:
Parameter ApiGwStageName [dev]:
Parameter ApiGwPathPart [api]:
Parameter Region [us-east-1]:
Parameter AmazonBedrockExecutionRoleForKnowledgeBaseArn []: <arn:aws:iam::AccountId:role/AmazonBedrockExecutionRoleForKnowledgeBase-aosscollection>
Parameter CollectionArn []: <arn:aws:aoss:us-east-1:AccountId:collection/Collection ID>
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Successfully created/updated stack - COC in us-east-1
ナレッジベース同期
手順:
今回はこちらをナレッジベースに登録しています。
Slack とイベント連携
手順:
試してみよう
ここまで環境構築が完了出来たら、早速試してみましょう!
サンプルと同じ質問
違うものが返ってきました。おやおや...
サンプルと同じ内容を日本語で質問
日本語でも応答してくれました!返答内容は異なっています。ダッシュボードはホームのURLで、該当する場所だけといったものではないようです。
再度、同じ質問
全く同じ回答でした。生成AIで質問を繰り返すことで表現や内容が変化することがありますが、こちらは無いようです。
特定サービスについて質問
ストレージだと範囲が広いので、ECS について質問したところ回答が得られました。この環境では対象としたアカウントでは ECS は利用していないので、アカウント固有の回答ではなくナレッジベースから一般的な回答をしているようです。
ナレッジベースへデータソースを追加して最初と同じ質問
以前作成したブログ記事を追加してみます。
回答が変化しました。
日本語で最初と同じ質問
こちらも回答が変化しました。
回答の妥当性を確認
コスト最適化の対象として鉄板な EC2 について質問してみたところ、他にもあるのでは?といった項目はありますが、内容自体に違和感がありませんでした。
さいごに
Amazon Bedrock Agent と KnowledgeBase を利用した コスト最適化 Slack Bot ソリューションを試してみました。細かな精度やチューニングなどは今回は行えませんでしたが、比較的容易に環境構築すること出来ました。
デフォルトのままだと、物足りない印象(回答の中で参考となるリンクや引用元があったり、せっかく CID を構築するなら活かした内容になるとより嬉しいなど。ワガママ言っちゃう...)もありますが、例えば利用費を Slack に通知する運用をされているのであれば、そのチャンネルにこの Bot がいれば、その中で回避策を質問するといったユースケースが出来そうです。夢いっぱいです。