AWS完全初心者がAmazon Bedrockのハンズオンに挑戦してみた話

## はじめに
こんにちは。Tsukasaです！
最近どこに行っても「生成AI」って言葉を聞かない日がないですよね。
この間参加したJapan IT Weekでも生成AIの話が多かったですし、来月参加するAWS Summitでも生成AIに関するワークショップやイベントが沢山あるみたいです。
というわけで今回はAWSの生成AIの代表格であるAmazon Bedrockを用いてハンズオン学習をやってみました！

## そもそもBedrockとは？
「Amazon Bedrock」は、サーバーレスで手軽に最新の生成AIモデルを利用できるAWSのサービスです。生成人工知能（生成AI）は、会話や画像などの新しいコンテンツやアイデアを作成できるAIの一種です。従来のAIとは異なり、生成AIが自ら獲得した学習成果から新たなコンテンツを生成することができます。利用に専門的なスキルは不要で、誰でも簡単にコンテンツを生成できるため、業務効率化やアイデア創出などビジネスシーンでも活用が進んでいます。
AWSの公式にも詳細が載っていますので、気になる方はこちらも是非ご確認ください。

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

## 今回の実装内容
とはいえ、AWSもBedrockも初心者の自分が何の材料もなしにBedrockを触ることは不可能です。
そのため今回はBedrockといったらこの方！みのるんさんが初心者の方でも実装できるBedrockのハンズオン学習手順を作成してくださいました。
内容としては、BedrockのナレッジベースでRAGアプリを作成し、社内文書を検索することができるようにすることがゴールになります。

https://qiita.com/minorun365/items/24dfb0ea3afde6ed0a56

具体的な手順は是非こちらの記事を見ていただき、実践していただけたらと思います。
私も実際にやってみたので、その内容について書いていけたらと思います。

## やること

今回の実装のイメージは下記のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/3a61cb05-fc0e-422e-8bfa-8753d349b247.png)

IAMユーザーの作成
S3バケットの作成
Bedrock側の実装
アプリ側の実装(CloudShell)

それでは1つずつ見ていきたいと思います。

## IAMユーザーの作成
まずはIAMユーザーの作成からです。
AWSのアカウントを既にお持ちの方でしたら、ルートユーザーというログインユーザーがあるかと思いますが、ルートユーザーだと権限が強すぎるので、このような作業には専用の個別ユーザーを作成するのがベストプラクティスだそうです。(初心者なので、この辺りもまだよくわかっていないんです。。)
そのためIAMユーザーを作る必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/06561746-a5e2-4551-a2a9-975ff320e86d.png)

コンソール画面からIAMと検索をして、IAMを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/43486b99-6570-4960-a75b-6f3593708f5a.png)

その後ユーザーから「ユーザーの作成」をクリックし、ユーザーの作成を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/0a10a867-e62d-4db9-8970-e9b0eb5bb761.png)
こちらでは詳細は割愛いたしますが、
その後はステップ1~4までを手順通りに行います。
作成が完了したら、現在ルートユーザーでログインしているアカウントからログアウトして、先程作成したルートユーザーでログインします。

## ナレッジベースの作成
こちらではS3バケットの作成とBedrockの実装を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/9b930491-7377-4ec4-b60e-f380021025dd.png)

最初に紹介したみのるんさんの記事にも書いてありますが、AIに参照させる独自情報として、KDDIアジャイル開発センター（通称KAG）という会社が、「かぐたん」というSlackチャットボットを開発したという最近の内容の文書を使います。

https://prtimes.jp/main/html/rd/p/000000010.000115171.html

事前準備としてはこちらの文書をPDF化しておく必要があります。
それではナレッジベースの作成を行いたいと思います。

## S3バケットの作成
こちらではS3バケットの作成を行います。
S3バケット作成の目的は先程PDF化した社内文書を保存するためのストレージとして作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/92a75e61-7e70-4157-a6ab-43dbc4e66280.png)

S3バケットの作成方法についてはこちらも割愛しますが、IAMユーザー作成の時と同じようにコンソール画面からS3を検索して作成を行います。
バケット名はS3バケットの名前は世界中でユニークである必要があるため、何でもいいので被らなさそうなバケット名を設定する必要があります。
S3バケットが作成できたらファイルをアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/82f829aa-4eae-4410-bb5b-24e09c380166.png)

「ファイルを追加」ボタンを押下して、PDFファイルをアップロードします。
余談ですが、AWSの認定試験問題を解いていると、問題文で「S3バケットにファイルをアップロードした際に〜」といった文章を見かけますが、こうやってファイルをアップロードするんですね。こういった発見があるものハンズオンならではですね。

## Bedrock側の実装
今回のメインでもあるBedrockの実装を行います。
同じようにコンソールでBedrockと検索を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/a4f6563c-3f59-4157-b66f-5cdbbf030d7c.png)

こちらも詳細は割愛いたしますが、ここでやることとしては
**ナレッジベースの作成**
**生成AIの有効化**
になります。
詳しくは初めに紹介した記事を見ていただけたらと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/7e51314a-7649-406e-add3-76381eb03362.png)

こちらでうまく行くと、S3バケットにアップした社内文書をBedrcokに紐づけているので、Bedrock内部で質問に対して正しい回答を提示してくれます。

## アプリケーション開発
ナレッジベースの実装と作成が完了したら最後はアプリ側の実装に入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/8a2eeae7-18dc-4cbd-924a-08a98c7d7fa1.png)

こちらはCloudShellを利用します。
同じようにコンソール画面でCloudShellを検索します。
尚、この際の注意事項ですが、このCloudShellは新しいタブを開いた上で、実装をしてください。
何故なら、この後Bedrockの画面もまだ使いますので、タブを2つにした方が便利だからです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/f13e72b3-7605-40cd-a57c-40fbb110b125.png)

こちらも重ねての説明になりますが実装方法の詳細は割愛させていただきます。

## 起動確認
最後にアプリの起動確認を行います。
上記まで完了すると下記のようなサイトをブラウザで開けるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/57de7e84-7444-4c88-8db3-673be728f5e7.png)

ここに「かぐたんって何？」と入力をして、「質問する」ボタンを押すと、S3にアップデートしたPDFファイルの内容がここに記載されます。
それでは「質問する」ボタンを押してみます....
あれ....？？？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/1c600032-c186-4c95-88b9-4759df6481a4.png)

エラーが出ました。
何故だ？手順書通りにやったのにおかしい。
ただこういう時は慌てず、エラー内容を一つ一つ見ていく必要があります。
このエラー文はナレッジベースのIDが存在しないと記載があります。よく確認したら、私はナレッジベースIDではなく、データソースIDを貼り付けていたのです。
その他にもBedrockは東京リージョン、アプリ側のCloudShellはバージニア北部リージョンを使っていました。リージョンが合わないとエラーが出るのは当然ですよね。というわけで、改めてナレッジベースIDを貼り付け、リージョンも統一した上で、再度「質問する」ボタンを押してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/bf239a49-7619-4316-bf65-17d50731d139.png)
おーー！！
今度はうまくいきました！！
普段使っているChatGPTのようなアプリの完成です！
今流行りのBedrock、私も実装できました！

## 終わりに
いかがだったでしょうか？
AWS完全初心者の自分でも時間はかかりましたが、無事に実装することができました。
私は途中でエラーが出てしまいましたが、エラーを出すことで学ぶことも沢山あると思います。
例えば先程のリージョンが合わないとエラーになるというのも一見当たり前と言えば当たり前かもしれませんが、実際にハンズオンでやってみることで改めて感じられることだと思います。
これまで、座学を通した勉強をやってきましたが、今後はハンズオン学習をより取り入れることで、上位資格合格にも近づくと思います。
そして何よりもアプリを作れたり、イメージしたものを作れると楽しいですよね！
自信にも繋がると思います！
まだ、自分1人で考えて作るのは難しいですが、積極的に手を動かしながらどんどんできることを増やしたいと思います！