はじめに
Full-stack チームの豊崎です。
RevComm では、MiiTel Analytics の議事録作成をはじめ、LLM を用いた機能開発が活発に行われています。
今回、社内ユーザーが誰でも利用できる RAG 環境を作成しました。これは、RAG 環境をユーザーに提供するための PoC として実施したものです。
構成
この PoC では、プロダクトへの直接的な機能の埋め込みは行わず、以下のような構成で実装しました。
- Amazon Bedrock, Amazon Bedrock Knowledge Bases
- ベクターストア: Pinecone
- データソース: S3
- dynamoDB
- Python
- langchain
- streamlit
- etc…
問題点
この PoC を開始した時点での主な課題は、次の疑問から生まれました。
"Amazon Bedrock Knowledge Basesを使って、どのようにユーザーごとにRAG環境を提供できるのか?"
各ユーザーに個別の Amazon Bedrock Knowledge Bases を作成することは現実的ではなく、この課題に苦心しました。
結論として、ベクトルストアからデータを取得する際のフィルタリング機能が不可欠だと判明しました。
メタデータフィルタリング
Amazon Bedrock Knowledge Bases にはメタデータフィルタリングという機能があります。
これこそが、私の課題を解決する機能でした。
使い方
Knowledge Bases のデータソースに配置される各文書に対して、カスタムメタデータファイル(.metadata.json
)を作成する必要があります。
このメタデータを利用して、ベクトルデータのフィルタリングを行います。
今回の目的はユーザーごとの RAG 環境提供ですが、このフィルタリングにより検索対象のチャンク数を削減でき、パフォーマンスと正確性の向上も実現できます。
以下がmetadata.json
のフォーマットです。
例) miitel_analytics_dashboard_overview.pdf をデータソースに配置した場合 // miitel_analytics_dashboard_overview.pdf.metadata.json { "metadataAttributes": { "session_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "user_id": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY", } }
metadataAttributes
配下には、フィルタリング時に利用したい key-value を設定できます。
私は、ユーザーがファイルをアップロードする際に、このメタデータファイルが自動生成されるように実装しました。
サンプル (Python)
今回、私はlangchain_community.retrievers.bedrock
で提供されているAmazonKnowledgeBasesRetriever
を利用しました。以下にそのサンプルコードを掲載します。
先ほどのmetadata.json
で設定したsession_id
とuser_id
をここで指定しています。
retriever = AmazonKnowledgeBasesRetriever( knowledge_base_id=BEDROCK_KNOWLEDGE_BASE_ID, retrieval_config={ "vectorSearchConfiguration": { "numberOfResults": 10, "filter": { "andAll": [ { "equals": { "key": "session_id", "value": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", }, }, { "equals": { "key": "user_id", "value": "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY", }, }, ] }, }, }, )
まとめ
今回は、Amazon Bedrock Knowledge Bases のメタデータフィルタリング機能について紹介しました。この機能により、ユーザーごとに独自の RAG 環境を提供しながら、不要なベクトルデータを効率的に除外することが可能となりました。
当初目標とした「社内の人が誰でも使える RAG 環境」は実現できましたが、以下のような課題が残されています:
- データソースとの連携間隔
- 本番環境での実装の実現性
- etc...
今後は、プロダクトへの RAG 環境の実装検討をさらに進め、MiiTel ユーザーの業務効率化により一層貢献できるよう取り組んでいきます。
ご清覧ありがとうございました。