地方エンジニアのためのAWSハンズオン@札幌に参加してきた話

## はじめに
会社で生成AIの検証と活用方法を見出す業務を担当することになり、色々と生成AIに関するサービスや活用事例を調べていたのですが、丁度住んでいる札幌でAWSの生成AIサービスの紹介とハンズオンするイベントがあったので、参加してきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/fbb47f10-1682-f6cc-d46d-72ec42269e57.png)

https://connpass.com/event/304712/?utm_campaign=event_reminder&utm_source=notifications&utm_medium=email&utm_content=title_link

## AWS Bedrockのアプリケーション構築入門
こちらの説明は株式会社Fusic(フュージック)の清家 史郎さん(@seike460)より。

Amazon Bedrockは、Al21Labs、Anthropic。Cohere、Meta、Stability AI、Amazonなどの大手AI企業が提供する高性能な基板モデル(FM)を単一のAPIで選択できるフルマネージド型のサービス。

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

ここでのセッションはAPI Gateway経由でAWS LambdaからBoto3を利用してAWS Bedrockを利用するシンプルなアプリケーションの構築。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/800bbfd6-58cd-0a0a-6a8b-12cbd69aebbb.png)

AWSのIDEサービス Cloud 9からAWS SAM(Serverless Application Model
Serverlessの開発とデプロイを簡素化するフレームワーク)を利用してデプロイを実施するというもの。

参加者各自に割り当てられたアカウントを利用してデプロイまでの手順を実施。
詳細は割愛するが、実際のアウトプット以下の通り。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/ccde3879-342c-0500-fd0b-a0e496e8d678.png)

サンプルのHTMLからAPI Gateway経由でLambdaをキックし、Bedrockへ質問を投げて、回答が得られるというもの。
実際に使うにはもっと配慮しないといけないのだろうけど、意外と簡単に使用できることがとても良い。

##  Knowledge Bases for Amazon Bedrock を組み込む
こちらはNECソリューションイノベータ株式会社佐々木　航太(Kota Sasaki)さん、近藤　恭史(Takafumi Kondo)さんより。

上記で作成したBedrockを利用したアプリケーションに、検索拡張（RAG）の仕組みを構築／導入する機能 Knowledge Basesを追加する。

要するにAmazon Bedrockに企業の独自データを生成（検索）対象にできる仕組みというものらしい。これありきのBedrockのような気がする。

出来上がる構成としては以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/642700a6-8b9e-fd20-881b-2c3f9c0a6c92.png)

Knowledge Baseの利用は今回はS3に、独自のマニュアルを入れて、それに関する質問が来たら、内容が返ってくるというもの。

### ナレッジの蓄積
予めS3バケットを作成し、そこにマニュアルのWordファイルをアップロードする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/bd701a03-2eb6-394f-f74f-137810862b90.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/e365418e-78eb-ffed-5840-988ed813c0a1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/0347740c-80a1-09c4-8ec2-2d4e73804da5.png)

ここまででナレッジの蓄積は完了。

### Knowledge Bases作成
Knowledge Basesを作成し、S3バケットにアップロードしたデータとSyncさせてナレッジを活用できるようにする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/c9edf198-78e2-51f9-6e3e-88ca1f982ce8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/0ddbe811-f434-ab1a-c86b-4f364c207f03.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/28ea0c9d-c632-27f0-61da-560c871ddeb8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/c3dcc191-09e3-8c0c-3f90-996ac0835057.png)

ここからナレッジのデータソースをセットアップする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/ef88364f-817c-0386-8ecd-39389bc432d6.png)

途中経過割愛するが、S3に格納したナレッジデータをKnowledge Basesに同期させる。Knowledge base IDは後でLambda layerからキックする際に必要となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/5bb5ee85-5bd7-2db6-5bee-5fb09d67e82e.png)

他実施したこととしては
 - BedrockにアクセスするためのIAMの作成。今回はAmazonBedrockFullAccessを指定。
 - BedrockをキックするためのLambdaを作成。
 - Lambdaのタイムアウト値をデフォルトの3秒から30秒に伸ばす。Bedrockのレスポンスが3秒だと短すぎるため。
 - API Gatewayに作成したLambdaの紐づけ。

個人的にここまでの過程が早く、実際の動作を確認するに至らず…。
しかし、Bedrockの肝要であるS3にデータを蓄積して同期を掛けるところについて理解できたのは収穫だった。別途自分のAWS環境で実施してみたいと思う。

## Amazon Q を使用したアシスタンスサービス利活用入門
株式会社へプタゴン 立花 拓也さんからのご説明。

Amazon Qは昨年2023年12月のAWS re:Inventでも紹介されたAWS版ChatGPTといったものだという認識だったが、自身のAWS環境や他のサイトをナレッジとして利用が出来るものとのこと。

https://aws.amazon.com/jp/about-aws/whats-new/2023/12/aws-announces-amazon-q-to-reimagine-the-future-of-work/

ハンズオンでは外部サイト(Wikipedia)やS3バケットにアップロードされたファイルをナレッジとして回答を行うことができるという内容だった。

以下、Add data soueceを選択し、各データソースを追加していく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/2f2e1301-8edd-93e0-983c-00fea53cf982.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/ce40198d-ca94-c28c-faaa-bc64ff7aaaa3.png)

データソースには外部サイトURLの指定も可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/6777ad99-b8c9-4501-28c7-85645e649f18.png)

他サイトの階層をどこまで手繰るかなどの設定もある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/fddae1d1-b11f-f81a-65d0-38af094f688b.png)

S3にアップロードしたファイルをデータソースとしても利用可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/79875e49-0148-c241-b45c-0c9ca844d0a2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/4162230e-d25e-c050-f920-11d1a7ed8ddf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/4046f2cf-7441-44fb-af73-0858437ced46.png)

こうすることでデータソースの情報を参照した回答を返すことができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/04158a54-f31d-5a16-c7f7-5b79443e27bd.png)

:::note info
ちなみに禁止されたキーワードというのも登録できる。
その場合は、以下のBlocked wordsに禁止キーワードを登録する。
ハンズオンでは、北海道では禁句とされている(?)「karaage(唐揚げ)」を登録していました。ちなみに道民としては唐揚げもザンギもそれぞれ共存している認識ですが。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317553/7891acc1-f9f1-4e0c-9bc3-7132e29216bb.png)
:::

回答となる起源をS3をはじめ、他サイトから選ぶのも簡単なので直感的に使いやすい。企業内で利用するのであれば、やはりS3にいかに正確な情報をため込めるかがポイントとなりそう。

## LT インフラエンジニアが語る CodeWhisper とAmazon Q を利用した境界線
フォージビジョン株式会社 北原 雅人さんからのご説明。

CodeWhisperの説明はなかったが、Amazon Qについて。
結局ChatGPTとAmazon Qだとどっちが良いんだい？という話。

要点としては
 - ChatGPTの方が出力しながら回答。Amazon Qは引用含めて一気に回答出力するので、Amazon Qの方が回答までの所要時間が遅い(印象)。
 - 汎用的な質問(天候、地理等)であればどちらもそこまで大差なし。
 - Amazon Qの方がAWSサービスだけあり、AWSのベストプラクティスやドキュメントに関する回答をしてくれる。例としてRDS全体を暗号化させたい時にどういう手法だとダウンタイムを最小にして実現できるか、とか、AWS WellArchitectの主要な「柱」の説明に「持続可能性」が含まれているetc。

という内容。
当然かもしれないが、AWSサービスをメインにした回答を得たい場合にAmazon Qを選択するのが最適、ということらしい。

## まとめ(所感)
今回のハンズオンに出席しての所感。

 - BedrockもAmazon Qも社内利用を想定し業務に関する回答させたい場合はS3にいかに正しく適切なナレッジデータを溜め込んで管理するかがポイント。
 - S3に入れておくナレッジデータをどのように正確に、かつ鮮度を高くして保管するか？が重要となるので、業務部門にも協力を求める必要が発生する。
 - このナレッジデータの品質を高め、省力化をする仕組みは別問題として検討する必要があり。
 - 当然だが、BedrockもAmazon Qもそれを個別に利用するというより、AWSサービスにいかに組み合わせて使用するか？が肝要なので、インフラ周りの設計等はしばらく変わらず残っていくのでは。

ともあれ、「S3にどんどんデータを貯めていけばOK！」という発想は運用設計上シンプルで分かりやすい。得られたノウハウはとても価値あるものでした。

開催・運営いただいた皆様、ありがとうございました！