Kendraとは
Kendraとは非構造データ(word,excel,pdfなど)に対して検索ができるサービスのことです。検索はキーワード検索だけでなく、自然言語を使った検索もおこなえます。つまり、人に問い合わせをするような感覚でデータ検索が行えます。検索は機械学習(ML)によって行われますが、エディションによっては生成AIも利用できるようになっています。しかし、Bedrockのように自由にLLMを選択できるようなことはできません。生成AIといってもBedrock程の自由度はありません。機械学習ではアルゴリズムによって検索が行われます。また、既に学習済みのモデルを利用するため、ユーザー側で学習させる必要が発生しません。
Kendraはマネージドサービスであるためセットアップが素早く行えます。つまり、EC2を立ててセットアップするといった手間が発生しません。セキュリティ面も配慮されており、データは暗号化して保存されます。また、転送中のデータも暗号化されるようになっています。
Kendraでインデックスを作成
データソースはS3に置いてKendraではインデックスだけを作成します。S3からデータソースコネクターを利用して、Kendraにデータソースを取り込みます。
インデクスの作成はコンソールマネージメントからKendraを表示させて「Create an Index」をクリックして作成します。
「Index name」に任意の名前を入力します。
「IAM role」で「Create a new role」を選択します。「Role name」には任意の名前を入力します。
下記の3種類のエディションが選択できます。
- GenAI edition
- Developer edition
- Enterprise edition
検証目的で使う場合は「Developer edition」を選択します。生成AIを使いたい場合は「GenAI edition」を選択します。「GenAI edition」ではセマンティック検索を用いたRAGを構築することができます。
「Developer edition」でもRAGを作成することはできます。しかし、生成AIではなく機械学習によるRAGです。精度はそれほど期待できないかと思います。
ステータスが「Active」になったら作成完了です。
S3でデータソースを配置
「バケットを作成」をクリックしてバケットを作成します。RAGで使いたい任意のPDFファイルをバケットにアップロードします。
S3のデータソースコネクタを作成
Kendraの画面から作成したインデックスを選択します。左側にあるメニューから「Data sources」を選択します。「Available data sources」にある「Amazon S3 connector」から「Add connector」をクリックします。
「Default language」で「Japanese」を選択します。ここはS3にアップロードしたデータソースの言語を選択します。日本語で書かれた資料であるため「Japanese」を選択します。
「IAM role」で「Create a new role」を選択します。「Role name」には任意の名前を入力します。
「Sync scope」で「Browse S3」をクリックします。自分が作成したS3が表示されるのでそれを選択します。Kendraを作成したリージョンとは異なるリージョンに作成されたS3はブラウズされません。
「Sync run schedule」はS3からKendraにどの程度の頻度でデータを反映させるかを指定します。データソースの内容が基本変わらないようであれば「Run on demand」を選択します。
最後に「Add data souce」をクリックするとデータソースがコネクタが作成されます。
「Data source details」画面で「Status」が「Active」になっていれば、正常に作成されています。
「Sync now」をクリックするとS3からデータソースをインデックスに取り込むことができます。データの容量にもよりますが、ここで少し時間がかかります。「Current sync state」が「Successful」に変化すれば取り込みは完了です。
S3からデータを検索
「Data management」から「Search indexed conetnt」を選択します。
右側のメニューからスパナマークをクリックします。
言語から「Japanese」を選択して「Save」をクリックします。
こちらの画面から検索が行えます。
クローラー検索のデータソースコネクタを作成
Kendraの左側のメニューから「Data sources」を選択します。
「Add data source」を選択します。
「Available data sources」から「Web Crawler」を選択し「Add connector」をクリックします。
「Data source name」で任意の名前を入力します。
「Default language」で「Japanese」を選択します。
クローラー検索をするWebサイトが日本語のサイトであるため、「Japanese」を選択します。
「Source URLs」でクローラー検索を行う対象のWebサイトのURLを入力します。
「Add new url」をクリックすることで複数のWebサイトを登録することができます。
「IAM role」で「Create a new role」を選択し「Role name」に任意のロール名を入力します。
「Crawl range」で「Crawl host domains only」を選択します。これを選択すると、指定したURLからしかデータを検索しないようになります。
「Crawl depth」で検索するURLの階層(深さ)を設定できます。
「Sync run schedule」でURLのデータをインデックスに取り込む頻度を選択します。
URLの情報が更新される頻繁に応じて設定をします。基本的に1度同期を取っておしまいであれば「Run on demand」を選択します。
最後に「Create」をクリックします。
「Data source details」の画面で「Status」が「Active」になっていれば、データソースコネクタ
は正しく作成されています。
「Sync now」をクリックするとWebクローラーからインデックスにデータを取り込みます。ここで少し時間がかかります。
「Current sync」が「Successful」になれたデータの同期がされています。
Webからデータを検索
「Data management」から「Search indexed conetnt」を選択します。
右側のメニューからスパナマークをクリックします。
言語から「Japanese」を選択して「Save」をクリックします。
こちらの画面から検索が行えます。