Amazon Bedrock Agent と KnowledgeBase を利用したコスト最適化 Slack Bot(Cost Optim Slack Chatbot Genai Agent)を試してみた

Amazon Bedrock Agent と KnowledgeBase を利用したコスト最適化 Slack Bot(Cost Optim Slack Chatbot Genai Agent)を試してみた

Clock Icon2025.01.31

先日、興味深いソリューションを紹介する記事を見かけたため、試してみたいと思います。

https://community.aws/content/2rwP987474sJGKCyTqnF2Yo7jtN/cost-optim-slack-chatbot-with-aws-bedrock-agent

https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent

アーキテクチャ:
スクリーンショット 2025-01-31 16.41.37

利用イメージ:
スクリーンショット 2025-01-31 16.42.25

事前準備(前提要件)

  • 下記モデルが利用可能であること(バージニア北部やオレゴンが可能、東京は現時点では不可)
    • Anthropic Claude
    • Amazon Titan Embeddings v2.0
  • Cloud Intelligence Dashboards(CID) - CUDOS v5 が作成済みであること
  • Slack アプリケーションが作成可能であること

事前準備の記録は省略版で、結果だけ記載します。

モデルへのアクセス

※ 今回はバージニア北部リージョンで進めていきます。
下記のモデルアクセスを申請します。

  • Titan Text Embeddings V2
  • Anthropic

結果:
スクリーンショット 2025-01-31 17.07.28

CID - CUDOS v5 構築

下記手順からダッシュボードを構築します。
Bedrockを利用するリージョンと揃えておきたいので、こちらもバージニア北部を利用します。
https://catalog.workshops.aws/awscid/en-US/dashboards/foundational/cudos-cid-kpi/deploy

結果:
スクリーンショット 2025-01-31 17.36.02

Slack アプリ作成

こちらの手順を参考に作成します。
https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent/tree/main?tab=readme-ov-file#create-a-slack-app

結果:
スクリーンショット 2025-01-31 17.39.44

環境構築

今回は CloudShell を利用して環境構築していきます。

OpenSearch Serverless を構築

手順:
https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent/tree/main?tab=readme-ov-file#deploy-opensearch-serverless-with-cloudformation

  • 各種バージョン確認
$ 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 リソースを構築

手順:
https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent/tree/main?tab=readme-ov-file#deploy-the-rest-of-the-architecture-apigw-lambdas-bedrock-agent-knowledgebase-roles

  • デプロイすると 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

ナレッジベース同期

手順:
https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent/tree/main?tab=readme-ov-file#run-the-crawler-to-sync-the-knowledgebase

今回はこちらをナレッジベースに登録しています。

https://catalog.workshops.aws/awscff/en-US

Slack とイベント連携

手順:
https://github.com/aws-samples/cost-optim-slack-chatbot-genai-agent/tree/main?tab=readme-ov-file#use-cfn-apiurl-output-in-the-slack-event-subs

試してみよう

ここまで環境構築が完了出来たら、早速試してみましょう!

サンプルと同じ質問

スクリーンショット 2025-01-31 18.34.46

違うものが返ってきました。おやおや...

サンプルと同じ内容を日本語で質問

スクリーンショット 2025-01-31 18.37.07

日本語でも応答してくれました!返答内容は異なっています。ダッシュボードはホームのURLで、該当する場所だけといったものではないようです。

再度、同じ質問

スクリーンショット 2025-01-31 18.42.55

全く同じ回答でした。生成AIで質問を繰り返すことで表現や内容が変化することがありますが、こちらは無いようです。

特定サービスについて質問

スクリーンショット 2025-01-31 18.50.55

ストレージだと範囲が広いので、ECS について質問したところ回答が得られました。この環境では対象としたアカウントでは ECS は利用していないので、アカウント固有の回答ではなくナレッジベースから一般的な回答をしているようです。

ナレッジベースへデータソースを追加して最初と同じ質問

以前作成したブログ記事を追加してみます。
https://dev.classmethod.jp/articles/aws-cost-optimize-cheat-sheet-202307/

スクリーンショット 2025-01-31 19.01.23

回答が変化しました。

日本語で最初と同じ質問

スクリーンショット 2025-01-31 19.05.44

こちらも回答が変化しました。

回答の妥当性を確認

スクリーンショット 2025-01-31 19.12.43

コスト最適化の対象として鉄板な EC2 について質問してみたところ、他にもあるのでは?といった項目はありますが、内容自体に違和感がありませんでした。

さいごに

Amazon Bedrock Agent と KnowledgeBase を利用した コスト最適化 Slack Bot ソリューションを試してみました。細かな精度やチューニングなどは今回は行えませんでしたが、比較的容易に環境構築すること出来ました。

デフォルトのままだと、物足りない印象(回答の中で参考となるリンクや引用元があったり、せっかく CID を構築するなら活かした内容になるとより嬉しいなど。ワガママ言っちゃう...)もありますが、例えば利用費を Slack に通知する運用をされているのであれば、そのチャンネルにこの Bot がいれば、その中で回避策を質問するといったユースケースが出来そうです。夢いっぱいです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.