当記事について
generative-ai-use-cases 略称:GenUはAWSの生成AI活用ユースケース集アプリです。
オプションでRAGチャット機能を有効化(※)にすると、生成AI+社内文書のRAGチャットを試す環境を簡単に構築できます。RAGチャットは下記2種類の方式から選択できます。
- Amazon Kendra方式
- Amazon Bedrock Knowledgebase方式
本記事では、前者のKendra方式でRAGを構成する場合の精度向上用補助ツールとして、Retrieve APIの検索を簡単に試するための機能(画面)を追加するカスタマイズをやってみる、という記事です。
※ RAG(Kendra)を有効化する方法は→こちらを参照下さい。
Kendraは高額なサービスであることにご注意下さい。
■ 追加機能の画面表示例
ツールとして「Kendra 検索」画面を追加。KendraのRetrieve APIで文書検索し結果を一覧表示する
なぜRetrieve検索用のツール(画面)が欲しくなったか
GenUにおいて、Kendra方式のRAGの場合は下記のステップで生成AIへの回答リクエストが行われます。
- ユーザーの質問内容からLLMモデル(Claude等)にKendraへのクエリ文言を生成させる
- 生成されたクエリ文言を使ってRetrieveAPIでKendraに文書検索を行う(★)
- クエリからの検索結果を参考文書としてプロンプト内に埋め込み、LLMモデル(Claude等)に回答テキストを生成させる
KendraにはQueryとRetrieveという2種類の検索APIがありそれぞれの特性がありますが、一般的にRAGにはRetrieveAPIの方が適しているとされているようで、GenUのRAG(Kendra)機能でもQueryではなくRetrieveのAPIで文書検索する仕組みになっています(★の部分)。
QueryAPIの検索を試す簡易機能はAWSマネジメントコンソール上に存在します。
しかし、GenUのRAGチャット(Kendra)機能で利用されているのRetrieveAPIを試す機能の提供が現状ではないので、回答精度の検証や向上活動のためにシンプルにRetrieve APIの検索を試すTool的な画面が欲しくなりました(私は)。
カスタマイズ内容概要
実はGenUがver2の頃(執筆時点での最新はver4.3.2なので結構前です)、ToolsメニューとしてKendraのQueryAPIを試す機能(画面)がありました。
GenU ver2時点のKendra Query検索画面のコード(React)
Ver3へのメジャーアップグレード時に削除されたこの画面「Kendra検索」のコードをGitHubリポジトリのタグ(v2.0.0)から引っ張ってきて復活させ、QueryAPIからRetrieveAPI用への少しのカスタマイズを加えることで、省エネでRetrieveAPI検索用の画面を追加することができます。
フロントアプリ(React)側のカスタマイズのみで対応可能で、バックエンドAPI側(ApiGateway+Lambda)は既存のAPI("/rag/retrieve")をそのまま使えるのでカスタマイズを加える必要はありません。
(ver2のコードからQuery検索用の機能を復元しただけ状態の画面)
カスタマイズ内容の詳細
カスタマイズ内容の全容はこちらへ→GitHub
cdk.json
KendraSearchPage.tsx
- 画面コンポーネントです
- GenUのver2から持ってきたコードほぼそのままですが、検索結果の型がQueryResultItemからRetrieveResultItemへ変わることに伴う微修正を加えています
- GenUはver4で国際化対応しており日本語文言をコードに直接埋め込むのは本家GenUのルール的にはNGぽいですが、国際化対応は本記事の趣旨と異なるのでここでは気にしません
※ GenU ver2コードとの差分はこちらを参照→GitHub
hooks/useSearch.tsx
- 画面コンポーネント(KendraSearchPage.tsx)で利用しているカスタムフックです
- GenU ver2のコードにQuery→Retrieve用のカスタマイズを加えています(ここがカスタマイズの勘所になります)
※ GenU ver2コードとの差分はこちらを参照→GitHub
main.tsx、App.tsx
- 左側のメニューにKendraSearchPageへの導線を追加しています
※ こちらも国際化対応はいったん無視して「Kendra 検索」という日本語文言を直接コードに入れちゃってます
.husky/pre-commit
- こちらの変更は今回の主旨である機能追加と直接の関係はありません
- GenUのver4系で取り込まれた↓の変更により、静的チェック(lint)の警告が残っている状態ではgitのコミットすらブロックされてできないようになっていました
feat(git hooks): introduce husky - 当記事のカスタマイズでは、あえて国際化対応の警告(日本語文言を直接コードに書くとチェックに引っかかる)を無視して対応したいのでhuskyを無効化するためにpre-commitファイルの設定コメントアウトしてます(本来の対応としては面倒くさがらずに国際化対応して警告を除去する方が良いかと思いますが)
最後に
最初にも書きましたが、Kendraは高額なサービスなので特に個人持ちのアカウントでRAGを試そうとしている方はご注意下さい(Developerエディションでもベース料金が月$810なのでリソースを数日放置するだけで万単位に届きます)。
KendraはRAGなどの生成AI用途に最適化されている「GenAIエディション」が2024年のre:Inventで発表されており、GenAIエディションでは従来のエディションに比べて小さなコストから始めることができるのですが、執筆時点(2025-06-29)で正式に日本語対応していないようです。
GenAIエディションが日本語対応すればGenUのRAG(Kendra)機能も今より手軽に(小さく)PoCを始めることができるようになりそうです。
以上、本記事が何らかのお役に立てば幸いです。
(参考)
(ちなみに)
私はこの記事を書くために個人所有のAWSアカウント上に構築したGenUアプリのRAG機能を一時的に有効化し、執筆に必要な部分を確認後すぐにRAGリソースは削除(ragEnabled設定をfalseにしてGenUを再デプロイ)しました。
一時的にでもKendraの利用料金が発生してそうですが、AWSから頂いたクレジットを活用させてもらっており実費はかかっていません。ご心配なく。