Databricks ベクトル検索

重要

この機能は、次のリージョンでパブリック プレビュー段階です: canadacentralcentraluseastuseastus2northeuropesoutheastasiawesteuropewestuswestus2

この記事では、Databricks のベクター データベース ソリューションである、Databricks ベクトル検索について、その概要としくみなどを説明します。

Databricks ベクトル検索は、Databricks インテリジェンス プラットフォームに組み込まれており、そのガバナンスおよび生産性のツールと統合されたベクトル データベースです。 ベクトル データベースは、埋め込みを保存および取得するために最適化されたデータベースです。 埋め込みとは、データ (通常はテキストまたは画像データ) のセマンティック コンテンツの数学的表現です。 埋め込みは大規模言語モデルによって生成され、互いに類似したドキュメントまたは画像の検索に依存する、多くの GenAI アプリケーションの重要なコンポーネントです。 たとえば、RAG システム、レコメンダー システム、画像およびビデオ認識などがあります。

ベクトル検索では、Delta テーブルからベクトル検索インデックスを作成します。 そのインデックスには、メタデータを含む埋め込みデータが含まれます。 それから、REST API を使用してそのインデックスにクエリを実行し、最も類似したベクトルを特定して、関連付けられているドキュメントを返すことができます。 基になる Delta テーブルが更新された場合に、自動的に同期するようにそのインデックスを構成することができます。

Databricks ベクトル検索では、その近似最近傍探索および L2 距離メトリックに Hierarchical Navigable Small World (HNSW) アルゴリズムを使用して、埋め込みベクトルの類似性を測定します。 コサイン類似度を使用する場合は、データポイント埋め込みを正規化してから、ベクトル検索にそれらをフィードする必要があります。 データ ポイントが正規化されると、L2 距離によって生成されるランク付けは、コサイン類似度によって生成されるランク付けと同じになります。

ベクトル検索のしくみ

Databricks 内でベクトル データベースを作成するには、まずベクトル埋め込みを提供する方法を決定する必要があります。 Databricks では、3 つのオプションがサポートされています:

  • オプション 1 テキスト形式のデータを含む、ソース Delta テーブルを提供します。 Databricks は、指定したモデルを使用して埋め込みを計算します。 Delta テーブルが更新されると、インデックスはその Delta テーブルとの同期を維持します。

    次の図にこのプロセスを示します。

    1. クエリの埋め込みを計算してください。 クエリにはメタデータ フィルターを含めることができます。
    2. 類似性検索を実行して、最も関連性の高いドキュメントを特定してください。
    3. 最も関連性の高いドキュメントを返し、それをクエリに追加してください。

    ベクター データベース、Databricks は埋め込みを計算します

  • オプション 2 事前計算された埋め込みを含む、ソース Delta テーブルを提供します。 Delta テーブルが更新されると、インデックスはその Delta テーブルとの同期を維持します。

    次の図にこのプロセスを示します。

    1. クエリは埋め込みで構成され、メタデータ フィルターを含めることができます。
    2. 類似性検索を実行して、最も関連性の高いドキュメントを特定してください。 最も関連性の高いドキュメントを返し、それをクエリに追加してください。

    ベクター データベース、事前計算された埋め込み

  • オプション 3 事前計算された埋め込みを含む、ソース Delta テーブルを提供します。 Delta テーブルの更新時に自動同期は行われません。 埋め込みテーブルが変更された場合は、REST API を使用してインデックスを手動で更新する必要があります。

    次の図は、デルタ テーブルが変更されたときにベクター インデックスが自動的に更新されないことを除いて、オプション 2 と同じプロセスを示しています:

    ベクター データベース、自動同期なしの事前計算された埋め込み

Databricks ベクトル検索を使用するには、次を作成する必要があります。

  • ベクトル検索エンドポイント。 このエンドポイントは、ベクトル検索インデックスを提供します。 REST API または SDK を使用して、エンドポイントにクエリを実行して更新することができます。 エンドポイントは、インデックスのサイズまたは同時要求の数をサポートするように、自動的にスケーリングされます。 手順については、「ベクトル検索エンドポイントを作成する」をご参照ください。
  • ベクトル検索インデックス。 ベクトル検索インデックスは Delta テーブルから作成され、リアルタイムの近似最近傍探索を提供するように最適化されています。 検索の目的は、クエリと類似したドキュメントを特定することです。 ベクトル検索インデックスは、Unity Catalog 内で表示および管理されます。 手順については、「ベクトル検索インデックスを作成する」をご参照ください。

さらに、Databricks で埋め込みを計算するように選択した場合は、埋め込みモデル用にモデル サービング エンドポイントも作成する必要があります。 手順については、「基盤モデル提供エンドポイントを作成する」を参照してください。

そのモデル サービング エンドポイントに対してクエリを実行するには、REST API または Python SDK を使用します。 クエリでは、Delta テーブル内の任意の列に基づいて、フィルターを定義することができます。 詳細については、「クエリでのフィルターの使用」、「API リファレンス」、または「Python SDK リファレンス」を参照してください。

要件

  • Unity Catalog 対応ワークスペース。
  • サーバーレス コンピューティングが有効になっている。
  • 変更データ フィードが有効なソース テーブル。
  • インデックスを作成するカタログ スキーマに対する CREATE TABLE 特権。
  • 有効にされた個人用アクセス トークン

データ保護と認証

Databricks では、データを保護するために次のセキュリティ制御が実装されています。

  • ベクトル検索に対するすべての顧客要求は、論理的に分離され、認証され、承認されます。
  • Databricks ベクトル検索では、すべての保存データ (AES-256) と転送中のデータ (TLS 1.2 以降) が暗号化されます。

Databricks ベクトル検索では、次の 2 つの認証モードがサポートされています。

  • 個人用アクセス トークン - 個人用アクセス トークンを使用して、ベクトル検索で認証できます。 「個人用アクセス トークン認証」を参照してください。 ノートブック環境内で SDK を使用すると、認証用の PAT トークンが自動的に生成されます。
  • サービス プリンシパル トークン - 管理者はサービス プリンシパル トークンを生成して、それを SDK または API に渡すことができます。 「サービス プリンシパルの使用」を参照してください。 運用環境のユース ケースの場合、Databricks ではサービス プリンシパル トークンを使用することをお勧めしています。

リソースとデータ サイズの制限

次の表は、ベクトル検索のエンドポイントとインデックスのリソースとデータ サイズの制限をまとめたものです。

リソース 細分性 Limit
ベクトル検索エンドポイント ワークスペースごと 10
埋め込み エンドポイントあたり 100,000,000
埋め込みディメンション インデックスごと 4096
インデックス エンドポイントあたり 20
インデックスごと 20
サポートされている型: Bytes、short、integer、long、float、double、boolean、string、timestamp、date
メタデータ フィールド インデックスごと 20
インデックス名 インデックスごと 128 文字

ベクトル検索インデックスの作成と更新には、次の制限が適用されます。

リソース 細分性 Limit
差分同期インデックスの行サイズ インデックスごと 100 KB
差分同期インデックスの埋め込みソース列のサイズ インデックスごと 32764 バイト
直接ベクトル インデックスの一括 upsert 要求サイズの制限 インデックスごと 10 MB
直接ベクトル インデックスの一括削除要求サイズの制限 インデックスごと 10 MB

ベクトル検索のクエリ API には、次の制限が適用されます。

リソース 細分性 Limit
クエリ テキストの長さ クエリごと 32764
結果の数 クエリごと 50

制限事項

  • PrivateLink または IP アクセス リスト のサポートは、現在、選択した顧客のセットに制限されています。 PrivateLink または IP アクセス リストでこの機能を使用することに関心がある場合は、Databricks サポートにお問い合わせください。
  • カスタマー マネージド キー (CMK) は、パブリック プレビューではサポートされていません。
  • 規制対象ワークスペースはサポートされていないため、この機能は HIPAA に準拠していません。
  • 行レベルと列レベルのアクセス許可はサポートされていません。 ただし、フィルター API を使用して独自のアプリケーション レベルの ACL を実装できます。

その他のリソース