SiliconFLowCompatible with Milvus 2.6.x
Topik ini menjelaskan cara mengonfigurasi dan menggunakan fungsi embedding SiliconFLow di Milvus.
Memilih model penyematan
Milvus mendukung model-model embedding yang disediakan oleh SiliconFLow. Di bawah ini adalah model-model embedding SiliconFLow yang tersedia saat ini untuk referensi cepat:
Nama Model |
Dimensi |
Token Maks |
Deskripsi |
|---|---|---|---|
BAAI / bge-besar-zh-v1.5 |
1,024 |
512 |
Model penyematan teks bahasa Mandarin berukuran besar, yang merupakan bagian dari seri BGE (BAAI General Embedding). |
BAAI/bge-large-en-v1.5 |
1,024 |
512 |
Model penyematan teks bahasa Inggris berukuran besar, yang merupakan bagian dari seri BGE (BAAI General Embedding). |
netease-youdao/bce-embedding-base_v1 |
768 |
512 |
Model penyematan dwibahasa dan lintas bahasa yang dikembangkan oleh NetEase Youdao. Model ini menunjukkan kinerja yang sangat baik dalam representasi semantik bahasa Mandarin dan Inggris serta tugas-tugas pengambilan, terutama unggul dalam skenario lintas bahasa. |
BAAI/bge-m3 |
1,024 |
8,192 |
Model penyematan teks multifungsi, multibahasa, dan multi-granularitas. Model ini mendukung tiga fungsi pengambilan yang umum: pengambilan padat, pengambilan multi-vektor, dan pengambilan jarang. |
Pro/BAAI/bge-m3 |
1,024 |
8,192 |
Model penyematan teks multifungsi, multibahasa, dan multi-granularitas. Model ini mendukung tiga fungsi pengambilan yang umum: pengambilan padat, pengambilan multi-vektor, dan pengambilan jarang. Model ini dapat memproses input dalam lebih dari 100 bahasa dan mampu menangani granularitas yang berbeda. |
Mengonfigurasi kredensial
Milvus harus mengetahui kunci API SiliconFlow Anda sebelum dapat meminta penyematan. Milvus menyediakan dua metode untuk mengonfigurasi kredensial:
File konfigurasi (disarankan): Simpan kunci API di
milvus.yamlsehingga setiap restart dan node akan mengambilnya secara otomatis.Variabel lingkungan: Menyuntikkan kunci pada waktu penerapan-ideal untuk Docker Compose.
Pilih salah satu dari dua metode di bawah ini-file konfigurasi lebih mudah dikelola pada bare-metal dan VM, sedangkan rute env-var sesuai dengan alur kerja kontainer.
Jika kunci API untuk penyedia yang sama ada di berkas konfigurasi dan variabel lingkungan, Milvus selalu menggunakan nilai di milvus.yaml dan mengabaikan variabel lingkungan.
Opsi 1: Berkas konfigurasi
Simpan kunci API Anda di milvus.yaml; Milvus membacanya pada saat startup dan mengesampingkan variabel lingkungan apa pun untuk penyedia yang sama.
**Deklarasikan kunci Anda di bawah
credential:Anda dapat mendaftarkan satu atau banyak kunci API-beri label yang Anda ciptakan dan akan direferensikan nanti.
# milvus.yaml credential: apikey_dev: # dev environment apikey: <YOUR_DEV_KEY> apikey_prod: # production environment apikey: <YOUR_PROD_KEY>Menempatkan kunci API di sini akan membuatnya tetap ada di seluruh proses restart dan memungkinkan Anda mengganti kunci hanya dengan mengubah label.
Memberi tahu Milvus kunci mana yang akan digunakan untuk panggilan layanan
Dalam berkas yang sama, arahkan penyedia SiliconFlow ke label yang Anda inginkan untuk digunakan.
function: textEmbedding: providers: siliconflow: credential: apikey_dev # ← choose any label you defined above # url: https://api.siliconflow.cn/v1/embeddings # (optional) custom urlIni akan mengikat kunci tertentu untuk setiap permintaan yang dikirimkan Milvus ke titik akhir penyematan OpenAI.
Opsi 2: Variabel lingkungan
Gunakan metode ini ketika Anda menjalankan Milvus dengan Docker Compose dan lebih memilih untuk menyimpan rahasia dari berkas dan gambar.
Milvus akan kembali ke variabel lingkungan hanya jika tidak ada kunci untuk penyedia yang ditemukan di milvus.yaml.
Variabel |
Diperlukan |
Deskripsi |
|---|---|---|
|
Ya |
Kunci API SiliconFlow Anda yang valid. |
Dalam berkas docker-compose.yaml Anda, tetapkan variabel lingkungan 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>
Blok environment: hanya menyuntikkan kunci ke dalam kontainer Milvus, dan membiarkan OS hos Anda tidak tersentuh. Untuk detailnya, lihat Mengkonfigurasi Milvus dengan Docker Compose.
Menggunakan fungsi penyematan
Setelah kredensial dikonfigurasi, ikuti langkah-langkah berikut untuk mendefinisikan dan menggunakan fungsi penyematan.
Langkah 1: Mendefinisikan bidang skema
Untuk menggunakan fungsi penyematan, buat koleksi dengan skema tertentu. Skema ini harus menyertakan setidaknya tiga bidang yang diperlukan:
Bidang utama yang secara unik mengidentifikasi setiap entitas dalam koleksi.
Bidang skalar yang menyimpan data mentah yang akan disematkan.
Bidang vektor yang dicadangkan untuk menyimpan penyematan vektor yang akan dihasilkan oleh fungsi untuk bidang skalar.
Contoh berikut ini mendefinisikan skema dengan satu bidang skalar "document" untuk menyimpan data tekstual dan satu bidang vektor "dense" untuk menyimpan embedding yang akan dihasilkan oleh modul Function. Ingatlah untuk mengatur dimensi vektor (dim) agar sesuai dengan output dari model penyematan yang Anda pilih.
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)
Langkah 2: Menambahkan fungsi embedding ke skema
Modul Function di Milvus secara otomatis mengubah data mentah yang disimpan dalam bidang skalar menjadi embedding dan menyimpannya ke dalam bidang vektor yang didefinisikan secara eksplisit.
Contoh di bawah ini menambahkan modul Function (siliconflow_embedding) yang mengubah bidang skalar "document" menjadi embedding, menyimpan vektor yang dihasilkan dalam bidang vektor "dense" yang telah didefinisikan sebelumnya.
Setelah Anda mendefinisikan fungsi penyisipan Anda, tambahkan fungsi tersebut ke skema koleksi Anda. Ini menginstruksikan Milvus untuk menggunakan fungsi penyematan yang ditentukan untuk memproses dan menyimpan penyematan dari data teks Anda.
# 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)
Langkah selanjutnya
Setelah mengonfigurasi fungsi penyematan, lihat Ikhtisar Fungsi untuk panduan tambahan mengenai konfigurasi indeks, contoh penyisipan data, dan operasi pencarian semantik.