Google Cloud

Vertex AI + LangChain で RAG 構築チュートリアル|Vector Search・Gemini

2026-05-24
NicheeLab編集部

Vertex AI Vector Search + LangChain + Gemini で本格 RAG (Retrieval-Augmented Generation) を構築するチュートリアルです。 Embedding 生成、Chunking、ANN 検索、Gemini への注入まで実装例で網羅します。

アーキテクチャ

Documents (PDF/MD/HTML)
       |
    Parse (Document AI / Unstructured)
       |
    Chunking (512-1024 tok, overlap 100)
       |
    Embedding (text-embedding-005)
       |
       v
Vertex AI Vector Search Index
       ^
       | (検索)
User Query → Embedding → Vector Search → Top-K → Gemini Pro → Answer

Step 1: ドキュメント前処理

# pip install langchain langchain-google-vertexai google-cloud-aiplatform
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("doc.pdf")
docs = loader.load()

splitter = RecursiveCharacterTextSplitter(
    chunk_size=1024,
    chunk_overlap=100,
    separators=["\n\n", "\n", "。", "!", "?", " "],
)
chunks = splitter.split_documents(docs)
print(f"{len(chunks)} chunks")

Step 2: Embedding 生成

from langchain_google_vertexai import VertexAIEmbeddings

embeddings = VertexAIEmbeddings(model_name="text-embedding-005")

texts = [chunk.page_content for chunk in chunks]
vectors = embeddings.embed_documents(texts)
print(f"Vector dim: {len(vectors[0])}")  # 768

Step 3: Vertex AI Vector Search Index 作成

from google.cloud import aiplatform as ai

ai.init(project="my-project", location="asia-northeast1")

# Embedding を JSONL 形式で GCS にアップロード
# {"id": "doc1-chunk1", "embedding": [0.1, 0.2, ...]}

# Index 作成
index = ai.MatchingEngineIndex.create_tree_ah_index(
    display_name="my-rag-index",
    contents_delta_uri="gs://my-bucket/embeddings/",
    dimensions=768,
    approximate_neighbors_count=10,
    distance_measure_type="DOT_PRODUCT_DISTANCE",
)

# Endpoint デプロイ
endpoint = ai.MatchingEngineIndexEndpoint.create(
    display_name="my-rag-endpoint",
    public_endpoint_enabled=True,
)
endpoint.deploy_index(index=index, deployed_index_id="my_rag_v1")

Step 4: 検索 + Gemini 回答生成

from langchain_google_vertexai import ChatVertexAI
from langchain.prompts import ChatPromptTemplate

llm = ChatVertexAI(model_name="gemini-2.0-pro-001", temperature=0.3)

def search_and_answer(query: str) -> str:
    # 1. Embedding 化
    query_emb = embeddings.embed_query(query)

    # 2. Vector Search
    response = endpoint.find_neighbors(
        deployed_index_id="my_rag_v1",
        queries=[query_emb],
        num_neighbors=5,
    )
    top_chunks = [chunks[int(n.id.split("-chunk")[1])] for n in response[0]]

    # 3. Gemini で回答生成
    context = "\n\n".join([c.page_content for c in top_chunks])
    prompt = ChatPromptTemplate.from_template("""
以下のコンテキストに基づいてユーザーの質問に答えてください。
コンテキストにない情報は「分かりません」と回答してください。

# コンテキスト
{context}

# 質問
{query}

# 回答
""")
    chain = prompt | llm
    result = chain.invoke({"context": context, "query": query})
    return result.content

# 利用
print(search_and_answer("休暇申請の方法を教えてください"))

Step 5: ハイブリッド検索 (Vector + Keyword)

from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever

# Keyword 検索
bm25 = BM25Retriever.from_documents(chunks)

# Vector 検索 (Vertex AI Vector Search ラッパー)
from langchain_google_vertexai import VectorSearchVectorStore
vector_retriever = VectorSearchVectorStore.from_components(
    project_id="my-project",
    region="asia-northeast1",
    gcs_bucket_name="my-bucket",
    index_id="my-rag-index",
    endpoint_id="my-rag-endpoint",
).as_retriever()

# アンサンブル (重み付け)
ensemble = EnsembleRetriever(
    retrievers=[vector_retriever, bm25],
    weights=[0.7, 0.3],
)
results = ensemble.invoke("休暇申請")

Step 6: 評価

  • RAGAS / TruLens / DeepEval で精度評価
  • 主要指標: Faithfulness (幻覚しない)、Answer Relevance、Context Precision/Recall
  • Vertex AI Gen AI Evaluation Service (2024〜) でマネージド評価

本番運用

  • 新ドキュメント追加 → 自動 Embedding + Index 更新 (Cloud Functions + Pub/Sub)
  • Cloud Run で API サービス化
  • Vertex AI Agent Builder で UI 構築 (Optional)
  • Citation (引用元) を回答に含める
  • Safety Filter 設定 (BLOCK_MOST)
  • Cloud Logging で全 Query / Response 保存 (品質改善)

料金例 (1000 ドキュメント, 月 10K query)

項目月額
Embedding (初回 + 更新)~$5
Vector Search Index ストレージ~$20
Vector Search Endpoint~$30
Vector Search Query (10K)~$1
Gemini Pro 生成 (10K query × 1K tok)~$50
Cloud Run API~$5
合計~$110/月

RAG とは?

Retrieval-Augmented Generation。社内ドキュメント等を Embedding で検索 → LLM に Context として渡して回答生成する技術。Fine-tuning より柔軟・低コスト。

Vertex AI Vector Search の特徴は?

Google ScaNN ベースの高速 ANN 検索、マネージド、Filter (メタデータ)、Embedding 自動同期 (BigQuery 連携)。アルゴリズム実装不要。

LangChain と LlamaIndex どちらを使う?

両方併用可。LangChain = 汎用フレームワーク (Agent / Tool 強い)、LlamaIndex = RAG 特化 (Index 構造豊富)。チームの好みで選択。

Vertex AI Search との使い分けは?

ノーコード + マネージド完結 → Vertex AI Search、柔軟性 + 細かいカスタマイズ → LangChain + Vector Search。前者はビジネスサイド、後者はエンジニア。

Embedding モデル何を使う?

Google text-embedding-005 (768 次元、多言語)、OpenAI text-embedding-3-small (1536 次元、安価)、Cohere multilingual-v3 (1024 次元)。多言語性能は Google / Cohere 優位。

Chunking 戦略は?

512〜1024 トークン推奨、Overlap 100 トークン。Markdown は見出しで分割、PDF は段落で分割。Document AI で意味的分割も可。

コストはどのくらい?

1000 ドキュメント (各 1 ページ) = Embedding $1〜2、Vector Search ストレージ $20/月、検索 $0.0001/query、Gemini Pro 回答生成 $1.25/M tok 入力。月数千円〜。

ハイブリッド検索は?

Vector (意味) + Keyword (BM25) の組み合わせで精度向上。Vertex AI Search は標準対応、LangChain は EnsembleRetriever。

関連記事・RAG / Gen AI

GCP PMLE 試験対策|Vertex AI + Gemini 生成 AI 実装パターン完全ガイド

Google Cloud Professional ML Engineer (PMLE) の Gen AI 領域を実装視点で解説。Gemini ファミリー選定、RAG パターン、Vertex AI Agent Builder、Fine-tuning、Responsible AI を網羅。

Vertex AI Agent Builder 完全ガイド|Conversational Agents・Vertex AI Search・Tool Use (GCP)

Google Cloud Vertex AI Agent Builder の全機能解説。Conversational Agents (Dialogflow CX 後継)、Vertex AI Search、Tool Use、Grounding、Playbook、料金、ChatGPT GPTs / Copilot Studio 比較を網羅。

Generative AI Leader (GAIL) 完全ガイド|Google Cloud 生成 AI 認定 (2025 年 5 月リリース新試験)

Google Cloud Generative AI Leader (GAIL、2025-05-14 リリース) の完全ガイド。4 ドメイン (生成 AI 基礎 30% / GCP 提供サービス 35% / モデル出力改善 20% / ビジネス戦略 15%)、Gemini ファミリー、Vertex AI Agent Builder、RAG、ビジネス導入観点を日本語で網羅。

Vertex AI 入門|Google Cloud 統合 ML プラットフォームの全機能 (GAIL/PMLE/PCD 必須知識)

Google Cloud Vertex AI の入門解説。Vertex AI Studio / Agent Builder / Model Garden / Search / Pipelines / Training の全機能、Gemini モデルファミリー (Pro/Flash/Ultra)、Azure OpenAI との比較、料金体系、Responsible AI 機能を日本語で整理。

※ Google Cloud、Gemini は Google LLC、LangChain は LangChain, Inc. の所有物です。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

GCP 試験対策ページを見る
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Google Cloud

Google Cloud (GCP) 認定資格ロードマップ 2026 完全版|全 15 試験を体系化

Google Cloud 認定資格 全 15 試験 (Foundational 2 + Associate 3 + Pr...

Google Cloud

Cloud Digital Leader (CDL) 完全ガイド|出題範囲・学習リソース・合格戦略

Google Cloud Cloud Digital Leader (CDL) の完全ガイド。6 ドメイン 92 bul...

Google Cloud

Generative AI Leader (GAIL) 完全ガイド|Google Cloud 生成 AI 認定

Google Cloud Generative AI Leader (GAIL、2025-05-14 リリース) の完全...

Google Cloud

Vertex AI 入門|Google Cloud 統合 ML プラットフォームの全機能

Google Cloud Vertex AI の入門解説。Vertex AI Studio / Agent Builde...

Google Cloud

GCP Associate Cloud Engineer (ACE) 完全ガイド|試験範囲・受験料・学習ロードマップ

Google Cloud Associate Cloud Engineer (ACE) の試験範囲・受験料 125 US...

Google Cloudの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.