Slide 1

Slide 1 text

実践!サーバーレス RAG 構築 :Firestore ベクトル検索と VertexAI LLM 活用(Cloud Run と BigQuery もあるよ) 頼兼 孝幸 グーグル・クラウド・ジャパン合同会社 Application Modernization Specialist

Slide 2

Slide 2 text

スピーカー自己紹介 グーグル・クラウド・ジャパン合同会社 アプリケーション モダナイゼーション スペシャリスト 担当製品エリア: ● GKE ● サーバーレス(Cloud Run) ● CI/CD 最近は、生成 AI アプリ開発に触れることが増えてきました。 生成 AI のスペシャリストではありません。 頼兼 孝幸

Slide 3

Slide 3 text

サーバーレスで RAG?

Slide 4

Slide 4 text

Proprietary + Confidential RAG(検索拡張生成)とは 大規模言語モデル(LLM)の出力の質を向上させるための技術 ● 生成された回答の事実的正確性を向上させる ● モデルが学習していない知識へのアクセスを可能にする(グラウンディング) ● モデルが使用する知識を変更する ● モデルが情報源を引用できるようにする つまり、信頼できる専門性も理解した、最新かつ正確なデータを基に生成 AI が回答を 生成するために RAG が必要となる

Slide 5

Slide 5 text

Proprietary + Confidential 独自知識がない時の回答 すみません、私はお店のメニューについて何も知りません。お店の名前を教え てください。 … そうじゃないん だよなぁ この店のメニューの前菜が見たい Gemini レストランにて

Slide 6

Slide 6 text

Proprietary + Confidential 独自知識がある時の回答 これにしよう ザ・クラウドキッチンのメニューの前菜は以下の通りです。 … Gemini この店のメニューの前菜が見たい 店の知識 レストランにて

Slide 7

Slide 7 text

データ登録の例 Storage アプリ DB LLM (e.g. Gemini) 1. upload 2. trigger 3. Generate 4. insert

Slide 8

Slide 8 text

サーバーレス アーキテクチャ Cloud Storage Cloud Run Eventarc Vertex AI API Firestore

Slide 9

Slide 9 text

プロダクト概要 - Cloud Run 特長 ● コンテナをデプロイするだけで 外部 から到達可能な URL が発行される ● 0 〜 N へトラフィックに応じて 高速にスケーリング ● スケジュール、イベント駆動 で処理を実行 ● HTTP/2, WebSocket, gRPC への対応 ● 高度なトラフィック管理 が統合 サービス メッシュのサポート Preview ● トラフィック管理の強化 ● 可観測性の向上 ● 暗黙的なサービス間認証(実装変更なし) GPU 対応 Preview ● 生成 AI アプリにおける LLM の稼働が可能 ● 画像、音声認識などのオンライン実行 ● プレビュー中は事前申請が必要。 us-central1 のみ

Slide 10

Slide 10 text

プロダクト概要 - Vertex AI 生成 AI 関連の特長 ● プロンプトにテキスト、画像、動画、音声、 ドキュメントなどのデータだけでなく、複数 のデータ(マルチモーダル )を含めること が可能 ● テキストの多次元ベクトルデータ を 作成し、ベクトル検索を可能に ● モデルのチューニングも可能 Model Garden ● Google 製(Gemini、Imagen、Codey)、サードパー ティ製(Anthropic の Claude Model Family)、オープン モデル(Gemma、Llama 3.1)など、 幅広いモデルを選択して API アクセス可能 Agent Builder ● 開発者が自然言語またはコードを使用して、 AI エージェントとアプリを構築できるローコード プラットフォーム

Slide 11

Slide 11 text

プロダクト概要 - Firestore 特長 ● スケーラブルでメンテナンス不要 のサー バーレス ドキュメント DB ● スキーマレスで柔軟なデータモデル ● 従量課金(オペレーション、ストレージ、 ネットワーク帯域幅) ● クライアントとリアルタイム同期 可能 ● Firebase と統合 ● 無料枠が存在 ベクトル検索のサポート ● K 最近傍(KNN)ベクトル検索が可能 ● 開発の柔軟性とコスト効率を高めることが可 複数の DB 対応(Datastore モードと混合も可) ● 1 プロジェクト内でリージョン、また、 Firestore モードの 種別を分けた複数データベースが作成可能

Slide 12

Slide 12 text

データの登録の一例

Slide 13

Slide 13 text

PDF データがアップロードされる Cloud Storage

Slide 14

Slide 14 text

イベントをトリガーに POST リクエスト Cloud Storage Cloud Run Eventarc Request body { “bucket”: “GCS バケット名”, “name”: “オブジェクト PATH”, “contentType”: “application/pdf”, "updated": "2024-09-11T08:31:03.618Z" ... }

Slide 15

Slide 15 text

PDF データを取得して chunk 分割後、 テキスト エンベディングを作成 Cloud Storage Cloud Run Eventarc Vertex AI テキスト エンべディング chunk 毎にテキスト分割 768 次元ベクトル [ -0.010465549305081367, 0.037910543382167816, 0.0072224168106913567, … ]

Slide 16

Slide 16 text

Field に対してベクトル インデックス作成 Cloud Storage Cloud Run Eventarc Vertex AI Firestore gcloud firestore indexes composite create \ --collection-group=collection-group \ --query-scope=COLLECTION \ --field-config field-path=vector-field,vector-config='vector-configuration' \ --database=database-id

Slide 17

Slide 17 text

chunk 毎のベクトル データや、メタデータ登録 Cloud Storage Cloud Run Eventarc Vertex AI Firestore ドキュメント { “chunk”: “レストラン名: …”, “embedding”: Vector<768>, “metadata”: … }

Slide 18

Slide 18 text

データの検索

Slide 19

Slide 19 text

クライアントからリクエスト Cloud Run この店のメニューの前菜が見たい

Slide 20

Slide 20 text

プロンプトのテキスト エンべディングを作成 Cloud Run Vertex AI テキスト エンべディング 768 次元ベクトル [ -0.010465549305081367, 0.037910543382167816, 0.0072224168106913567, … ]

Slide 21

Slide 21 text

Firestore でベクトル検索 Cloud Run Firestore Python の例 from google.cloud import firestore from google.cloud.firestore_v1.base_vector_query import DistanceMeasure from google.cloud.firestore_v1.vector import Vector db = firestore.Client(project=project_id) collection = db.collection(COLLECTION_NAME) collection.find_nearest( vector_field=EMB_FIELD_NAME, query_vector=Vector(query_embedding), distance_measure=DistanceMeasure.EUCLIDEAN, limit=5, )

Slide 22

Slide 22 text

取得したデータを背景に、 LLM に生成リクエスト Cloud Run Vertex AI Python の例 history = [] for snapshot in vector_query.get(): text_chunk = snapshot.get("chunk") history.append(Content(role="model", parts=[Part.from_text(text_chunk)])) history.append(Content(role="user", parts=[Part.from_text(query.query)])) responses = generation_model.generate_content( contents=history, generation_config={ "max_output_tokens": 8192, "temperature": 1, "top_p": 0.95, }, )

Slide 23

Slide 23 text

期待する出力結果をレスポンスとして返す Cloud Run Vertex AI この店のメニューの前菜は、以下のとおりです: 雲形ブルスケッタ:グリルしたパンにフレッシュトマ ト、バジル、オリーブオイルをトッピング。雲の形に 仕上げました。 ¥1200 …

Slide 24

Slide 24 text

分析もしたほうがベター

Slide 25

Slide 25 text

入力、出力、関連情報をまとめてデータ保持 Cloud Run Vertex AI BigQuery Pub/Sub { “question”: “この店のメニューの前菜が見たい ”, “answer”: “この店のメニューの前菜は ...”, “metadata”: { (DB データ、template、利用モデル、 レイテンシ など) } }

Slide 26

Slide 26 text

ML.GENERATE_TEXT 関数を利用したクエリで要約評価 Cloud Run Vertex AI BigQuery Pub/Sub ML.GENERATE_TEXT

Slide 27

Slide 27 text

定期ジョブで分析を実行 Cloud Run (jobs) BigQuery 保持データで完結可能の場合は、 BigQuery のジョブ機能で実行 データや API 連携、ロジックなどが 必要な場合、 Cloud Run jobs によ る定期実行

Slide 28

Slide 28 text

評価用プロンプトを用意 1. タスク 生成 AI モデルに与えられたタスク(要約、質問応答など)を明確に記述 2. 評価基準 出力結果の評価基準を具体的に定義(正確性、関連性、網羅性など) 3. 期待される出力 理想的な出力例を提示することで、評価者が判断しやすくなる 4. 評価方法 評価者がどのような観点で評価すべきかを指示( 5 段階評価、Yes/No 評価など)

Slide 29

Slide 29 text

評価用プロンプトの例 タスク:与えられた業務オペレーションを要約して回答してください。 ###{プロンプト}### LLM による回答:###{回答}### 評価基準: ● 正確性:要約は業務の重要な情報を正確に反映しているか? ● 流暢さ:要約は自然な日本語で書かれているか? ● 関連性:要約は業務の主な作業内容と関連性があるか? ● 網羅性:要約は業務の主要なポイントを網羅しているか? 期待される出力:業務内容の主要なポイントを簡潔かつ正確にまとめた文章。 評価方法:各評価基準について、 5 段階評価で採点してください( 1: 非常に悪い、5: 非常に良い)。

Slide 30

Slide 30 text

LLM による回答を LLM で評価 Cloud Run (jobs) BigQuery Vertex AI (Text Prompt) プロンプトに対する回答を評価 (定量的な評価指標を計測するために、 Rapid Evaluation API を使用する方法もある)

Slide 31

Slide 31 text

評価をデータやプロンプトに反映 評価 正確性: 4 流暢さ: 5 関連性: 5 網羅性: 4 コメント 回答は業務内容を概ね正確に、かつ自然な日本語で要約しており、関連性も高いです。 特に、出荷準備から 配送、売上計上、顧客対応、アフターフォローまで、一連の流れを整理して説明している点は評価できます。 ただし、網羅性においては、一部改善の余地があります。 具体的な業務内容: 「ピッキングリストの作成」や「梱包」など、具体的な作業内容をもう少し詳しく記述 することで、より理解しやすくなります。 システム連携: WMS や会計システムへの連携など、システム面での連携について言及すると、業務フローの 理解が深まります。 業務担当者: それぞれの業務を誰が担当するのか、といった情報があると、より具体的なイメージが湧きます。

Slide 32

Slide 32 text

分析結果を反映 Cloud Storage Cloud Run Eventarc Vertex AI BigQuery ドキュメント内容の改善や 必要な情報の追加 正確性、網羅性を上げるため の保持データ項目の追加 プロンプト構成、 テンプレートの改善 Firestore

Slide 33

Slide 33 text

まとめ ● 今回のフローは一例で、他プロダクトや API を利用する方法も当然あります ● VM や VPC ネットワークの作成不要で RAG を実践できるのが優位なポイント ○ Cloud Storage (Object storage) ○ Cloud Run (Web App / API / Data transform) ○ Firestore (DB / Vector search) ○ Vertex AI (GenAI text generation / embeddings) ○ BigQuery (Analytics) ● Google Cloud のサーバーレス環境で、生成 AI アプリを開発してみませんか?

Slide 34

Slide 34 text

ちょっとだけ宣伝

Slide 35

Slide 35 text

ServerlessDays Tokyo 2024 Day 2 ワークショップ Google Cloud で始める 生成 AI を活用したアプリケーション開発入門 日程:9 月 22 日(日) 会場:docomo R&D OPEN LAB ODAIBA 時間: 12:00 - 12:50 Social/受付 12:50 - 13:00 イベントの説明 13:00 - 17:00 ワークショップ 参加登録 受付中! ご登録はこちら

Slide 36

Slide 36 text

すべての Google Cloud 開発者、技術者、学生のための メンバーシップ プログラム! 知る 多彩なコンテンツで 最新情報が学べる 高める 学習プログラムで スキルアップできる つながる キャリアや年齢を超えた 仲間と交流できる cloud.google.com/innovators ご登録はこちら メンバー特典 メンバー登録受付中! コミュニティ オンライン学習プラットフォーム「 Google Cloud Skills Boost 」を活用でき るよう、毎月 35 クレジットが無料で付与されます。

Slide 37

Slide 37 text

Innovators Live Japan デベロッパー・エンジニア向けのセッションを ライブ配信でお届け! https://goo.gle/GCI-LIVE-JP Google Cloud のメンバーやユーザーが、 Google Cloud やデベロッパー界隈で注目のトピックについて、トークを繰り広げます。 AI / ML クラウド ネイティブ開発 DevOps / SRE データ分析 Game (GEM) ウェビナー ご登録はこちら Community

Slide 38

Slide 38 text

10 月 8 日(火)開催 現地会場:Google Cloud 渋谷オフィス(渋谷ストリーム) オンサイト参加は定員を設けております。 お申し込み多数の場合は抽選とさせていただきます。 詳細・ご登録はこちら 何が学べる? ➔ クラウド移行のステップ、設計のコツ、プラッ トフォーム移行 ➔ アプリケーションや データベースのモダナイゼーション ➔ 生成 AI や、Cloud Workstations による開発 者体験の向上 誰が学ぶ? ➔ 情報システムエンジニア ➔ 情報システムマネージャ ➔ 開発者 この秋、開催 Google Cloud Modern Infra & Apps Summit ’24 今こそクラウドへ!仮想環境からの移行やモダナイズのノウハウとは goo.gle/gc-ias-next

Slide 39

Slide 39 text

Thank you