[Workshop] Amazon Aurora と Amazon RDS を使用して生成 AI を活用した検索を構築する #AWSreInvent #DAT303

2024.01.01

アノテーション 構築チームのいたくらです。
「Build generative-AI-powered search with Amazon Aurora & Amazon RDS」という Workshop をラスベガス現地ではなく、自宅でやってみました。
個人アカウントでやってみたいと考えている方の参考になれば幸いです。

セッション情報

  • セッション ID : DAT303
  • タイトル: Build generative-AI-powered search with Amazon Aurora & Amazon RDS
  • スピーカー: Jonathan Katz, Shayon Sanyal
  • レベル: 300 - Advanced

ワークショップの概要

The integration of embeddings generated from LLMs for Amazon Aurora PostgreSQL-Compatible Edition and Amazon RDS for PostgreSQL presents a powerful and efficient solution for optimizing the product catalog similarity search experience. By using foundation models and vector embeddings, businesses can enhance the accuracy and speed of similarity searches by using Retrieval Augmented Generation (RAG), which ultimately leads to improved user satisfaction and a more personalized experience. In this workshop, build your own generative AI applications with Amazon Bedrock using Aurora PostgreSQL as your vector database. You must bring your laptop to participate.

訳: Amazon Aurora PostgreSQL-Compatible Edition と Amazon RDS for PostgreSQL の LLM から生成された埋め込みの統合により、製品カタログの類似性検索エクスペリエンスを最適化するための強力で効率的なソリューションが提供されます。基盤モデルとベクトル埋め込みを使用することで、企業はRAG(Retrieval Augmented Generation)を使用して類似検索の精度と速度を向上させることができ、最終的にはユーザー満足度の向上と、よりパーソナライズされたエクスペリエンスにつながります。このワークショップでは、Aurora PostgreSQL をベクトル・データベースとして使用し、Amazon Bedrock を使って独自の生成 AI アプリケーションを構築します。

学べること

  • 生成 AI をアプリケーションと PostgreSQL データベースに統合する方法
  • 生成 AI アプリケーションの裏側で、どのようなことが Aurora PostgreSQL データベースで起こっているか

ワークショップ内容

  • 1. 導入
    • 1. 生成 AI の概要
    • 2. ベクターデータベースの概要
    • 3. PostgreSQL pgvector 拡張機能
  • 2. 前提条件
    • 1. 自分の AWS アカウントを使用する場合
    • 2. AWS イベントの場合
    • 3. Amazon Bedrock のセットアップ
  • 3. 製品の推奨事項
    • 1. Jupyter Notebook を起動する
    • 2. Jupyter Notebookで類似検索を実行する
  • 4. RAG による質問応答
    • 1. RAG チャットボットアプリケーションによる質問応答
    • 2. Streamlit アプリケーションを実行する
  • 5. (オプション) RAG を使用した応答ストリーミング
    • 1. RAG を使用した応答ストリーミング
    • 2. Streamlit アプリケーションを実行する

やってみた

1-1

このセクションでは、生成 AI がどういったもので、どのような用途があるかが学べます。大規模言語モデル(LLM)についても説明があります。
また、本 Workshop で使用する「LangChain」(LLM の使用を簡単にする Python モジュール)についても説明があります。 生成 AI 関連の Innovation Talk や Breakout Session を見ていない方でも本 Workshop に必要な単語知識を得られるようになっていました。

1-2

このセクションでは、ベクトルデータベースについて学べます。
単語の意味と関係を捉えるために単語を数値に変換することを「ベクトル埋め込み」と呼ぶことはこちらの Innovation Talk で知ったので、そのデータベースのことか~とすんなりと理解できました。
(余談)学生時代に習った線形代数ってこんなところに使われているんだ…と思いました。

1-3

このセクションでは PostgreSQL の拡張機能「pgvector」について学べます。
これを使用すると ML で生成されたベクトル埋め込みを保存および検索する機能を追加できます。
また、Aurora PostgreSQL がベクトルデータの保存と処理に適している理由も述べられていました。他にも pgvector を有効にする方法やベクトルデータを保存するコマンドなど、実際に使用するコマンドがコピペできる形式で記載されていました。

2-1

今回はラスベガス現地ではなく自宅で実施したため、AWS アカウントは個人アカウントを利用しました。
あらかじめ用意されている CloudFormation テンプレートを使用して環境を準備しました。

2-2

今回はラスベガス現地ではなく自宅で実施したため、このセクションはスルーしました。

2-3

手順に沿ってセットアップを実施しました。
本 Workshop では Hugging Face と Amazon Bedrock を使用します。Hugging Face は前提条件なしで使い始められるそうです。手軽でいいですね。
自分は以前、こちらのブログで紹介している Workshop を実施して Anthropic Claude は既に「Access granted」だったので、Titan Embeddings G1 - Text のみ手順通りに進めて「Access granted」にしました。

3

このセクションでは、Hugging Face Sentence-Transformer と Amazon Aurora PostgreSQL を pgvector 拡張機能を使用して統合することで、商品カタログの類似検索ソリューションを構築します。

使用するツールと用途は以下の通りです。

  • all-MiniLM-L6-v2 Sentence Transformer モデル(Hugging Face の事前に訓練された文章変換モデル) : 商品カタログのベクトル埋め込みを生成するため
  • pgvector 拡張機能 : ベクトル埋め込みを Amazon Aurora PostgreSQL データベースに格納するため
  • pgvectorの類似検索機能 : 顧客の検索クエリの意図に最もマッチする商品カタログのアイテムを見つけるため

3-1

このセクションでは、all-MiniLM-L6-v2 Sentence Transformer モデルと Amazon Aurora PostgreSQL データベースとやりとりするために、Jupyter Notebook を準備します。
手順通りに進めると、以下のように Jupyter Notebook が起動できました。

3-2

このセクションでは、以下 2 つのステップを実施します。

  • Kaggle のデータセットをダウンロードし、Hugging Face を通して all-MiniLM-L6-v2 Sentence Transformer モデルを使用して埋め込みを生成し、pgvector 拡張を持つ Amazon Aurora PostgreSQL データベースに格納する
  • キーワードで商品を検索すると埋め込みデータに変換され、Amazon Aurora PostgreSQL データベースで近似最近傍探索(ANN)で検索され、結果が提供されることを確認する

3-1 で起動した Jupyter Notebook は実施するコマンドが用意されているので、手順通りに実施して進めていきます。
手順「3. HuggingFace Model Hosting」の画面が若干異なっていたので、参考までに自分の画面を貼っておきます。

類似検索関数が作成できたので、実際に検索してみました。
まずは「5歳児に何か提案してください」と実行しました。その結果がこちらです。

手順書に示されているものと同じ応答が返ってきました。他にも検索を実行してみました。
「誕生日プレゼントに何か提案してください」と実行した結果がこちらです。

4

このセクションでは、RAG を使用したチャットボットアプリケーションを作成します。

使用するツールと用途は以下の通りです。

  • Amazon Titan Embeddings G1 - Text : テキスト埋め込みに使用
  • Anthropic's Claude v2 : LLM として使用
  • pgvector 拡張機能 : Amazon Aurora PostgreSQL データベースをベクトルデータベースとして使用
  • LangChain : 全てのコンポーネントとのインタフェース統合に使用
  • Streamlit : チャットボットのフロントエンドを構築

このアプリケーションは以下の流れで質問に対する回答を提供します。

  • 1.PDF の読み込み : アプリは PDF ドキュメントを読み込み、テキストコンテンツを抽出
  • 2.テキストチャンキング : 抽出されたテキストは、効率的に処理できる小さなチャンクに分割
  • 3.埋め込み : Amazon Bedrock の Titan Text を利用して、テキストチャンクのベクトル表現(埋め込み)を生成
  • 4.ユーザーからの質問 : ユーザーは自然言語で質問
  • 5.類似性マッチング : ユーザーが質問をすると、アプリはそれをテキストチャンクと比較し、最も意味的に類似したものを特定
  • 6.RAG : ユーザーの質問とベクトルデータベースからのコンテキストが LLM(Anthropic Claude v2)に渡る
  • 7.レスポンスの生成 : LLMはPDFの関連コンテンツに基づいてレスポンスを生成

4-1

このセクションでは、Anthropic Claude v2.1、Amazon Titan Embeddings、LangChain、Streamlit を使用してチャットボットアプリケーションを構築します。
手順通りに実施して rag_app.py がこのような状態になったら保存して、準備完了です。

4-2

このセクションでは、4-1 で構築した Streamlit アプリケーションを実行します。
rag_app.py を実行すると Streamlit アプリケーションを実行でき、実行中のアプリケーションのプレビューから操作ができるようになりました。
あらかじめ用意された Amazon Aurora に関する PDF を一旦ローカル端末にダウンロードし、アプリケーションにアップロード完了したら準備完了です。
「Amazon Aurora とは何ですか?」と質問したときの応答がこちらです。

また、Bedrock の情報をインプットしていない状態で「Amazon Bedrock とは何ですか?」と質問したら「わかりません」という内容が返ってきました。

次に Amazon Bedrock に関する PDF を一旦ローカル端末にダウンロードし、アプリケーションにアップロードしてもう一度質問したときの応答がこちらです。

アップロードした PDF を基に作成された応答が得られました。

このセクションの手順書にはアプリケーションの裏側で、どのようなことが Aurora PostgreSQL データベースで起こっているのか確認する方法や解説も載っていて非常に勉強になりました。

5

このセクションでは、レスポンス全体が作成されるのを待つ代わりに、一度に数語ずつ出力を表示することができるようにストリーミングレスポンスを実装します。
最初のレスポンスバイトまでの時間を短縮することで顧客満足度を高めることができるため、チャットボットや会話型 AI、バーチャルエージェント/アシスタントに適しています。

5-1

このセクションでは、Anthropic Claude v2.1、Amazon Titan Embeddings、LangChain、Streamlit を使って、ストリーミング応答を持つチャットボットアプリケーションを構築します。
手順通りに実施して streaming_app.py を更新し、保存したら準備完了です。

5-2

このセクションでは、5-1 で構築した Streamlit アプリケーションを実行します。
streaming_app.py を実行すると Streamlit アプリケーションを実行でき、実行中のアプリケーションのプレビューから操作ができるようになりました。
あらかじめ用意された Amazon 株主通信 4 年分の PDF を一旦ローカル端末にダウンロードし、アプリケーションにアップロード完了したら準備完了です。

「AWS は時間の経過とともにどのように進化しましたか?」と質問した応答がこちらです。

4-2 のときと異なり、数語ずつ出力されて最終的に上記の応答となりました。
今回も手順書と異なる結果が得られましたが、応答内容は正しかったので OK としました。

所感

本ブログには載せきれていませんが各セクションで様々な質問をしてみて、それぞれしっかりと応答が返ってきて面白かったです。
手軽に環境を構築できて、尚且つ手順書内の解説がとても充実しているので、生成 AI を試してみたい&少し仕組みが気になっているという方に非常にお勧めできる Workshop だと感じました。
完全理解したとまでは全然至ってはいないものの、知識ゼロの状態からこの Workshop の内容なら理解できた!くらいには成長できました。
しっかり読み込みながら実施すると少し時間はかかりますが、興味があればお時間あるときに是非やってみていただきたいです。
※ Workshop をやり終えたら、最初に作成した CloudFormation スタックの削除を忘れずに実施してください!

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。
「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。
現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。