SiliconFLowCompatible with Milvus 2.6.x

Questo argomento descrive come configurare e utilizzare le funzioni di incorporazione di SiliconFLow in Milvus.

Scegliere un modello di incorporamento

Milvus supporta i modelli di incorporamento forniti da SiliconFLow. Di seguito sono riportati i modelli di embedding SiliconFLow attualmente disponibili per un rapido riferimento:

Nome del modello

Dimensioni

Gettoni massimi

Descrizione

BAAI/bge-grande-zh-v1.5

1,024

512

Un modello di incorporazione di testo cinese di grandi dimensioni, che fa parte della serie BGE (BAAI General Embedding).

BAAI/bge-grande-it-v1.5

1,024

512

Un modello di incorporazione del testo inglese di grandi dimensioni, che fa parte della serie BGE (BAAI General Embedding).

netease-youdao/bce-embedding-base_v1

768

512

Un modello di embedding bilingue e multilingue sviluppato da NetEase Youdao. Il modello mostra prestazioni eccellenti nei compiti di rappresentazione semantica e di recupero in cinese e in inglese, eccellendo in particolare negli scenari interlinguistici.

BAAI/bge-m3

1,024

8,192

Un modello di incorporazione del testo multifunzionale, multilingue e multigranulare. Supporta tre funzioni di reperimento comuni: reperimento denso, reperimento multivettore e reperimento rado.

Pro/BAAI/bge-m3

1,024

8,192

Un modello di incorporazione del testo multifunzionale, multilingue e multigranulare. Supporta tre funzioni di reperimento comuni: reperimento denso, reperimento multivettoriale e reperimento rado. Il modello può elaborare input in oltre 100 lingue ed è in grado di gestire diverse granularità.

Configurazione delle credenziali

Milvus deve conoscere la chiave API di SiliconFlow prima di poter richiedere le incorporazioni. Milvus offre due metodi per configurare le credenziali:

  • File di configurazione (consigliato): Memorizzare la chiave API in milvus.yaml in modo che ogni riavvio e nodo la rilevi automaticamente.

  • Variabili d'ambiente: Iniettare la chiave al momento della distribuzione, ideale per Docker Compose.

Scegliete uno dei due metodi seguenti: il file di configurazione è più facile da mantenere su macchine virtuali e bare-metal, mentre la via delle variabili d'ambiente si adatta ai flussi di lavoro dei container.

Se una chiave API per lo stesso provider è presente sia nel file di configurazione che in una variabile d'ambiente, Milvus utilizza sempre il valore in milvus.yaml e ignora la variabile d'ambiente.

Opzione 1: File di configurazione

Mantenere le chiavi API in milvus.yaml; Milvus le legge all'avvio e sovrascrive qualsiasi variabile d'ambiente per lo stesso provider.

  1. **Dichiarare le chiavi in credential:

    Si possono elencare una o più chiavi API, dando a ciascuna un'etichetta inventata e a cui si farà riferimento in seguito.

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

    Mettere le chiavi API in questo punto le rende persistenti tra i vari riavvii e consente di cambiare le chiavi semplicemente cambiando l'etichetta.

  2. Indicare a Milvus quale chiave usare per le chiamate di servizio

    Nello stesso file, si indica al provider SiliconFlow l'etichetta che si desidera utilizzare.

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

    Questo vincola una chiave specifica a ogni richiesta che Milvus invia all'endpoint OpenAI embeddings.

Opzione 2: variabile d'ambiente

Utilizzate questo metodo quando eseguite Milvus con Docker Compose e preferite tenere i segreti fuori dai file e dalle immagini.

Milvus ricorre alla variabile d'ambiente solo se non viene trovata alcuna chiave per il provider in milvus.yaml.

Variabile

Richiesto

Descrizione

MILVUSAI_SILICONFLOW_API_KEY

La chiave API SiliconFlow valida.

Nel file docker-compose.yaml, impostare la variabile d'ambiente 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>

Il blocco environment: inietta la chiave solo nel contenitore Milvus, lasciando inalterato il sistema operativo host. Per maggiori dettagli, consultare Configurazione di Milvus con Docker Compose.

Utilizzare la funzione di incorporamento

Una volta configurate le credenziali, seguite questi passaggi per definire e utilizzare le funzioni di incorporamento.

Passo 1: Definire i campi dello schema

Per utilizzare una funzione di incorporamento, creare una raccolta con uno schema specifico. Questo schema deve includere almeno tre campi necessari:

  • Il campo primario che identifica in modo univoco ogni entità della raccolta.

  • Un campo scalare che memorizza i dati grezzi da incorporare.

  • Un campo vettoriale riservato a memorizzare le incorporazioni vettoriali che la funzione genererà per il campo scalare.

L'esempio seguente definisce uno schema con un campo scalare "document" per memorizzare i dati testuali e un campo vettoriale "dense" per memorizzare gli embeddings che saranno generati dal modulo Function. Ricordarsi di impostare la dimensione del vettore (dim) in modo che corrisponda all'output del modello di embedding scelto.

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)

Passo 2: Aggiungere la funzione di embedding allo schema

Il modulo Function di Milvus converte automaticamente i dati grezzi memorizzati in un campo scalare in embedding e li memorizza nel campo vettoriale esplicitamente definito.

L'esempio seguente aggiunge un modulo Function (siliconflow_embedding) che converte il campo scalare "document" in embedding, memorizzando i vettori risultanti nel campo vettoriale "dense" definito in precedenza.

Una volta definita la funzione di embedding, aggiungerla allo schema della collezione. In questo modo si indica a Milvus di utilizzare la funzione di embedding specificata per elaborare e memorizzare gli embeddings dai dati di testo.

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

Passi successivi

Dopo aver configurato la funzione di incorporamento, consultare la Panoramica delle funzioni per ulteriori indicazioni sulla configurazione dell'indice, sugli esempi di inserimento dei dati e sulle operazioni di ricerca semantica.