Amazon KendraとAzureChatOpenAIで日本語での文書検索を実行してみた(Python)

ゴール

amazon-kendra-langchain-extensionsを参考に、Amazon KendraとOpenAIを使って文書検索をPythonで実行することができます。日本語化にも対応しています。

スタートライン

  • AWSアカウントを持っていること
  • AWS CLIの設定が完了していること

環境

  • Windows 11
  • Python 3.11.5
  • AWS CLI

ステップ1:IAMユーザーにAmazonKendraFullAccessをアタッチする

任意のIAMユーザーを選択し、「許可を追加」を選択します。

image.png

「AmazonKendraFullAccess」と検索し、「次へ」を選択します。

image.png

「許可を追加」を選択します。

image.png

これで任意のIAMユーザーにAmazonKendraFullAccessがアタッチされました。

ステップ2:Amazon Kendra インデックスを設定する

Amazon Kendra consoleにアクセスし、「Create an Index」を選択します。

image.png

以下のように、Index nameとIAM role、Role nameを入力します。各項目名はご自身で
決めてください。入力したら「Next」を選択します。

image.png

次の画面では、何も変更せずに「Next」を選択します。

image.png

「Developer editions」を選択し、「Next」を選択します。

image.png

「Create」を選択します。

image.png

Statusが「Active」になったら、作成完了です。

image.png

ステップ3:IAMロールを更新する

IAM consoleで先ほど作成したRoleを選択し、「ポリシーをアタッチ」を選択します。

image.png

今回はS3を使うため、「AmazonS3ReadOnlyAccess」と検索し、ヒットしたポリシーにチェックを入れた状態で、「許可を追加」を選択します。

image.png

許可ポリシーに追加されました。

image.png

ステップ4:データソースへのS3コネクタを構成する

S3のページに移動し、「バケットを作成」を選択します。

image.png

AWSリージョンは「米国東部(バージニア北部)us-east-1、バケットタイプは「汎用」を選択し、バケット名を入力してバケットを作成します。

image.png

作成したバケットに移動し、「アップロード」を選択します。

image.png

今回は以下のAmazon Kendraのデベロッパーガイドをアップロードします。

次に、データソースを作成します。作成したインデックスの画面に移動し、「Data management」の「Data sources」タブを選択すると以下のような画面が表示されるので、「Add data sources」を選択します。

image.png

Amazon S3 connecterの「Add connecter」を選択します。

image.png

Data sourse nameを入力し、Default Languageは「Japanese(ja)」を選択し、「Next」で移動します。

image.png

「Create a new Role(Recommended)」を選択し、任意のRole nameを入力して「Next」で移動します。

image.png

Enter the data source locationには先ほど作成したs3へのパスを通し、Sync modeは「Full sync」、Sync run scheduleは「Run on demand」を選択して「Next」で移動します。

image.png

そのまま「Next」で移動します。

image.png

確認画面では「Add data source」を選択してください。データソースが作成されます。

データソースの作成が完了したら、以下の「Sync now」を選択してください。

image.png

StatusがCompletedになったら完了です。

image.png

ステップ5:Search console上で実行する

「Data management」の「Search indexed content」タブに移動し、右側のSettingsのDefault language of sourse documentsから「Japanese(ja)」を選択して、「Kendraの料金」というクエリを実行すると、以下のように結果が返ってきます。

image.png

ステップ6:Pythonから実行する

ライブラリのインストール

以下のコマンドで必要なライブラリをインストールします。

環境変数の設定

.envファイルを作成して、以下の変数をご自身の環境に合わせて設定します。

.env

コードの追加

https://github.com/aws-samples/amazon-kendra-langchain-extensions/blob/main/kendra_retriever_samples/kendra_chat_open_ai.py を参考に、いくつか変更点を加えた以下のコードを追加します。

変更点

  • dotenvで.envファイルにある環境変数を読み込む
  • OpenAIではなくAzureChatOpenAIを使用
  • attribute_filterで日本語のドキュメントに対応
  • こちらの記事 を参考にしたprompt_templateに

実行

回答結果が日本語で取得できました。

フィニッシュ

お疲れ様でした。
値段が高いので、継続的に使用しない場合は今回作成したリソースは削除しましょう。
以下のXでも情報発信してます!

参考文献

この記事を書いた人

aws-recipe-user