Meningkatkan hasil penelusuran dengan penyesuaian penelusuran

Model penelusuran yang dioptimalkan dapat memberikan hasil berkualitas lebih baik daripada model penelusuran dasar.

Penyesuaian penelusuran sangat berguna jika Anda memiliki kueri khusus seputar industri atau perusahaan yang kurang dapat dijawab dengan baik oleh LLM umum. Data ini dapat digunakan untuk melatih lebih lanjut model penelusuran.

Batasan

Penyesuaian penelusuran hanya dapat diterapkan ke penyimpanan data tidak terstruktur.

Tentang data pelatihan

Untuk menyesuaikan model penelusuran, Anda harus mengumpulkan data pelatihan terlebih dahulu.

Data pelatihan harus berisi kueri yang Anda harapkan akan diajukan oleh pengguna akhir dan cuplikan teks, sepanjang 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 dipasangkan dengan kueri, tetapi serupa dengan jawaban dalam gaya dan panjangnya. Cuplikan tanpa kueri terkait ini memberikan negatif acak untuk menyesuaikan model. Google merekomendasikan agar Anda menyediakan minimal 10.000 cuplikan ini.

Berikut beberapa terminologi untuk mendeskripsikan data pelatihan yang perlu Anda berikan:

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

    Berikan setidaknya 100.

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

    Anda harus memberikan dua jenis segmen ekstraktif:

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

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

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

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

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

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

Contoh pasangan kueri dan segmen ekstraksi

Tabel berikut memberikan beberapa contoh pasangan kueri dan segmen ekstraksi. Contoh umum ini 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 tidak relevan dengan kueri.

Kueri pelatihan Segmen ekstraktif Skor
Siapa yang mendirikan Google? Google didirikan pada 4 September 1998 oleh ilmuwan komputer Amerika Larry Page dan Sergey Brin saat mereka menjadi mahasiswa PhD di Stanford University di California.Bersama-sama, mereka memiliki sekitar 14% saham yang tercatat di bursa dan mengontrol 56% hak suara pemegang saham melalui saham dengan hak suara super. Perusahaan tersebut melakukan penawaran saham kepada publik (IPO) pada tahun 2004. Pada tahun 2015, Google direorganisasi sebagai anak perusahaan yang sepenuhnya dimiliki oleh Alphabet Inc. Google adalah anak perusahaan terbesar Alphabet dan merupakan perusahaan induk untuk properti dan kepentingan internet 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 paling berharga, Google menempati peringkat kedua oleh Forbes dan keempat oleh Interbrand. 1
ke mana darah dipompa setelah keluar dari ventrikel kanan? Darah beroksigen meninggalkan paru-paru melalui vena pulmonalis, yang mengembalikannya ke bagian kiri jantung, sehingga menyelesaikan siklus pulmonalis. Darah ini kemudian memasuki atrium kiri, yang memompanya melalui katup mitral ke dalam ventrikel kiri. Dari ventrikel kiri, darah melewati katup aorta ke aorta. Darah kemudian didistribusikan ke seluruh 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 alami antara bagian-bagian jantung yang menyebabkan aliran darah melewati paru-paru. 1
Di mana lokasi galeri bowling? World Bowling Writers ( WBW) International Bowling Hall of Fame didirikan pada tahun 1993 dan berlokasi 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 berbagi gedung yang sama dengan St. Louis Cardinals Hall of Fame Museum, hingga 8 November 2008. Restoran ini pindah ke Arlington dan dibuka kembali pada awal tahun 2010. Pada tahun 2012, WBW digabungkan dengan International Bowling Media Association. Setelah penggabungan, penerima penghargaan WBW Hall of Fame menjadi bagian dari IBMA Luby Hall of Fame.][...] Pria dan wanita yang menerima suara terbanyak akan terpilih. 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, yang merupakan potongan kecil kode dalam sebagian besar bahasa pemrograman serbaguna, digunakan untuk menggambarkan sintaksis dasar suatu bahasa. Program "Hello, World!" sering kali ditulis pertama kali oleh siswa yang mempelajari bahasa pemrograman baru, tetapi program tersebut juga dapat digunakan sebagai pemeriksaan untuk memastikan bahwa software komputer yang dimaksudkan untuk mengompilasi atau menjalankan kode sumber telah 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, di mana versi pertama yang diketahui dari program tersebut ditemukan dalam contoh yang digunakan untuk mengilustrasikan variabel eksternal 0

Tentang pengujian

Setelah pelatihan, penelusuran yang disesuaikan 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 (atau empat jika ada) file tertentu:

  • File korpus yang berisi segmen ekstraktif

  • File kueri yang hanya berisi kueri

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

  • Opsional: File label pengujian yang serupa 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 setidaknya 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 sebanyak 250–500 kata dari dokumen di penyimpanan data Anda dan tambahkan segmen tersebut 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 file maksimum 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 ekstraksi yang sesuai dalam file korpus. Anda harus memberikan minimal 100 kueri kecocokan 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 ekstraktif dan memberi skor pada 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 berisi ID kueri dan ID segmen ekstraktif yang cocok (atau tidak cocok) serta skor relevansi segmen dengan kueri. Harus ada setidaknya satu baris per kueri; jika kueri dijawab oleh dua segmen, maka 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 tidak ada, nilai defaultnya adalah 1.

File label pelatihan adalah file TSV (nilai yang dipisahkan tab) dengan header. File 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 di 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.

Label pengujian

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

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 menyediakannya, file tersebut harus berisi setidaknya tiga ID kueri unik.

Sebelum memulai

Aktifkan Enterprise edition features 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 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 AI Applications.

    Aplikasi AI

  4. Di halaman Aplikasi, klik nama aplikasi yang ingin Anda gunakan untuk melatih model.

  5. Di menu navigasi, klik Konfigurasi.

  6. Klik tab Penyesuaian.

  7. Klik Sesuaikan model dasar.

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

  9. Klik Mulai Penyesuaian.

  10. Muat ulang halaman untuk melihat status di tabel Aktivitas penyesuaian terbaru di tab Penyesuaian.

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. Tempatkan file ke dalam 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 Google Cloud project 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 mengetahui 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat 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 dioptimalkan 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 AI Applications.

      Aplikasi AI

    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 Model dasar 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 Google Cloud project 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat 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 dioptimalkan 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 AI Applications.

      Aplikasi AI

    2. Klik nama aplikasi.

    3. Klik Configurations.

    4. Klik tab Penyesuaian.

  2. Klik Model yang disesuaikan.

  3. Klik Publikasikan.

REST

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

Untuk menggunakan versi penelusuran yang dioptimalkan 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 mengetahui informasi umum tentang metode ini, lihat servingConfigs.patch.

Python

Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat 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 Anda tidak ingin lagi menggunakan penelusuran yang dioptimalkan—misalnya, jika Anda mendapati hasil yang tidak lebih baik, atau lebih buruk, daripada sebelum pengoptimalan, maka 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 AI Applications.

      Aplikasi AI

    2. Klik nama aplikasi.

    3. Klik Configurations.

    4. Klik tab Penyesuaian.

  2. Klik Model dasar.

  3. Klik Publikasikan.

REST

Untuk berhenti menggunakan model yang di-tuning, jalankan panggilan curl yang serupa 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 mengetahui informasi umum tentang metode ini, lihat servingConfigs.patch.

Python

Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat 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 berikutnya

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