Mendapatkan jawaban dan tindak lanjut

Halaman ini memperkenalkan penelusuran dengan jawaban dan tindak lanjut untuk Vertex AI Search dan menunjukkan cara menerapkannya untuk aplikasi penelusuran umum menggunakan panggilan metode.

Penelusuran dengan jawaban dan tindak lanjut didasarkan pada metode jawaban. Metode jawaban menggantikan fitur ringkasan dari metode penelusuran lama dan semua fitur metode percakapan yang tidak digunakan lagi. Metode jawaban juga memiliki beberapa fitur tambahan penting, seperti kemampuan untuk menangani kueri yang kompleks.

Fitur metode jawaban

Fitur utama metode jawaban adalah sebagai berikut:

  • Kemampuan untuk menghasilkan jawaban atas kueri yang kompleks. Misalnya, metode jawaban dapat menguraikan kueri gabungan, seperti berikut, menjadi beberapa kueri yang lebih kecil untuk menampilkan hasil yang lebih baik yang digunakan untuk memberikan jawaban yang lebih baik:

    • "Berapa pendapatan Google Cloud dan Google Ads masing-masing pada tahun 2024?"
    • "Berapa tahun setelah didirikan, Google mencapai pendapatan sebesar 1 miliar USD?"
  • Kemampuan untuk menggabungkan penelusuran dan pembuatan jawaban dalam percakapan multi-giliran dengan memanggil metode jawaban di setiap giliran.

  • Kemampuan untuk disambungkan dengan metode penelusuran guna mengurangi latensi penelusuran. Anda dapat memanggil metode penelusuran dan metode jawaban secara terpisah serta merender hasil penelusuran dan jawaban dalam iframe yang berbeda pada waktu yang berbeda. Artinya, Anda dapat menampilkan hasil penelusuran kepada pengguna (10 link biru) dalam milidetik. Anda tidak perlu menunggu jawaban dibuat sebelum dapat menampilkan hasil penelusuran.

Fitur jawaban dan tindak lanjut dapat dibagi menjadi tiga fase kueri, penelusuran, dan jawaban:

Kapan harus menggunakan jawaban dan kapan harus menggunakan penelusuran

Vertex AI Search memiliki dua metode yang digunakan untuk membuat kueri aplikasi. Keduanya memiliki fitur yang berbeda tetapi tumpang-tindih.

Gunakan metode answer jika:

  • Anda menginginkan jawaban (atau ringkasan) hasil penelusuran yang dibuat AI.

  • Anda menginginkan penelusuran multi-giliran, yaitu penelusuran yang menyimpan konteks sehingga memungkinkan pertanyaan lanjutan.

Gunakan metode penelusuran saat:

  • Anda hanya memerlukan hasil penelusuran, bukan jawaban yang dibuat.

  • Anda ingin lebih dari sepuluh hasil penelusuran ("link biru") ditampilkan.

  • Anda memiliki salah satu hal berikut:

    • Data media atau layanan kesehatan
    • Embedding Anda sendiri
    • Kontrol sinonim atau pengalihan
    • Faset
    • Kode negara pengguna

Gunakan metode jawaban dan penelusuran secara bersamaan jika:

  • Anda ingin menampilkan lebih dari sepuluh hasil penelusuran, dan Anda menginginkan jawaban yang dihasilkan.

  • Anda mengalami masalah latensi dan ingin menampilkan hasil penelusuran dengan cepat sebelum jawaban yang dihasilkan ditampilkan.

Fitur fase kueri

Fitur jawaban dan tindak lanjut mendukung pemrosesan kueri bahasa alami.

Bagian ini menjelaskan dan mengilustrasikan berbagai opsi untuk klasifikasi dan penyusunan ulang kueri.

Pemutaran ulang kueri

Pemutaran ulang kueri aktif secara default. Fitur ini memilih cara terbaik untuk menyusun ulang kueri secara otomatis guna meningkatkan hasil penelusuran. Fitur ini juga dapat menangani kueri yang tidak memerlukan penyusunan ulang.

  • Membagi kueri kompleks menjadi beberapa kueri dan melakukan sub-kueri sinkron.

    Misalnya: Kueri kompleks dibagi menjadi empat kueri yang lebih kecil dan lebih sederhana.

    Input pengguna Subkueri yang dibuat dari kueri kompleks
    Apa kesamaan pekerjaan dan hobi Andie Ram dan Arnaud Clément?
    • Pekerjaan Andie Ram
    • Pekerjaan Arnaud Clément
    • Hobi Andie Ram
    • Hobi Arnaud Clément
  • Sintetisasikan kueri multi-giliran, untuk membuat pertanyaan lanjutan berbasis konteks dan stateful.

    Misalnya: Kueri yang disintesis dari input pengguna pada setiap giliran mungkin terlihat seperti ini:

    Input pengguna Kueri disintesis
    Putaran 1: laptop untuk sekolah laptop untuk sekolah
    Putaran 2: not mac laptop untuk sekolah bukan mac
    Putaran 3: layar lebih besar dan saya juga memerlukan keyboard dan mouse nirkabel laptop layar lebih besar untuk sekolah, bukan Mac, dengan keyboard dan mouse nirkabel
    Belokan 4: dan ransel untuknya laptop layar lebih besar untuk sekolah, bukan mac dengan keyboard dan mouse nirkabel, serta ransel untuk laptop
  • Sederhanakan kueri panjang untuk meningkatkan pengambilan.

    Misalnya: Kueri panjang dipersingkat menjadi kueri sederhana.

    Input pengguna Kueri yang disederhanakan
    Saya mencoba mencari tahu mengapa tombol \"Tambahkan ke Keranjang" di situs kami tidak berfungsi dengan semestinya. Sepertinya saat pengguna mengklik tombol, item tidak ditambahkan ke keranjang dan mereka menerima pesan error. Saya telah memeriksa kodenya dan sepertinya sudah benar, jadi saya tidak yakin apa masalahnya. Dapatkah Anda membantu saya memecahkan masalah ini? Tombol "Tambahkan ke Keranjang" tidak berfungsi di situs.
  • Melakukan penalaran multilangkah

    Penalaran multi-langkah didasarkan pada paradigma ReAct (reason + act) yang memungkinkan LLM menyelesaikan tugas kompleks menggunakan penalaran bahasa alami. Secara default, jumlah langkah maksimum adalah lima.

    Contoh:

    Input pengguna Dua langkah untuk membuat jawaban
    Berapa tahun setelah didirikan, Google mencapai pendapatan sebesar 1 miliar USD? Langkah 1:
    [Pemikiran]: Saya perlu mengetahui kapan Google didirikan, lalu saya dapat membuat kueri untuk mengetahui pendapatannya sejak saat itu.
    [Tindakan] Telusuri: Kapan Google didirikan? [Perhatikan Hasil Penelusuran]: "1998"

    Langkah 2:
    [Pemikiran]: Sekarang saya perlu mencari tahu pendapatan tahunan Google sejak tahun 1998, dan mencari tahu kapan pendapatannya melebihi 1 miliar untuk pertama kalinya.
    [Tindakan] Penelusuran: Pendapatan Google sejak 1998
    [Amati Hasil Penelusuran] Pendapatan Google pada tahun 1998, pendapatan Google pada tahun 1999….
    [Jawaban]: Google mencapai pendapatan lebih dari 1 miliar USD pada tahun 2003 [1], 5 tahun setelah didirikan pada tahun 1998[2].

Klasifikasi kueri

Opsi klasifikasi kueri adalah untuk mengidentifikasi kueri yang tidak sah dan kueri yang tidak mencari jawaban. Secara default, opsi klasifikasi kueri nonaktif.

Untuk informasi selengkapnya tentang kueri yang mencari jawaban dan kueri yang mencari informasi yang tidak relevan, lihat Mengabaikan kueri yang mencari jawaban dan Mengabaikan kueri yang mencari informasi yang tidak relevan.

Fitur fase penelusuran

Untuk penelusuran, metode jawaban memiliki opsi yang sama dengan metode penelusuran. Misalnya:

Fitur fase jawaban

Selama fase jawaban, saat jawaban dihasilkan dari hasil penelusuran, Anda dapat mengaktifkan fitur yang sama seperti dalam metode penelusuran. Contoh:

  • Mendapatkan kutipan untuk menunjukkan sumber untuk setiap kalimat dalam jawaban. Untuk mengetahui informasi selengkapnya, lihat Menyertakan kutipan.

  • Gunakan pengantar perintah untuk menyesuaikan jawaban untuk hal-hal seperti gaya, gaya, dan panjangnya. Untuk informasi selengkapnya, lihat Menentukan awalan kustom.

  • Pilih model Vertex AI yang akan digunakan untuk pembuatan jawaban. Untuk mengetahui informasi selengkapnya, lihat Versi dan siklus proses model pembuatan jawaban.

  • Pilih apakah akan mengabaikan kueri yang telah diklasifikasikan sebagai kueri yang tidak mencari jawaban atau kueri yang bersifat permusuhan.

    Untuk informasi selengkapnya tentang kueri yang mencari jawaban dan kueri yang mencari non-jawaban, lihat Mengabaikan kueri yang mencari jawaban dan Mengabaikan kueri yang mencari non-ringkasan. Kueri yang tidak mencari jawaban juga disebut kueri yang tidak mencari ringkasan.

Fitur fase jawaban tambahan yang tidak tersedia dalam metode penelusuran adalah:

  • Mendapatkan skor dukungan untuk setiap klaim (kalimat dalam jawaban yang dihasilkan). Skor dukungan adalah nilai floating point dalam rentang [0,1] yang menunjukkan seberapa kuat dasar klaim dalam data di penyimpanan data. Untuk informasi selengkapnya, lihat Menampilkan skor dukungan grounding.

  • Mendapatkan skor dukungan gabungan untuk jawaban. Skor dukungan menunjukkan seberapa baik jawaban didasarkan pada data di penyimpanan data. Untuk mengetahui informasi selengkapnya, lihat Menampilkan skor dukungan penjelasan.

  • Hanya menampilkan jawaban yang berdasar. Anda dapat memilih untuk hanya menampilkan jawaban yang memenuhi nilai minimum skor dukungan tertentu. Untuk informasi selengkapnya, lihat Hanya menampilkan jawaban yang berdasar.

Sebelum memulai

Bergantung pada jenis aplikasi yang Anda miliki, selesaikan persyaratan berikut:

  • Jika Anda memiliki aplikasi penelusuran terstruktur atau tidak terstruktur, pastikan hal berikut diaktifkan: Fitur LLM lanjutan

  • Jika Anda memiliki aplikasi penelusuran situs, pastikan hal berikut diaktifkan:

  • Jika Anda memiliki aplikasi penelusuran gabungan (yaitu, aplikasi yang terhubung ke lebih dari satu penyimpanan data), hubungi tim Akun Google Anda dan minta untuk ditambahkan ke daftar yang diizinkan untuk API jawaban dengan penelusuran gabungan.

Menelusuri dan menjawab (dasar)

Perintah berikut menunjukkan cara memanggil metode answer dan menampilkan jawaban yang dihasilkan serta daftar hasil penelusuran, dengan link ke sumber.

Perintah ini hanya menampilkan input yang diperlukan. Opsi dibiarkan pada default-nya.

REST

Untuk menelusuri dan mendapatkan hasil dengan jawaban yang dihasilkan, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"}
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Membandingkan database BigQuery dan Spanner?".

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Perintah fase kueri

Bagian ini menunjukkan cara menentukan opsi untuk fase kueri dari panggilan metode answer.

Menelusuri dan menjawab (pernyataan ulang dinonaktifkan)

Perintah berikut menunjukkan cara memanggil metode answer dan menampilkan jawaban yang dihasilkan serta daftar hasil penelusuran. Jawabannya dapat berbeda dengan jawaban sebelumnya karena opsi penyusunan ulang dinonaktifkan.

REST

Untuk menelusuri dan mendapatkan hasil dengan jawaban yang dihasilkan tanpa menerapkan pernyataan ulang kueri, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
               "queryRephraserSpec": {
                  "disable": true
            }
        }
          }'
    
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Membandingkan database BigQuery dan Spanner?".

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Menelusuri dan menjawab (tentukan langkah maksimum)

Perintah berikut menunjukkan cara memanggil metode answer dan menampilkan jawaban yang dihasilkan serta daftar hasil penelusuran. Jawabannya berbeda dengan jawaban sebelumnya karena jumlah langkah penyusunan ulang telah ditingkatkan.

REST

Untuk menelusuri dan mendapatkan hasil dengan jawaban yang dihasilkan yang memungkinkan hingga lima langkah pernyataan ulang, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryRephraserSpec": {
                    "maxRephraseSteps": MAX_REPHRASE
                 }
             }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Membandingkan database BigQuery dan Spanner?".
    • MAX_REPHRASE: jumlah maksimum langkah penyusunan ulang. Nilai terbesar yang diizinkan adalah 5. Jika tidak ditetapkan atau jika ditetapkan ke kurang dari 1, nilainya adalah default, 1.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Menelusuri dan menjawab dengan klasifikasi kueri

Perintah berikut menunjukkan cara memanggil metode answer untuk mengajukan pertanyaan apakah kueri bersifat antagonis, tidak mencari jawaban, atau keduanya.

Respons menyertakan jenis klasifikasi untuk kueri, tetapi jawaban itu sendiri tidak terpengaruh oleh klasifikasi. Jika ingin mengubah perilaku jawaban sesuai dengan jenis kueri, Anda dapat melakukannya pada fase jawaban. Lihat Mengabaikan kueri yang bersifat permusuhan dan Mengabaikan kueri pencarian yang bukan ringkasan.

REST

Untuk menentukan apakah kueri bersifat antagonis atau tidak mencari jawaban, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "queryUnderstandingSpec": {
                "queryClassificationSpec": {
                    "types": ["QUERY_CLASSIFICATION_TYPE"]
                 }
             }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "halo".
    • QUERY_CLASSIFICATION_TYPE: jenis kueri yang ingin Anda identifikasi: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY, atau keduanya.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Perintah fase penelusuran: Menelusuri dan menjawab dengan opsi hasil penelusuran

Bagian ini menunjukkan cara menentukan opsi untuk bagian fase penelusuran dari panggilan metode answer, opsi seperti menetapkan jumlah maksimum dokumen yang ditampilkan, pengoptimalan, dan pemfilteran, serta cara mendapatkan jawaban saat Anda memberikan hasil penelusuran Anda sendiri.

Perintah berikut menunjukkan cara memanggil metode answer dan menentukan berbagai opsi untuk cara hasil penelusuran ditampilkan. (Hasil penelusuran tidak bergantung pada jawaban.)

REST

Untuk menetapkan berbagai opsi yang terkait dengan hasil penelusuran yang ditampilkan dan caranya, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
              "searchSpec": {
              "searchParams": {
                "maxReturnResults": MAX_RETURN_RESULTS,
                "filter": "FILTER",
                "boostSpec": BOOST_SPEC,
                "orderBy": "ORDER_BY",
                "searchResultMode": SEARCH_RESULT_MODE
               }
             }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Membandingkan database BigQuery dan Spanner?"
    • MAX_RETURN_RESULTS: jumlah hasil penelusuran yang akan ditampilkan. Nilai defaultnya adalah 10.
    • FILTER: filter menentukan dokumen mana yang dikueri. Jika metadata dokumen memenuhi spesifikasi filter, dokumen akan dikueri. Untuk informasi selengkapnya, termasuk sintaksis filter, lihat Memfilter penelusuran umum untuk data terstruktur atau tidak terstruktur.
    • BOOST_SPEC: spesifikasi boost memungkinkan Anda meningkatkan dokumen tertentu dalam hasil penelusuran, yang dapat memengaruhi jawaban. Untuk informasi selengkapnya, termasuk sintaksis untuk spesifikasi pengoptimalan, lihat Meningkatkan hasil penelusuran.
    • ORDER_BY: urutan dokumen yang ditampilkan. Dokumen dapat diurutkan berdasarkan kolom dalam objek Dokumen. Ekspresi orderBy peka huruf besar/kecil. Jika kolom ini tidak dapat dikenali, INVALID_ARGUMENT akan ditampilkan.
    • SEARCH_RESULT_MODE: Menentukan mode hasil penelusuran: DOCUMENTS atau CHUNKS. Untuk informasi selengkapnya, lihat Mengurai dan mengelompokkan dokumen serta ContentSearchSpec. Kolom ini hanya tersedia di API versi v1alpha.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Perintah fase jawaban

Bagian ini menunjukkan cara menentukan opsi khusus jawaban untuk panggilan metode answer.

Mengabaikan kueri yang tidak sah dan kueri yang tidak mencari jawaban

Perintah berikut menunjukkan cara menghindari menjawab kueri yang berniat jahat dan kueri yang tidak mencari jawaban saat memanggil metode answer.

REST

Untuk melewati jawaban kueri yang bersifat permusuhan atau tidak mencari jawaban, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreAdversarialQuery": true,
               "ignoreNonAnswerSeekingQuery": true
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Hanya tampilkan jawaban yang relevan

Vertex AI Search dapat menilai relevansi hasil terhadap kueri. Jika tidak ada hasil yang ditentukan cukup relevan, Anda dapat memilih untuk menampilkan jawaban penggantian: "We do not have a summary for your query.", bukan menghasilkan jawaban dari hasil yang tidak relevan atau relevan secara minimal.

Perintah berikut menunjukkan cara menampilkan jawaban penggantian jika hasilnya tidak relevan saat memanggil metode answer.

REST

Untuk menampilkan jawaban penggantian jika tidak ada hasil yang relevan yang ditemukan, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "ignoreLowRelevantContent": true
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Menampilkan skor dukungan grounding

Perintah berikut menunjukkan cara menampilkan skor dukungan dasar untuk jawaban dan klaim.

Untuk informasi umum tentang grounding di Vertex AI, lihat Memeriksa grounding dengan RAG. Metode groundingConfigs.check dipanggil oleh metode jawaban.

REST

Untuk menampilkan skor dukungan untuk setiap klaim (kalimat dalam jawaban) dan skor dukungan gabungan untuk jawaban, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "includeGroundingSupports": true,
               "returnGroundingScore": RETURN_GROUNDING_SCORE
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • RETURN_GROUNDING_SCORE: boolean true atau false. Tetapkan ke true jika Anda ingin menampilkan skor dukungan: skor gabungan untuk jawaban dan skor individual untuk klaim. Jika tidak ditetapkan, nilainya adalah false.

Hanya menampilkan jawaban yang berdasar

Perintah berikut menunjukkan cara hanya menampilkan jawaban yang dianggap berdasarkan korpus, yaitu informasi dalam penyimpanan data. Jawaban yang tidak berdasar akan difilter.

Anda dapat memilih nilai minimum tingkat rendah atau tinggi untuk skor dukungan pentanahan. Kemudian, jawaban hanya ditampilkan jika memenuhi atau melebihi tingkat tersebut. Anda dapat bereksperimen dengan dua nilai minimum filter dan tanpa nilai minimum untuk menentukan tingkat filter yang kemungkinan akan memberikan hasil terbaik bagi pengguna.

Untuk informasi umum tentang grounding di Vertex AI, lihat Memeriksa grounding dengan RAG. Metode groundingConfigs.check dipanggil oleh metode jawaban.

REST

Untuk menampilkan jawaban hanya jika memenuhi nilai minimum skor dukungan, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "groundingSpec": {
               "filteringLevel": "FILTER_LEVEL"
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • FILTER_LEVEL: enumerasi untuk memfilter jawaban berdasarkan skor dukungan dasar. Opsi yang tersedia adalah: FILTERING_LEVEL_LOW dan FILTERING_LEVEL_HIGH. Jika returnGroundingScore tidak disertakan, tidak ada filter skor dukungan yang diterapkan ke jawaban.

Menentukan model jawaban

Perintah berikut menunjukkan cara mengubah versi model yang digunakan untuk membuat jawaban.

Untuk mengetahui informasi tentang model yang didukung, lihat Versi dan siklus proses model pembuatan jawaban.

REST

Untuk membuat jawaban menggunakan model yang berbeda dari model default, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "modelSpec": {
                  "modelVersion": "MODEL_VERSION",
               }
             }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • MODEL_VERSION: versi model yang ingin Anda gunakan untuk membuat jawaban. Untuk mengetahui informasi selengkapnya, lihat Versi dan siklus proses model pembuatan jawaban.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Menentukan pengantar kustom

Perintah berikut menunjukkan cara menetapkan awalan untuk jawaban yang dihasilkan. Pengantar berisi petunjuk bahasa alami untuk menyesuaikan jawaban. Anda dapat meminta penyesuaian seperti durasi, tingkat detail, gaya output (seperti "sederhana"), bahasa output, fokus jawaban, dan format (seperti tabel, butir, dan XML). Misalnya, pengantarnya mungkin "Jelaskan seperti Anda adalah anak berusia sepuluh tahun".

Pengantar dapat memiliki efek yang signifikan terhadap kualitas jawaban yang dihasilkan. Untuk informasi tentang apa yang harus ditulis dalam pengantar dan contoh pengantar yang baik, lihat Tentang pengantar kustom.

REST

Untuk membuat jawaban menggunakan model yang berbeda dari model default, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "promptSpec": {
                   "preamble": "PREAMBLE",
               }
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • PREAMBLE: petunjuk bahasa alami untuk menyesuaikan jawaban. Misalnya, coba show the answer format in an ordered list atau give a very detailed answer.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Menyertakan kutipan

Perintah berikut menunjukkan cara meminta kutipan untuk disertakan dengan jawaban.

REST

Untuk membuat jawaban menggunakan model yang berbeda dari model default, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "includeCitations": INCLUDE_CITATIONS
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • INCLUDE_CITATIONS: menentukan apakah akan menyertakan metadata kutipan dalam jawaban. Nilai defaultnya adalah false.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Menetapkan kode bahasa jawaban

Perintah berikut menunjukkan cara menetapkan kode bahasa untuk jawaban.

REST

Untuk membuat jawaban menggunakan model yang berbeda dari model default, lakukan hal berikut:

  1. Jalankan 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/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
               "answerLanguageCode": "ANSWER_LANGUAGE_CODE"
               }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda buat kuerinya.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • ANSWER_LANGUAGE_CODE: kode bahasa untuk jawaban. Gunakan tag bahasa yang ditentukan oleh BCP47: Tag untuk Mengidentifikasi Bahasa.

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"


def answer_query_sample(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.AnswerQueryResponse:
    #  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.ConversationalSearchServiceClient(
        client_options=client_options
    )

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

    # Optional: Options for query phase
    # The `query_understanding_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/QueryUnderstandingSpec
    query_understanding_spec = discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec(
        query_rephraser_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryRephraserSpec(
            disable=False,  # Optional: Disable query rephraser
            max_rephrase_steps=1,  # Optional: Number of rephrase steps
        ),
        # Optional: Classify query types
        query_classification_spec=discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec(
            types=[
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.ADVERSARIAL_QUERY,
                discoveryengine.AnswerQueryRequest.QueryUnderstandingSpec.QueryClassificationSpec.Type.NON_ANSWER_SEEKING_QUERY,
            ]  # Options: ADVERSARIAL_QUERY, NON_ANSWER_SEEKING_QUERY or both
        ),
    )

    # Optional: Options for answer phase
    # The `answer_generation_spec` below includes all available query phase options.
    # For more details, refer to https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/AnswerGenerationSpec
    answer_generation_spec = discoveryengine.AnswerQueryRequest.AnswerGenerationSpec(
        ignore_adversarial_query=False,  # Optional: Ignore adversarial query
        ignore_non_answer_seeking_query=False,  # Optional: Ignore non-answer seeking query
        ignore_low_relevant_content=False,  # Optional: Return fallback answer when content is not relevant
        model_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.ModelSpec(
            model_version="gemini-1.5-flash-001/answer_gen/v2",  # Optional: Model to use for answer generation
        ),
        prompt_spec=discoveryengine.AnswerQueryRequest.AnswerGenerationSpec.PromptSpec(
            preamble="Give a detailed answer.",  # Optional: Natural language instructions for customizing the answer.
        ),
        include_citations=True,  # Optional: Include citations in the response
        answer_language_code="en",  # Optional: Language code of the answer
    )

    # Initialize request argument(s)
    request = discoveryengine.AnswerQueryRequest(
        serving_config=serving_config,
        query=discoveryengine.Query(text="What is Vertex AI Search?"),
        session=None,  # Optional: include previous session ID to continue a conversation
        query_understanding_spec=query_understanding_spec,
        answer_generation_spec=answer_generation_spec,
    )

    # Make the request
    response = client.answer_query(request)

    # Handle the response
    print(response)

    return response

Perintah untuk pertanyaan lanjutan

Pertanyaan lanjutan adalah kueri multi-giliran. Setelah kueri pertama dalam sesi tindak lanjut, "giliran" berikutnya akan mempertimbangkan interaksi sebelumnya. Dengan pertanyaan lanjutan, metode jawaban juga dapat menyarankan pertanyaan terkait, yang dapat dipilih pengguna, bukan memasukkan pertanyaan lanjutan mereka sendiri.

Semua fitur jawaban dan pertanyaan lanjutan yang dijelaskan di bagian sebelumnya, seperti kutipan, filter, SafeSearch, mengabaikan jenis kueri tertentu, dan menggunakan preamble untuk menyesuaikan jawaban dapat diterapkan bersama dengan pertanyaan lanjutan.

Contoh sesi lanjutan

Berikut adalah contoh sesi dengan tindak lanjut. Misalkan Anda ingin mengetahui informasi tentang berlibur di Meksiko:

  • Putaran 1:

    • Anda: Kapan waktu terbaik untuk berlibur di Meksiko?

    • Jawab dengan tindak lanjut: Waktu terbaik untuk berlibur di Meksiko adalah selama musim kemarau, yang berlangsung dari November hingga April.

  • Giliran 2:

    • Anda: Berapa nilai tukarnya?

    • Jawab dengan tindak lanjut: 1 USD sama dengan sekitar 17,65 peso Meksiko.

  • Giliran 3:

    • Anda: Berapa suhu rata-rata pada bulan Desember?

    • Jawab dengan pertanyaan lanjutan: Suhu rata-rata bervariasi dari 21-26°C. Rata-rata suhu di Cancun adalah ~ 25°C.

Tanpa pertanyaan lanjutan, pertanyaan Anda "Berapa nilai tukarnya?" tidak akan dapat dijawab karena penelusuran reguler tidak akan tahu bahwa Anda menginginkan nilai tukar Meksiko. Demikian pula, tanpa tindak lanjut, tidak akan ada konteks yang diperlukan untuk memberi Anda suhu khusus untuk Meksiko.

Saat Anda bertanya "Kapan waktu terbaik untuk berlibur di Meksiko?", selain menjawab pertanyaan Anda, jawaban dan pertanyaan lanjutan dapat menyarankan pertanyaan lain yang mungkin Anda ajukan, seperti "Apa bulan termurah untuk berlibur di Meksiko?" dan "Apa saja bulan turis di Meksiko?".

Setelah fitur pertanyaan terkait diaktifkan, pertanyaan akan ditampilkan sebagai string di ConverseConversationResponse.

Tentang sesi

Untuk memahami cara kerja tindak lanjut di Vertex AI Search, Anda perlu memahami sesi.

Sesi terdiri dari kueri teks yang diberikan oleh pengguna dan respons yang diberikan oleh Vertex AI Search.

Pasangan kueri dan respons ini terkadang disebut sebagai giliran. Dalam contoh sebelumnya, giliran kedua terdiri dari "Berapa nilai tukarnya?" dan "1 USD sama dengan sekitar 17,65 peso Meksiko".

Sesi disimpan dengan aplikasi. Dalam aplikasi, sesi diwakili oleh resource sesi.

Selain berisi pesan kueri dan respons, resource sesi memiliki:

  • Nama unik (ID sesi).

  • Status (sedang berlangsung atau selesai).

  • ID pseudo pengguna, yang merupakan ID pengunjung yang melacak pengguna. Nilai ini dapat ditetapkan secara terprogram.

  • Waktu mulai dan waktu berakhir.

  • Giliran, yang merupakan pasangan jawaban kueri.

Menyimpan informasi sesi dan mendapatkan respons

Anda dapat menggunakan command line untuk membuat respons dan jawaban penelusuran serta menyimpannya, bersama dengan setiap kueri dalam sesi.

REST

Untuk menggunakan command line guna membuat sesi dan menghasilkan respons dari input pengguna, ikuti langkah-langkah berikut:

  1. Tentukan aplikasi tempat Anda ingin menyimpan sesi:

    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/sessions" \
      -d '{
            "userPseudoId": "USER_PSEUDO_ID"
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.

    • APP_ID: ID aplikasi Vertex AI Search.

    • USER_PSEUDO_ID: Ini adalah ID unik untuk melacak pengunjung penelusuran. Misalnya, Anda dapat menerapkannya dengan cookie HTTP, yang mengidentifikasi pengunjung secara unik di satu perangkat.

    Contoh perintah dan hasil

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/sessions"
    -d '{
    "userPseudoId": "test_user"
    }'
    
    { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }
  2. Catat ID sesi, angka di akhir kolom name: dalam respons JSON. Dalam contoh hasil, ID-nya adalah 5386462384953257772. Anda memerlukan ID ini di langkah berikutnya.

  3. Buat jawaban dan tambahkan ke sesi di aplikasi Anda:

    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:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
              "searchSpec":{ "searchParams": {"filter": "FILTER"} }
    }'
    
    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • SESSION_ID: ID untuk sesi yang Anda buat di langkah 1. Ini adalah digit di akhir kolom name:, yang dicatat pada langkah 2. Untuk sesi, gunakan ID sesi yang sama di setiap giliran.
    • FILTER: kolom teks untuk memfilter penelusuran menggunakan ekspresi filter. Nilai defaultnya adalah string kosong. Cara Anda membuat filter bervariasi, bergantung pada apakah Anda memiliki data tidak terstruktur dengan metadata, data terstruktur, atau data situs. Untuk informasi selengkapnya, lihat Memfilter penelusuran umum untuk data terstruktur atau tidak terstruktur dan Memfilter penelusuran situs.

    Contoh perintah dan hasil

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)"
    -H "Content-Type: application/json"
    "https://discoveryengine.googleapis.com/v1/projects/my-project-123/locations/global/collections/default_collection/engines/my-app/servingConfigs/default_search:answer"
    -d '{
    "query": { "text": "Compare bigquery with spanner database?"},
    "session":  "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943",
    }'
        
    { "answer": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072", "state": "SUCCEEDED", "answerText": "BigQuery and Spanner are both powerful tools that can be used together to handle transactional and analytical workloads. Spanner is a fully managed relational database optimized for transactional workloads, while BigQuery is a serverless data warehouse designed for business agility. Spanner provides seamless replication across regions in Google Cloud and processes over 1 billion requests per second at peak. BigQuery analyzes over 110 terabytes of data per second. Users can leverage federated queries to read data from Spanner and write to a native BigQuery table. \n", "steps": [ { "state": "SUCCEEDED", "description": "Rephrase the query and search.", "actions": [ { "searchAction": { "query": "Compare bigquery with spanner database?" }, "observation": { "searchResults": [ { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/ecc0e7547253f4ca3ff3328ce89995af", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/how-spanner-and-bigquery-work-together-handle-transactional-and-analytical-workloads", "title": "How Spanner and BigQuery work together to handle transactional and analytical workloads | Google Cloud Blog", "snippetInfo": [ { "snippet": "Using Cloud \u003cb\u003eSpanner\u003c/b\u003e and \u003cb\u003eBigQuery\u003c/b\u003e also allows customers to build their \u003cb\u003edata\u003c/b\u003e clouds using Google Cloud, a unified, open approach to \u003cb\u003edata\u003c/b\u003e-driven transformation ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/d7e238f73608a860e00b752ef80e2941", "uri": "https://cloud.google.com/blog/products/databases/cloud-spanner-gets-stronger-with-bigquery-federated-queries", "title": "Cloud Spanner gets stronger with BigQuery-federated queries | Google Cloud Blog", "snippetInfo": [ { "snippet": "As enterprises compete for market share, their need for real-time insights has given rise to increased demand for transactional \u003cb\u003edatabases\u003c/b\u003e to support \u003cb\u003edata\u003c/b\u003e ...", "snippetStatus": "SUCCESS" } ] }, { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/e10a5a3c267dc61579e7c00fefe656eb", "uri": "https://cloud.google.com/blog/topics/developers-practitioners/replicating-cloud-spanner-bigquery-scale", "title": "Replicating from Cloud Spanner to BigQuery at scale | Google Cloud Blog", "snippetInfo": [ { "snippet": "... \u003cb\u003eSpanner data\u003c/b\u003e into \u003cb\u003eBigQuery\u003c/b\u003e for analytics. In this post, you will learn how to efficiently use this feature to replicate large tables with high throughput ...", "snippetStatus": "SUCCESS" } ] }, ... { "document": "projects/123456/locations/global/collections/default_collection/dataStores/my-data-store/branches/0/documents/8100ad36e1cac149eb9fc180a41d8f25", "uri": "https://cloud.google.com/blog/products/gcp/from-nosql-to-new-sql-how-spanner-became-a-global-mission-critical-database", "title": "How Spanner became a global, mission-critical database | Google Cloud Blog", "snippetInfo": [ { "snippet": "... SQL \u003cb\u003evs\u003c/b\u003e. NoSQL dichotomy may no longer be relevant." The \u003cb\u003eSpanner\u003c/b\u003e SQL query processor, while recognizable as a standard implementation, has unique ...", "snippetStatus": "SUCCESS" } ] } ] } } ] } ] }, "session": { "name": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943", "state": "IN_PROGRESS", "userPseudoId": "test_user", "turns": [ { "query": { "queryId": "projects/123456/locations/global/questions/741830", "text": "Compare bigquery with spanner database?" }, "answer": "projects/123456/locations/global/collections/default_collection/engines/my-app/sessions/16002628354770206943/answers/4861507376861383072" } ], "startTime": "2024-09-13T18:47:10.465311Z", "endTime": "2024-09-13T18:47:10.465311Z" }, "answerQueryToken": "NMwKDAjFkpK3BhDU24uZAhIkNjZlNDIyZWYtMDAwMC0yMjVmLWIxMmQtZjQwMzA0M2FkYmNj" }
  4. Ulangi langkah 3 untuk setiap kueri baru dalam sesi.

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


def create_session(
    project_id: str,
    location: str,
    engine_id: str,
    user_pseudo_id: str,
) -> discoveryengine.Session:
    """Creates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        user_pseudo_id: A unique identifier for tracking visitors. For example, this
          could be implemented with an HTTP cookie, which should be able to
          uniquely identify a visitor on a single device.
    Returns:
        discoveryengine.Session: The newly created Session.
    """

    client = discoveryengine.ConversationalSearchServiceClient()

    session = client.create_session(
        # The full resource name of the engine
        parent=f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}",
        session=discoveryengine.Session(user_pseudo_id=user_pseudo_id),
    )

    # Send Session name in `answer_query()`
    print(f"Session: {session.name}")
    return session

Mendapatkan sesi dari penyimpanan data

Perintah berikut menunjukkan cara memanggil metode get dan mendapatkan sesi dari penyimpanan data.

REST

Untuk mendapatkan sesi dari penyimpanan data, lakukan hal berikut:

  1. Jalankan perintah curl berikut:

    curl -X GET -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/sessions/SESSION_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • SESSION_ID: ID sesi yang ingin Anda dapatkan.

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


def get_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Retrieves a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.ConversationalSearchServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = client.get_session(name=name)

    print(f"Session details: {session}")
    return session

Menghapus sesi dari aplikasi

Perintah berikut menunjukkan cara memanggil metode delete dan menghapus sesi dari penyimpanan data.

Secara default, sesi yang sudah lebih dari 60 hari akan otomatis dihapus. Namun, jika Anda ingin menghapus sesi tertentu—misalnya, jika sesi tersebut berisi konten sensitif, gunakan panggilan API ini untuk menghapusnya.

REST

Untuk menghapus sesi dari aplikasi, lakukan langkah-langkah berikut:

  1. Jalankan perintah curl berikut:

    curl -X DELETE -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/sessions/SESSION_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • SESSION_ID: ID sesi yang ingin Anda hapus.

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


def delete_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> None:
    """Deletes a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    """

    client = discoveryengine.ConversationalSearchServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    client.delete_session(name=name)

    print(f"Session {name} deleted.")

Memperbarui sesi

Ada berbagai alasan mengapa Anda mungkin ingin memperbarui sesi. Misalnya, untuk melakukan salah satu hal berikut:

  • Menandai sesi sebagai selesai
  • Menggabungkan pesan dari satu sesi ke sesi lainnya
  • Mengubah ID pseudo pengguna

Perintah berikut menunjukkan cara memanggil metode patch dan memperbarui sesi di penyimpanan data.

REST

Untuk memperbarui sesi dari aplikasi, lakukan hal berikut:

  1. Jalankan perintah curl berikut:

    curl -X PATCH \
      -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/sessions/SESSION_ID?updateMask=state" \
      -d '{
            "state": "NEW_STATE"
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • SESSION_ID: ID sesi yang ingin Anda update.
    • NEW_STATE: nilai baru untuk status—misalnya, IN_PROGRESS.

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
from google.protobuf import field_mask_pb2


def update_session(
    project_id: str,
    location: str,
    engine_id: str,
    session_id: str,
) -> discoveryengine.Session:
    """Updates a session.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
        session_id: The ID of the session.
    Returns:
        discoveryengine.Session: The updated Session.
    """
    client = discoveryengine.ConversationalSearchServiceClient()

    # The full resource name of the session
    name = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}/sessions/{session_id}"

    session = discoveryengine.Session(
        name=name,
        state=discoveryengine.Session.State.IN_PROGRESS,  # Options: IN_PROGRESS, STATE_UNSPECIFIED
    )

    # Fields to Update
    update_mask = field_mask_pb2.FieldMask(paths=["state"])

    session = client.update_session(session=session, update_mask=update_mask)
    print(f"Updated session: {session.name}")
    return session

Mencantumkan semua sesi

Perintah berikut menunjukkan cara memanggil metode list dan mencantumkan sesi di penyimpanan data.

REST

Untuk mencantumkan sesi untuk aplikasi, lakukan hal berikut:

  1. Jalankan perintah curl berikut:

    curl -X GET \
      -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/sessions"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI 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.cloud import discoveryengine_v1 as discoveryengine


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.ConversationalSearchServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Mencantumkan sesi untuk pengguna

Perintah berikut menunjukkan cara memanggil metode list untuk mencantumkan sesi yang terkait dengan pengguna atau pengunjung.

REST

Untuk mencantumkan sesi yang terkait dengan pengguna atau pengunjung, lakukan hal berikut:

  1. Jalankan perintah curl berikut:

    curl -X GET \
      -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/sessions?filter=userPseudoId=USER_PSEUDO_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • USER_PSEUDO_ID: ID pseudo pengguna yang sesi-sesi-nya ingin Anda cantumkan.

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


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.ConversationalSearchServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response

Mencantumkan sesi untuk pengguna dan status

Perintah berikut menunjukkan cara memanggil metode list untuk mencantumkan sesi dalam status tertentu untuk pengguna tertentu.

REST

Untuk mencantumkan sesi untuk pengguna yang terbuka atau ditutup dan dikaitkan dengan pengguna atau pengunjung tertentu, lakukan hal berikut:

  1. Jalankan perintah curl berikut:

    curl -X GET -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/sessions?filter=userPseudoId=USER_PSEUDO_ID%20AND%20state=STATE"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • USER_PSEUDO_ID: ID pseudo pengguna yang sesi-sesi-nya ingin Anda cantumkan.
    • STATE: status sesi: STATE_UNSPECIFIED (tertutup atau tidak diketahui) atau IN_PROGRESS (terbuka).

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


def list_sessions(
    project_id: str,
    location: str,
    engine_id: str,
) -> discoveryengine.ListSessionsResponse:
    """Lists all sessions associated with a data store.

    Args:
        project_id: The ID of your Google Cloud project.
        location: The location of the app.
        engine_id: The ID of the app.
    Returns:
        discoveryengine.ListSessionsResponse: The list of sessions.
    """

    client = discoveryengine.ConversationalSearchServiceClient()

    # The full resource name of the engine
    parent = f"projects/{project_id}/locations/{location}/collections/default_collection/engines/{engine_id}"

    response = client.list_sessions(
        request=discoveryengine.ListSessionsRequest(
            parent=parent,
            filter='state="IN_PROGRESS"',  # Optional: Filter requests by userPseudoId or state
            order_by="update_time",  # Optional: Sort results
        )
    )

    print("Sessions:")
    for session in response.sessions:
        print(session)

    return response