はじめに
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 ユーザーの業務効率化により一層貢献できるよう取り組んでいきます。
ご清覧ありがとうございました。