Meningkatkan hasil penelusuran dengan penyesuaian penelusuran

Model penelusuran yang disesuaikan dapat memberi Anda hasil yang lebih berkualitas daripada model penelusuran dasar.

Penyesuaian penelusuran sangat berharga jika Anda memiliki kueri khusus industri atau perusahaan yang kurang ditangani dengan baik oleh LLM umum. Model ini dapat digunakan untuk melatih model penelusuran lebih lanjut.

Batasan

Penyesuaian penelusuran hanya dapat diterapkan ke penyimpanan data tidak terstruktur.

Tentang data pelatihan

Untuk menyesuaikan model penelusuran, Anda harus memulai dengan mengumpulkan data pelatihan.

Data pelatihan harus berisi kueri yang Anda harapkan akan diajukan oleh pengguna akhir dan cuplikan teks, dengan panjang 250 hingga 500 kata, yang berisi informasi relevan yang diperlukan untuk menjawab kueri. Kueri dapat dikaitkan dengan beberapa cuplikan selama setiap cuplikan berisi informasi yang menjawab kueri.

Data pelatihan juga harus berisi cuplikan teks yang tidak disambungkan dengan kueri, tetapi mirip dengan jawaban dalam gaya dan panjang. Cuplikan ini tanpa kueri terkait memberikan negatif acak untuk menyesuaikan model. Google merekomendasikan agar Anda memberikan minimal 10.000 cuplikan ini.

Berikut adalah beberapa terminologi untuk mendeskripsikan data pelatihan yang harus Anda berikan:

  • Kueri pelatihan: Kueri yang Anda perkirakan akan diajukan oleh pengguna akhir. Pastikan untuk berfokus pada kueri dengan terminologi domain atau perusahaan tertentu.

    Berikan minimal 100.

  • Segmen ekstrak: Cuplikan (biasanya beberapa paragraf) harus diambil secara verbatim dari dokumen di penyimpanan data. Semua dokumen bersama-sama dalam penyimpanan data disebut sebagai "korpus".

    Anda harus menyediakan dua jenis segmen ekstrak:

    • Segmen yang berisi informasi relevan yang diperlukan untuk menjawab kueri pelatihan. Ini adalah segmen yang memiliki kecocokan positif dengan kueri.

    • Segmen yang tidak dikaitkan dengan kueri pelatihan apa pun. Segmen ini digunakan sebagai negatif acak dalam penyesuaian model.

    Satu atau dua kalimat tidak cukup panjang untuk menjadi segmen ekstrak; segmen harus berisi konteks yang cukup untuk pelatihan. Misalnya, sebagai respons terhadap kueri seperti "siapa yang mendirikan Google", ekstrak singkat seperti "Larry Page" tidak memadai. Untuk contoh segmen yang cukup panjang, lihat tabel contoh berikut.

    Berikan minimal satu segmen ekstrak per kueri dan minimal 10.000 segmen ekstrak tambahan.

  • Skor relevansi: Skor relevansi adalah bilangan bulat non-negatif yang memperkirakan tingkat relevansi segmen ekstrak terhadap kueri. Anda memberikan nilai skor untuk setiap pasangan kueri dan segmen ekstrak. Skor 0 berarti segmen ekstrak tidak relevan sama sekali dengan kueri. Skor yang lebih besar dari nol menunjukkan beberapa relevansi. Untuk penskoran sederhana, Google merekomendasikan 1 untuk semua segmen yang relevan dan 0 untuk segmen yang tidak relevan. Atau, jika ingin menentukan peringkat relevansi, Anda dapat menetapkan skor relevansi dari 0 hingga 10 (misalnya), dengan 10 untuk segmen yang paling relevan dan 0 untuk segmen yang sama sekali tidak relevan.

    Berikan minimal 100 skor yang relevan dan, secara opsional, skor tambahan yang tidak relevan.

Contoh pasangan kueri dan segmen ekstrak

Tabel berikut memberikan beberapa contoh pasangan kueri dan segmen ekstraktif. Contoh umum ini telah diambil dari Wikipedia. Namun, untuk penyesuaian yang berguna, Anda sebaiknya menyediakan dokumen dari set data eksklusif yang berisi informasi khusus untuk bisnis Anda dan yang tidak mudah ditemukan di web.

Pasangan terakhir dalam tabel ini adalah contoh pasangan skor nol, dengan jawaban yang tidak relevan dengan kueri.

Kueri pelatihan Segmen ekstraktif Skor
siapa yang mendirikan Google? Google didirikan pada 4 September 1998 oleh ilmuwan komputer Amerika Serikat Larry Page dan Sergey Brin saat mereka masih menjadi mahasiswa PhD di Stanford University di California.Bersama-sama, mereka memiliki sekitar 14% saham yang tercantum secara publik dan mengontrol 56% kekuatan suara pemegang saham melalui saham supervoting. Perusahaan ini menjadi perusahaan publik melalui penawaran saham kepada umum (IPO) pada tahun 2004. Pada tahun 2015, Google direorganisasi sebagai anak perusahaan milik penuh Alphabet Inc. Google adalah anak perusahaan terbesar Alphabet dan merupakan perusahaan induk untuk properti internet dan minat Alphabet. Sundar Pichai ditunjuk sebagai CEO Google pada 24 Oktober 2015, menggantikan Larry Page, yang menjadi CEO Alphabet. Pada 3 Desember 2019, Pichai juga menjadi CEO Alphabet. [...] Dalam daftar merek yang paling bernilai, Google berada di peringkat kedua menurut Forbes dan keempat menurut Interbrand. 1
ke mana darah dipompa setelah keluar dari ventrikel kanan? Darah yang mengandung oksigen keluar dari paru-paru melalui vena pulmonalis, yang mengembalikannya ke bagian kiri jantung, sehingga menyelesaikan siklus pulmonalis. Darah ini kemudian memasuki atrium kiri, yang memompakannya melalui katup mitral ke ventrikel kiri. Dari ventrikel kiri, darah melewati katup aorta ke aorta. Darah kemudian didistribusikan ke tubuh melalui sirkulasi sistemik sebelum kembali lagi ke sirkulasi paru-paru. Arteri Artikel utama: Arteri pulmonalis Dari ventrikel kanan, darah dipompa melalui katup pulmonalis semilunar ke arteri pulmonalis utama kiri dan kanan (satu untuk setiap paru-paru), yang bercabang menjadi arteri pulmonalis yang lebih kecil yang menyebar ke seluruh paru-paru. [...] Shunt jantung adalah koneksi tidak wajar antara bagian jantung yang menyebabkan aliran darah yang mengabaikan paru-paru. 1
Di manakah lokasi hall of fame bowling? World Bowling Writers ( WBW ) International Bowling Hall of Fame didirikan pada tahun 1993 dan terletak di International Bowling Museum and Hall of Fame , di International Bowling Campus di Arlington , Texas. Sejarah International Bowling Museum and Hall of Fame terletak di 11 Stadium Plaza, St. Louis, Missouri, Amerika Serikat, dan menempati gedung yang sama dengan St. Louis Cardinals Hall of Fame Museum, hingga 8 November 2008. Kantor ini pindah ke Arlington dan dibuka kembali pada awal tahun 2010. Pada tahun 2012, WBW digabungkan dengan International Bowling Media Association. Setelah penggabungan, anggota WBW Hall of Fame menjadi bagian dari IBMA Luby Hall of Fame. Pejabat World Bowling Writers, yang membentuk Dewan Hall of Fame.][...] Pria dan wanita yang menerima suara terbanyak akan dipilih. 1
kenapa langit warnanya biru? Program "Hello, World!" umumnya adalah program komputer sederhana yang menghasilkan (atau menampilkan) pesan yang mirip dengan "Hello, World!" ke layar (sering kali konsol) sambil mengabaikan input pengguna. Program ini adalah potongan kecil kode di sebagian besar bahasa pemrograman tujuan umum, yang digunakan untuk mengilustrasikan sintaksis dasar bahasa. Program "Hello, World!" sering kali merupakan program pertama yang ditulis oleh siswa bahasa pemrograman baru, tetapi program tersebut juga dapat digunakan sebagai pemeriksaan untuk memastikan bahwa software komputer yang dimaksudkan untuk mengompilasi atau menjalankan kode sumber diinstal dengan benar, dan operatornya memahami cara menggunakannya. [...] Versi bahasa C didahului oleh A Tutorial Introduction to the Language B karya Kernighan sendiri pada tahun 1972, yang berisi versi pertama program yang diketahui dalam contoh yang digunakan untuk mengilustrasikan variabel eksternal 0

Tentang pengujian

Setelah pelatihan, penelusuran yang disesuaikan akan diuji untuk menentukan apakah penyesuaian meningkatkan hasil. Anda dapat memberikan kueri yang ingin diuji secara eksplisit. Jika Anda tidak memberikan kueri pengujian, Vertex AI Search akan menggunakan 20% kueri pelatihan sebagai kueri pengujian.

File pelatihan

Data pelatihan harus diupload dalam tiga (opsional empat) file khusus:

  • File korpus yang berisi segmen ekstrak

  • File kueri yang hanya berisi kueri

  • File label pelatihan yang menghubungkan kueri dengan segmen dan berisi skor relevansi

  • Opsional: File label pengujian yang mirip dengan file label pelatihan, tetapi digunakan untuk mengevaluasi model yang dioptimalkan, bukan melatihnya

Tiga file pelatihan (file korpus, file kueri, dan file label pelatihan) serta file label pengujian (opsional) harus berada di Cloud Storage. Jalur file ditentukan oleh kolom dalam panggilan trainCustomMethod.

File korpus

File korpus berisi segmen ekstraktif: segmen yang berisi informasi untuk menjawab kueri dalam file kueri dan banyak segmen tambahan yang akan digunakan sebagai negatif acak saat menyesuaikan model. Anda harus memiliki minimal 100 segmen yang berisi jawaban kueri; kueri dapat dijawab oleh beberapa segmen. Anda juga harus memiliki minimal 10.000 segmen acak.

Jika dokumen di penyimpanan data Anda berisi kurang dari 500 kata, Anda dapat menggunakan seluruh dokumen sebagai segmen. Jika tidak, buat segmen acak secara terprogram dari 250–500 kata dari dokumen di penyimpanan data Anda dan tambahkan ke file korpus.

File korpus adalah file JSONL (JSON lines) yang setiap barisnya memiliki kolom _id dan text dengan nilai string. Contoh:

  {"_id": "doc1", "text": "Google was founded on September 4, 1998, by American computer scientists Larry Page and Sergey Brin while they were PhD students at Stanford University in California. Together they own about 14% of its publicly listed shares and control 56% of its stockholder voting power through super-voting stock. The company went public via an initial public offering (IPO) in 2004. In 2015, Google was reorganized as a wholly owned subsidiary of Alphabet Inc. Google is Alphabet's largest subsidiary and is a holding company for Alphabet's internet properties and interests. Sundar Pichai was appointed CEO of Google on October 24, 2015, replacing Larry Page, who became the CEO of Alphabet. On December 3, 2019, Pichai also became the CEO of Alphabet. [...] On the list of most valuable brands, Google is 105 ranked second by Forbes and fourth by Interbrand."}
  {"_id": "doc2", "text": "Oxygenated blood leaves the lungs through pulmonary veins, which return it to the left part of the heart, completing the pulmonary cycle. This blood then enters the left atrium, which pumps it through the mitral valve into the left ventricle. From the left ventricle, the blood passes through the aortic valve to the aorta. The blood is then distributed to the body through the systemic circulation before returning again to the pulmonary circulation. Arteries Main article: Pulmonary artery From the right ventricle, blood is pumped through the semilunar pulmonary valve into the left and right main pulmonary artery (one for each lung), which branch into smaller pulmonary arteries that spread throughout the lungs. [...] Cardiac shunt is an unnatural connection between parts of the heart that leads to blood flow that bypasses the lungs."}
  {"_id": "doc3", "text": "The World Bowling Writers ( WBW ) International Bowling Hall of Fame was established in 1993 and is located in the International Bowling Museum and Hall of Fame , on the International Bowling Campus in Arlington , Texas. History The International Bowling Museum and Hall of Fame was located at 11 Stadium Plaza, St. Louis, Missouri, USA, and shared the same building with the St. Louis Cardinals Hall of Fame Museum, until November 8, 2008. It moved to Arlington and reopened in early 2010. In 2012, the WBW was merged with the International Bowling Media Association. After the merger, the WBW Hall of Fame inductees became part of the IBMA Luby Hall of Fame.  officers of the World Bowling Writers, which formed the Hall's Board.][...] The man and woman who receive the most votes are elected."}
  {"_id": "doc4", "text": "A \"Hello, World!\" program is generally a simple computer program which outputs (or displays) to the screen (often the console) a message similar to "Hello, World!" while ignoring any user input. A small piece of code in most general-purpose programming languages, this program is used to illustrate a language's basic syntax. A "Hello, World!" program is often the first written by a student of a new programming language, but such a program can also be used as a check to ensure that the computer software intended to compile or run source code is correctly installed, and that its operator understands how to use it.  [...] The C-language version was preceded by Kernighan's own 1972 A Tutorial Introduction to the Language B, where the first known version of the program is found in an example used to illustrate external variables."}

Ukuran maksimum file adalah 500.000 baris.

File kueri

File kueri berisi contoh kueri yang akan digunakan untuk menyesuaikan model. Setiap kueri harus memiliki satu atau beberapa segmen ekstrak yang sesuai dalam file korpus. Anda harus memberikan minimal 100 kueri pencocokan positif. Anda juga dapat memberikan kueri yang tidak relevan: ini adalah kueri yang sesuai dengan segmen ekstraktif dengan skor relevansi nol.

File kueri menggunakan format JSONL dan memiliki kolom yang sama dengan file korpus.

Contoh:

  {"_id": "query1", "text": "who founded Google?"}
  {"_id": "query2", "text": "where is blood pumped after it leaves the right ventricle?"}
  {"_id": "query3", "text": "where is the bowling hall of fame located?"}
  {"_id": "query4", "text": "why is the sky blue?"}

Jumlah maksimum kueri yang diizinkan dalam file adalah 40.000.

Label pelatihan

File label pelatihan menghubungkan kueri dengan segmen ekstrak dan memberi skor setiap pasangan kueri dan segmen.

Jika file label pengujian tidak ada, 20% kueri dalam file label pelatihan akan dicadangkan untuk mengevaluasi model yang dioptimalkan setelah pelatihan.

File ini berisi ID kueri dan ID segmen ekstraktif yang cocok (atau tidak cocok) serta skor untuk relevansi segmen dengan kueri. Harus ada minimal satu baris per kueri; jika kueri dijawab oleh dua segmen, maka akan ada dua baris untuk kueri tersebut. Score adalah nilai bilangan bulat non-negatif. Setiap skor yang lebih besar dari nol menunjukkan bahwa dokumen tersebut terkait dengan kueri. Angka yang lebih besar menunjukkan tingkat relevansi yang lebih besar. Jika skor dihilangkan, nilai defaultnya adalah 1.

File label pelatihan adalah file TSV (nilai yang dipisahkan tab) dengan header. File tersebut harus memiliki kolom query-id, corpus-id, dan score. query-id adalah string yang cocok dengan kunci _id dari file kueri, dan corpus-id adalah string yang cocok dengan _id dalam file korpus.

Contoh:

query-id    corpus-id   score
query1  doc1    1
query2  doc2    1
query3  doc3    1
query3  doc9    1
query4  doc4    0

File label pelatihan harus menyertakan minimal 100 ID kueri unik. Jumlah ID kueri dalam file label pelatihan yang digabungkan dengan jumlah kueri dalam file label pengujian harus kurang dari 500.000.

Menguji label

Seperti file label pelatihan, file opsional ini berisi ID kueri dan segmen ekstrak serta skor relevansi. File ini berisi lebih sedikit dan berbeda kueri daripada di file label pelatihan. Jika ada, pasangan kueri dan segmen ekstraktif dalam file akan digunakan untuk mengevaluasi penyesuaian. Jika file label pengujian tidak ada, pasangan kueri dan segmen ekstraktif dari file label pelatihan akan digunakan untuk mengevaluasi.

File ini memiliki format yang sama dengan file label pelatihan.

Contoh:

query-id    corpus-id   score
query200    doc200  1
query201    doc201  1
query202    doc202  1

Meskipun file label pengujian bersifat opsional, jika Anda memberikannya, file tersebut harus berisi setidaknya tiga ID kueri unik.

Sebelum memulai

Aktifkan Fitur edisi Enterprise untuk aplikasi.

Untuk menyesuaikan model penelusuran dengan data pelatihan Anda sendiri, ikuti langkah-langkah berikut.

Konsol

Untuk menggunakan konsol Google Cloud guna menyesuaikan model, ikuti langkah-langkah berikut:

  1. Siapkan data pelatihan Anda dan, secara opsional, file data pengujian Anda. Gunakan format yang dijelaskan dalam File pelatihan.

  2. Upload file ke Cloud Storage.

  3. Di konsol Google Cloud, buka halaman Agent Builder.

    Agent Builder

  4. Di halaman Aplikasi, klik nama aplikasi yang modelnya ingin Anda latih.

  5. Di menu navigasi, klik Konfigurasi.

  6. Klik tab Penyesuaian.

  7. Klik Sesuaikan model dasar.

  8. Tentukan file korpus, kueri, pelatihan, dan, secara opsional, file pengujian yang Anda siapkan di langkah 1 dan 2 sebelumnya.

  9. Klik Mulai Penyesuaian.

  10. Muat ulang halaman untuk melihat status di tabel Recent tuning activity di tab Tuning.

REST

Untuk menggunakan metode trainCustomModel guna menyesuaikan penyimpanan data, ikuti langkah-langkah berikut:

  1. Siapkan file data pelatihan (dan secara opsional, data pengujian). Gunakan format yang dijelaskan dalam File pelatihan.

  2. Masukkan file ke bucket Cloud Storage.

  3. Upload file dari bucket Cloud Storage ke Vertex AI Search dengan menjalankan perintah curl berikut:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID:trainCustomModel" \
    -d '{
    "gcsTrainingInput": {
     "corpusDataPath": "CORPUS_JSONL_GCS_PATH",
     "queryDataPath": "QUERY_JSONL_GCS_PATH",
     "trainDataPath": "TRAIN_TSV_GCS_PATH",
     "testDataPath": "TEST_TSV_GCS_PATH"
    },
    "modelType": "search-tuning"
    }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.

    • DATA_STORE_ID: ID penyimpanan data yang ingin Anda sesuaikan.

    • CORPUS_JSONL_GCS_PATH: jalur file JSONL korpus di Cloud Storage—misalnya, gs://my-bucket/corpus.jsonl.

    • QUERY_JSONL_GCS_PATH: jalur file JSONL kueri di Cloud Storage—misalnya, gs://my-bucket/query.jsonl.

    • TRAIN_TSV_GCS_PATH: jalur file TSV label pelatihan di Cloud Storage—misalnya, gs://my-bucket/train.tsv.

    • TEST_TSV_GCS_PATH: kolom opsional untuk menentukan jalur Cloud Storage untuk file TSV label pengujian—misalnya, gs://my-bucket/test.tsv. Jika Anda tidak memiliki file label pengujian, hapus kolom testDataPath atau biarkan kosong.

    Untuk informasi umum tentang metode ini, lihat trainCustomModel.

    Penyesuaian dimulai secara otomatis setelah file data diupload.

    Klik untuk melihat contoh perintah dan respons curl.

    curl -X POST
    -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321:trainCustomModel"
    -d '{
    "dataStore":
    "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321",
    "gcsTrainingInput": {
    "corpusDataPath": "gs://my-bucket/corpus.jsonl",
    "queryDataPath": "gs://my-bucket/query.jsonl",
    "trainDataPath": "gs://my-bucket/train.tsv"
    },
    "modelType": "search-tuning"
    }
    {
      "name": "projects/12345/locations/global/collections/default_collection/dataStores/my-data-store_4321/operations/train-custom-model-6071430366161939774",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelMetadata"
      },
      "response": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1.TrainCustomModelResponse",
        "modelStatus": "in-progress"
      }
    }
  4. Catat nilai name yang ditampilkan oleh metode trainCustomModel, dan ikuti petunjuk di Mendapatkan detail tentang operasi yang berjalan lama untuk melihat kapan operasi penyesuaian penelusuran selesai.

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.api_core.client_options import ClientOptions
from google.api_core.operation import Operation
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# corpus_data_path = "gs://my-bucket/corpus.jsonl"
# query_data_path = "gs://my-bucket/query.jsonl"
# train_data_path = "gs://my-bucket/train.tsv"
# test_data_path = "gs://my-bucket/test.tsv"


def train_custom_model_sample(
    project_id: str,
    location: str,
    data_store_id: str,
    corpus_data_path: str,
    query_data_path: str,
    train_data_path: str,
    test_data_path: str,
) -> Operation:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.SearchTuningServiceClient(client_options=client_options)

    # The full resource name of the data store
    data_store = f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{data_store_id}"

    # Make the request
    operation = client.train_custom_model(
        request=discoveryengine.TrainCustomModelRequest(
            gcs_training_input=discoveryengine.TrainCustomModelRequest.GcsTrainingInput(
                corpus_data_path=corpus_data_path,
                query_data_path=query_data_path,
                train_data_path=train_data_path,
                test_data_path=test_data_path,
            ),
            data_store=data_store,
            model_type="search-tuning",
        )
    )

    # Optional: Wait for training to complete
    # print(f"Waiting for operation to complete: {operation.operation.name}")
    # response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    # metadata = discoveryengine.TrainCustomModelMetadata(operation.metadata)

    # Handle the response
    # print(response)
    # print(metadata)
    print(operation)

    return operation

Menguji penelusuran yang disesuaikan dan menggunakannya untuk setiap kueri penelusuran

Setelah penyesuaian selesai, Anda dapat mengujinya dengan membandingkan hasil kueri dengan model yang disesuaikan dan hasil kueri yang sama dengan model dasar.

Konsol

Untuk menggunakan konsol Google Cloud guna melihat pratinjau perilaku model yang disesuaikan, ikuti langkah-langkah berikut:

  1. Buka tab Penyesuaian:

    1. Di konsol Google Cloud, buka halaman Agent Builder.

      Agent Builder

    2. Klik nama aplikasi yang ingin Anda lihat pratinjaunya.

    3. Klik Configurations.

    4. Klik tab Penyesuaian.

  2. Klik Model yang dioptimalkan dan gunakan panel pratinjau di sebelah kanan untuk membuat kueri yang menggunakan model yang dioptimalkan.

  3. Klik Base model dan gunakan panel pratinjau di sebelah kanan untuk membuat kueri menggunakan model asli.

  4. Bandingkan kualitas hasilnya.

REST

Untuk menilai efek penyesuaian, Anda dapat membuat kueri dengan kolom enableSearchAdaptor yang ditetapkan ke true, lalu false, dan membandingkan hasilnya. Menetapkan kolom enableSearchAdaptor ke true menunjukkan bahwa versi penelusuran yang disesuaikan digunakan untuk kueri tersebut.

Untuk membuat kueri penelusuran yang menggunakan model yang di-tuning:

  1. Dalam panggilan metode kueri, tetapkan kolom enableSearchAdaptor di kolom customFineTuningSpec ke true.

    Contoh:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "customFineTuningSpec": { "enableSearchAdaptor": true }
    }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi yang ingin Anda kueri.

Untuk mengetahui informasi mendetail tentang kueri penelusuran, lihat Mendapatkan hasil penelusuran dan metode servingConfigs.search.

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.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION"          # Values: "global", "us", "eu"
# engine_id = "YOUR_APP_ID"
# search_query = "YOUR_SEARCH_QUERY"


def search_sample(
    project_id: str,
    location: str,
    engine_id: str,
    search_query: str,
) -> discoveryengine.services.search_service.pagers.SearchPager:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.SearchServiceClient(client_options=client_options)

    # The full resource name of the search app serving config
    serving_config = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_config"

    # Optional - only supported for unstructured data: Configuration options for search.
    # Refer to the `ContentSearchSpec` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec
    content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec(
        # For information about snippets, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/snippets
        snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec(
            return_snippet=True
        ),
        # For information about search summaries, refer to:
        # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries
        summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec(
            summary_result_count=5,
            include_citations=True,
            ignore_adversarial_query=True,
            ignore_non_summary_seeking_query=True,
            model_prompt_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelPromptSpec(
                preamble="YOUR_CUSTOM_PROMPT"
            ),
            model_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec.ModelSpec(
                version="stable",
            ),
        ),
    )

    # Refer to the `SearchRequest` reference for all supported fields:
    # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest
    request = discoveryengine.SearchRequest(
        serving_config=serving_config,
        query=search_query,
        page_size=10,
        content_search_spec=content_search_spec,
        query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec(
            condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO,
        ),
        spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec(
            mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO
        ),
        # Optional: Use fine-tuned model for this request
        # custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
        #     enable_search_adaptor=True
        # ),
    )

    page_result = client.search(request)

    # Handle the response
    for response in page_result:
        print(response)

    return page_result

Mengaktifkan penelusuran yang disesuaikan

Setelah menguji penelusuran yang disesuaikan dan memutuskan bahwa Anda ingin menggunakannya untuk semua kueri penelusuran, Anda dapat menjadikannya model penelusuran default.

Konsol

Untuk menjadikan model yang disesuaikan sebagai model default dan menerapkannya ke halaman Pratinjau utama, widget, dan panggilan API, ikuti langkah-langkah berikut:

  1. Buka tab Penyesuaian:

    1. Di konsol Google Cloud, buka halaman Agent Builder.

      Agent Builder

    2. Klik nama aplikasi tersebut.

    3. Klik Configurations.

    4. Klik tab Penyesuaian.

  2. Klik Model yang disesuaikan.

  3. Klik Publikasikan.

REST

Saat menetapkan model yang dioptimalkan sebagai model default, Anda tidak perlu menentukan kolom customFineTuningSpec dalam kueri penelusuran seperti dalam prosedur sebelumnya.

Untuk menggunakan penelusuran versi yang disesuaikan secara default untuk semua kueri penelusuran, ikuti langkah-langkah berikut:

  1. Untuk menetapkan penelusuran yang dioptimalkan sebagai model default, jalankan perintah curl berikut:

    curl -X PATCH \
    -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/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": true
    }
    }'
    

    Untuk informasi umum tentang metode ini, lihat servingConfigs.patch.

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.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Menonaktifkan penelusuran yang disesuaikan

Jika tidak ingin lagi menggunakan penelusuran versi yang dioptimalkan—misalnya, jika Anda menemukan bahwa hasilnya tidak lebih baik, atau lebih buruk, daripada sebelum pengoptimalan, Anda dapat menonaktifkan penelusuran yang dioptimalkan.

Konsol

Untuk kembali menggunakan model dasar sebagai model default, ikuti langkah-langkah berikut:

  1. Buka tab Penyesuaian:

    1. Di konsol Google Cloud, buka halaman Agent Builder.

      Agent Builder

    2. Klik nama aplikasi tersebut.

    3. Klik Configurations.

    4. Klik tab Penyesuaian.

  2. Klik Model dasar.

  3. Klik Publikasikan.

REST

Untuk berhenti menggunakan model yang dioptimalkan, jalankan panggilan curl yang mirip dengan panggilan sebelumnya, tetapi tetapkan enableSearchAdaptor ke false:

  1. Jalankan perintah curl berikut:

    curl -X PATCH \
    -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/collections/default_collection/engines/APP_ID/servingConfigs/default_search?updateMask=customFineTuningSpec.enableSearchAdaptor" \
    -d '{
    "customFineTuningSpec": {
     "enableSearchAdaptor": false
    }
    }'
    

    Untuk informasi umum tentang metode ini, lihat servingConfigs.patch.

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.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# engine_id = "YOUR_DATA_STORE_ID"


def update_serving_config_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ServingConfig:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )
    # Create a client
    client = discoveryengine.ServingConfigServiceClient(client_options=client_options)

    # The full resource name of the serving config
    serving_config_name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/servingConfigs/default_search"

    update_mask = "customFineTuningSpec.enableSearchAdaptor"

    serving_config = client.update_serving_config(
        request=discoveryengine.UpdateServingConfigRequest(
            serving_config=discoveryengine.ServingConfig(
                name=serving_config_name,
                custom_fine_tuning_spec=discoveryengine.CustomFineTuningSpec(
                    enable_search_adaptor=True  # Switch to `False` to disable tuned model
                ),
            ),
            update_mask=update_mask,
        )
    )

    # Handle the response
    print(serving_config)

    return serving_config

Langkah selanjutnya

  • Untuk memahami dampak penyesuaian penelusuran terhadap kualitas penelusuran, evaluasi kualitas penelusuran. Untuk informasi selengkapnya, lihat Mengevaluasi kualitas penelusuran.