Pemeringkat vLLMCompatible with Milvus 2.6.x

vLLM Ranker memanfaatkan kerangka kerja inferensi vLLM untuk meningkatkan relevansi penelusuran melalui pemeringkatan semantik. Ini merupakan pendekatan canggih untuk pengurutan hasil pencarian yang melampaui kemiripan vektor tradisional.

vLLM Ranker sangat berharga untuk aplikasi yang membutuhkan ketepatan dan konteks, seperti:

  • Pencarian dokumentasi teknis yang membutuhkan pemahaman konsep yang mendalam

  • Basis data penelitian di mana hubungan semantik lebih penting daripada pencocokan kata kunci

  • Sistem dukungan pelanggan yang perlu mencocokkan masalah pengguna dengan solusi yang relevan

  • Pencarian e-commerce yang harus memahami atribut produk dan maksud pengguna

Prasyarat

Sebelum mengimplementasikan vLLM Ranker di Milvus, pastikan Anda memiliki:

  • Koleksi Milvus dengan bidang VARCHAR yang berisi teks yang akan diberi peringkat

  • Layanan vLLM yang sedang berjalan dengan kemampuan pemeringkatan ulang. Untuk petunjuk terperinci tentang pengaturan layanan vLLM, lihat dokumentasi resmi vLLM. Untuk memverifikasi ketersediaan layanan vLLM:

    # Replace YOUR_VLLM_ENDPOINT_URL with the actual URL (e.g., http://<service-ip>:<port>/v1/rerank)
    # Replace 'BAAI/bge-reranker-base' if you deployed a different model
    
    curl -X 'POST' \
      'YOUR_VLLM_ENDPOINT_URL' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
      "model": "BAAI/bge-reranker-base",
      "query": "What is the capital of France?",
      "documents": [
        "The capital of Brazil is Brasilia.",
        "The capital of France is Paris.",
        "Horses and cows are both animals"
      ]
    }'
    

    Respons yang berhasil akan mengembalikan dokumen yang diberi peringkat berdasarkan skor relevansi, mirip dengan respons API rerank OpenAI.

    Lihat dokumentasi Server Kompatibel vLLM OpenAI untuk mengetahui lebih banyak argumen dan opsi server.

Membuat fungsi pemeringkat vLLM

Untuk menggunakan vLLM Ranker di aplikasi Milvus Anda, buatlah sebuah objek Function yang menentukan bagaimana pemeringkatan harus beroperasi. Fungsi ini akan diteruskan ke operasi pencarian Milvus untuk meningkatkan peringkat hasil.

from pymilvus import MilvusClient, Function, FunctionType

# Connect to your Milvus server
client = MilvusClient(
    uri="http://localhost:19530"  # Replace with your Milvus server URI
)

# Create a vLLM Ranker function
vllm_ranker = Function(
    name="vllm_semantic_ranker",    # Choose a descriptive name
    input_field_names=["document"],  # Field containing text to rerank
    function_type=FunctionType.RERANK,  # Must be RERANK
    params={
        "reranker": "model",        # Specifies model-based reranking
        "provider": "vllm",         # Specifies vLLM service
        "queries": ["renewable energy developments"],  # Query text
        "endpoint": "http://localhost:8080",  # vLLM service address
        "max_client_batch_size": 32,              # Optional: batch size
        "truncate_prompt_tokens": 256,  # Optional: Use last 256 tokens
    }
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.common.clientenum.FunctionType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
        .uri("http://localhost:19530")
        .build());

CreateCollectionReq.Function ranker = CreateCollectionReq.Function.builder()
                       .functionType(FunctionType.RERANK)
                       .name("vllm_semantic_ranker")
                       .inputFieldNames(Collections.singletonList("document"))
                       .param("reranker", "model")
                       .param("provider", "vllm")
                       .param("queries", "[\"renewable energy developments\"]")
                       .param("endpoint", "http://localhost:8080")
                       .param("max_client_batch_size", "32")
                       .param("truncate_prompt_tokens", "256")
                       .build();
// nodejs
// go
# restful

Parameter khusus pemeringkat vLLM

Parameter berikut ini khusus untuk pemeringkat vLLM:

Parameter

Diperlukan?

Deskripsi

Nilai / Contoh

reranker

Ya

Harus diatur ke "model" untuk mengaktifkan pemeringkatan ulang model.

"model"

provider

Ya

Penyedia layanan model yang akan digunakan untuk pemeringkatan ulang.

"vllm"

queries

Ya

Daftar string kueri yang digunakan oleh model pemeringkatan ulang untuk menghitung skor relevansi. Jumlah string kueri harus sama persis dengan jumlah kueri dalam operasi pencarian Anda (bahkan saat menggunakan vektor kueri, bukan teks), jika tidak, kesalahan akan dilaporkan.

["kueri penelusuran"]

endpoint

Ya

Alamat layanan vLLM Anda.

"http://localhost:8080"

max_client_batch_size

Tidak

Karena layanan model tidak dapat memproses semua data sekaligus, ini menetapkan ukuran batch untuk mengakses layanan model dalam beberapa permintaan.

32 (default)

truncate_prompt_tokens

Tidak

Jika diatur ke bilangan bulat k, hanya akan menggunakan k token terakhir dari prompt (yaitu, pemotongan kiri). Defaultnya adalah Tidak Ada (yaitu, tidak ada pemotongan).

256

Untuk parameter umum yang digunakan bersama di semua pemeringkat model (misalnya, provider, queries), lihat Membuat pemeringkat model.

Untuk menerapkan vLLM Ranker ke pencarian vektor standar:

# Execute search with vLLM reranking
results = client.search(
    collection_name="your_collection",
    data=[your_query_vector],  # Replace with your query vector
    anns_field="dense_vector",                   # Vector field to search
    limit=5,                                     # Number of results to return
    output_fields=["document"],                  # Include text field for reranking
    ranker=vllm_ranker,                         # Apply vLLM reranking
    consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;

SearchReq searchReq = SearchReq.builder()
        .collectionName("your_collection")
        .data(Arrays.asList(new EmbeddedText("AI Research Progress"), new EmbeddedText("What is AI")))
        .annsField("vector_field")
        .limit(10)
        .outputFields(Collections.singletonList("document"))
        .functionScore(FunctionScore.builder()
                .addFunction(ranker)
                .build())
        .consistencyLevel(ConsistencyLevel.BOUNDED)
        .build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful

Coba Milvus yang Dikelola secara Gratis

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

Mulai
Umpan balik

Apakah halaman ini bermanfaat?