ScalarDB Cluster でベクトル検索をはじめよう
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
ScalarDB Cluster は、アプリケーションがベクトルストア (埋め込みストア) と統一された方法で対話できるように、ベクトルストアの抽象化を提供します。この入門チュートリアルでは、ScalarDB Cluster でベクトル検索を実行する方法を説明します。
ベクトルストアの抽象化とは何ですか?
ScalarDB Cluster は、リレーショナルデータベース、NoSQL データベース、NewSQL データベースを含むさまざまなデータベースを抽象化するのと同様に、さまざまなベクトルストアを抽象化します。このベクトルストアの抽象化を使用すると、特定のベクトルストアの実装に依存せず、移植性を確保しながら、ベクトルストアと統一された方法で対話するアプリケーションを開発できます。さらに、ベクトルストアの統合が ScalarDB Cluster に組み込まれているため、アプリケーションはそのスケーラビリティを活用できます。
ベクトルストアの抽象化の現在の実装は LangChain4j を活用し、次のベクトルストアと埋め込みモデルをサポートしています。
ベクトルストア:
- In-memory
- OpenSearch
- Azure Cosmos DB NoSQL
- Azure AI Search
- pgvector
埋め込みモデル:
- In-process
- Amazon Bedrock
- Azure OpenAI
- Google Vertex AI
- OpenAI
ベクトルストアの抽象化を使用する理由
生成 AI の時代において、大規模言語モデル (LLM) を導入する際に組織が直面する課題の1つは、これらのモデルが企業データを理解できるようにすることです。検索拡張生成 (RAG) は、特定の企業知識で LLM を強化するために使用される重要な手法です。たとえば、LLM を搭載したチャットボットが正確で適切な応答を提供できるようにするために、企業は RAG を使用してユーザーマニュアルやサポートドキュメントからドメイン固有の情報を統合します。
RAG はベクトルストアに依存しています。ベクトルストアは通常、データベースからデータを抽出し、そのデータをベクトルに変換してから、それらのベクトルをロードすることによって作成されます。ScalarDB Cluster でベクトルストアとデータベースの抽象化を使用すると、プロセス全体をシ ームレスに実装できます。このアプローチにより、ワークフローとコードが大幅に簡素化され、特定のベクトルストアとデータベースに依存する複雑なアプリケーションを作成する必要がなくなります。
チュートリアル
このチュートリアルでは、ScalarDB Cluster でベクトル検索を実行する方法を説明します。
前提条件
- Eclipse Temurin の OpenJDK LTS バージョン (17 または 21)
- Docker 20.10 以降と Docker Compose V2 以降
このチュートリアルは Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体はさまざまなベンダーの JDK ディストリビューションでテストされています。ScalarDB の要件、互換性のある JDK ディストリビューションを含む詳細については、要件 を参照してください。
ScalarDB Cluster を使用するには、ライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、お問い合わせください。
1. ScalarDB Cluster の設定ファイルを作成する
以下の設定ファイルを scalardb-cluster-node.properties として作成し、<YOUR_LICENSE_KEY> と <LICENSE_CHECK_CERT_PEM> を ScalarDB ライセンスキーとライセンスチェック証明書の値に置き換えてください。ライセンスキーと証明書の詳細については、製品ライセンスキーの設定方法を参照してください。
scalar.db.transaction.enabled=false
# Enable the standalone mode
scalar.db.cluster.node.standalone_mode.enabled=true
# Enable the embedding feature
scalar.db.embedding.enabled=true
# License key configurations
scalar.db.cluster.node.licensing.license_key=<YOUR_LICENSE_KEY>
scalar.db.cluster.node.licensing.license_check_cert_pem=<LICENSE_CHECK_CERT_PEM>
さらに、使用する埋め込みストアと埋め込みモデルに応じて、設定ファイルにプロパティを追加する必要があります。
ScalarDB Cluster は複数の埋め込みストアと埋め込みモデルをサポートしています。複数の名前付きインスタンスを定義し、実行時に使用するインスタンスを選択できます。
複数のインスタンスを設定するには、scalar.db.embedding.stores と scalar.db.embedding.models にコンマ区切りの名前リストを指定します。次に、scalar.db.embedding.stores.<STORE_NAME>. または scalar.db.embedding.models.<MODEL_NAME>. をプレフィックスとして使用して各インスタンスを設定します。
例:
# 複数の埋め込みストアを定義します。
scalar.db.embedding.stores=store1,store2
# 最初のストアを設定します。
scalar.db.embedding.stores.store1.type=in-memory
# 2番目のストアを設定します。
scalar.db.embedding.stores.store2.type=opensearch
scalar.db.embedding.stores.store2.opensearch.server_url=<SERVER_URL>
...
# 複数の埋め込みモデルを定義します。
scalar.db.embedding.models=model1,model2
# 最初のモデルを設定し ます。
scalar.db.embedding.models.model1.type=in-process
# 2番目のモデルを設定します。
scalar.db.embedding.models.model2.type=open-ai
scalar.db.embedding.models.model2.open-ai.api_key=<API_KEY>
...
使用する埋め込みストアを選択し、それに応じた設定手順に従ってください。
- In-memory
- OpenSearch
- Azure Cosmos DB for NoSQL
- Azure AI Search
- pgvector
インメモリ埋め込みストアは基本的なインメモリ実装です。この埋め込みストアは、迅速なプロトタイピングやシンプルなユースケースに役立ちます。
インメモリ埋め込みストアを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding store names (comma-separated list for multiple stores).
scalar.db.embedding.stores=my_store
# Configure the embedding store type.
scalar.db.embedding.stores.my_store.type=in-memory
OpenSearch 埋め込みストアは、バックエンドとして OpenSearch を使用する埋め込みストアです。
OpenSearch の実装がローカルで実行されているか、AWS で実行されているかを選択し、それに応じた設定手順に従ってください。
- Running locally
- Running on AWS
ネットワーク上で到達可能なローカルで実行されている OpenSearch クラスターの場合、設定ファイルに次のプロパティを追加します。
# Define embedding store names (comma-separated list for multiple stores).
scalar.db.embedding.stores=my_store
# Configure the embedding store type.
scalar.db.embedding.stores.my_store.type=opensearch
# OpenSearch Server URL.
scalar.db.embedding.stores.my_store.opensearch.server_url=<SERVER_URL>
# OpenSearch API key (optional).
scalar.db.embedding.stores.my_store.opensearch.api_key=<API_KEY>
# OpenSearch username (optional).
scalar.db.embedding.stores.my_store.opensearch.user_name=<USER_NAME>
# OpenSearch password (optional).
scalar.db.embedding.stores.my_store.opensearch.password=<PASSWORD>
# OpenSearch index name.
scalar.db.embedding.stores.my_store.opensearch.index_name=<INDEX_NAME>
AWS でフルマネージドサービスとして実行されている OpenSearch クラスターの場合、設定ファイルに次のプロパティを追加します。
# Define embedding store names (comma-separated list for multiple stores).
scalar.db.embedding.stores=my_store
# Configure the embedding store type.
scalar.db.embedding.stores.my_store.type=opensearch
# OpenSearch Server URL.
scalar.db.embedding.stores.my_store.opensearch.server_url=<SERVER_URL>
# The AWS signing service name, one of `es` (Amazon OpenSearch) or `aoss` (Amazon OpenSearch Serverless).
scalar.db.embedding.stores.my_store.opensearch.service_name=<SERVICE_NAME>
# The AWS region for which requests will be signed. This should typically match the region in `server_url`.
scalar.db.embedding.stores.my_store.opensearch.region=<REGION>
# The AWS access key ID.
scalar.db.embedding.stores.my_store.opensearch.access_key_id=<ACCESS_KEY_ID>
# The AWS secret access key.
scalar.db.embedding.stores.my_store.opensearch.secret_access_key=<SECRET_ACCESS_KEY>
# OpenSearch index name.
scalar.db.embedding.stores.my_store.opensearch.index_name=<INDEX_NAME>
Azure Cosmos DB for NoSQL 埋め込みストアは、バックエンドとして Azure Cosmos DB を使用する埋め込みストアです。
Azure Cosmos DB for NoSQL 埋め込みストアを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding store names (comma-separated list for multiple stores).
scalar.db.embedding.stores=my_store
# Configure the embedding store type.
scalar.db.embedding.stores.my_store.type=azure-cosmos-nosql
# The Azure Cosmos DB endpoint that the SDK will connect to.
scalar.db.embedding.stores.my_store.azure-cosmos-nosql.endpoint=<ENDPOINT>
# A master key used to perform authentication for accessing resources. A read-only key can also be used only for read-only operations.
scalar.db.embedding.stores.my_store.azure-cosmos-nosql.key=<KEY>
# The database name to be used.
scalar.db.embedding.stores.my_store.azure-cosmos-nosql.database_name=<DATABASE_NAME>
# The container name to be used.
scalar.db.embedding.stores.my_store.azure-cosmos-nosql.container_name=<CONTAINER_NAME>
# The dimensions of the embeddings.
scalar.db.embedding.stores.my_store.azure-cosmos-nosql.dimensions=<DIMENSIONS>
Azure AI Search 埋め込みストアは、バックエンドとして Azure AI Search を使用する埋め込みストアです。
Azure AI Search 埋め込みストアを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding store names (comma-separated list for multiple stores).
scalar.db.embedding.stores=my_store
# Configure the embedding store type.
scalar.db.embedding.stores.my_store.type=azure-ai-search
# The Azure AI Search endpoint.
scalar.db.embedding.stores.my_store.azure-ai-search.endpoint=<ENDPOINT>
# The Azure AI Search API key.
scalar.db.embedding.stores.my_store.azure-ai-search.api_key=<API_KEY>
# The name of the index to be used. If no index is provided, a default index name will be used.
scalar.db.embedding.stores.my_store.azure-ai-search.index_name=<INDEX_NAME>
# The dimensions of the embeddings.
scalar.db.embedding.stores.my_store.azure-ai-search.dimensions=<DIMENSIONS>
pgvector 埋め込みストアは、バックエンドとしてベクトル類似検索用の Postgres 拡張機能である pgvector を使用する埋め込みストアです。
pgvector 埋め込みストアを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding store names (comma-separated list for multiple stores).
scalar.db.embedding.stores=my_store
# Configure the embedding store type.
scalar.db.embedding.stores.my_store.type=pgvector
# The database host.
scalar.db.embedding.stores.my_store.pgvector.host=<HOST>
# The database port.
scalar.db.embedding.stores.my_store.pgvector.port=<PORT>
# The database user.
scalar.db.embedding.stores.my_store.pgvector.user=<USER>
# The database password.
scalar.db.embedding.stores.my_store.pgvector.password=<PASSWORD>
# The database name.
scalar.db.embedding.stores.my_store.pgvector.database=<DATABASE>
# The table name.
scalar.db.embedding.stores.my_store.pgvector.table=<TABLE>
# The dimensions of the embeddings.
scalar.db.embedding.stores.my_store.pgvector.dimensions=<DIMENSIONS>
使用する埋め込みモデルを選択し、それに応じた設定手順に従ってください。
- In-process
- Amazon Bedrock
- Azure OpenAI
- Google Vertex AI
- OpenAI
In-process 埋め込みモデルは、ONNX runtime によって提供され、ScalarDB Cluster プロセス内で実行されるローカル埋め込みモデルです。この埋め込みモデルは、迅速なプロトタイピングやシンプルなユースケースに役立ちます。
In-process 埋め込みモデルを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding model names (comma-separated list for multiple models).
scalar.db.embedding.models=my_model
# Configure the embedding model type.
scalar.db.embedding.models.my_model.type=in-process
Amazon Bedrock 埋め込みモデルは、バックエンドとして Amazon Bedrock を使用する埋め込みモデルです。
Amazon Bedrock 埋め込みモデルを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding model names (comma-separated list for multiple models).
scalar.db.embedding.models=my_model
# Configure the embedding model type.
scalar.db.embedding.models.my_model.type=bedrock-titan
# The AWS region for which requests will be signed.
scalar.db.embedding.models.my_model.bedrock-titan.region=<REGION>
# The AWS access key ID.
scalar.db.embedding.models.my_model.bedrock-titan.access_key_id=<ACCESS_KEY_ID>
# The AWS secret access key.
scalar.db.embedding.models.my_model.bedrock-titan.secret_access_key=<SECRET_ACCESS_KEY>
# The model. Either `amazon.titan-embed-text-v1` or `amazon.titan-embed-text-v2:0`.
scalar.db.embedding.models.my_model.bedrock-titan.model=<MODEL>
# The dimensions.
scalar.db.embedding.models.my_model.bedrock-titan.dimensions=<DIMENSIONS>
Azure OpenAI 埋め込みモデルは、バックエンドとして Azure OpenAI を使用する埋め込みモデルです。
Azure OpenAI 埋め込みモデルを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding model names (comma-separated list for multiple models).
scalar.db.embedding.models=my_model
# Configure the embedding model type.
scalar.db.embedding.models.my_model.type=azure-open-ai
# The Azure OpenAI endpoint.
scalar.db.embedding.models.my_model.azure-open-ai.endpoint=<ENDPOINT>
# The Azure OpenAI API key.
scalar.db.embedding.models.my_model.azure-open-ai.api_key=<API_KEY>
# The deployment name in Azure OpenAI.
scalar.db.embedding.models.my_model.azure-open-ai.deployment_name=<DEPLOYMENT_NAME>
# The dimensions.
scalar.db.embedding.models.my_model.azure-open-ai.dimensions=<DIMENSIONS>
Google Vertex AI 埋め込みモデルは、バックエ ンドとして Google Vertex AI を使用する埋め込みモデルです。
Google Vertex AI 埋め込みモデルを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding model names (comma-separated list for multiple models).
scalar.db.embedding.models=my_model
# Configure the embedding model type.
scalar.db.embedding.models.my_model.type=vertex-ai
# The Google Cloud project.
scalar.db.embedding.models.my_model.vertex-ai.project=<PROJECT>
# The Google Cloud location.
scalar.db.embedding.models.my_model.vertex-ai.location=<LOCATION>
# The endpoint.
scalar.db.embedding.models.my_model.vertex-ai.endpoint=<ENDPOINT>
# The publisher.
scalar.db.embedding.models.my_model.vertex-ai.publisher=<PUBLISHER>
# The model name.
scalar.db.embedding.models.my_model.vertex-ai.model_name=<MODEL_NAME>
# The output dimensionality.
scalar.db.embedding.models.my_model.vertex-ai.output_dimensionality=<OUTPUT_DIMENSIONALITY>
OpenAI 埋め込みモデルは、バックエンドとして OpenAI を使用する埋め込みモデルです。
OpenAI 埋め込みモデルを使用するには、設定ファイルに次のプロパティを追加します。
# Define embedding model names (comma-separated list for multiple models).
scalar.db.embedding.models=my_model
# Configure the embedding model type.
scalar.db.embedding.models.my_model.type=open-ai
# The OpenAI API key.
scalar.db.embedding.models.my_model.open-ai.api_key=<API_KEY>
# The model name.
scalar.db.embedding.models.my_model.open-ai.model_name=<MODEL_NAME>
# The base URL.
scalar.db.embedding.models.my_model.open-ai.base_url=<BASE_URL>
# The organization ID.
scalar.db.embedding.models.my_model.open-ai.organization_id=<ORGANIZATION_ID>
# The dimensions.
scalar.db.embedding.models.my_model.open-ai.dimensions=<DIMENSIONS>
# The user.
scalar.db.embedding.models.my_model.open-ai.user=<USER>
2. Docker Compose ファイルを作成する
以下の設定ファイルを docker-compose.yaml として作成してください。
services:
scalardb-cluster-standalone:
container_name: "scalardb-cluster-node"
image: "ghcr.io/scalar-labs/scalardb-cluster-node-byol-premium:3.17.2"
ports:
- 60053:60053
- 9080:9080
volumes:
- ./scalardb-cluster-node.properties:/scalardb-cluster/node/scalardb-cluster-node.properties
3. ScalarDB Cluster を起動する
以下のコマンドを実行して、スタンドアロンモードで ScalarDB Cluster を起動します。
docker compose up -d
ScalarDB Cluster が完全に起動するまで数分かかる場合があります。