AWSでRAGを作ってみる その2 Bedrock API作成

作成手順

この『その1』では下の1,2だけ。

  1. VPC(virtual private cloud)作成
  2. Aurora Serverless v2でPostgreSQL作成
  3. (ec2インスタンス作成<==不要だったので使わない(参考にメモとして残した)
  4. s3に読み込ますpdfを.mdに変換してUploadする
  5. bedrockでvector storeを作り、そのapiも作る
  6. bedrockでllm apiを作る
  7. lambdaで上記2つのapiを使って簡単な質問を送る
  8. Webページに入力された質問をLambdaに送るAPI GatewayでREST APIを作る
  9. AmplifyにAngularベースのWebページを作り、REST APIに質問を送る様にする

s3にファイルをUploadする

s3にbucketを作成して、その下に7つのpdfファイルをUploadしました。

これだけです。

BedrockでVector store作成

  1. Bedrockページ左メニューの『Knowledge Bases』に入り
  2. Create』〜『Knowledge Base with vector store
  3. Knowledge Base name』を入れる
    • 私の場合。『MyKnowlegeBaseFP0H』とした
  4. IAM permissionsで『Create and use a new service role』を選択し、Service role nameはそのまま『AmazonBedrockExecutionRoleForKnowledgeBase_dylea』とした。
  5. Data source details』で『Amazon s3』を選択し『Next
  6. 画面の左下の『Add data source』をします。
    • Data sourceは1つのファイルで良いし、ディレクトリで良い。 ディレクトリの場合は、その下のファイル全てが対象になります。 ディレクトリを指定していると後ほど、Add documentで10個までファイルを追加できます。(ファイルはData sourceと同じディレクトリ内である必要があります)
      • 今回はs3をData sourceにしていますが、Customで選択していると
        • 直接ファイルをUploadできる(5MBまで。50MBまで拡大可能)
        • Inlineで文字入力できる(制限は不明)
      • Data source name ーーー『MyKnowledgeBase-FP0H-source
      • Data source location 『This AWS account
      • Parsing strategy 『Amazon Bedrock default parser
      • Chunk strategy size 500 overwrap 15%(私の場合はこうしましたが、300,20%でもいいと思います)
    • Data sourceは4つ(計5つ)までで追加できるみたいです。
  7. 『Next』
  8. Embedding model 『Cohere Multilingal v3』—1024次元
    • このembedding modelはRequestしないと使用できない。Syncできない。
      • Bedrock左メニューからFoundation modelの下のModel catalogをクリック
      • Cohere multilingaulをクリック
      • 画面上のEmbed Multilingaulのすぐ下に『Available to request』があるのでクリック
      • ポップアップが開くので、『Request model access』をクリック
      • 使いたいmodelを選択して、
      • (Anthropic製を選択した場合は、会社名、業種、用途などを記入して)
      • Submit
      • TitanなどはすぐにAccess grantedになったが、CohereとAnthropicはIn Progressのまま。3分くらいでCohereもAnthropicもAccess grantedになった。
  9. Use an existing vector store』とし
    • Vector storeでAuroraを選択
    • Amazon Aurora DB Cluster ARNはAurora DBのインスタンスの親のARNをコピペする
    • Table nameは、スキーマ名.テーブル名で記入する。 『bedrock_knowledgebase.table_1』
    • 『その1』で最後に作った2つ目のSecret ARNをコピペする。
    • 暗号化はしていないのでKMS Keyは空白のまま
    • Index filed mapping(CREATE TABLEで指定した通り)
      • Vector field nameは、embedding
      • Text field nameは、chunks
      • Bedrock-managed metadata fieldは、metadata
      • Custom metadataはテーブルに作っていないので空白のまま。
      • Primary keyは、id
    • 『Next』
  10. 『Create knowledge base』
  11. 『AmazonBedrokSecretPolicyForKnowledgeBase_dylea does not exit』というエラーが表示されたが、何故か次の日見たらKnowledgebaseが作成されていて、availableとなっていた。
  12. Knowledge baseに入り、Data sourceを選択して、『Sync』を実行。 (Sync completed for data source…)
    • すると5~6分でCompleteとなり、Data source overviewの下のDocumentsに7つのファイル名の横にStatusとして『INDEXED』と表示されたら完成です。

実際テストしてみます。

  1. Data sourceからKnowledge baseに戻り、右上の『Test knowledge Base』をクリック
  2. まず、Knowledgebaseができているか確認するため、『Retrieval only: data sources』を選択
  3. 右下に入力フィールドがあるので、何か問い合わせてみます。
  4. PreviewにSoure chunksの初期値の5個の返答が表示されたら

Sourceの追加

MyKnowledgeBase-FP0Hに、pdfを追加していく。

  1. Bedrock画面の左メニューのKnowledge Basesを選択して
  2. ファイルを追加したいKnowledgebaseを選択する
  3. Data sourceを選択する
  4. Add document
  5. S3 locationはCurrent AWS accountとあひて、Browse s3でファイルを選択する。
    • これはData sourceがs3の場合です。
    • またファイルはData sourceのディレクトリ内になければなりません。
  6. 『Add』

*通常、Syncを実行したらData sourceで指定したディレクトリ内の全てのファイルが読み込まれる。 しかしその後ファイルを追加して、特定のファイルだけ読み込ます時にこのAdd documentを使用するのだと思います。

APIを用意する

Lambdaが使用するKnowledgebaseとLLMモデルのAPIをBedrockで用意します。

その他

Aurora databaseの右にRecommendationsのカラムに3 Informationalとあったので開いてみると、1つがRead Onlyのインスタンスが存在しないとあり、それをクリックすると、Add at least another DB instance to the DB cluster to improve availability and performance.と書かれてあったので、『Apply』ボタンを押し追加。 Availableまで5分くらいかかった。

ちょっと長いので、『その1』はここまででおしまい。  続きは『その2』へ。

コメント