Memeluk Wajah TEICompatible with Milvus 2.6.x
Hugging Face Text Embeddings Inference (TEI) adalah server inferensi berkinerja tinggi yang dirancang khusus untuk model penyematan teks. Panduan ini menjelaskan cara menggunakan Hugging Face TEI dengan Milvus untuk pembuatan penyematan teks yang efisien.
TEI bekerja dengan banyak model penyematan teks dari Hugging Face Hub, termasuk:
Seri BAAI/bge-*
transformator kalimat/* seri
Model E5
Model GTE
Dan masih banyak lagi
Untuk daftar model terbaru yang didukung, lihat repositori GitHub TEI dan Hugging Face Hub.
Penerapan TEI
Sebelum mengonfigurasi Milvus dengan fungsi TEI, Anda harus memiliki layanan TEI yang sedang berjalan. Milvus mendukung dua pendekatan untuk penerapan TEI:
Penerapan standar (eksternal)
Anda dapat menggunakan TEI sebagai layanan mandiri menggunakan metode resmi dari Hugging Face. Pendekatan ini memberi Anda fleksibilitas dan kontrol maksimum atas layanan TEI Anda.
Untuk petunjuk terperinci tentang penerapan TEI menggunakan Docker atau metode lain, lihat dokumentasi resmi Inferensi Penyematan Teks Hugging Face.
Setelah penerapan, catatlah titik akhir layanan TEI Anda (misalnya, http://localhost:8080) karena Anda akan memerlukannya saat menggunakan fungsi TEI di Milvus.
Penerapan Milvus Helm Chart (terintegrasi)
Untuk lingkungan Kubernetes, Milvus menawarkan opsi penerapan terintegrasi melalui Helm chart. Ini menyederhanakan proses dengan menerapkan dan mengonfigurasi TEI bersama Milvus.
Untuk mengaktifkan TEI dalam penerapan Helm Milvus Anda:
Konfigurasikan values.yaml untuk mengaktifkan TEI:
tei: enabled: true image: repository: ghcr.io/huggingface/text-embeddings-inference tag: "1.7" # Modify based on hardware model: "BAAI/bge-large-en-v1.5" # Modify based on requirements # revision: "main" # hfTokenSecretName: "my-huggingface-token-secret" # apiKey: "your_secure_api_key" # apiKeySecret: # name: "my-tei-api-key-secret" # key: "api-key" resources: requests: cpu: "1" memory: "4Gi" # nvidia.com/gpu: "1" # For GPU limits: cpu: "2" memory: "8Gi" # nvidia.com/gpu: "1" # For GPU extraArgs: []Menerapkan atau Meningkatkan Milvus:
helm install my-release milvus/milvus -f values.yaml -n <your-milvus-namespace> # or helm upgrade my-release milvus/milvus -f values.yaml --reset-then-reuse-values -n <your-milvus-namespace>Saat menggunakan penerapan bagan Helm, layanan TEI akan dapat diakses di dalam klaster Kubernetes Anda di
http://my-release-milvus-tei:80(menggunakan nama rilis Anda). Gunakan ini sebagai titik akhir Anda dalam konfigurasi fungsi TEI.
Konfigurasi di Milvus
Setelah men-deploy layanan TEI Anda, Anda harus menyediakan titik akhir ketika mendefinisikan fungsi penyematan TEI. Dalam kebanyakan kasus, tidak ada konfigurasi tambahan yang diperlukan karena TEI diaktifkan secara default di Milvus.
Namun, jika layanan TEI Anda digunakan dengan autentikasi kunci API (--api-key flag), Anda harus mengonfigurasi Milvus untuk menggunakan kunci ini:
Tentukan kunci API di bagian
credential:# milvus.yaml credential: tei_key: # You can use any label name apikey: <YOUR_TEI_API_KEY>Rujuk kredensial di milvus.yaml:
function: textEmbedding: providers: tei: credential: tei_key # ← choose any label you defined above enable: true # enabled by default. no action required.
Gunakan fungsi penyematan
Setelah layanan TEI dikonfigurasi, ikuti langkah-langkah berikut ini untuk mendefinisikan dan menggunakan fungsi penyematan.
Langkah 1: Tentukan 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_vector" 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, CollectionSchema, FieldSchema
# Assume you have connected to Milvus
# client = MilvusClient(uri="http://localhost:19530")
# 1. Create Schema
schema = MilvusClient.create_schema()
# 2. Add fields
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=9000) # Store text data
# IMPORTANT: Set dim to exactly match the TEI model's output dimension
schema.add_field("dense_vector", DataType.FLOAT_VECTOR, dim=1024) # Store embedding vectors (example dimension)
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 (tei_func) yang mengubah bidang skalar "document" menjadi embedding, menyimpan vektor yang dihasilkan dalam bidang vektor "dense_vector" 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.
# 3. Define TEI embedding function
text_embedding_function = Function(
name="tei_func", # 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"], # Vector field(s) for storing embeddings
params={ # TEI specific parameters (function-level)
"provider": "TEI", # Must be set to "TEI"
"endpoint": "http://your-tei-service-endpoint:80", # Required: Points to your TEI service address
# Optional parameters:
# "truncate": "true", # Optional: Whether to truncate long input (default false)
# "truncation_direction": "right", # Optional: Truncation direction (default right)
# "max_client_batch_size": 64, # Optional: Client max batch size (default 32)
# "ingestion_prompt": "passage: ", # Optional: (Advanced) Ingestion phase prompt
# "search_prompt": "query: " # Optional: (Advanced) Search phase prompt
}
)
# Add the configured embedding function to your existing collection schema
schema.add_function(text_embedding_function)
Parameter |
Diperlukan? |
Deskripsi |
Nilai Contoh |
|---|---|---|---|
|
Ya |
Penyedia model penyematan. Tetapkan ke "TEI". |
"TEI" |
|
Ya |
Alamat jaringan yang mengarah ke layanan TEI Anda yang digunakan. Jika digunakan melalui Milvus Helm Chart, ini biasanya merupakan alamat Layanan internal. |
"http://localhost:8080", "http://my-release-milvus-tei:80" |
|
Tidak |
Apakah akan memotong teks input yang melebihi panjang maksimum model. Nilai defaultnya adalah false. |
"true" |
|
Tidak |
Efektif bila truncate bernilai true. Menentukan apakah akan memotong dari kiri atau kanan. Nilai default ke kanan. |
"left" |
|
Tidak |
Ukuran batch maksimum yang dikirim klien Milvus ke TEI. Nilai default ke 32. |
64 |
|
Tidak |
(Lanjutan) Menentukan kunci dalam kamus prompt konfigurasi pengubah kalimat. Digunakan untuk model tertentu yang membutuhkan format prompt tertentu. Dukungan TEI mungkin terbatas dan tergantung pada konfigurasi model pada Hub. |
"your_prompt_key" |
|
Tidak |
(Lanjutan) Menentukan prompt yang akan digunakan selama fase penyisipan data (konsumsi). Tergantung pada model TEI yang digunakan; model harus mendukung prompt. |
"bagian " |
|
Tidak |
(Lanjutan) Menentukan prompt yang akan digunakan selama fase pencarian. Tergantung pada model TEI yang digunakan; model harus mendukung prompt. |
"query: " |
Langkah selanjutnya
Setelah mengonfigurasi fungsi penyematan, lihat Ikhtisar Fungsi untuk panduan tambahan tentang konfigurasi indeks, contoh penyisipan data, dan operasi pencarian semantik.