グーグルジェミニ

MilvusでGoogle Geminiの埋め込みモデルを使用するには、モデルを選択し、Gemini APIキーでMilvusを設定します。

埋め込みモデルの選択

MilvusはGoogle Geminiが提供する埋め込みモデルをサポートしています。以下は現在利用可能なGemini埋め込みモデルです:

モデル名

寸法

最大トークン数

説明

gemini-embedding-001

デフォルト:3,072(推奨:768、1,536、または3,072)

8,192

マトリョーシカ表現学習(MRL)を用いて学習された、柔軟な次元を持つテキスト埋め込みモデル。

gemini-embedding-2

デフォルト: 3,072 (推奨: 768, 1,536, または 3,072)

8,192

Google初のネイティブなマルチモーダル埋め込みモデル。テキスト、画像、動画、音声、ドキュメントを統一された埋め込み空間でサポートする。

どちらのモデルもマトリョーシカ表現学習(MRL)技術を使用して学習されており、dim パラメータによって出力次元を柔軟に変更することができます。768次元で開始し、必要に応じて1,536次元や3,072次元にスケールアップすることが推奨される。詳細については、Geminiエンベッディングモデルを参照してください。

Geminiエンベッディングモデルは、特定のユースケース向けにエンベッディングを最適化するタスクタイプパラメータもサポートしています。Milvusは、操作に基づいてタスクタイプを自動的に設定します:

  • 挿入/アップサートRETRIEVAL_DOCUMENT

  • 検索RETRIEVAL_QUERY

これをオーバーライドするには、task パラメータを明示的に指定します(例:SEMANTIC_SIMILARITY,CLASSIFICATION,CLUSTERING )。

認証情報の設定

Milvusはエンベッディングをリクエストする前にGemini APIキーを知る必要があります。Milvusはクレデンシャルを設定するために2つの方法を提供します:

  • 設定ファイル(推奨):設定ファイル(推奨):milvus.yaml にAPIキーを保存し、再起動のたびにノードが自動的にAPIキーを取得するようにします。

  • 環境変数:Docker Composeに最適です。

コンフィギュレーション・ファイルはベアメタルやVMでメンテナンスしやすく、env-varルートはコンテナのワークフローに適している。

同じプロバイダのAPIキーが設定ファイルと環境変数の両方に存在する場合、milvusは常にmilvus.yaml の値を使用し、環境変数は無視します。

milvus.yamlMilvusは起動時にAPIキーを読み込み、同じプロバイダの環境変数を上書きします。

  1. credentialの下にキーを宣言します:

    APIキーは1つでも多くても構いません。

    # milvus.yaml
    credential:
      apikey_dev:            # dev environment
        apikey: <YOUR_DEV_KEY>
      apikey_prod:           # production environment
        apikey: <YOUR_PROD_KEY>    
    

    APIキーをここに記述することで、再起動後も永続的なAPIキーとなり、ラベルを変更するだけでキーを切り替えることができます。

  2. Gemini呼び出しに使用するキーをMilvusに知らせる。

    同じファイルで、Geminiプロバイダに使用させたいラベルを指定する。

    function:
      textEmbedding:
        providers:
          gemini:
            credential: apikey_dev      # ← choose any label you defined above
    

    これにより、MilvusがGemini embeddingsエンドポイントに送信するすべてのリクエストに特定のキーがバインドされます。

オプション2: 環境変数

Docker ComposeでMilvusを実行し、ファイルやイメージから秘密を守りたい場合、この方法を使用してください。

Milvusは、milvus.yaml にプロバイダのキーが見つからない場合のみ、環境変数にフォールバックします。

変数

必須

説明

milvus_gemini_api_key

はい

Geminiキーを各milvusコンテナ内で利用可能にする(milvus.yamlにGeminiキーが存在する場合は無視される)。

docker-compose.yamlファイルで、MILVUS_GEMINI_API_KEY 環境変数を設定する。

# docker-compose.yaml (standalone service section)
standalone:
  # ... other configurations ...
  environment:
    # ... other environment variables ...
    # Set the environment variable pointing to the Gemini API key inside the container
    MILVUS_GEMINI_API_KEY: <YOUR_GEMINI_API_KEY>

environment: ブロックは、Milvus コンテナにのみキーを注入し、ホスト OS には何も手を付けません。詳細については、「Docker ComposeでMilvusを設定する」を参照してください。

ステップ1:テキスト埋め込み機能付きコレクションの作成

スキーマフィールドの定義

埋め込み関数を使用するには、特定のスキーマを持つコレクションを作成します。このスキーマには、少なくとも3つの必要なフィールドが含まれていなければなりません:

  • コレクション内の各エンティティを一意に識別するプライマリフィールド。

  • 埋め込む生データを格納するVARCHAR フィールド。

  • テキスト埋め込み関数がVARCHAR フィールドに対して生成する密なベクトル埋め込みを格納するために予約されたベクトルフィールド。

以下の例では、テキストデータを格納するためのスカラーフィールド"document" と、Functionモジュールによって生成される埋め込みを格納するためのベクトルフィールド"dense" を持つスキーマを定義しています。ベクトル次元(dim)は、選択した埋め込みモデルの出力に合うように設定することを忘れないでください。

from pymilvus import MilvusClient, DataType, Function, FunctionType

# Initialize Milvus client
client = MilvusClient(
    uri="http://localhost:19530",
)

# Create a new schema for the collection
schema = client.create_schema()

# Add primary field "id"
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)

# Add scalar field "document" for storing textual data
schema.add_field("document", DataType.VARCHAR, max_length=9000)

# Add vector field "dense" for storing embeddings.
# IMPORTANT: Set dim to match the exact output dimension of the embedding model.
# For instance, Gemini's gemini-embedding-001 model outputs 3072-dimensional vectors by default,
# but can be shortened to 768 or 1536 dimensions.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=768)

テキスト埋め込み関数の定義

テキスト埋め込み関数は、VARCHAR フィールドに格納された生データを自動的に埋め込みに変換し、明示的に定義されたベクトルフィールドに格納します。

以下の例では、スカラーフィールド"document" をエンベッディングに変換し、結果のベクトルを先に定義した"dense" ベクトルフィールドに格納するFunctionモジュール(gemini_embedding)を追加しています。

# Define embedding function (example: Gemini provider)
text_embedding_function = Function(
    name="gemini_embedding",                        # Unique identifier for this embedding function
    function_type=FunctionType.TEXTEMBEDDING,       # Type of embedding function
    input_field_names=["document"],                 # Scalar field to embed
    output_field_names=["dense"],                   # Vector field to store embeddings
    params={                                        # Provider-specific configuration (highest priority)
        "provider": "gemini",                       # Embedding model provider
        "model_name": "gemini-embedding-001",       # Embedding model
        # Optional parameters:
        # "credential": "apikey_dev",               # Optional: Credential label specified in milvus.yaml
        # "dim": "768",                             # Optional: Output vector dimension (default 3072)
        # "task": "RETRIEVAL_DOCUMENT",             # Optional: Task type for embedding optimization
    }
)

# Add the embedding function to your schema
schema.add_function(text_embedding_function)

taskパラメータでサポートされるタスクタイプ

  • RETRIEVAL_DOCUMENT - 埋め込みを文書インデックスのために最適化する(デフォルトはinsert/upsert)。

  • RETRIEVAL_QUERY - 埋め込みをクエリ検索に最適化する(デフォルトは検索)。

  • SEMANTIC_SIMILARITY - テキストの類似度測定のための埋め込みを最適化する。

  • CLASSIFICATION - テキスト分類のための埋め込みを最適化する。

  • CLUSTERING - 埋め込みをクラスタリングに最適化する。

明示的に設定されていない場合、Milvusは自動的に挿入/更新時にRETRIEVAL_DOCUMENT 、検索時にRETRIEVAL_QUERY

インデックスの設定

必要なフィールドと組み込み関数でスキーマを定義した後、コレクションのインデックスを設定する。このプロセスを簡素化するために、index_type としてAUTOINDEX を使用します。このオプションにより、Milvusはデータの構造に基づいて最適なインデックスタイプを選択し、設定することができます。

# Prepare index parameters
index_params = client.prepare_index_params()

# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
    field_name="dense",
    index_type="AUTOINDEX",
    metric_type="COSINE" 
)

コレクションの作成

定義したスキーマとインデックスパラメータを使用して、コレクションを作成します。

# Create collection named "demo"
client.create_collection(
    collection_name='demo', 
    schema=schema, 
    index_params=index_params
)

ステップ 2: データの挿入

コレクションとインデックスを設定したら、生データを挿入する準備ができました。このプロセスでは、生のテキストを提供するだけです。先ほど定義したFunctionモジュールは、各テキスト入力に対応するスパースベクトルを自動的に生成します。

# Insert sample documents
client.insert('demo', [
    {'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
    {'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
    {'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])

ステップ3:テキストによる検索

データ挿入後、生のクエリテキストを使ってセマンティック検索を実行します。Milvusは自動的にクエリを埋め込みベクトルに変換し、類似性に基づいて関連文書を検索し、トップマッチの結果を返します。

# Perform semantic search
results = client.search(
    collection_name='demo', 
    data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
    anns_field='dense',   # Use the vector field that stores embeddings
    limit=1,
    output_fields=['document'],
)

print(results)

検索とクエリ操作の詳細については、「基本的なベクトル検索と クエリ」を参照してください。