1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GenU閉域モードを深掘りする~バックエンド・RAG編~

1
Posted at

概要

前回はGenUのデフォルト状態で使えるユースケースのバックエンド処理を深掘りしました。

今回はデフォルトで有効化されていない機能を実際に有効化してみます。対象は下記の2つです。

  • RAG チャット(Knowledge Base)
  • モニタリング用ダッシュボード

どちらもアーキテクチャのページで構成図が示されており、デプロイオプションのページに有効化手順が載っています。手順通りに進めつつ、実際に手を動かすと出てくるエラーや確認ポイントを記録していきます。

RAG チャット(Knowledge Base)の有効化

cdk.jsonの変更

packages/cdk/cdk.jsonのcontext以下に、下記のパラメータを追加します。

"ragKnowledgeBaseEnabled": true,
"ragKnowledgeBaseStorageType": "s3vectors",
"rerankingModelId": "amazon.rerank-v1:0",
"ragKnowledgeBaseAdvancedParsing": true,
"ragKnowledgeBaseAdvancedParsingModelId": "amazon.nova-lite-v1:0",

各パラメータの意味は下記の通りです。

  • ragKnowledgeBaseEnabled:Knowledge Base連携のRAGチャットユースケースを有効化するフラグ
  • ragKnowledgeBaseStorageType:ベクトルストアのバックエンド。デフォルトはopensearch(OpenSearch Serverless)ですが、今回はs3vectors(Amazon S3 Vectors)を選択しました。OpenSearch Serverlessは常時起動のOCU課金が発生するのに対し、S3 Vectorsは使った分だけの課金で固定費がかからないためです
  • rerankingModelId:検索結果を再ランキングするモデル
  • ragKnowledgeBaseAdvancedParsing / ragKnowledgeBaseAdvancedParsingModelId:Advanced Parsingの有効化と、そこで使うモデル。Advanced Parsingは、PDF内の表やグラフといった非構造化データから情報を抽出してチャンクに含める機能です

チャンク戦略の変更

packages/cdk/lib/rag-knowledge-base-stack.tsにチャンク戦略を指定する箇所があり、コメントアウトで複数の戦略が用意されています。今回はセマンティックチャンクを使うようにコメントアウトを外しました。

// packages/cdk/lib/rag-knowledge-base-stack.ts
chunkingConfiguration: {
  chunkingStrategy: 'SEMANTIC',
  semanticChunkingConfiguration: {
    maxTokens: 300,
    bufferSize: 0,
    breakpointPercentileThreshold: 95,
  },
},

デフォルトの固定サイズチャンクは単純に文字数で分割しますが、セマンティックチャンクは文章の意味的なまとまりを見て分割位置を決めます。breakpointPercentileThresholdが分割の閾値で、値を大きくするほどチャンクが大きくまとまりやすくなります。

デプロイとエラー

ここまでの変更を反映するため、デプロイを実行します。

npm run cdk:deploy

デプロイ自体は成功し、Knowledge Baseが作成されました。しかし、データソースの同期(Sync)を実行した段階で下記のエラーが発生しました。

データ同期が失敗しました。 "Knowledge base role arn:aws:iam::xxxxxxxxxxxx:role/RagKnowledgeBaseStack-KnowledgeBaseRoleXXXXXXXX-XXXXXXXXXXXX is not able to call the specified model arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0: This model version has reached the end of its life. Please refer to the AWS documentation for more details. (Service: BedrockRuntime, Status Code: 404, Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) (SDK Attempt Count: 1)"

原因はragKnowledgeBaseAdvancedParsingModelIdです。ドキュメントに載っているデフォルト値のanthropic.claude-3-sonnet-20240229-v1:0(Claude 3 Sonnet)が、すでにEnd of Life(提供終了)になっているモデルでした。IAMロールの権限不足ではなく、指定したモデル自体がもう呼び出せない状態だったということです。

対処として、Advanced Parsingで利用するモデルをamazon.nova-lite-v1:0に変更しました。前述のcdk.jsonの設定は、この対処後の値になっています。変更後に再度デプロイし、Syncをやり直すことでエラーが解消しました。

ナレッジベースの確認

デプロイ完了後、Bedrockのコンソールからナレッジベースが作成されていることを確認します。

g01.png

データソースの設定を確認すると、ナレッジベースのソースとなっているS3バケットが指定されています。

g02.png

このS3バケットを開くと、下記の通りBedrockのドキュメントが格納されていることを確認できます。デプロイ時に/packages/cdk/rag-docs/docs配下のサンプルデータが自動でこのバケットにアップロードされる仕組みです。

g03.png

データソースの画面に戻り、同期(Sync)を実行します。Statusが「Available」になれば取り込み完了です。

g04.png

動作確認

GenUの画面からRAGのユースケースを選択し、質問を入力します。

g10.png

RAGを使用した回答が返ってくることを確認できました。回答の根拠として、ナレッジベースから検索されたドキュメントの引用も一緒に表示されます。

g11.png

モニタリング用ダッシュボードの有効化

cdk.jsonの変更

続いてモニタリング用ダッシュボードを有効化します。packages/cdk/cdk.jsonのcontextに下記を追加します。

"dashboard": true,

デプロイ

npm run cdk:deploy

modelRegionに指定したリージョンにGenerativeAiUseCasesDashboardStackという名前のスタックが新たに作成されます。デプロイ完了時の出力に、このあとの手順で使うBedrockLogGroupDashboardUrlが表示されます。

Bedrockのログ出力設定

ダッシュボードにはBedrockの呼び出しログ(プロンプトの内容など)を表示するウィジェットがありますが、これはCloudWatch Dashboardが自動で収集するわけではなく、Bedrock側でログ出力を有効化しておく必要があります。

Amazon Bedrockの設定画面を開き、Model invocation loggingを有効化します。

g05.png

  • Select the logging destinations:CloudWatch Logs onlyを選択(S3にも残したい場合はBoth S3 and CloudWatch Logsでも構いません)
  • Log group name:デプロイ時に出力されたBedrockLogGroupの値を指定します
  • Service role:新規に作成

この設定はmodelRegionと同じリージョンで行う必要があります。リージョンを間違えるとログがダッシュボードに反映されないので注意が必要です。

ダッシュボードの確認

設定完了後、デプロイ時に出力されたDashboardUrlを開きます。CloudWatchのダッシュボードなので、GenUの画面には組み込まれておらず、マネジメントコンソール側で確認する形になります。

g06.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?