How to create and query a Vector Search index | Databricks on AWS [2023/11/30時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
プレビュー
本機能はパブリックプレビューです。
本書ではDatabricks Vector Searchを用いたVector Searchインデックスの作成方法とクエリー方法を説明します。
UI、Python SDK、REST APIを用いてVector SearchエンドポイントやVector SearchインデックスのようなVector Searchのコンポーネントを作成、管理することができます。最もシンプルな方法としてはUIの使用をお勧めしますが、このガイドでは参照とクエリーにおけるSDKの利用方法もデモンストレーションします。
要件
-
Unity Catalogが有効化されたワークスペース。
-
アカウントコンソールでサーバレスコンピュートを有効化。
-
インデックスを作成するカタログスキーマに対する
CREATE TABLE
権限。 -
SDKを使いたいのであれば、ノートブックにインストールすること。
%pip install databricks-vectorsearch dbutils.library.restartPython()
Vector Searchエンドポイントの作成
UIを用いてVector Searchのエンドポイントを作成することができます。
- Compute UIを開くために左のサイドバーのComputeをクリックします。
-
Vector Searchタブをクリックし、Createをクリックします。
- Create endpoint formが開きます。このエンドポイントの名前を入力します。
- Confirmをクリックします。
SDKを使う場合には、Vector Searchエンドポイントを作成するために、以下を使うことができます。
client = VectorSearchClient()
client.create_endpoint(
name="vector_search_endpoint_name",
endpoint_type="STANDARD"
)
モデルサービングエンドポイントの設定
このセクションのガイドは、Databricksがあなたのためにエンべディングベクトルを自動で計算させるためのVector Searchインデックスを作成しようとしている場合にのみ適用されます。Deltaテーブルにご自身のエンべディングをお持ちの場合や、ご自身でエンべディングベクトルを計算する予定がある場合には、Vector Searchインデックスの作成までスキップしてください。
Vector Searchにえんべディングを計算させるためには、エンべディング生成のためのモデルサービングエンドポイントを設定する必要があります。お好きなエンべディングモデルのサービングのためのモデルサービングエンドポイントを設定するサンプルについては、エンべディングモデル呼び出しのサンプルノートブックのノートブックをご覧ください。
Vector Searchのためのモデルサービングエンドポイントをゼロにスケールダウンしないように設定することをお勧めします。サービングエンドポイントはウォームアップに数分を必要とするので、スケールダウンしているエンドポイントのインデックスに対する最初のクエリーは、エンドポイントのウォームアップ中にタイムアウトになるためです。
Vector Searchインデックスの作成
UIを用いてVector Searchインデックスを作成することができます。以下のステップでは、ソースのDeltaテーブルの変更があった際に自動で更新されるDelta Sync Indexの作成方法を説明しています。Vector Searchインデックスをご覧ください。
- Catalog Explorer UIを開くために、左のサイドバーのCatalogをクリックします。
- 使用したいDeltaテーブルを選択します。
- 右上のケバブメニューからCreate vector search indexを選択します。
-
Create vector indexフォームに入力します。
- インデックス名を指定します。
- 主キーとして使用するカラムを選択します。
- 使用したいエンべディングモデルをサービングしているモデルサービングエンドポイントを選択します。
- Databricksがあなたのためにエンべディングを計算できるようにCompute embeddingsを選択します。
- すでに計算されたエンべディングを持つDeltaテーブルがある場合には、Use existing embedding columnを選択します。
-
Embedding source columnを選択します。Databricksによって計算されるエンべディングでは、テキストのみがサポートされます。
- Use existing embedding columnを選択すると、任意のデータタイプをサポートするようにフィールドがEmbedding vector columnに変化します。
- どのEmbedding modelを使用するのかを選択します。
- 同期モードとしてContinuousを選択します。
continuous
モードは数秒のレーテンシーでインデックスを同期し続けます。しかし、継続的な同期ストリーミングパイプラインを実行するために計算クラスターがプロビジョニングされるので、コストは高くなります。
- Createをクリックします。
SDKを使う場合には、以下を使用することができます。このサンプルは、Databricksによって計算されるエンべディングを用いたDelta Sync Indexを作成します。
index = client.create_delta_sync_index(
endpoint_name="vector_search_demo_endpoint",
source_table_name="vector_search_demo.vector_search.en_wiki",
index_name="vector_search_demo.vector_search.en_wiki_index",
pipeline_type='TRIGGERED',
primary_key="id",
embedding_source_column="text",
embedding_model_endpoint_name="e5-small-v2"
)
SDKを用いてのみDirect Vector Access Indexを作成することができます。
client = VectorSearchClient()
index = client.create_direct_access_index(
endpoint_name="storage_endpoint",
index_name="{catalog_name}.{schema_name}.{index_name}",
primary_key="id",
embedding_dimension=1024,
embedding_vector_column="text_vector",
schema={
"id": "int",
"field2": "str",
"field3": "float",
"text_vector": "array<float>"}
)
Vector Searchエンドポイントのクエリー
SDKを用いてのみVector Searchエンドポイントにクエリーを行うことができます。以下の例では以前のセクションで作成したDelta Sync Indexを使用しています。
results = index.similarity_search(
query_text="Greek myths",
columns=["id", "text"],
num_results=2
)
results
その他のリソース
以下のノートブックでは、Vector Search Python SDKの使い方をデモンストレーションしています。
Python SDKを用いたVector Searchのノートブック
エンべディングモデル呼び出しのサンプルノートブック
Databricksモデルサービングを用いたAzure OpenAIエンべディング呼び出しのノートブック
Databricksモデルサービングを用いたOpenAIエンべディング呼び出しのノートブック
OSSエンべディングモデルの登録およびサービングのノートブック