Menetapkan dan menetapkan ulang peringkat dokumen dengan RAG

Sebagai bagian dari pengalaman Retrieval Augmented Generation (RAG) di Vertex AI Agent Builder, Anda dapat merangkum sekumpulan dokumen berdasarkan kueri.

API peringkat mengambil daftar dokumen dan mengurutkan ulang dokumen tersebut berdasarkan tingkat relevansi dokumen dengan kueri. Dibandingkan dengan penyematan, yang hanya melihat kemiripan semantik dokumen dan kueri, Ranking API dapat memberi Anda skor yang akurat tentang seberapa baik dokumen menjawab kueri tertentu. API peringkat dapat digunakan untuk meningkatkan kualitas hasil penelusuran setelah mengambil kumpulan awal dokumen kandidat.

API peringkat bersifat stateless sehingga Anda tidak perlu mengindeks dokumen sebelum memanggil API. Yang perlu Anda lakukan adalah meneruskan kueri dan dokumen. Hal ini membuat API sangat cocok untuk mengurutkan ulang dokumen dari Penelusuran Vektor dan solusi penelusuran lainnya.

Halaman ini menjelaskan cara menggunakan API peringkat untuk memberi peringkat pada kumpulan dokumen berdasarkan kueri.

Kasus penggunaan

Kasus penggunaan utama API peringkat adalah untuk meningkatkan kualitas hasil penelusuran.

Namun, API peringkat dapat berguna untuk setiap skenario saat Anda perlu menemukan bagian konten yang paling relevan dengan kueri pengguna. Misalnya, API peringkat dapat membantu Anda dalam hal berikut:

  • Menemukan konten yang tepat untuk diberikan ke LLM guna melakukan grounding

  • Meningkatkan relevansi pengalaman penelusuran yang ada

  • Mengidentifikasi bagian dokumen yang relevan

Alur berikut menguraikan cara menggunakan API peringkat untuk meningkatkan kualitas hasil untuk dokumen yang dikelompokkan:

  1. Gunakan Document AI Layout Parser API untuk membagi sekumpulan dokumen menjadi beberapa bagian.

  2. Gunakan API penyematan untuk membuat penyematan untuk setiap bagian.

  3. Muat embedding ke Vector Search atau solusi penelusuran lainnya.

  4. Buat kueri indeks penelusuran Anda dan ambil bagian yang paling relevan.

  5. Mengurutkan ulang bagian yang relevan menggunakan API peringkat.

Data input

API peringkat memerlukan input berikut:

  • Kueri yang Anda gunakan untuk memberi peringkat pada data.

    Contoh:

    "query": "Why is the sky blue?"
    
  • Kumpulan data yang relevan dengan kueri. Data disediakan sebagai array objek. Setiap kumpulan data dapat menyertakan ID unik, judul, dan konten dokumen. Untuk setiap data, sertakan judul, konten, atau keduanya. Jika panjang judul dan konten bersama-sama melebihi 512 token, konten tambahan akan terpotong. Anda dapat menyertakan hingga 200 data per permintaan.

    Misalnya, array data terlihat seperti ini. Pada kenyataannya, banyak data lain yang akan disertakan dalam array dan kontennya akan jauh lebih panjang:

    "records": [
       {
           "id": "1",
           "title": "The Color of the Sky: A Poem",
           "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
       },
       {
           "id": "2",
           "title": "The Science of a Blue Sky",
           "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
       }
    ]
    
  • Opsional: Jumlah maksimum data yang ingin ditampilkan oleh API peringkat. Secara default, semua data ditampilkan; namun, Anda dapat menggunakan kolom topN untuk menampilkan lebih sedikit data. Semua kumpulan data diberi peringkat, apa pun nilai yang ditetapkan.

    Misalnya, ini akan menampilkan 10 data peringkat teratas:

    "topN": 10,
    
  • Opsional: Setelan yang menentukan apakah Anda hanya ingin ID data yang ditampilkan oleh API atau apakah Anda juga ingin judul dan konten data ditampilkan. Secara default, data lengkap akan ditampilkan. Alasan utama untuk menetapkannya adalah jika Anda ingin mengurangi ukuran payload respons.

    Misalnya, setelan ke true hanya menampilkan ID data, bukan judul atau konten:

    "ignoreRecordDetailsInResponse": true,
    
  • Opsional: Nama model. Ini menentukan model yang akan digunakan untuk menentukan peringkat dokumen. Jika tidak ada model yang ditentukan, semantic-ranker-512@latest akan digunakan, yang secara otomatis mengarah ke model terbaru yang tersedia. Untuk mengarah ke model tertentu, tentukan salah satu nama model yang tercantum dalam Model yang didukung, misalnya semantic-ranker-512-002.

    Dalam contoh berikut, model ditetapkan ke semantic-ranker-512@latest. Artinya, API peringkat akan selalu menggunakan model terbaru yang tersedia.

    "model": "semantic-ranker-512@latest"
    

Data output

Ranking API menampilkan daftar data yang diberi peringkat dengan output berikut:

  • Skor: nilai float antara 0 dan 1 yang menunjukkan relevansi data.

  • ID: ID unik data.

  • Jika diminta, objek lengkap: ID, judul, dan konten.

    Contoh:

{
    "records": [
        {
            "id": "2",
            "score": 0.98,
            "title": "The Science of a Blue Sky",
            "content": "The sky appears blue due to a phenomenon called Rayleigh scattering. Sunlight is comprised of all the colors of the rainbow. Blue light has shorter wavelengths than other colors, and is thus scattered more easily."
        },
        {
            "id": "1",
            "score": 0.64,
            "title": "The Color of the Sky: A Poem",
            "content": "A canvas stretched across the day,\nWhere sunlight learns to dance and play.\nBlue, a hue of scattered light,\nA gentle whisper, soft and bright."
        }
    ]
}

Menetapkan peringkat (atau menetapkan peringkat ulang) kumpulan data sesuai dengan kueri

Biasanya, Anda akan menyediakan API peringkat dengan kueri dan kumpulan data yang relevan dengan kueri tersebut dan telah diberi peringkat oleh beberapa metode lain seperti penelusuran kata kunci atau penelusuran vektor. Kemudian, Anda menggunakan API peringkat untuk meningkatkan kualitas peringkat dan menentukan skor yang menunjukkan relevansi setiap kumpulan data dengan kueri.

  1. Dapatkan kueri dan data yang dihasilkan. Pastikan setiap data memiliki ID dan judul, konten, atau keduanya.

    Model ini mendukung hingga 512 token per data. Jika panjang gabungan judul dan konten lebih dari 512 token, konten tambahan akan terpotong.

  2. Panggil metode rankingConfigs.rank menggunakan kode berikut:

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-H "X-Goog-User-Project: PROJECT_ID" \
"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/rankingConfigs/default_ranking_config:rank" \
-d '{
"model": "semantic-ranker-512@latest",
"query": "QUERY",
"records": [
    {
        "id": "RECORD_ID_1",
        "title": "TITLE_1",
        "content": "CONTENT_1"
    },
    {
        "id": "RECORD_ID_2",
        "title": "TITLE_2",
        "content": "CONTENT_2"
    },
    {
        "id": "RECORD_ID_3",
        "title": "TITLE_3",
        "content": "CONTENT_3"
    }
]
}'

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud Anda.
  • QUERY: kueri yang digunakan untuk mengurutkan dan memberi skor pada kumpulan data.
  • RECORD_ID_n: string unik yang mengidentifikasi data.
  • TITLE_n: judul data.
  • CONTENT_n: konten data.

Untuk informasi umum tentang metode ini, lihat rankingConfigs.rank.

Klik untuk melihat contoh perintah dan respons curl.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: my-project-123" \
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/rankingConfigs/default_ranking_config:rank" \
    -d '{
        "model": "semantic-ranker-512@latest",
        "query": "what is Google gemini?",
        "records": [
            {
                "id": "1",
                "title": "Gemini",
                "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side."
            },
            {
                "id": "2",
                "title": "Gemini",
                "content": "Gemini is a cutting edge large language model created by Google."
            },
            {
                "id": "3",
                "title": "Gemini Constellation",
                "content": "Gemini is a constellation that can be seen in the night sky."
            }
        ]
    }'
    
{
    "records": [
        {
            "id": "2",
            "title": "Gemini",
            "content": "Gemini is a cutting edge large language model created by Google.",
            "score": 0.97
        },
        {
            "id": "3",
            "title": "Gemini Constellation",
            "content": "Gemini is a constellation that can be seen in the night sky.",
            "score": 0.18
        },
        {
            "id": "1",
            "title": "Gemini",
            "content": "The Gemini zodiac symbol often depicts two figures standing side-by-side.",
            "score": 0.05
        }
    ]
}

Python

Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI Agent Builder.

Untuk melakukan autentikasi ke Vertex AI Agent Builder, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"

client = discoveryengine.RankServiceClient()

# The full resource name of the ranking config.
# Format: projects/{project_id}/locations/{location}/rankingConfigs/default_ranking_config
ranking_config = client.ranking_config_path(
    project=project_id,
    location="global",
    ranking_config="default_ranking_config",
)
request = discoveryengine.RankRequest(
    ranking_config=ranking_config,
    model="semantic-ranker-512@latest",
    top_n=10,
    query="What is Google Gemini?",
    records=[
        discoveryengine.RankingRecord(
            id="1",
            title="Gemini",
            content="The Gemini zodiac symbol often depicts two figures standing side-by-side.",
        ),
        discoveryengine.RankingRecord(
            id="2",
            title="Gemini",
            content="Gemini is a cutting edge large language model created by Google.",
        ),
        discoveryengine.RankingRecord(
            id="3",
            title="Gemini Constellation",
            content="Gemini is a constellation that can be seen in the night sky.",
        ),
    ],
)

response = client.rank(request=request)

# Handle the response
print(response)

Model yang didukung

Model berikut tersedia.

Nama model Model terbaru (semantic-ranker-512@latest) Input Jendela konteks Tanggal rilis Tanggal penghentian
semantic-ranker-512-003 Ya Teks (25 bahasa) 512 10 September 2024 Belum ditentukan
semantic-ranker-512-002 Tidak Teks (khusus en) 512 3 Juni 2024 Belum ditentukan

Langkah selanjutnya

Pelajari cara menggunakan metode peringkat dengan RAG API lainnya untuk membuat jawaban yang berdasar dari data tidak terstruktur.