セッション情報
セッションタイトル:Cloud Run で構築する生成 AI アプリとRAG の実践
スピーカー:Google Cloud 頼兼 孝幸 様
このセッションでは、Cloud Run を実行基盤として生成 AI アプリケーションを動かす方法を紹介します。
生成 AI アプリケーションはフィードバック ループを含めたプラットフォームとして設計することが重要になります。
本セッションでは、Vertex AI と DB の連携による RAG の設計ガイドを提供し、それを評価する方法も紹介します。
生成AIアプリと従来のアプリの違い
生成AIアプリと従来のアプリについて3つのポイントをお話しされていました。
- 従来のアプリでもデータは重要だが、生成AIではさらにその重要性が増してくる
- 機能追加のサイクルに加えて回答を評価して継続的に改善する設計が必要である
- 顧客のニーズや新しい技術に対応できるようにプラットフォーム全体を設計する
足し算で考える生成AIアプリ開発
従来のアプリ開発では、
- 業務オペレーションやシステム的にデータを生成してストレージに格納
- イベントをトリガーにデータを抽出し、変換処理を加えてDBに登録
- エンドユーザにデータを返す
- エンドユーザのリクエストを保存する
- データを分析して可視化などに活用する
こうした一連のフィードバックサイクルを含めてアプリ開発としています。
これにAI機能をつける場合は「足し算」としてシステム構成に組み込み、従来の開発の延長線として捉えることは大事な考え方になっています。
Cloud Runの有用性
これはラスベガスで開催されたNext’24でも言われていた言葉のようで、生成AIアプリを本番環境で実行するにはCloud Runを活用することが簡単で最速の方法だと示しています。
Cloud Runを利用するメリットは4つあるとのことです。
- コンテナをデプロイするだけで外部からの到達可能なURLが発行されるため容易に公開が可能
- 0~Nへトラフィックに応じて高速にスケーリングできる
- イベント駆動で処理を実行ができるため、トリガーに合わせてデータの取り込みが可能
- 高度なトラフィック管理が可能なため、トラフィックの量を調整しながらテストやリリースが可能
データ取込におけるAIの導入
これも従来のフローにAIを足すということを意識すればよいとのことです。(上記の画像は一例)
- 入力データの解析:Document AIを使って構造化データの抽出を行う
- ベクトルデータの生成:Vertex AI Embeddings for textを使ってデータをベクトルに変換する
- 入力データの要約:Vertex AI Multimodal Promptを使って要約テキストの生成を行う
- ベクトルデータなどの保持:AlloyDBを使ってベクトルデータや要約、データの場所を保持する
生成AIアプリの公開
生成AIアプリの公開にあたってはセマンティック検索とLLMによる推論を適宜組み合わせていくとのこと。
セマンティック検索においてはコサイン類似度(どれだけデータが近しいか)という指標を使って、類似度の高い順にデータをフィルタリングしていくことで、より適切な結果を取得することができます。
またLLMに投げるプロンプトに関してはプロンプトのtemplateを使い、contextやquestionに適切に値を渡していくことでプロンプト要約を遂行していくことができます。
ここではLangChainのパッケージ利用を推奨していて、これにより最速で生成AIアプリやRAGワークフローを構築することができるようになっています。
結果分析
生成AIアプリは作って終わりではなく、間違った方向に進むのを防ぐためクエリに対する回答の分析、評価をすることが必要になっています。
そのためにはレスポンス返却時に非同期で保存したり、定期ジョブで分析を実行することが重要になってくるとのこと。
分析にあたり、Cloud Run jobsという定期実行する機能が搭載されているためAPI連携やロジックなどによる制御が必要な場合はこちらを利用し、保持データで完結できる場合はBigQueryのジョブ機能で実行することを推奨していました。
評価の方法については評価用のプロンプトを用意することを説明されていました。
タスク、評価基準、期待される出力、評価方法の4つの観点をプロンプトで指示をすることで、回答を生成して評価をデータやプロンプトに反映しやすくなります。
こちらは評価用プロンプトを使って、AIで評価をさせた例になります。プロンプトで指示をした観点はもちろんのこと、改善の余地に対するコメントまで残してくれています。
AIを使って回答を自動評価していくという仕組みが、結果分析のサイクルを回していく上で肝になっているようです。
得られた評価はこのようにドキュメント内容の改善やプロンプトの構成変更、保持データ項目の追加などを業務サイクルやシステムにフィードバックすることで、一度きりの開発に終わらない生成AIアプリの開発を継続することができます。
さいごに
いかがだったでしょうか。生成AIアプリの開発は従来のアプリ開発にAI機能を「足し算」で考えるということに感銘を受けました。生成AIアプリと聞くと、これまでのアプリとは異なる難しいものを作る必要があると考えがちですが、AI機能を足すだけと考えるとこれなら出来そうという気持ちになります。
今回のセッション内容にあった評価用プロンプトのように上手くAIによるフィードバックを活用することで、より良い生成AIアプリが作っていけると思うのでぜひ参考にしていきたいです。