Google Gemini

Gunakan model penyematan Google Gemini dengan Milvus dengan memilih model dan mengonfigurasi Milvus dengan kunci API Gemini Anda.

Memilih model penyematan

Milvus mendukung model penyematan yang disediakan oleh Google Gemini. Di bawah ini adalah model-model penyematan Gemini yang tersedia saat ini untuk referensi cepat:

Nama Model

Dimensi

Token Maks

Deskripsi

gemini-embedding-001

Standar: 3.072 (disarankan: 768, 1.536, atau 3.072)

8,192

Model penyematan teks dengan dimensi yang fleksibel, dilatih menggunakan Matryoshka Representation Learning (MRL).

gemini-embedding-2

Default: 3.072 (direkomendasikan: 768, 1.536, atau 3.072)

8,192

Model penyematan multimodal asli Google yang pertama, mendukung teks, gambar, video, audio, dan dokumen dalam ruang penyematan terpadu.

Kedua model ini dilatih menggunakan teknik Matryoshka Representation Learning (MRL), yang memungkinkan dimensi output yang fleksibel melalui parameter dim. Direkomendasikan untuk memulai dengan 768 dimensi dan meningkatkannya hingga 1.536 atau 3.072 jika diperlukan. Untuk lebih jelasnya, lihat model penyematan Gemini.

Model penyematan Gemini juga mendukung parameter jenis tugas yang mengoptimalkan penyematan untuk kasus penggunaan tertentu. Milvus secara otomatis menetapkan jenis tugas berdasarkan operasi:

  • Sisipkan / Upsert: RETRIEVAL_DOCUMENT

  • Cari: RETRIEVAL_QUERY

Anda dapat mengganti ini dengan secara eksplisit menentukan parameter task (misalnya, SEMANTIC_SIMILARITY, CLASSIFICATION, CLUSTERING).

Mengonfigurasi kredensial

Milvus harus mengetahui kunci API Gemini Anda sebelum dapat meminta penyematan. Milvus menyediakan dua metode untuk mengonfigurasi kredensial:

  • File konfigurasi (disarankan): Simpan kunci API di milvus.yaml sehingga 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.

Simpan kunci API Anda di milvus.yaml; Milvus membacanya pada saat startup dan mengesampingkan variabel lingkungan apa pun untuk penyedia yang sama.

  1. Deklarasikan kunci Anda di bawah kredensial:

    Anda dapat mendaftarkan satu atau banyak kunci API-berikan 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.

  2. Memberi tahu Milvus kunci mana yang akan digunakan untuk panggilan Gemini

    Di berkas yang sama, arahkan penyedia Gemini ke label yang Anda inginkan untuk digunakan.

    function:
      textEmbedding:
        providers:
          gemini:
            credential: apikey_dev      # ← choose any label you defined above
    

    Hal ini akan mengikat kunci tertentu untuk setiap permintaan yang dikirimkan Milvus ke titik akhir penyematan Gemini.

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

MILVUS_GEMINI_API_KEY

Ya

Membuat kunci Gemini tersedia di dalam setiap kontainer Milvus (diabaikan jika kunci untuk Gemini ada di milvus.yaml)

Di dalam berkas docker-compose.yaml Anda, tetapkan variabel lingkungan MILVUS_GEMINI_API_KEY.

# docker-compose.yaml (standalone service section)
standalone:
  # ... other configurations ...
  environment:
    # ... other environment variables ...
    # Set the environment variable pointing to the Gemini API key inside the container
    MILVUS_GEMINI_API_KEY: <YOUR_GEMINI_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.

Langkah 1: Membuat koleksi dengan fungsi penyematan teks

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 VARCHAR yang menyimpan data mentah yang akan disematkan.

  • Bidang vektor yang disediakan untuk menyimpan penyematan vektor padat yang akan dihasilkan oleh fungsi penyematan teks untuk bidang VARCHAR.

Contoh berikut ini mendefinisikan skema dengan satu bidang skalar "document" untuk menyimpan data tekstual dan satu bidang vektor "dense" untuk menyimpan penyematan yang akan dihasilkan oleh modul Function. Ingatlah untuk mengatur dimensi vektor (dim) agar sesuai dengan keluaran 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.
# For instance, Gemini's gemini-embedding-001 model outputs 3072-dimensional vectors by default,
# but can be shortened to 768 or 1536 dimensions.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=768)

Tentukan fungsi penyematan teks

Fungsi penyematan teks secara otomatis mengubah data mentah yang disimpan di bidang VARCHAR menjadi penyematan dan menyimpannya ke dalam bidang vektor yang ditentukan secara eksplisit.

Contoh di bawah ini menambahkan modul Fungsi (gemini_embedding) yang mengubah bidang skalar "document" menjadi penyematan, menyimpan vektor yang dihasilkan dalam bidang vektor "dense" yang ditentukan sebelumnya.

# Define embedding function (example: Gemini provider)
text_embedding_function = Function(
    name="gemini_embedding",                        # Unique identifier for this embedding function
    function_type=FunctionType.TEXTEMBEDDING,       # Type of embedding function
    input_field_names=["document"],                 # Scalar field to embed
    output_field_names=["dense"],                   # Vector field to store embeddings
    params={                                        # Provider-specific configuration (highest priority)
        "provider": "gemini",                       # Embedding model provider
        "model_name": "gemini-embedding-001",       # Embedding model
        # Optional parameters:
        # "credential": "apikey_dev",               # Optional: Credential label specified in milvus.yaml
        # "dim": "768",                             # Optional: Output vector dimension (default 3072)
        # "task": "RETRIEVAL_DOCUMENT",             # Optional: Task type for embedding optimization
    }
)

# Add the embedding function to your schema
schema.add_function(text_embedding_function)

Jenis tugas yang didukung untuk parameter tugas:

  • RETRIEVAL_DOCUMENT - Mengoptimalkan penyematan untuk pengindeksan dokumen (default untuk sisipkan/sisipkan).

  • RETRIEVAL_QUERY - Mengoptimalkan penyematan untuk pengambilan kueri (default untuk pencarian).

  • SEMANTIC_SIMILARITY - Mengoptimalkan penyematan untuk mengukur kemiripan teks.

  • CLASSIFICATION - Mengoptimalkan sematan untuk klasifikasi teks.

  • CLUSTERING - Mengoptimalkan penyematan untuk pengelompokan.

Jika tidak diatur secara eksplisit, Milvus secara otomatis menggunakan RETRIEVAL_DOCUMENT selama penyisipan/penambahan dan RETRIEVAL_QUERY selama pencarian.

Mengonfigurasi indeks

Setelah mendefinisikan skema dengan ruas-ruas yang diperlukan dan fungsi bawaan, siapkan indeks untuk koleksi Anda. Untuk menyederhanakan proses ini, gunakan AUTOINDEX sebagai index_type, sebuah opsi yang memungkinkan Milvus untuk memilih dan mengonfigurasi jenis indeks yang paling sesuai berdasarkan struktur data Anda.

# Prepare index parameters
index_params = client.prepare_index_params()

# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
    field_name="dense",
    index_type="AUTOINDEX",
    metric_type="COSINE" 
)

Membuat koleksi

Sekarang buatlah koleksi dengan menggunakan skema dan parameter indeks yang telah ditentukan.

# Create collection named "demo"
client.create_collection(
    collection_name='demo', 
    schema=schema, 
    index_params=index_params
)

Langkah 2: Memasukkan data

Setelah menyiapkan koleksi dan indeks, Anda siap untuk memasukkan data mentah. Dalam proses ini, Anda hanya perlu menyediakan teks mentah. Modul Fungsi yang telah kita tentukan sebelumnya secara otomatis menghasilkan vektor jarang yang sesuai untuk setiap entri teks.

# Insert sample documents
client.insert('demo', [
    {'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
    {'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
    {'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])

Langkah 3: Mencari dengan teks

Setelah memasukkan data, lakukan pencarian semantik menggunakan teks kueri mentah. Milvus secara otomatis mengubah kueri Anda menjadi vektor penyisipan, mengambil dokumen yang relevan berdasarkan kemiripan, dan mengembalikan hasil yang paling cocok.

# Perform semantic search
results = client.search(
    collection_name='demo', 
    data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
    anns_field='dense',   # Use the vector field that stores embeddings
    limit=1,
    output_fields=['document'],
)

print(results)

Untuk informasi lebih lanjut tentang operasi pencarian dan kueri, lihat Pencarian dan Kueri Vektor Dasar.