Vertex AI の RAG Engine を触ってみた

2025年4月4日掲載

キービジュアル

今回の記事では、Google CloudのVertex AIを活用したRAG Engineを試したので、結果をレポートします。

特にマルチモーダルRAGの仕組みや使い方に注目し、Google Cloud Storageバケット内のドキュメントを検索するアプリを開発して、回答結果を検証します。

目次

1. マルチモーダル RAG とは?

マルチモーダル RAG( Retrieval-Augmented Generation )とは、テキスト、画像、音声など異なるデータ形式を統合し、情報検索と生成を行う技術です。このアプローチにより、様々な情報源からコンテキスト情報を取得し、生成された応答の精度を大幅に向上させることができます。

マルチモーダルと RAG については、以下のブログでわかりやすく説明していますので、更に詳しく知りたい方は参照してください。

2. Vertex AI RAG Engine の特徴

RAG Engine は、Vertex AI プラットフォームのコンポーネントであり、下記のような特徴を持っています。

2.1 複雑なソースコード開発が不要

RAG Engine はシンプルな API を提供しており、迅速なプロトタイピングと実験が可能です。API を通じて簡単に利用を開始できるため、短時間での開発が可能です。なお、Google ドライブや Cloud Storage バケットにドキュメントを配置するだけで検索や生成機能の実装ができるため、技術者は従来の RAG システム開発にかかる手間を大幅に減らすことができます。

2.2 高度な検索精度

Vertex AI RAG Engine を活用することで、企業は大量のデータを効果的に管理し、検索精度の高い AI システムを構築できます。なお、RAG Engine の詳細は公式ドキュメントを参照してください。

3. アプリ開発

RAG Engineを活用するデモアプリを開発して検証をしていきます。

今回は、システム管理者がシステム関連ドキュメント(例: 障害表や設計書)を迅速に検索および取得できるようにするするアプリを開発します。これにより、過去の事例を参考にして迅速に対応することで、工数の削減、システム運用の効率化の向上を目指します。

アプリの構成:

アプリケーションは以下のコンポーネントで作成します。

  1. Google Cloud Storage:システムドキュメントを格納するバケット
  2. RAG Corpus:Google Cloud の RAG Engine API で使用するコーパス
  3. 検索ツール:テキストベースの問い合わせを処理するツール。ユーザーからの入力を受け取り、RAG Corpus から適切な情報を取得

アプリに期待する動作:

  • 迅速な検索:問い合わせを行うと、関連するドキュメントの情報を迅速に検索および取得できること。
  • 回答の精度:問い合わせに対し、高精度、かつ適切な情報を提供すること。

3.1 環境の整備

まず、RAG Engine を利用するために、GCP コンソールで 以下の API を有効にしてください。

※本記事では Gemini 2.0 Flash モデルを利用していますが、その他のモデルを利用したい場合は Model Garden を参照して適切なモデルを選択してください。

次に、モデルを利用するために、下記のコマンドで SDK を端末にインストールしてください。

pip install --upgrade vertexai
pip install --upgrade google-cloud-aiplatform
pip install --upgrade google-genai

インストールが終わった後、下記のコマンドで認証を行います。

gcloud auth application-default login

次に、Google Cloud Storage バケットに事前にドキュメントをアップロードする必要があります。今回はシステム管理に関連するドキュメント(例: 障害表、設計書など)を使用しました。

RAG Engine でサポートしているドキュメントの種類については、Vertex AI RAG Engine のドキュメント タイプ で解説されています。

3.2 RAG Corpus の作成

次に、RAG のコーパス(データベース)を作成し、情報を Google Cloud Storage から検索できるようにします。以下のソースコードを使用して、コーパスを作成します。

具体的なサンプルソースはRAG Engine API ページで紹介されているものを参考にしています。

import vertexai
from vertexai import rag

# プロジェクトIDとロケーションを設定
PROJECT_ID = "your-project-id"
LOCATION = "your-location"

# Vertex AI APIを初期化
vertexai.init(project=PROJECT_ID, location=LOCATION)

# コーパスの表示名を設定
DISPLAY_NAME = "your-corpus-display-name"

# エンベッディングモデル構成を設定
embedding_model_config = rag.RagEmbeddingModelConfig(
    vertex_prediction_endpoint=rag.VertexPredictionEndpoint(
        publisher_model="publishers/google/models/text-multilingual-embedding-002"
    )
)

# バックエンド構成を設定
backend_config = rag.RagVectorDbConfig(rag_embedding_model_config=embedding_model_config)

# コーパスを作成
corpus = rag.create_corpus(
    display_name=DISPLAY_NAME,
    backend_config=backend_config
)

# ファイルをインポート
rag.import_files(
    corpus.name,
    paths=["gs://your-bucket-name/documents"],
)

print(f"コーパス {corpus.name} にファイルがインポートされました。")

設定値の説明:

  • PROJECT_ID : Google Cloud プロジェクト ID を指定します。
  • LOCATION : リソースのロケーション(例: us-central1)を指定します。
  • DISPLAY_NAME : コーパスの表示名を設定します。
  • paths : インポートするファイルが保存されている Google Cloud Storage バケットのパスを指定します。

これらの値を適切に設定し、上記のコードを実行することで、RAG のコーパスを作成し、ファイルをインポートすることができます。

コードの実行後、コンソールに「コーパス {corpus.name} にファイルがインポートされました。」というメッセージが表示されれば、コーパスの作成とファイルのインポートが正常に完了しています。

3.3. テキストで問い合わせするツール作成

テキストベースの問い合わせツールを作成し、ユーザーが自然言語でコーパスにアクセスできるようにします。以下のソースコードを使用します。

from google import genai
from google.genai import types
import base64

# 定数の定義
PROJECT_ID = "your-project-id"
LOCATION = "your-location"
MODEL_NAME = "gemini-2.0-flash-001"
INPUT_TEXT = "your-input-text"
RAG_CORPUS = "your-rag-corpus"

def generate():
    client = genai.Client(
        vertexai=True,
        project=PROJECT_ID,
        location=LOCATION,
    )

    model = MODEL_NAME
    contents = [
        types.Content(
            role="user",
            parts=[
                types.Part.from_text(text=INPUT_TEXT)
            ]
        ),
    ]
    
    # RagResource の定義を修正
    class VertexRagStoreRagResource:
        def __init__(self, rag_corpus):
            self.rag_corpus = rag_corpus

    tools = [
        types.Tool(
            retrieval=types.Retrieval(
                vertex_rag_store=types.VertexRagStore(
                    rag_resources=[
                        VertexRagStoreRagResource(
                            rag_corpus=RAG_CORPUS
                        )
                    ],
                    similarity_top_k=10,
                )
            )
        )
    ]
    
    generate_content_config = types.GenerateContentConfig(
        temperature=1,
        top_p=0.95,
        max_output_tokens=8192,
        response_modalities=["TEXT"],
        safety_settings=[types.SafetySetting(
            category="HARM_CATEGORY_HATE_SPEECH",
            threshold="OFF"
        ), types.SafetySetting(
            category="HARM_CATEGORY_DANGEROUS_CONTENT",
            threshold="OFF"
        ), types.SafetySetting(
            category="HARM_CATEGORY_SEXUALLY_EXPLICIT",
            threshold="OFF"
        ), types.SafetySetting(
            category="HARM_CATEGORY_HARASSMENT",
            threshold="OFF"
        )],
        tools=tools,
    )

    generated_text = ""  # 生成されたテキストを格納する変数

    for chunk in client.models.generate_content_stream(
        model=model,
        contents=contents,
        config=generate_content_config,
    ):        
        if chunk.candidates and chunk.candidates[0].content and chunk.candidates[0].content.parts:
            generated_text += chunk.text

    print(generated_text)  # 生成されたテキストを出力

generate()

設定値の説明:

  • PROJECT_ID : Google Cloud プロジェクト ID を指定します。
  • LOCATION : リソースのロケーション(例: us-central1 )を指定します。
  • MODEL_NAME : 使用するモデル名を指定します(ここでは gemini-2.0-flash-001 を使用)
  • INPUT_TEXT : 問い合わせたいテキストを指定します。
  • RAG_CORPUS : 事前に作成したコーパスの識別子を指定します。

これらの値を適切に設定し、上記のコードを実行することで、RAG Engine を使ったテキスト問い合わせツールを作成することができます。

4. 動作確認

作成したアプリケーションの動作確認を行います。社内システム関連の問い合わせ内容について、結果が適切に返されるか検証します。
※数字やシステム名等の機密情報は隠しています。

① 確認内容1

  • 問い合わせ:A システムについて教えて
  • 結果:

A システムは、IFRS に基づき会計処理をするためのシステムであり、会計データを保持し、仕訳や帳票の確認を行います。

本システムの機能として、収益管理におけるリース契約パターンに対応しており、契約における算定処理も可能です。契約のインターフェースで付与された金額種類をもとに、配賦グループと配賦コードの付与を行い、配賦コード別金額種類別収益明細に登録します。

A システムでは、リース期間に応じた割引率を設定し、契約売上をリース売上と保守売上に配賦します。

20XX年には、DB枯渇と処理性能の問題が課題として挙げられていましたが、DBサーバーの移設や不要データの削除、リカバリ時間の短縮などの対応が行われました。

② 確認内容2

  • 問い合わせ:A システムの過去の DB 容量枯渇時の対応について教えてください。
  • 結果:

A システムでは、過去の DB 容量枯渇問題に対して、以下の対応が行われました。

1.  **新環境への移行**:DB サーバーを移設し、容量を拡張しました。これにより、延命が期待されました。
2.  **データ保持形式の変更**:データ保持形式を見直し、保持期間を短縮しました。これにより、データレコード数を削減し、処理時間の短縮を図りました。
3.  **不要なデータのファイル退避**:不要なデータをファイルに退避させました。

これらの動作確認を通じて、適切な結果が得られていることが確認できました。この結果に基づき、システム管理者が迅速に対応できるようになり、システム管理作業の効率化と工数削減が実現可能であることが期待されます。

5. まとめ

今回、Google Cloud の RAG Engine API を利用して、システム管理に関連するドキュメントの検索機能を実装しました。RAG Engine の導入と実装は非常に簡単で、使いやすかったことが印象的でした。特に、gemini-2.0-flash-001 モデルを使用した際の検索精度が非常に高く、多様なビジネスニーズに柔軟に対応できる可能性を感じました。

ただし、現時点ではサポートされるドキュメントのタイプが限定的で、イメージや動画形式での検索ができないことが残念でした。また、RAG Corpus の作成がコンソールから直接行えず、API を使用しなければならない点もやや不便に感じました。これらの機能は今後のアップデートで対応されることを期待しています。これにより、さらに様々なデータ形式に対しても強力な情報検索が可能となり、ビジネスアプリケーションの幅が広がると思います。

今回の検証の詳細や他の Vertex AI のサンプルコードに関しては、過去の記事でも詳しく紹介していますので、ぜひ参考にしてください。

Vertex AI DIY プランについて

Vertex AI の別の機能である Vertex AI Search を利用することで、社内文章の検索等、さらに多様なニーズに対応することができます。

Vertex AI Search を使って生成 AI を構築してみませんか?

ソフトバンクのエンジニアが構築をサポートします。

Vertex AI DIY プランでは、以下の3つのことをご体験いただけます。

さらに、DIY プランでは Claude 3.5 Sonnet が利用可能になりました。これにより、高度な AI ソリューションを構築できるようになります。


RAG 精度向上オプションサービスの登場!

多く寄せられた「文書検索精度を改善したい」という顧客の声から生まれました!本サービスは、Vertex AI DIYプラン のRAGプランで使っている、Google Cloud のVertex AI Agent Builder 専用の精度改善オプションです。

無料で始める、Vertex AI DIYサービスが大幅アップデート!

従来のVertex AI Search(現名称:RAG)に加え、マルチモーダルプランが新登場。マルチモーダルプランは、「Vertex AI Studio をエンドユーザに使わせたい!」、「新しいモデルを利用したい!」という顧客の声から生まれました!

マルチモーダルプランで体験できること

関連サービス

Vertex AI Search を使って社内文書を検索する生成AIを構築してみませんか?
ソフトバンクのエンジニアが構築をサポートします。
Google の生成AIの導入を考えている方はもちろん、どのようなものか確認したいという方でもご活用いただけます。

Looker は定義から集計、可視化の一連のデータ分析プロセスをカバーする BI ツールを超えるデータプラットフォームです。ソフトバンクは、顧客のニーズに合わせて柔軟なサポートを提供し、Looker を活用したデータドリブンな企業変革を支援しています。

Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

条件に該当するページがございません