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:

  1. 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: []
    
    
  2. 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:

  1. Tentukan kunci API di bagian credential:

    # milvus.yaml
    credential:
      tei_key:  # You can use any label name
        apikey: <YOUR_TEI_API_KEY>
    
  2. 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

provider

Ya

Penyedia model penyematan. Tetapkan ke "TEI".

"TEI"

endpoint

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"

truncate

Tidak

Apakah akan memotong teks input yang melebihi panjang maksimum model. Nilai defaultnya adalah false.

"true"

truncation_direction

Tidak

Efektif bila truncate bernilai true. Menentukan apakah akan memotong dari kiri atau kanan. Nilai default ke kanan.

"left"

max_client_batch_size

Tidak

Ukuran batch maksimum yang dikirim klien Milvus ke TEI. Nilai default ke 32.

64

prompt_name

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"

ingestion_prompt

Tidak

(Lanjutan) Menentukan prompt yang akan digunakan selama fase penyisipan data (konsumsi). Tergantung pada model TEI yang digunakan; model harus mendukung prompt.

"bagian "

search_prompt

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.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?