🚀 Try Zilliz Cloud, the fully managed Milvus, for free—experience 10x faster performance! Try Now>>

Milvus
Zilliz
Home
  • User Guide
  • Home
  • Docs
  • User Guide

  • Embeddings & Reranking

  • Embedding Function

  • SiliconFLow

SiliconFLowCompatible with Milvus 2.6.x

This topic describes how to configure and use SiliconFLow embedding functions in Milvus.

Choose an embedding model

Milvus supports embedding models provided by SiliconFLow. Below are the currently available SiliconFLow embedding models for quick reference:

Model Name

Dimensions

Max Tokens

Description

BAAI/bge-large-zh-v1.5

1,024

512

A large Chinese text embedding model, which is part of the BGE (BAAI General Embedding) series.

BAAI/bge-large-en-v1.5

1,024

512

A large English text embedding model, which is part of the BGE (BAAI General Embedding) series.

netease-youdao/bce-embedding-base_v1

768

512

A bilingual and cross-lingual embedding model developed by NetEase Youdao. The model exhibits excellent performance in Chinese and English semantic representation and retrieval tasks, especially excelling in cross-lingual scenarios.

BAAI/bge-m3

1,024

8,192

A multifunctional, multilingual, multi-granularity text embedding model. It supports three common retrieval functions: dense retrieval, multi-vector retrieval, and sparse retrieval.

Pro/BAAI/bge-m3

1,024

8,192

A multifunctional, multilingual, multi-granularity text embedding model. It supports three common retrieval functions: dense retrieval, multi-vector retrieval, and sparse retrieval. The model can process inputs in over 100 languages and is capable of handling different granularities.

Configure credentials

Milvus must know your SiliconFlow API key before it can request embeddings. Milvus provides two methods to configure credentials:

  • Configuration file (recommended): Store the API key in milvus.yaml so every restart and node picks it up automatically.

  • Environment variables: Inject the key at deploy time—ideal for Docker Compose.

Choose one of the two methods below—the configuration file is easier to maintain on bare-metal and VMs, while the env-var route fits container workflows.

If an API key for the same provider is present in both the configuration file and an environment variable, Milvus always uses the value in milvus.yaml and ignores the environment variable.

Option 1: Configuration file

Keep your API keys in milvus.yaml; Milvus reads them at startup and overrides any environment variable for the same provider.

  1. **Declare your keys under credential:

    You may list one or many API keys—give each a label you invent and will reference later.

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

    Putting the API keys here makes them persistent across restarts and lets you switch keys just by changing a label.

  2. Tell Milvus which key to use for service calls

    In the same file, point the SiliconFlow provider at the label you want it to use.

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

    This binds a specific key to every request Milvus sends to the OpenAI embeddings endpoint.

Option 2: Environment variable

Use this method when you run Milvus with Docker Compose and prefer to keep secrets out of files and images.

Milvus falls back to the environment variable only if no key for the provider is found in milvus.yaml.

Variable

Required

Description

MILVUSAI_SILICONFLOW_API_KEY

Yes

Your valid SiliconFlow API key.

In your docker-compose.yaml file, set the MILVUSAI_SILICONFLOW_API_KEY environment variable.

# 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>

The environment: block injects the key only into the Milvus container, leaving your host OS untouched. For details, refer to Configure Milvus with Docker Compose.

Use embedding function

Once credentials are configured, follow these steps to define and use embedding functions.

Step 1: Define schema fields

To use an embedding function, create a collection with a specific schema. This schema must include at least three necessary fields:

  • The primary field that uniquely identifies each entity in a collection.

  • A scalar field that stores raw data to be embedded.

  • A vector field reserved to store vector embeddings that the function will generate for the scalar field.

The following example defines a schema with one scalar field "document" for storing textual data and one vector field "dense" for storing embeddings to be generated by the Function module. Remember to set the vector dimension (dim) to match the output of your chosen embedding model.

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)

Step 2: Add embedding function to schema

The Function module in Milvus automatically converts raw data stored in a scalar field into embeddings and stores them into the explicitly defined vector field.

The example below adds a Function module (siliconflow_embedding) that converts the scalar field "document" into embeddings, storing the resulting vectors in the "dense" vector field defined earlier.

Once you have defined your embedding function, add it to your collection schema. This instructs Milvus to use the specified embedding function to process and store embeddings from your text data.

# 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)

Next steps

After configuring the embedding function, refer to the Function Overview for additional guidance on index configuration, data insertion examples, and semantic search operations.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Was this page helpful?