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 kustom menggunakan panggilan metode.

Penelusuran dengan jawaban dan tindak lanjut didasarkan pada metode jawaban. Metode jawaban menggantikan fitur ringkasan dari metode search yang lebih lama dan semua fitur metode converse 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 membuat 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 menghasilkan jawaban yang lebih baik:

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

  • Kemampuan untuk dipasangkan 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 (10 link biru) kepada pengguna dalam milidetik. Anda tidak perlu menunggu jawaban dibuat sebelum Anda 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 jawaban saat:

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

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

Gunakan metode search dalam kasus berikut:

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

  • Anda memiliki salah satu dari hal berikut:

    • Data media atau kesehatan
    • Embedding Anda sendiri
    • Kontrol sinonim atau pengalihan
    • Faset
    • Kode negara pengguna
  • Anda perlu menjelajahi data di penyimpanan data generik.

Gunakan metode jawaban dan penelusuran bersama-sama saat:

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

  • 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 menggambarkan berbagai opsi untuk pengubahan frasa dan klasifikasi kueri.

Pengubahan frasa kueri

Pengubahan frasa kueri aktif secara default. Fitur ini memilih cara terbaik untuk memparafrasakan kueri secara otomatis guna meningkatkan hasil penelusuran. Fitur ini juga dapat menangani kueri yang tidak memerlukan pengubahan kata-kata.

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

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

    Input pengguna Sub-kueri yang dibuat dari kueri kompleks
    Apa pekerjaan dan hobi yang dimiliki Andie Ram dan Arnaud Clément?
    • Pendudukan Andie Ram
    • Arnaud Clément
    • Hobi Andie Ram
    • Hobi Arnaud Clément
  • Mensintesis kueri multigiliran, untuk membuat pertanyaan lanjutan yang sadar konteks dan memiliki status.

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

    Input pengguna Kueri yang disintesis
    Turn 1: laptop untuk sekolah laptop untuk sekolah
    Turn 2: not mac laptop untuk sekolah selain mac
    Turn 3: layar yang lebih besar dan saya juga memerlukan keyboard dan mouse nirkabel laptop layar yang lebih besar untuk sekolah, bukan Mac, dengan keyboard dan mouse nirkabel
    Turn 4: dan ransel untuknya laptop layar yang lebih besar untuk sekolah, bukan Mac, dengan keyboard dan mouse nirkabel serta ransel untuk laptop tersebut
  • Menyederhanakan kueri panjang untuk meningkatkan pengambilan (memerlukan fitur LLM lanjutan).

    Misalnya: Kueri panjang dipersingkat menjadi kueri standar.

    Input pengguna Kueri disederhanakan
    Saya mencoba mencari tahu mengapa tombol \"Tambahkan ke Keranjang\" di situs kami tidak berfungsi dengan baik. 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 multi-langkah

    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
    Setelah berapa tahun sejak didirikan, Google mencapai pendapatan 1 miliar USD? Langkah 1:
    [Pemikiran]: Saya perlu mengetahui kapan Google didirikan, lalu saya dapat mengkueri pendapatannya sejak saat itu.
    [Tindakan] Penelusuran: Kapan Google didirikan?[Amati Hasil Penelusuran]: "1998"

    Langkah 2:
    [Pemikiran]: Sekarang saya perlu mencari tahu pendapatan tahunan Google sejak tahun 1998, dan mencari tahu kapan pertama kali melampaui 1 miliar.
    [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].

    Penalaran multi-langkah memerlukan fitur LLM lanjutan.

Klasifikasi kueri

Opsi klasifikasi kueri adalah untuk mengidentifikasi kueri yang bersifat merugikan dan kueri yang tidak mencari jawaban. Secara default, opsi klasifikasi kueri dinonaktifkan.

Untuk mengetahui informasi selengkapnya tentang kueri yang bersifat merugikan dan tidak mencari jawaban, lihat Mengabaikan kueri yang bersifat merugikan dan Mengabaikan kueri yang tidak mencari ringkasan.

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 pada metode penelusuran. Contoh:

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

  • Gunakan pengantar perintah untuk menyesuaikan jawaban terkait hal-hal seperti intonasi, gaya, dan panjang jawaban. Untuk mengetahui informasi selengkapnya, lihat Menentukan pembuka 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 merugikan atau tidak mencari jawaban.

    Untuk mengetahui informasi selengkapnya tentang kueri yang bersifat memusuhi dan tidak mencari jawaban, lihat Mengabaikan kueri yang bersifat memusuhi dan Mengabaikan kueri yang tidak mencari ringkasan. Kueri yang tidak mencari jawaban (non-answer seeking) juga disebut kueri yang tidak mencari ringkasan (non-summary seeking).

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 klaim didasarkan pada data di penyimpanan data. Untuk mengetahui informasi selengkapnya, lihat Mengembalikan skor dukungan perujukan.

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

  • Hanya berikan jawaban yang memiliki rujukan yang baik. Anda dapat memilih untuk hanya menampilkan jawaban yang memenuhi nilai minimum skor dukungan tertentu. Untuk mengetahui informasi selengkapnya, lihat Hanya tampilkan jawaban yang memiliki rujukan yang kuat.

  • Pilih untuk menampilkan pertanyaan terkait. Pertanyaan terkait adalah saran yang dapat dipilih pengguna Anda, bukan memasukkan pertanyaan mereka sendiri.

  • Menambahkan informasi personalisasi ke kueri sehingga jawaban dapat disesuaikan untuk setiap pengguna. Untuk mengetahui informasi selengkapnya, lihat Mempersonalisasi jawaban.

Untuk menerima jawaban multimodal yang menyertakan diagram atau gambar selain teks, tersedia opsi berikut:

  • Mendapatkan jawaban yang mencakup diagram dan grafik yang memetakan data yang ada dalam jawaban. Untuk mengetahui informasi selengkapnya, lihat Membuat diagram untuk jawaban.

  • Mengambil gambar dari penyimpanan data. Jika penyimpanan data berisi gambar, metode jawaban dapat menampilkan gambar dalam jawaban. Gambar dari penyimpanan data juga dapat ditampilkan dalam referensi jika kutipan diminta. Untuk mengetahui informasi selengkapnya, lihat Mengambil gambar yang ada dari penyimpanan data.

Sebelum memulai

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

  • Jika Anda memiliki aplikasi penelusuran terstruktur, tidak terstruktur, atau situs, aktifkan opsi berikut:

    • Fitur edisi Enterprise: Fitur ini memberi Anda akses ke fitur jawaban generatif inti. Hal ini mencakup semua fitur pembuatan jawaban, kecuali fitur jawaban generatif lanjutan, seperti pertanyaan terkait, penyederhanaan kueri, kueri multi-giliran, dan jawaban multimodal yang menampilkan gambar dan diagram.
    • Fitur LLM lanjutan: Fitur ini memberi Anda akses ke fitur jawaban generatif lanjutan yang memerlukan penalaran multi-langkah, penyederhanaan kueri, kueri multi-giliran, pertanyaan terkait, dan jawaban multimodal yang menampilkan gambar dan diagram.
  • Selain itu, jika Anda memiliki penyimpanan data penelusuran situs, aktifkan Pengindeksan situs lanjutan.

Penelusuran dan jawaban (dasar)

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

Perintah ini hanya menampilkan input yang diperlukan. Opsi dibiarkan pada defaultnya.

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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Bandingkan database BigQuery dan Spanner?".

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # 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 panggilan metode answer.

Penelusuran dan jawaban (parafrasa dinonaktifkan)

Perintah berikut menunjukkan cara memanggil metode answer dan menampilkan jawaban yang dihasilkan serta daftar hasil penelusuran. Jawaban dapat berbeda dari jawaban sebelumnya karena opsi pengubahan kata-kata dinonaktifkan.

REST

Untuk menelusuri dan mendapatkan hasil dengan jawaban yang dihasilkan tanpa menerapkan pengubahan frasa 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Bandingkan database BigQuery dan Spanner?".

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Penelusuran dan jawaban (tentukan langkah maksimum)

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

REST

Untuk menelusuri dan mendapatkan hasil dengan jawaban yang dihasilkan yang memungkinkan hingga lima langkah pengubahan kata-kata, 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Bandingkan database BigQuery dan Spanner?".
    • MAX_REPHRASE: jumlah maksimum langkah parafrasa. 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # 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 menanyakan apakah kueri bersifat merugikan, tidak mencari jawaban, atau tidak keduanya.

Respons mencakup jenis klasifikasi untuk kueri, tetapi jawaban itu sendiri tidak terpengaruh oleh klasifikasi. Jika ingin mengubah perilaku jawaban sesuai dengan jenis kueri, Anda dapat melakukannya di fase jawaban. Lihat Mengabaikan kueri adversarial dan Mengabaikan kueri yang tidak mencari ringkasan.

REST

Untuk menentukan apakah kueri bersifat merugikan 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # 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, meningkatkan, dan memfilter, 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 terkait 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "Bandingkan database BigQuery dan Spanner?"
    • MAX_RETURN_RESULTS: jumlah hasil penelusuran yang akan ditampilkan. Nilai defaultnya adalah 10. Nilai maksimumnya adalah 25.
    • FILTER: filter menentukan dokumen mana yang dikueri. Jika metadata dokumen memenuhi spesifikasi filter, maka dokumen akan dikueri. Untuk mengetahui informasi selengkapnya, termasuk sintaksis filter, lihat Memfilter penelusuran khusus untuk data terstruktur atau tidak terstruktur.
    • BOOST_SPEC: spesifikasi peningkat memungkinkan Anda meningkatkan dokumen tertentu dalam hasil penelusuran, yang dapat memengaruhi jawaban. Untuk mengetahui informasi selengkapnya, termasuk sintaksis untuk spesifikasi peningkatan, lihat Meningkatkan hasil penelusuran.
    • ORDER_BY: urutan dokumen ditampilkan. Dokumen dapat diurutkan berdasarkan kolom dalam objek Document. 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 mengetahui informasi selengkapnya, lihat Mengurai dan mengelompokkan dokumen dan ContentSearchSpec. Kolom ini hanya tersedia di API versi v1alpha.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Perintah fase jawaban

Bagian ini menunjukkan cara menyesuaikan panggilan metode answer. Anda dapat menggabungkan opsi berikut sesuai kebutuhan.

Mengabaikan kueri yang bersifat menyerang dan kueri yang tidak mencari jawaban

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

REST

Untuk melewati penjawaban kueri yang bersifat pertentangan 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

    # 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 seberapa relevan hasil dengan kueri. Jika tidak ada hasil yang dianggap cukup relevan, Anda dapat memilih untuk menampilkan jawaban pengganti, yaitu "We do not have a summary for your query.", daripada membuat jawaban dari hasil yang tidak relevan atau kurang relevan.

Perintah berikut menunjukkan cara menampilkan jawaban pengganti jika hasil tidak relevan saat memanggil metode answer.

REST

Untuk menampilkan jawaban pengganti jika tidak ada hasil yang relevan, 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Mengembalikan skor dukungan perujukan

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

Untuk mengetahui informasi umum tentang perujukan di Vertex AI, lihat Memeriksa perujukan 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,
            }
          }'
    

    Ganti kode berikut:

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

Hanya menampilkan jawaban yang memiliki dasar yang kuat

Perintah berikut menunjukkan cara menampilkan hanya jawaban yang dianggap memiliki dasar yang kuat dalam korpus, informasi di penyimpanan data. Jawaban yang tidak memiliki dasar yang kuat akan difilter.

Anda memilih nilai minimum atau maksimum untuk skor dukungan perujukan. Kemudian, jawaban hanya ditampilkan jika memenuhi atau melampaui 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 Anda.

Untuk mengetahui informasi umum tentang perujukan di Vertex AI, lihat Memeriksa perujukan 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • FILTER_LEVEL: enumerasi untuk memfilter jawaban berdasarkan skor dukungan perujukan. Opsinya adalah: FILTERING_LEVEL_LOW dan FILTERING_LEVEL_HIGH. Jika filteringLevel tidak disertakan, tidak ada filter skor dukungan yang diterapkan pada jawaban.

Tentukan 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Menentukan pembukaan kustom

Perintah berikut menunjukkan cara menetapkan pengantar untuk jawaban yang dihasilkan. Pengantar berisi petunjuk bahasa alami untuk menyesuaikan jawaban. Anda dapat meminta penyesuaian seperti panjang, tingkat detail, gaya output (seperti "sederhana"), bahasa output, fokus jawaban, dan format (seperti tabel, poin-poin, dan XML). Misalnya, pembukaannya bisa berupa "Jelaskan seperti Anda adalah anak berusia sepuluh tahun".

Pengantar dapat berdampak signifikan pada kualitas jawaban yang dihasilkan. Untuk mengetahui informasi tentang apa yang harus ditulis dalam kata pengantar dan contoh kata pengantar yang baik, lihat Tentang kata 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Metode jawaban dapat menyarankan pertanyaan terkait, yang dapat dipilih pengguna daripada memasukkan pertanyaan mereka sendiri. Misalnya, saat Anda bertanya "Kapan waktu terbaik untuk berlibur di Meksiko?", selain menjawab pertanyaan Anda, metode jawaban dapat menyarankan pertanyaan lain yang mungkin Anda ajukan, seperti "Bulan apa yang paling murah untuk berlibur di Meksiko?" dan "Bulan apa saja yang ramai turis di Meksiko?".

Untuk menerima pertanyaan terkait, Anda harus menentukan penyertaannya dengan setiap kueri, dan pertanyaan tersebut ditampilkan sebagai array string dalam respons.

Sebelum memulai

Pastikan Anda telah mengaktifkan fitur LLM lanjutan untuk aplikasi.

Prosedur

Perintah berikut menunjukkan cara meminta agar pertanyaan terkait disertakan dengan jawaban.

REST

Untuk mendapatkan pertanyaan terkait dengan jawaban yang dihasilkan:

  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"},
            "relatedQuestionsSpec": { "enable": true }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran. Misalnya, "jenis data apa yang dapat saya impor ke Vertex AI Search?".

Sertakan kutipan

Perintah berikut menunjukkan cara meminta kutipan disertakan dalam 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Menetapkan kode bahasa jawaban

Perintah berikut menunjukkan cara menyetel 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • ANSWER_LANGUAGE_CODE: kode bahasa untuk jawaban. Gunakan tag bahasa yang ditentukan oleh BCP47: Tags for Identifying Languages.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

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


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-2.0-flash-001/answer_gen/v1",  # 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,
        user_pseudo_id="user-pseudo-id",  # Optional: Add user pseudo-identifier for queries.
    )

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

    # Handle the response
    print(response)

    return response

Mempersonalisasi jawaban

Jika ada informasi spesifik tentang pengguna yang tersedia—misalnya, data dalam profil, Anda dapat menentukan informasi tersebut dalam objek endUserMetadata sehingga hasil kueri dapat dipersonalisasi untuk pengguna.

Misalnya, jika pengguna yang login menelusuri informasi tentang mengupgrade ponsel, informasi dari profilnya, seperti model ponsel saat ini dan paket seluler, memberikan informasi yang dapat mempersonalisasi jawaban yang dihasilkan.

Untuk menambahkan informasi pribadi tentang pengguna yang membuat kueri dan untuk membuat jawaban yang mempertimbangkan informasi pribadi tersebut, 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"},
        "endUserSpec": {
           "endUserMetadata": [
             {
               "chunkInfo": {
                  "content": "PERSONALIZED_INFO",
                  "documentMetadata":  { "title": "INFO_DESCRIPTION"}
               }
             }
           ]
        }
      }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas yang berisi pertanyaan atau kueri penelusuran.
    • PERSONALIZATION_INFO: string yang berisi informasi khusus untuk pengguna yang membuat kueri. Misalnya, This customer has a Pixel 6 Pro purchased over a period of 24-months starting 2023-01-15. This customer is on the Business Plus International plan. No payment is due at this time. Batas panjang untuk string ini adalah 8.000 karakter.
    • INFO_DESCRIPTION: string yang secara singkat mendeskripsikan informasi personalisasi—misalnya, Customer profile data, including model, plan, and billing status. Model menggunakan deskripsi ini dan informasi personalisasi saat membuat jawaban yang disesuaikan untuk kueri.

Membuat diagram untuk jawaban

Metode answer dapat membuat diagram dan menampilkannya sebagai bagian dari jawaban atas kueri.

Anda dapat secara khusus meminta agar jawaban menyertakan diagram, misalnya, "Plot the year-on-year growth rate of small business payments over years with available data". Jika sistem menentukan bahwa data yang memadai tersedia, diagram akan ditampilkan. Biasanya, beberapa teks jawaban ditampilkan bersama dengan diagram.

Selain itu, jika ada cukup data untuk membuat diagram, metode jawaban dapat menampilkan diagram meskipun kueri tidak secara eksplisit meminta diagram. Misalnya, "Berapa peningkatan skor HDI yang terkait dengan akses yang lebih besar ke air minum bersih dalam dekade antara tahun 2010 dan 2020?"

Hanya satu diagram yang dibuat per jawaban. Namun, diagram tersebut mungkin merupakan diagram komposit, yang berisi diagram kecil lainnya. Contoh diagram komposit:

diagram gabungan berisi empat diagram yang lebih kecil

Batasan

Kueri harus dalam bahasa Inggris.

Skenario kegagalan umum

Anda tidak selalu mendapatkan gambar yang ditampilkan bersama jawaban Anda. Jika tidak ada data yang cukup, angka tidak dapat dibuat.

Skenario kegagalan lainnya mencakup kegagalan dan waktu tunggu habis saat eksekusi kode. Jika salah satu dari hal ini terjadi, ubah susunan kata kueri Anda dan coba lagi.

Sebelum memulai

Sebelum menjalankan kueri yang meminta diagram yang dibuat, lakukan hal berikut:

  • Pastikan Anda telah mengaktifkan fitur LLM lanjutan untuk aplikasi.

  • Pastikan Anda menggunakan model Gemini 2.0 atau yang lebih baru. Untuk mengetahui informasi tentang model, lihat Versi dan siklus proses model pembuatan jawaban.

  • Jika Anda memiliki penyimpanan data tidak terstruktur yang mencakup dokumen dengan banyak tabel dan gambar, aktifkan Pengurai tata letak. Meskipun tidak benar-benar diperlukan, hal ini memberikan hasil yang berkualitas lebih baik.

Prosedur

REST

Panggil metode answer sebagai berikut untuk menampilkan jawaban yang dapat mencakup diagram yang dibuat dari data di penyimpanan data:

  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/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
             },
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas dalam bahasa Inggris yang berisi pertanyaan atau kueri penelusuran.
    • MODEL_VERSION: Versi model gemini-2.0-flash-001/answer_gen/v1 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Versi dan siklus proses model pembuatan jawaban.
    • IMAGE_SOURCE: enumerasi untuk meminta agar jawaban menyertakan diagram yang dibuat, FIGURE_GENERATION_ONLY, atau agar jawaban dapat menyertakan diagram yang dibuat atau gambar yang ada dari penyimpanan data, ALL_AVAILABLE_SOURCES.

Mengambil gambar yang ada dari penyimpanan data

Anda dapat memilih agar gambar dari penyimpanan data ditampilkan bersama jawaban dan dalam referensi kutipan. Penyimpanan data harus berupa penyimpanan data tidak terstruktur dengan parser tata letak diaktifkan.

Untuk mendapatkan diagram dalam jawaban yang ditampilkan, Anda harus mengaktifkan fitur LLM lanjutan.

Jika imageSource adalah CORPUS_IMAGE_ONLY atau ALL_AVAILABLE_SOURCES, maka metode answer dapat mengambil gambar dari penyimpanan data sebagaimana mestinya. Namun, mengaktifkan opsi ini tidak berarti bahwa gambar akan selalu ditampilkan.

Anda akan mendapatkan satu gambar (maksimum) per jawaban. Kutipan dapat berisi beberapa gambar.

Batasan

  • Aplikasi yang Anda gunakan harus terhubung ke penyimpanan data tidak terstruktur. Gambar tidak dapat ditampilkan dari situs atau dari penyimpanan data terstruktur.

  • Kueri harus dalam bahasa Inggris.

  • Anotasi gambar melalui parser tata letak harus diterapkan ke penyimpanan data. Untuk mengetahui informasi tentang parser tata letak, lihat Mem-parsing dan mengelompokkan dokumen.

Prosedur

REST

Panggil metode answer sebagai berikut untuk menampilkan jawaban yang dapat menyertakan gambar dari penyimpanan data dalam jawaban:

  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/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:answer" \
      -d '{
            "query": { "text": "QUERY"},
            "answerGenerationSpec": {
              "model_spec": {
                 "model_version": "MODEL_VERSION"
              },
              includeCitations: true,
              "multimodalSpec": {
                 "imageSource": "IMAGE_SOURCE"
                 }
            }
          }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search yang ingin Anda kueri.
    • QUERY: string teks bebas dalam bahasa Inggris yang berisi pertanyaan atau kueri penelusuran.
    • MODEL_VERSION: Versi model gemini-2.0-flash-001/answer_gen/v1 atau yang lebih baru. Untuk mengetahui informasi selengkapnya, lihat Versi dan siklus proses model pembuatan jawaban.
    • IMAGE_SOURCE: enumerasi untuk meminta agar jawaban menyertakan gambar dari penyimpanan data, CORPUS_IMAGE_ONLY, atau agar jawaban dapat menyertakan salah satu gambar dari penyimpanan data atau diagram yang dihasilkan, ALL_AVAILABLE_SOURCES.

Perintah untuk pertanyaan lanjutan

Tindak lanjut adalah kueri multi-turn. Setelah kueri pertama dalam sesi lanjutan, "giliran" berikutnya mempertimbangkan interaksi sebelumnya. Dengan tindak lanjut, metode jawaban juga dapat menyarankan pertanyaan terkait, yang dapat dipilih pengguna daripada memasukkan pertanyaan tindak lanjut mereka sendiri. Untuk mendapatkan saran pertanyaan terkait, Anda harus mengaktifkan fitur LLM lanjutan.

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

Contoh sesi lanjutan

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

  • Giliran 1:

    • Anda: Kapan waktu terbaik dalam setahun untuk berlibur di Meksiko?

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

  • Giliran 2:

    • Anda: Berapa nilai tukar yang berlaku?

    • Jawaban dengan tindak lanjut: 1 USD setara dengan sekitar 17,65 peso Meksiko.

  • Giliran 3:

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

    • Jawaban dengan tindak lanjut: Suhu rata-rata bervariasi dari 70-78 °F. Rata-rata suhu di Cancun adalah ~ 77°F.

Tanpa tindak lanjut, pertanyaan Anda "Berapa nilai tukar?" 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 memberikan suhu khusus untuk Meksiko.

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. Di 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. Jika dipetakan ke ID pseudo pengguna di peristiwa pengguna aplikasi Anda, model ini dapat membantu Anda menayangkan hasil yang dipersonalisasi untuk pengguna.

  • Waktu mulai dan waktu berakhir.

  • Giliran, yang merupakan pasangan jawaban kueri.

Sebelum memulai

Sebelum menjalankan kueri yang meminta pertanyaan lanjutan, pastikan Anda telah mengaktifkan fitur LLM lanjutan untuk aplikasi.

Menyimpan informasi sesi dan mendapatkan respons

Anda dapat menggunakan command line untuk membuat respons dan jawaban penelusuran dan untuk menyimpannya, beserta 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 Google Cloud project Anda.

    • APP_ID: ID aplikasi Vertex AI Search.

    • USER_PSEUDO_ID: string yang dienkode UTF-8, yang berfungsi sebagai ID unik yang dipseudonimkan yang melacak pengguna. Panjang maksimumnya adalah 128 karakter. Google sangat merekomendasikan penggunaan kolom ini karena dapat meningkatkan performa model dan kualitas personalisasi. Anda dapat menggunakan cookie HTTP untuk kolom ini, yang mengidentifikasi pengunjung secara unik di satu perangkat. Beberapa pertimbangan penting adalah sebagai berikut:

      • ID ini tidak berubah saat pengunjung login atau logout dari situs.
      • Kolom ini tidak boleh disetel ke ID yang sama untuk beberapa pengguna. Jika tidak, ID pengguna yang sama dapat menggabungkan histori peristiwa pengguna yang berbeda dan menurunkan kualitas model.
      • Kolom ini tidak boleh menyertakan informasi identitas pribadi (PII).
      • Untuk permintaan penelusuran atau penjelajahan tertentu, kolom ini harus dipetakan ke kolom userPseudoId yang sesuai di peristiwa pengguna.

      Untuk informasi selengkapnya, lihat userPseudoId.

    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, yaitu angka di akhir kolom name: dalam respons JSON. Dalam hasil contoh, ID-nya adalah 5386462384953257772. Anda memerlukan ID ini pada 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"} }
    }'
    

    Ganti kode berikut:

    • PROJECT_ID: ID Google Cloud project 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 mengetahui informasi selengkapnya, lihat Memfilter penelusuran khusus 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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 Google Cloud project 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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 lebih lama 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 Google Cloud project 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 Aplikasi AI.

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • SESSION_ID: ID sesi yang ingin Anda perbarui.
    • NEW_STATE: nilai baru untuk status—misalnya, IN_PROGRESS.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • USER_PSEUDO_ID: ID semu pengguna yang sesinya ingin Anda daftarkan.

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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 pengguna yang terbuka atau tertutup dan terkait 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 Google Cloud project Anda.
    • APP_ID: ID aplikasi Vertex AI Search.
    • USER_PSEUDO_ID: ID semu pengguna yang sesinya ingin Anda daftarkan.
    • STATE: status sesi: STATE_UNSPECIFIED (ditutup atau tidak diketahui) atau IN_PROGRESS (dibuka).

Python

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

Untuk melakukan autentikasi ke Aplikasi AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

from google.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