【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公式(基盤モデル):
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概要):
Embeddingを作っただけでは何もできません。
次に必要なのが Vector Search(ベクター検索) です。
✔ Vector Searchの役割
- Embeddingを保存する(Indexを作成)
- クエリをEmbeddingに変換
- Embedding同士の距離(類似度)を計算
- 最も関連性が高い文書を返す
RAGでは以下の流れとなります
- 文書をchunk(分割)
- Embeddingに変換
- Vector Indexに保存
- ユーザー質問をEmbeddingに変換
- 類似した文書をVector Searchで取得
- 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 向け):
RAGアプリは、
- Embedding
- Vector Search
- LLM
- 評価
- トレース
など複数コンポーネントから構成されます。
MLflow GenAIを使うと、
- RAG アプリの依存関係
- Prompt
- 評価
- 実行ログ
などを一括管理できます。
また、MLflow GenAIはRetrieval Precision/RecallなどRAG特有の評価指標もサポートしており、検索の品質改善にも使えます。
RAGは仕組みが複雑になりがちなので、MLflow GenAIによる“アプリとしての管理”は実務でかなり重要です。
⚙️ Agent Framework:RAGを実際に動かす基盤
Databricks公式(生成AI アプリケーション用のエージェントをデプロイする):
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
-
Embeddings(FMAPI)
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 -
Vector Search
https://docs.databricks.com/aws/ja/generative-ai/vector-search
https://docs.databricks.com/aws/ja/vector-search/vector-search -
MLflow GenAI
https://docs.databricks.com/aws/ja/mlflow3/genai/getting-started -
Agent Framework
https://docs.databricks.com/aws/ja/generative-ai/agent-framework/deploy-agent
✨ 終わりに
今日はRAGの“全体像”と、Databricksが提供する Embeddings → Vector Search → Serving → Agent Framework というパイプラインを紹介しました。
明日は Day17(MosaicML による LLM ファインチューニング) に進みます!
本日はここまで。
それではまた明日!
Discussion