[レポート]Amazon Bedrockでチャットアシスタントを構築する #AIM329-R #AWSreInvent

2023.11.28

現在開催中のAWS re:Invent 2023。本レポートは、2023年11月27日に開催された「AIM329-R | Build a chat assistant with Amazon Bedrock [REPEAT]」のレポートです。

セッション概要

Amazon BedrockとAmazon OpenSearch Serviceを利用して、RAG付きのチャットアシスタントを構築するハンズオン形式のBuilders' Sessionです。 大規模言語モデルとは何かから始まり、Bedrockの特徴の紹介を経て、上記アシスタント構築のハンズオンを行いました。 Level 3向けということで、前提知識がないとついて行くのが難しいかもしれませんが、セッション内容は興味深いものでした。

内容

当日のハンズオンでは、メールアドレス認証後、共有されたアクセスコードを利用してワークショップにアクセスしました。 日本語は用意されていなかったので、英語が苦手な方はブラウザの翻訳機能を駆使する必要がありました。 実行環境には、Amazon SageMaker Notebook インスタンスを利用するので、ローカル環境構築の手間は省けました。

ハンズオンの主な流れは以下の通りです。

  • 必要なソフトウェアやライブラリのインストール
  • ロギングの設定
  • Amazon OpenSearch サーバーレス コレクションの作成
  • Amazon Bedrock でモデルへのアクセスを有効化
  • セキュリティ権限の設定
  • Amazon OpenSearch Serverless コレクションにインデックスを作成
  • チャットアシスタントを構築

続いて、ワークショップで印象的だった内容について紹介します。

Amazon OpenSearch Serviceの利用

私はAWSサービスでRAGを構築する際には、Amazon Kendraを利用することが多いので、RAGのデータベースとしてOpenSearch Serviceを利用するのは新鮮でした。 セッションの中では予めSageMakerのノートブックで、OpenSearch Serviceのセットアップがコード化されていたので、詳しい設定方法までは理解できませんでしたが、OpenSearch ServiceをRAGにどのように活用するかを学ぶことができました。

LangChainを利用したドキュメントのベクトル化

データの前処理として、LangChainを利用しました。ドキュメントチャンクから埋め込みまでをLangChainで実現する方法を体系的に学ぶことができました。 具体的には以下の流れでドキュメントのダウンロードから埋め込みまでを実現していました。

  1. requestsモジュールを利用したHTMLファイルのダウンロード
  2. LangChainのUnstructured HTML Loaderを利用した、ファイル解析
  3. LangChainのRecursiveCharacterTextSplitterを利用した、HTMLファイルのドキュメントのテキスト分割
  4. requestsモジュールを利用したPDFファイルのダウンロード
  5. PyPDF2ライブラリを使用してPDFファイルからテキストを抽出
  6. LangChainのRecursiveCharacterTextSplitterを利用した、PDFファイルのドキュメントのテキスト分割
  7. LangChainのBedrockEmbeddingsを利用して各ドキュメントを埋め込み(ベクトル化)

このプロセスは非常に体系的にまとまっており、LangChainを活用したドキュメントのベクトル化について深く理解することができました。特に、HTMLとPDFの両方からテキストを抽出し、それらをベクトル化するというステップは、データの多様性を保ちつつ、情報を効率的に取り扱うための良い方法だと感じました。あらためてLangChainの使いやすさと柔軟性を確認できました。

さいごに

このワークショップを通じて、Amazon OpenSearch Serviceを利用したRAGの構築方法を学ぶことができました。 KendraはとOpenSearch Serviceは検索エンジンの仕組みが異なりますが、今後、RAGとしての精度やコスト面で比較をできたらなと思いました。 言語の壁で難しいところもありましたが、個人的にはRAGの構成の選択肢を増やすことができ、実りのあるセッションでした! それではまた!