SiliconFLowCompatible with Milvus 2.6.x

このトピックでは、MilvusにおけるSiliconFLowエンベッディング関数の設定方法と使用方法について説明します。

エンベッディングモデルの選択

MilvusはSiliconFLowが提供するエンベッディングモデルに対応しています。以下に、現在利用可能なSiliconFLowのエンベッディングモデルを示しますので、ご参照ください:

モデル名

寸法

最大トークン数

説明

BAAI/bge-large-zh-v1.5

1,024

512

BGE(BAAI General Embedding)シリーズに含まれる大規模な中国語テキスト埋め込みモデル。

BAAI/bge-large-ja-v1.5

1,024

512

BGE (BAAI General Embedding)シリーズに含まれる大規模な英語テキスト埋め込みモデル。

netease-youdao/bce-embedding-base_v1

768

512

NetEase Youdaoが開発したバイリンガル/クロスリンガル埋め込みモデルです。中国語と英語の意味表現と検索タスクで優れた性能を発揮し、特にクロスリンガルシナリオで優れている。

BAAI/bge-m3

1,024

8,192

多機能・多言語・多粒度のテキスト埋め込みモデル。密検索、多ベクトル検索、疎検索の3つの一般的な検索機能をサポート。

Pro/BAAI/bge-m3

1,024

8,192

多機能、多言語、多粒度のテキスト埋め込みモデル。密検索、多ベクトル検索、疎検索の3つの一般的な検索機能をサポートする。100以上の言語の入力を処理でき、異なる粒度を扱うことができる。

認証情報の設定

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

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

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

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

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

オプション 1: 設定ファイル

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キーが保持され、ラベルを変更するだけでAPIキーを切り替えることができます。

  2. Milvusに、サービス呼び出しに使用するキーを知らせる。

    同じファイルで、SiliconFlow プロバイダに使用するラベルを指定します。

    function:
      textEmbedding:
        providers:
          siliconflow:
            credential: apikey_dev      # ← choose any label you defined above
            # url: https://api.siliconflow.cn/v1/embeddings   # (optional) custom url
    

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

オプション 2: 環境変数

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

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

変数

必須

説明

MILVUSAI_SILICONFLOW_API_KEY

はい

有効な SiliconFlow API キー。

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

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

environment: ブロックは、Milvus コンテナにのみキーを注入し、ホスト OS はそのままにします。詳しくは、Docker Composeでmilvusを設定するを参照してください。

埋め込み関数の使用

認証情報の設定が完了したら、以下の手順で埋め込み関数を定義し、使用します。

ステップ1:スキーマフィールドの定義

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

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

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

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

次の例では、テキストデータを格納するためのスカラーフィールド"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.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1024)

ステップ 2: スキーマへの埋め込み関数の追加

MilvusのFunctionモジュールは、スカラーフィールドに格納された生データを自動的に埋め込みデータに変換し、明示的に定義されたベクトルフィールドに格納します。

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

埋め込み関数を定義したら、コレクションスキーマに追加します。これにより、Milvusは指定された埋め込み関数を使用して、テキストデータの埋め込みを処理し、格納するようになります。

# Define embedding function specifically for embedding model provider
text_embedding_function = Function(
    name="siliconflow_embedding",                        # Unique identifier for this embedding function
    function_type=FunctionType.TEXTEMBEDDING,       # Indicates a text embedding function
    input_field_names=["document"],                 # Scalar field(s) containing text data to embed
    output_field_names=["dense"],                   # Vector field(s) for storing embeddings
    params={                                      # Provider-specific embedding parameters (function-level)
        "provider": "siliconflow",                # Must be set to "siliconflow"
        "model_name": "BAAI/bge-large-en-v1.5",    # Specifies the SiliconFlow embedding model to use
        # Optional parameters:
        # "credential": "apikey_dev",          # Optional: Credential label specified in milvus.yaml
        # "url": "https://api.siliconflow.cn/v1/embeddings",  # Defaults to the official endpoint if omitted
    }
)

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

次のステップ

埋め込み関数を設定した後、インデックス設定、データ挿入例、セマンティック検索操作に関する追加ガイダンスについては、「関数の概要」を参照してください。