🧠

【16日目】RAG(検索拡張生成)入門 〜 Embeddings と Vector Search で “本当に使える生成AI” を作る 〜

に公開

みなさんこんにちは、クルトンです!

今日は生成AI分野の中でも重要なテーマ、 RAG(Retrieval-Augmented Generation:検索拡張生成) を扱います。

ChatGPTなどのLLMは非常に便利ですが、次の弱点があります。

  • 手元の文書(社内資料・製品マニュアル)を知らない
  • 学習後に追加された情報を反映できない
  • 幻覚(hallucination)が起きる

そこで役立つのが RAG です。


🧭 RAG とは何か?

RAGは、

「外部の知識(文書)を検索し、その情報を LLM に渡して回答を生成する仕組み」

です。

LLMが“知らない情報”を、検索によって補うイメージです。

料理に例えると、

  • LLM = 天才シェフ
  • RAG = 材料(食材)を取りに行く仕組み
  • Embeddings = 材料の“特徴”を数値化した識別タグ
  • Vector Search = 食材倉庫から似た材料を探す人

天才シェフ(LLM)に良い材料(情報)を渡せば、より美味しい料理(正しく信頼できる回答)ができあがります。


🧠 Embeddingsとは?

Databricks公式(基盤モデル):
https://docs.databricks.com/aws/ja/machine-learning/foundation-model-apis/api-reference
https://docs.databricks.com/aws/ja/machine-learning/foundation-model-apis/supported-models

RAGの第一ステップは、文書(テキスト)をEmbeddingに変換することです。

✔ Embeddingについて

  • テキストの“意味”を多次元ベクトルで表現したもの
  • 「似た意味なら近く」「違う意味なら遠く」なるように配置される

Embeddingsを生成するには、Databricksの Foundation Model APIs を使います。

Embedding API(例)

response = client.embeddings(
  model="databricks-gte-large",
  input="RAGとは何ですか?"
)
print(response.data[0].embedding[:5])  # ベクトルの最初の5要素
  • 出力は1000次元を超えることもある「数値の配列」です。出力されるベクトルの次元数はモデルによっても異なります。
  • この数値列を使って「意味の近さ」を計算します。

🔍 Vector Search:RAGのRetrieval(検索)部分

Databricks公式(Mosaic AI Vector Search概要):
https://docs.databricks.com/aws/ja/generative-ai/vector-search

Embeddingを作っただけでは何もできません。
次に必要なのが Vector Search(ベクター検索) です。

✔ Vector Searchの役割

  • Embeddingを保存する(Indexを作成)
  • クエリをEmbeddingに変換
  • Embedding同士の距離(類似度)を計算
  • 最も関連性が高い文書を返す

RAGでは以下の流れとなります

  1. 文書をchunk(分割)
  2. Embeddingに変換
  3. Vector Indexに保存
  4. ユーザー質問をEmbeddingに変換
  5. 類似した文書をVector Searchで取得
  6. LLMの入力に「文書を追加」して回答生成

🗂 Databricks Vector Searchの特徴

Databricks Vector Searchは次の特徴があります。

  • 完全マネージド(インフラの管理不要)
  • Unity Catalogでガバナンス管理
  • 高速かつ高精度な類似検索
  • ストレージからの自動同期(Lakehouse連携)
  • 推論(Model Serving)とワンストップで連携

また、Vector SearchにはDeltaテーブルと自動同期する“Delta Sync Index”と、任意のembeddingを手動で登録する“Direct Index”の2種類があります。

モード 説明
Delta Sync Index(自動同期) Delta テーブルとベクトルインデックスが自動同期
Direct Index(手動 ingests) 手動で embedding を追加する

企業向けのRAGを作るなら、この統合性が非常に重要です。


🏗 Vector Indexの作成から検索までの例

簡単な例ですが、以下に記載してみます。

from databricks.vector_search.client import VectorSearchClient

client = VectorSearchClient()

index = client.get_index("main.my_schema.docs_index")

results = index.similarity_search(
    query_text="トークンとは何ですか?",
    num_results=3
)

print(results)

上記コードでRAGのRetriever部分が完成です。


🧭 MLflow GenAI:RAGアプリケーションを管理する

Databricks公式(MLflow 3 入門: GenAI 向け):
https://docs.databricks.com/aws/ja/mlflow3/genai/getting-started

RAGアプリは、

  • Embedding
  • Vector Search
  • LLM
  • 評価
  • トレース

など複数コンポーネントから構成されます。

MLflow GenAIを使うと、

  • RAG アプリの依存関係
  • Prompt
  • 評価
  • 実行ログ

などを一括管理できます。

また、MLflow GenAIはRetrieval Precision/RecallなどRAG特有の評価指標もサポートしており、検索の品質改善にも使えます。

RAGは仕組みが複雑になりがちなので、MLflow GenAIによる“アプリとしての管理”は実務でかなり重要です。


⚙️ Agent Framework:RAGを実際に動かす基盤

Databricks公式(生成AI アプリケーション用のエージェントをデプロイする):
https://docs.databricks.com/aws/ja/generative-ai/agent-framework/deploy-agent

Agent Frameworkを使うと、

  • Vector Search
  • LLM(FMAPI)
  • 検索結果の評価
  • 推論結果の加工

などを統合した “RAGの実行パイプライン” を構築できます。

企業向けのRAGでは、「LLMに渡す前後の加工」が必要なことが多く、Agent Frameworkがその役割を果たします。
※Agent FrameworkはRAG専用ではなく、Function Callingや複数ツール連携を含む“生成AIアプリ全体のオーケストレーション”にも利用できます。


🔗 他の日との関連

  • Day13(MLflow)
    → RAG アプリのログ・管理へ直結
  • Day14(Feature Store)
    → RAG の特徴量管理(特にOn-demand Features)と関連
    ※ 一般的なRAG構成ではFeature Storeは必須ではありません。Databricksでは“RAG + 構造化データ”のケースでFeature Storeを統合できます。
  • Day15(Model Serving)
    → RAG の推論基盤としてServingを使う
  • Day19(Inference Tables)
    → 推論ログの分析でRAGの品質改善

📚 参考URL


✨ 終わりに

今日はRAGの“全体像”と、Databricksが提供する Embeddings → Vector Search → Serving → Agent Framework というパイプラインを紹介しました。

明日は Day17(MosaicML による LLM ファインチューニング) に進みます!

本日はここまで。
それではまた明日!

ちゅらデータ株式会社

Discussion