Amazon Bedrock Knowledge Bases Web Crawler (Preview)で作る自分チャットボット🤖

ジャーニーマン( @beajourneyman )です。長いの"ジャニ"と呼ばれています。

Amazon Bedrock Knowledge Bases Web Crawler (Preview)で「自分チャットボット🤖」を作って、実際に問い合わせてみた内容のまとめです。今回は「モデルアクセスの有効化」は割愛しています。また、ブラウザの日本語設定をオンにしている環境ですので、画面の表示がカタカナになってるケースがあります。ご留意ください。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/webcrawl-data-source-connector.html

Web Crawler の対象にしたのは自分のQiitaです。記事公開本数も40本弱とちょうど良さそうな分量だと感じたので、実際にクロールしてみました。

https://qiita.com/beajourneyman

# 構築手順

AWSマネージメントコンソールにログインし、サービスから「Ammazon Bedrock」を選択します。左ペインの「オーケストレーション」メニューの中から「ナレッジベース」を選択します。画像右下オレンジ色の「ナレッジベースの作成」ボタンを押します。
![image (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/c6946920-c1d8-d187-e172-169af1dfd500.png)


画面遷移すると画面中央ボティ部の左側に以下のようにどのステップを実行しているか分かるチュートリアルが出てきます。今どのステップか分かりやすいです。そちらのステップに則って解説します。

ステップ 1：ナレッジベースの詳細を入力
ステップ 2：データソースを設定
ステップ 3：埋め込みモデルを選択し、ベクトルストアを設定する
ステップ 4：確認して作成

## ステップ 1：ナレッジベースの詳細を入力
分かりやすい「ナレッジベース名」を設定して、IAM許可はデフォルトの設定、「Web Crawler - Preview」を選択して最下部のオレンジの「次へ」ボタンを押します。タグやログは、お使いのAWSアカウントのルールに則ってご設定いただくと混乱がないと思います。
![image (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/8fddfdfa-31c4-04d0-23bf-25888cd9f3b2.png)

## ステップ 2：データソースを設定
続いて同じく分かりやすい「データソース名」を設定し、ソースURLを設定します。今回は著作権的にも問題ない自分のQiita執筆記事としました。同時に「同期スコープ」と「Content Chanking and Persinng」の設定ができますが、デフォルトで下部「次へ」ボタンを押します。「クローリング最大スロット」は1〜300で設定でき値が大きいほど早くなりますが、ソースのURL数が分かっている場合は、任意の値にしても良いです。約40記事なので40にしました。
![image (27)のコピー8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/3027e8ba-a89c-b06f-f043-af6cdbf2fb4d.png)
![image (27)のコピー9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/9bd60a34-6f18-af3d-5f64-42c1693023c2.png)

## ステップ 3：埋め込みモデルを選択し、ベクトルストアを設定する
「埋め込みモデル」は料金と用途に応じて選択します。今回は「Titan Text Embedelings v２」にしました。「ベクトルデータベース」は左が新規作成、右が既存へ追加になります。
![image (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/ccf7b711-0acf-7dc3-5999-c2a9e17e29b6.png)

＜余談＞
右を選ぶケースは、既に構築済みのナレッジベースに新たな知識を投入してRAGを強化する場面で利用するユースケースです。実際にやってみると内部的に別々で持っているデータソースながらひとつのナレッジベースで回答してくれます。利用者側は選ばなくて良いので、楽なのかなと思います。「コレクションARN」以降は、「Amazon OpenSearch Service」の「コレクション」から対象コレクションを選んで値を確認し設定します。
![image (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/27894312-425b-4554-f4f6-cae73e5a7df6.png)
![image (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/8f78d139-0023-9431-5b82-bb5164e17f88.png)

## ステップ 4：確認して作成
「確認して作成」ステップまで来ると設定した内容が表示されます。問題なければ、右下の「ナレッジベースを作成」ボタンを押します。「データソース〜設定し名前〜がナレッジベース〜設定し名前〜に正常に追加されました」とグリーンのメッセージが表示され「ナレッジベースの概要」が表示されます。こちらは数分要するコトがあります。
〜前略〜
![image (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/e339294b-3168-cca0-fba0-cef826e3f742.png)

＜ご注意＞
最近、リソースの制限が厳しいのか構築に失敗するケースを聞きます。何度か実施しても失敗が続くようなら、リージョンを変えて構築してみてください。その際は有効なモデルが異なるケースもあるので「モデルアクセスの有効化」でご確認いただき、必要に応じてご設定ください。

## 最後に：同期する
ナレッジベースが追加されています(当方環境では3つになっています)。リストの「名前」の下から作成したナレッジベースのリンクを選択してください。
![image (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/f0eef997-7761-f31a-9ae6-8fc5d3a2689a.png)

作成できたら「同期」します。こちらには数分かかる場合があります。実際に計測してみたら7分30秒かかりました。
![image (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/053dd08d-5be2-2c61-de1d-0eb6d1f360e3.png)
![image (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/6123f83b-b8a8-2673-789c-dfe1a383a6b1.png)

＜データの追加＞
今後、新しくナレッジベースのデータを追加した場合は、再度データを同期してデータを最新にしてください。

構築は以上です。

# ナレッジベース(RAG)に問い合わせてみる
では、早速試してみます。右ペインが「ナレッジベースをテスト」になっていますので「モデルを選択」ボタンを押します。大きめのポップアップが出てくるので「1.カテゴリ」「2.モデル」を選択し「3.推論」はそのままで、右下の「適用」ボタンを押します。
![image (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/8e3bf633-7766-748e-9954-b744dbac3ed0.png)
![image (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/4cf8b87b-fe79-9181-85c5-786f37b03cf0.png)

普段 Amazon Connet の記事を書いているので、少しマニアックですがそれを質問してみました。構築前(同期前)は以下の回答でした。
![image (27)のコピー14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/a25af9d4-7114-c018-778e-47f526d6d41c.png)

構築後(同期後)はこちらの回答になりました。かなりマニアックな解説をしてくれます(画像は見やすいため「ソースの詳細を表示」した状態で取得しています)。
![image (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/75aecbd7-5453-4f53-058d-89dd639d961d.png)

右下の「ソースの詳細を表示≫」をクリックしてみます。ソースチャンクが並んでいます。
![image (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/81457c14-f166-8b5c-491a-27004c2b23fc.png)

右の四角「別画面」ボタンを押すとソース記事にリンクしました。確かに該当記事がしっかりベクターストアとして、取り込まれています。

https://qiita.com/beajourneyman/items/d385bf9e139048630038


# 所感
自分が書いた記事の内容から回答をしてくれます。作ってみて「自分チャットボット🤖」だなと思ったので、タイトルに入れてみました。実は、noteで5年近く毎日書いている記事をベクターストアにして「JAWS-UGで初登壇したのはいつですか？」などと聞いてみたいのですが、先ほど見たら2,600本以上あったので、費用的に宝くじでも当たったら試してみたいと思います。

ご紹介の通り簡単な手順で構築できますので、是非試してみてください。

以上です。