Membuat jawaban yang dirujuk dengan RAG

Sebagai bagian dari pengalaman Retrieval Augmented Generation (RAG) di Vertex AI Agent Builder, Anda dapat membuat jawaban yang berdasar pada perintah berdasarkan sumber dasar berikut:

  • Google Penelusuran: Gunakan Perujukan dengan Google Penelusuran jika Anda ingin menghubungkan model dengan pengetahuan dunia, berbagai topik, atau informasi terbaru di internet. Perujukan dengan Google Penelusuran mendukung pengambilan dinamis yang memberi Anda opsi untuk membuat Hasil dengan Rujukan dengan Google Penelusuran hanya jika diperlukan. Oleh karena itu, konfigurasi pengambilan dinamis mengevaluasi apakah perintah memerlukan pengetahuan tentang peristiwa terbaru dan memungkinkan Perujukan dengan Google Penelusuran. Untuk informasi selengkapnya, lihat Pengambilan dinamis.
  • Teks inline: Gunakan dasar dengan teks inline untuk melandasi jawaban dalam potongan teks yang disebut teks fakta yang disediakan dalam permintaan. Teks fakta adalah pernyataan yang diberikan pengguna yang dianggap faktual untuk permintaan tertentu. Model tidak memeriksa keaslian teks fakta.
  • Penyimpanan data Vertex AI Search: Gunakan grounding dengan Vertex AI Search jika Anda ingin menghubungkan model ke dokumen perusahaan dari penyimpanan data Vertex AI Search.

Halaman ini menjelaskan cara membuat jawaban yang berdasar berdasarkan sumber dasar ini menggunakan pendekatan berikut:

Selain itu, Anda dapat memilih untuk melakukan streaming jawaban dari model. Membuat jawaban yang berdasar dengan streaming adalah fitur Eksperimental.

Anda dapat menggunakan metode lain untuk menghasilkan jawaban yang berdasar, agar sesuai dengan aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat Vertex AI API untuk membuat pengalaman penelusuran dan RAG.

Terminologi

Sebelum Anda menggunakan metode pembuatan jawaban yang berdasar, sebaiknya pahami input dan output, cara menyusun permintaan, dan terminologi terkait RAG.

Istilah RAG

RAG adalah metodologi yang memungkinkan Model Bahasa Besar (LLM) menghasilkan respons yang didasarkan pada sumber data pilihan Anda. Ada dua tahap dalam RAG:

  1. Pengambilan: Mendapatkan fakta yang paling relevan dengan cepat dapat menjadi masalah penelusuran yang umum. Dengan RAG, Anda dapat dengan cepat mengambil fakta yang penting untuk menghasilkan jawaban.
  2. Pembuatan: Fakta yang diambil digunakan oleh LLM untuk menghasilkan respons yang berisi rujukan.

Oleh karena itu, metode pembuatan jawaban yang berdasar mengambil fakta dari sumber yang berdasar dan menghasilkan jawaban yang berdasar.

Data input

Metode pembuatan jawaban yang berdasar memerlukan input berikut dalam permintaan:

  • Peran: Pengirim teks tertentu yang merupakan pengguna (user) atau model (model).

  • Text: Jika peran adalah user, teks adalah perintah dan jika peran adalah model, teks adalah jawaban yang beralasan. Cara Anda menentukan peran dan teks dalam permintaan ditentukan sebagai berikut:

    • Untuk pembuatan jawaban satu giliran, pengguna mengirim teks perintah dalam permintaan dan model mengirim teks jawaban dalam respons.
    • Untuk pembuatan jawaban multi-giliran, permintaan berisi pasangan perintah-jawaban untuk semua giliran sebelumnya dan teks perintah dari pengguna untuk giliran saat ini. Oleh karena itu, dalam permintaan tersebut, peran adalah user untuk teks perintah dan model untuk teks jawaban.
  • Petunjuk sistem: Pengantar untuk perintah Anda yang mengatur perilaku model dan mengubah output yang sesuai. Misalnya, Anda dapat menambahkan persona ke jawaban yang dihasilkan atau menginstruksikan model untuk memformat teks output dengan cara tertentu. Untuk pembuatan jawaban multi-giliran, Anda harus memberikan petunjuk sistem untuk setiap giliran. Untuk mengetahui informasi selengkapnya, lihat Menggunakan petunjuk sistem.

  • Sumber dasar: Sumber tempat jawaban didasarkan dan dapat berupa satu atau beberapa hal berikut:

    • Google Penelusuran: Mendukung jawaban dengan hasil Google Penelusuran. Jika sumber perujukan adalah Google Penelusuran, Anda dapat menentukan konfigurasi pengambilan dinamis dengan nilai minimum pengambilan dinamis. Untuk informasi selengkapnya, lihat Pengambilan dinamis.

    • Teks inline: Dasari jawaban dengan teks fakta yang disediakan dalam permintaan. Teks fakta adalah pernyataan yang diberikan pengguna yang dianggap faktual untuk permintaan tertentu. Model tidak memeriksa keaslian teks fakta. Anda dapat memberikan maksimum 100 teks fakta di setiap sumber teks inline. Teks fakta dapat didukung menggunakan atribut meta, seperti judul, penulis, dan URI. Atribut meta ini ditampilkan dalam respons saat mengutip bagian yang mendukung jawaban.

    • Penyimpanan data Vertex AI Search: Mendasari jawaban dalam dokumen dari penyimpanan data Vertex AI Search. Anda tidak dapat menentukan datastore penelusuran situs sebagai sumber dasar.

    Dalam permintaan tertentu, Anda dapat memberikan sumber teks inline dan sumber penyimpanan data Vertex AI Search. Anda tidak dapat menggabungkan Google Penelusuran dengan salah satu sumber ini. Oleh karena itu, jika ingin mendasari jawaban dengan hasil Google Penelusuran, Anda harus mengirim permintaan terpisah yang menentukan Google Penelusuran sebagai satu-satunya sumber dasar.

    Anda dapat memberikan maksimum 10 sumber pentanahan dalam urutan apa pun. Misalnya, Anda memberikan sumber pentanahan dengan jumlah berikut, dalam urutan berikut untuk mendapatkan total 10 sumber pentanahan:

    • Tiga sumber teks inline, yang masing-masing dapat berisi maksimum 100 teks fakta
    • Enam penyimpanan data Vertex AI Search
    • Satu sumber teks inline, yang berisi maksimum 100 teks fakta

    Setiap sumber diberi indeks sesuai urutan yang ditentukan dalam permintaan. Misalnya, jika Anda telah menentukan kombinasi sumber dalam permintaan, indeks sumber akan ditetapkan seperti yang diilustrasikan dalam tabel berikut:

    Sumber grounding Indeks
    Teks inline #1 0
    Teks inline #2 1
    Penyimpanan data Vertex AI Search #1 2
    Teks inline #3 3
    Penyimpanan data Vertex AI Search #2 4

    Indeks ini dikutip dalam respons dan berguna saat melacak provenans.

  • Spesifikasi pembuatan: Spesifikasi untuk konfigurasi model yang terdiri dari informasi berikut:

    • ID Model: Menentukan model Vertex AI Gemini yang akan digunakan untuk pembuatan jawaban. Untuk mengetahui daftar model yang dapat Anda gunakan untuk membuat jawaban yang berdasar, lihat Model yang didukung.

    • Parameter model: Tentukan parameter yang dapat Anda tetapkan untuk model yang Anda pilih untuk digunakan. Parameter ini adalah: bahasa, suhu, top-P, dan top-K. Untuk mengetahui detail tentang parameter ini, lihat Parameter model Gemini.

  • Kode bahasa: Bahasa jawaban yang dihasilkan umumnya disetel agar cocok dengan bahasa perintah. Jika tidak ada satu bahasa dalam perintah (misalnya, jika perintah sangat singkat dan dapat valid dalam beberapa bahasa), kolom kode bahasa akan menentukan bahasa jawaban.

    Untuk mengetahui daftar kode bahasa, lihat Bahasa.

  • Lintang dan bujur: Menentukan lintang dan bujur pengguna. Jika kueri berisi pertanyaan khusus lokasi, seperti "Temukan kedai kopi di dekat saya", kolom ini akan digunakan. Jika bahasa kueri tidak dapat ditentukan dan kode bahasa tidak ditetapkan, lintang dan bujur akan digunakan untuk menentukan bahasa jawaban.

Data output

Respons yang dihasilkan model disebut kandidat dan berisi data berikut. Tidak semua kolom mungkin ada dalam output.

  • Peran: Pengirim jawaban yang berdasar. Respons selalu berisi teks jawaban yang beralasan. Oleh karena itu, peran dalam respons selalu berupa model.

  • Teks: Jawaban yang berdasar.

  • Skor dasar: Nilai float dalam rentang [0, 1] yang menunjukkan seberapa baik jawaban didasarkan pada sumber tertentu.

  • Metadata grounding: Metadata tentang sumber grounding. Metadata grounding berisi informasi berikut:

    • Dukungan bagian: Daftar bagian yang mendukung jawaban. Setiap bagian dukungan diberi indeks bagian dukungan yang berguna saat melacak asal. Setiap bagian dukungan berisi hal berikut:

      • Teks bagian: Bagian teks yang dikutip secara verbatim dari sumber tempat jawaban atau bagian jawaban (disebut teks klaim) diekstrak. Hal ini mungkin tidak selalu ada dalam respons.
      • Sumber: Indeks yang ditetapkan ke sumber dalam permintaan.
      • Metadata sumber: Metadata tentang bagian. Bergantung pada sumbernya, metadata sumber dapat berupa salah satu dari berikut:

        • Untuk sumber inline, metadata dapat berupa detail tambahan yang ditentukan dalam permintaan seperti judul, penulis, atau URI.
        • Untuk penyimpanan data Vertex AI Search, metadata dapat berupa ID dokumen, judul dokumen, URI (lokasi Cloud Storage), atau nomor halaman.
        • Untuk Perujukan dengan Google Penelusuran, saat hasil yang dirujuk dibuat, metadata berisi URI yang mengalihkan ke penayang konten yang digunakan untuk membuat hasil yang dirujuk. Metadata juga berisi domain penayang. URI yang diberikan tetap dapat diakses hingga 30 hari setelah hasil yang di-grounding dihasilkan.
    • Dukungan dasar: Informasi dasar untuk klaim dalam jawaban. Dukungan pentanahan berisi informasi berikut:

      • Teks klaim: Jawaban atau bagian dari jawaban yang didukung dengan teks bagian dukungan.
      • Indeks segmen dukungan: Indeks yang ditetapkan ke segmen dukungan dalam urutan kemunculan segmen dalam daftar segmen dukungan.
      • Kueri penelusuran web: Kueri penelusuran yang disarankan untuk Saran Google Penelusuran.
      • Saran Penelusuran: Jika Anda menerima Saran Google Penelusuran dengan respons, respons tersebut adalah "Hasil dengan Rujukan" yang tunduk pada persyaratan layanan untuk Perujukan dengan Google Penelusuran. Untuk mengetahui informasi selengkapnya, lihat Persyaratan Layanan . Kolom renderedContent dalam kolom searchEntryPoint adalah kode yang disediakan untuk menerapkan Saran Google Penelusuran. Untuk menggunakan Saran Google Penelusuran, lihat Menggunakan Saran Google Penelusuran.

Membuat jawaban yang berdasar dalam satu giliran

Bagian ini menjelaskan cara membuat jawaban yang didasarkan pada sumber berikut:

Mendasari jawaban dalam teks inline dan penyimpanan data Vertex AI Search

Contoh berikut menunjukkan cara mengirim teks perintah dengan menentukan teks inline dan penyimpanan data Vertex AI Search sebagai sumber dasar. Anda tidak dapat menentukan datastore penelusuran situs sebagai sumber dasar. Contoh ini menggunakan metode generateGroundedContent.

RESTPython
  1. Kirim perintah dalam permintaan 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_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_1",
               "attributes": {
                 "title": "TITLE_1",
                 "uri": "URI_1",
                 "author": "AUTHOR_1"
               }
             }
           ]
         }
       },
       {
         "inlineSource": {
           "groundingFacts": [
             {
               "factText": "FACT_TEXT_2",
               "attributes": {
                 "title": "TITLE_2",
                 "uri": "URI_2"
               }
             },
             {
               "factText": "FACT_TEXT_3",
               "attributes": {
                 "title": "TITLE_3",
                 "uri": "URI_3"
               }
             }
           ]
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_1/servingConfigs/default_search"
         }
       },
       {
         "searchSource": {
           "servingConfig": "projects/PROJECT_NUMBER/locations/global/collections/default_collection/engines/APP_ID_2/servingConfigs/default_search"
         }
       }
      ]
    },
    "generationSpec": {
      "modelId": "MODEL_ID",
      "temperature": TEMPERATURE,
      "topP": TOP_P,
      "topK": TOP_K
    },
    "user_context": {
      "languageCode: "LANGUAGE_CODE",
      "latLng": {
        "latitude": LATITUDE,
        "longitude": LONGITUDE
     },
    }
    }'
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project Google Cloud Anda.
    • PROMPT_TEXT: perintah dari pengguna.
    • SYSTEM_INSTRUCTION: kolom opsional untuk memberikan pengantar atau beberapa konteks tambahan.
    • FACT_TEXT_N: teks inline untuk mendasarkan jawaban. Anda dapat memberikan maksimum 100 teks fakta.
    • TITLE_N: kolom opsional untuk menetapkan atribut meta judul untuk teks inline.
    • URI_N: kolom opsional untuk menetapkan atribut meta URI untuk teks inline.
    • AUTHOR_N: kolom opsional untuk menetapkan atribut meta penulis untuk teks inline.
    • APP_ID_N: ID aplikasi Vertex AI Search.
    • MODEL_ID: kolom opsional untuk menetapkan ID model model Gemini yang ingin Anda gunakan untuk menghasilkan jawaban yang beralasan. Untuk mengetahui daftar ID model yang tersedia, lihat Model yang didukung.
    • TEMPERATURE: kolom opsional untuk menetapkan suhu yang digunakan untuk pengambilan sampel. Google merekomendasikan suhu 0,0. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_P: kolom opsional untuk menetapkan nilai top-P untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_K: kolom opsional untuk menetapkan nilai top-K untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • LANGUAGE_CODE: kolom opsional yang dapat digunakan untuk menetapkan bahasa untuk jawaban yang dihasilkan dan untuk teks bagian yang ditampilkan. Jika bahasa tidak dapat ditentukan dari kueri, kolom ini akan digunakan. Nilai defaultnya adalah en. Untuk mengetahui daftar kode bahasa, lihat Bahasa.
    • LATITUDE: kolom opsional untuk menetapkan lintang. Masukkan nilai dalam derajat desimal—misalnya, -25.34.
    • LONGITUDE: kolom opsional untuk menetapkan bujur. Masukkan nilai dalam derajat desimal—misalnya, 131.04.

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    {
     "candidates": [
       {
         "content": {
           "role": "model",
           "parts": [
             {
               "text": "ANSWER_TEXT"
             }
           ]
         },
         "groundingScore": GROUNDING_SCORE,
         "groundingMetadata": {
           "supportChunks": [
             {
               "chunkText": "CHUNK_TEXT_FROM_A_DOCUMENT_IN_A_DATA_STORE ",
               "source": "4",
               "sourceMetadata": {
                 "title": "DOCUMENT_TITLE",
                 "uri": "gs://PATH/TO/DOCUMENT.pdf",
                 "document_id": "DOCUMENT_ID",
                 "page_identifier": "PAGE_NUMBER"
               }
             },
             {
               "chunkText": "CHUNK_TEXT_FROM_FACT_TEXT_1",
               "source": "0",
               "sourceMetadata": {
                 "title": "TITLE_1",
                 "uri": "URI_1",
                 "author": "AUTHOR_1"
               }
             }
           ],
           "groundingSupport": [
             {
               "claimText": "CLAIM_TEXT_1",
               "supportChunkIndices": [
                 0,
                 1
               ]
             }
           ]
         }
       }
     ]
    }
    

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_number = "YOUR_PROJECT_NUMBER"
# engine_id = "YOUR_ENGINE_ID"

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How did Google do in 2020? Where can I find BigQuery docs?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(
                text="Add a smiley emoji after the answer."
            )
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                inline_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.InlineSource(
                    grounding_facts=[
                        discoveryengine.GroundingFact(
                            fact_text=(
                                "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction"
                            ),
                            attributes={
                                "title": "BigQuery Overview",
                                "uri": "https://cloud.google.com/bigquery/docs/introduction",
                            },
                        ),
                    ]
                ),
            ),
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.SearchSource(
                    # The full resource name of the serving config for a Vertex AI Search App
                    serving_config=f"projects/{project_number}/locations/global/collections/default_collection/engines/{engine_id}/servingConfigs/default_search",
                ),
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Contoh untuk pembuatan jawaban satu giliran yang didasarkan pada teks inline dan Vertex AI Search

Dalam contoh berikut, permintaan menentukan sumber dasar berikut: satu fakta teks inline dan satu penyimpanan data Vertex AI Search. Contoh ini menggunakan metode generateGroundedContent. Contoh ini juga menggunakan petunjuk sistem untuk mengakhiri jawaban dengan emoji smiley.

REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "How did google do in 2020? Where can I find Bigquery docs?"
        }
      ]
    }
  ],
  "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
  },
  "groundingSpec": {
    "groundingSources": [
      {
        "inline_source": {
          "grounding_facts": [
            {
              "fact_text": "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction",
              "attributes": {
                "title": "BigQuery Overview",
                "uri": "https://cloud.google.com/bigquery/docs/introduction"
              }
            }
          ]
        }
      },
      {
        "searchSource": {
          "servingConfig": "projects/123456/locations/global/collections/default_collection/engines/app_id_example/servingConfigs/default_search"
        }
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  },
  "user_context": {
    "languageCode: "en",
    "latLng": {
       "latitude": 37.422131,
       "longitude": -122.084801
    }
  }
}'

Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

{
 "candidates": [
   {
     "content": {
       "role": "model",
       "parts": [
         {
           "text": "Google's revenue increased by 23% in 2020, reaching $182.5 billion. Google Cloud revenue was $13.1 billion for 2020. You can find BigQuery documentation at https://cloud.google.com/bigquery/docs/introduction. 😊 \n"
         }
       ]
     },
     "groundingScore": 0.86738646,
     "groundingMetadata": {
       "supportChunks": [
         {
           "chunkText": "Alphabet Announces Fourth Quarter and Fiscal Year 2020 Results\nMOUNTAIN VIEW, Calif. – February 2, 2021 – Alphabet Inc. (NASDAQ: GOOG, GOOGL) today announced\nfinancial results for the quarter and fiscal year ended December 31, 2020. Sundar Pichai, CEO of Google and Alphabet, said: “Our strong results this quarter reflect the helpfulness of our\nproducts and services to people and businesses, as well as the accelerating transition to online services and the\ncloud. Google succeeds when we help our customers and partners succeed, and we see significant opportunities to\nforge meaningful partnerships as businesses increasingly look to a digital future.” Ruth Porat, CFO of Google and Alphabet, said: “Our strong fourth quarter performance, with revenues of $56.9\nbillion, was driven by Search and YouTube, as consumer and business activity recovered from earlier in the year. Google Cloud revenues were $13.1 billion for 2020, with significant ongoing momentum, and we remain focused on\ndelivering value across the growth opportunities we see.” New reporting segment structure and operating results\nWe are now reporting results for three segments: Google Services, Google Cloud, and Other Bets. \n...\nIn 2020, we entered into derivatives that hedged the changes in fair value of certain marketable equity securities, which\nresulted in a $497 million net loss for the quarter ended December 31, 2020. The offsetting recognized gains on the\nmarketable equity securities are reflected in Gain (loss) on equity securities, net. Segment results\nThe following table presents our revenues and operating income (loss) (in millions; unaudited): Quarter Fiscal Year Q4 2019 Q1 2020 Q2 2020 Q3 2020 Q4 2020 2018 2019 2020 Revenues:\nGoogle Services $ 43,198 $ 38,198 $ 34,991 $ 42,573 $ 52,873 $ 130,524 $ 151,825 $ 168,635 Google Cloud 2,614 2,777 3,007 3,444 3,831 5,838 8,918 13,059 Other Bets 172 135 148 178 196 595 659 657 Hedging gains (losses) 91 49 151 (22) (2) (138) 455 176 Total revenues $ 46,075 $ 41,159 $ 38,297 $ 46,173 $ 56,898 $ 136,819 $ 161,857 $ 182,527 Quarter Fiscal Year Q4 2019 Q1 2020 Q2 2020 Q3 2020 Q4 2020 2018 2019 2020 Operating income (loss):\nGoogle Services $ 13,488 $ 11,548 $ 9,539 $ 14,453 $ 19,066 $ 43,137 $ 48,999 $ 54,606 Google Cloud (1,194) (1,730) (1,426) (1,208) (1,243) (4,348) (4,645) (5,607) Other Bets (2,026) (1,121) (1,116) (1,103) (1,136) \n...\nQ4 2020 financial highlights\nThe following table summarizes our consolidated financial results for the quarters ended December 31, 2019 and\n2020 (in millions, except for per share information and percentages; unaudited). Quarter Ended December 31,\n2019 2020 Revenues $ 46,075 $ 56,898 Increase in revenues year over year 17 % 23 % Increase in constant currency revenues year over year(1) 19 % 23 % Operating income $ 9,266 $ 15,651 Operating margin 20 % 28 % Other income (expense), net $ 1,438 $ 3,038 Net income $ 10,671 $ 15,227 Diluted EPS $ 15.35 $ 22.30 (1) Non-GAAP measure. See the table captioned “Reconciliation from GAAP revenues to non-GAAP constant currency\nrevenues” for more details. Q4 2020 supplemental information (in millions, except for number of employees; unaudited)\nRevenues, Traffic Acquisition Costs (TAC) and number of employees\nThe following table summarizes our revenues, total TAC and number of employees. Quarter Ended December 31,\n2019 2020 Google Search & other $ 27,185 $ 31,903 YouTube ads 4,717 6,885 Google Network Members' properties 6,032 7,411 Google advertising 37,934 46,199 Google other 5,264 6,674 Google Services total 43,198 52,873 Google Cloud 2,614 3,831 Other Bets 172 196 Hedging gains (losses) 91 (2) Total revenues $ 46,075 $ 56,898 Total TAC $ 8,501 $ 10,466 Number of employees 118,899 135,301 ",
           "source": "1",
           "sourceMetadata": {
             "title": "GOOG Exhibit 99.1 Q4'20",
             "page_identifier": "2",
             "uri": "gs://cloud-samples-data/gen-app-builder/search/alphabet-investor-pdfs/2020Q4_alphabet_earnings_release.pdf",
             "document_id": "projects/123456/locations/global/collections/default_collection/dataStores/data_store_id_example/branches/0/documents/217e8bedecfe08e3c43f5b289af15243"
           }
         },
         {
           "chunkText": "Alphabet Announces Fourth Quarter and Fiscal Year 2020 Results\nMOUNTAIN VIEW, Calif. – February 2, 2021 – Alphabet Inc. (NASDAQ: GOOG, GOOGL) today announced\nfinancial results for the quarter and fiscal year ended December 31, 2020. Sundar Pichai, CEO of Google and Alphabet, said: “Our strong results this quarter reflect the helpfulness of our\nproducts and services to people and businesses, as well as the accelerating transition to online services and the\ncloud. Google succeeds when we help our customers and partners succeed, and we see significant opportunities to\nforge meaningful partnerships as businesses increasingly look to a digital future.” Ruth Porat, CFO of Google and Alphabet, said: “Our strong fourth quarter performance, with revenues of $56.9\nbillion, was driven by Search and YouTube, as consumer and business activity recovered from earlier in the year. Google Cloud revenues were $13.1 billion for 2020, with significant ongoing momentum, and we remain focused on\ndelivering value across the growth opportunities we see.” New reporting segment structure and operating results\nWe are now reporting results for three segments: Google Services, Google Cloud, and Other Bets. \n...\nIn 2020, we entered into derivatives that hedged the changes in fair value of certain marketable equity securities, which\nresulted in a $497 million net loss for the quarter ended December 31, 2020. The offsetting recognized gains on the\nmarketable equity securities are reflected in Gain (loss) on equity securities, net. Segment results\nThe following table presents our revenues and operating income (loss) (in millions; unaudited): Quarter Fiscal Year Q4 2019 Q1 2020 Q2 2020 Q3 2020 Q4 2020 2018 2019 2020 Revenues:\nGoogle Services $ 43,198 $ 38,198 $ 34,991 $ 42,573 $ 52,873 $ 130,524 $ 151,825 $ 168,635 Google Cloud 2,614 2,777 3,007 3,444 3,831 5,838 8,918 13,059 Other Bets 172 135 148 178 196 595 659 657 Hedging gains (losses) 91 49 151 (22) (2) (138) 455 176 Total revenues $ 46,075 $ 41,159 $ 38,297 $ 46,173 $ 56,898 $ 136,819 $ 161,857 $ 182,527 Quarter Fiscal Year Q4 2019 Q1 2020 Q2 2020 Q3 2020 Q4 2020 2018 2019 2020 Operating income (loss):\nGoogle Services $ 13,488 $ 11,548 $ 9,539 $ 14,453 $ 19,066 $ 43,137 $ 48,999 $ 54,606 Google Cloud (1,194) (1,730) (1,426) (1,208) (1,243) (4,348) (4,645) (5,607) Other Bets (2,026) (1,121) (1,116) (1,103) (1,136) \n...\nQ4 2020 financial highlights\nThe following table summarizes our consolidated financial results for the quarters ended December 31, 2019 and\n2020 (in millions, except for per share information and percentages; unaudited). Quarter Ended December 31,\n2019 2020 Revenues $ 46,075 $ 56,898 Increase in revenues year over year 17 % 23 % Increase in constant currency revenues year over year(1) 19 % 23 % Operating income $ 9,266 $ 15,651 Operating margin 20 % 28 % Other income (expense), net $ 1,438 $ 3,038 Net income $ 10,671 $ 15,227 Diluted EPS $ 15.35 $ 22.30 (1) Non-GAAP measure. See the table captioned “Reconciliation from GAAP revenues to non-GAAP constant currency\nrevenues” for more details. Q4 2020 supplemental information (in millions, except for number of employees; unaudited)\nRevenues, Traffic Acquisition Costs (TAC) and number of employees\nThe following table summarizes our revenues, total TAC and number of employees. Quarter Ended December 31,\n2019 2020 Google Search & other $ 27,185 $ 31,903 YouTube ads 4,717 6,885 Google Network Members' properties 6,032 7,411 Google advertising 37,934 46,199 Google other 5,264 6,674 Google Services total 43,198 52,873 Google Cloud 2,614 3,831 Other Bets 172 196 Hedging gains (losses) 91 (2) Total revenues $ 46,075 $ 56,898 Total TAC $ 8,501 $ 10,466 Number of employees 118,899 135,301 ",
           "source": "1",
           "sourceMetadata": {
             "document_id": "projects/123456/locations/global/collections/default_collection/dataStores/data_store_id_example/branches/0/documents/217e8bedecfe08e3c43f5b289af15243",
             "page_identifier": "2",
             "title": "GOOG Exhibit 99.1 Q4'20",
             "uri": "gs://cloud-samples-data/gen-app-builder/search/alphabet-investor-pdfs/2020Q4_alphabet_earnings_release.pdf"
           }
         },
         {
           "chunkText": "The BigQuery documentation can be found at https://cloud.google.com/bigquery/docs/introduction ",
           "source": "0",
           "sourceMetadata": {
             "uri": "https://cloud.google.com/bigquery/docs/introduction",
             "title": "BigQuery Overview"
           }
         }
       ],
       "groundingSupport": [
         {
           "claimText": "Google's revenue increased by 23% in 2020, reaching $182.5 billion.",
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "Google Cloud revenue was $13.1 billion for 2020.",
           "supportChunkIndices": [
             1
           ]
         },
         {
           "claimText": "You can find BigQuery documentation at https://cloud.google.com/bigquery/docs/introduction.😊 ",
           "supportChunkIndices": [
             2
           ]
         }
       ]
     }
   }
 ]
}

Membuat jawaban yang berdasar dengan Google Penelusuran

Anda dapat mendasarkan respons yang dihasilkan dengan data web yang tersedia secara publik.

Pengambilan dinamis

Anda dapat menggunakan pengambilan dinamis dalam permintaan untuk memilih kapan harus menonaktifkan perujukan dengan Google Penelusuran. Hal ini berguna jika perintah tidak memerlukan jawaban yang didasarkan pada Google Penelusuran dan model yang didukung dapat memberikan jawaban berdasarkan pengetahuannya tanpa dasar. Hal ini membantu Anda mengelola latensi, kualitas, dan biaya secara lebih efektif.

Skor dan nilai minimum prediksi pengambilan dinamis

Saat Anda mengirim permintaan untuk membuat jawaban yang berdasar, Vertex AI Agent Builder akan menetapkan skor prediksi ke perintah. Skor prediksi adalah nilai floating point dalam rentang [0,1]. Nilainya bergantung pada apakah perintah dapat memanfaatkan perujukan jawaban dengan informasi terbaru dari Google Penelusuran. Oleh karena itu, perintah yang memerlukan jawaban yang didasarkan pada fakta terbaru di web memiliki skor prediksi yang lebih tinggi, dan perintah yang jawabannya sudah memadai dengan jawaban yang dihasilkan model memiliki skor prediksi yang lebih rendah.

Berikut adalah contoh beberapa perintah dan skor prediksinya.

Perintah Skor prediksi Komentar
"Tulis puisi tentang peony" 0,13 Model dapat mengandalkan pengetahuannya dan jawabannya tidak memerlukan perujukan
"Sarankan mainan untuk anak berusia 2 tahun" 0,36 Model dapat mengandalkan pengetahuannya dan jawabannya tidak memerlukan perujukan
"Bisakah Anda memberikan resep guacamole bergaya Asia?" 0,55 Google Penelusuran dapat memberikan jawaban yang berdasar, tetapi dasar tidak mutlak diperlukan; pengetahuan model mungkin sudah memadai
"Apa itu Agent Builder? Bagaimana cara penagihan grounding di Agent Builder?" 0,72 Memerlukan Google Penelusuran untuk menghasilkan jawaban yang berdasar
"Siapa yang memenangkan grand prix F1 terbaru?" 0,97 Memerlukan Google Penelusuran untuk menghasilkan jawaban yang berdasar

Dalam permintaan pembuatan jawaban yang berdasar, Anda dapat menentukan konfigurasi pengambilan dinamis dengan nilai minimum. Batas adalah nilai floating point dalam rentang [0,1] dan default-nya adalah 0,7. Jika nilai nilai minimum adalah nol, respons selalu didasarkan pada Google Penelusuran. Untuk semua nilai nilai minimum lainnya, hal berikut berlaku:

  • Jika skor prediksi lebih besar dari atau sama dengan nilai minimum, jawaban akan didasarkan pada Google Penelusuran. Batas yang lebih rendah menyiratkan bahwa lebih banyak perintah memiliki respons yang dihasilkan menggunakan Perujukan dengan Google Penelusuran.
  • Jika skor prediksi kurang dari nilai minimum, model mungkin masih menghasilkan jawaban, tetapi tidak didasarkan pada Google Penelusuran.

Untuk menemukan nilai minimum yang sesuai dengan kebutuhan bisnis Anda, Anda dapat membuat kumpulan kueri perwakilan yang diperkirakan akan Anda temui. Kemudian, Anda dapat mengurutkan kueri sesuai dengan skor prediksi dalam respons dan memilih nilai minimum yang baik untuk kasus penggunaan Anda.

Mendukung jawaban dengan Google Penelusuran

Contoh berikut menunjukkan cara membuat jawaban yang berdasar dari perintah dengan menentukan Google Penelusuran sebagai sumber dasar. Contoh ini menggunakan metode generateGroundedContent.

RESTPython
  1. Kirim perintah dalam permintaan 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_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION"
       }
    },
    "groundingSpec": {
     "groundingSources": [
     {
         "googleSearchSource": {
              "dynamicRetrievalConfig": {
                  "predictor":{
                      "threshold": DYNAMIC_RETRIEVAL_THRESHOLD
                  }
              }
         }
     }
    ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project Google Cloud Anda.
    • PROMPT_TEXT: perintah dari pengguna.
    • SYSTEM_INSTRUCTION: kolom opsional untuk memberikan pengantar atau beberapa konteks tambahan.
    • DYNAMIC_RETRIEVAL_THRESHOLD: kolom opsional untuk menetapkan nilai minimum guna memanggil konfigurasi pengambilan dinamis. Ini adalah nilai floating point dalam rentang [0,1]. Jika Anda menambahkan kolom dynamicRetrievalConfig, tetapi tidak menetapkan kolom predictor atau threshold, nilai nilai minimum akan ditetapkan secara default ke 0,7. Jika Anda tidak menetapkan kolom dynamicRetrievalConfig, jawabannya akan selalu di-ground.
    • MODEL_ID: kolom opsional untuk menetapkan ID model model Gemini yang ingin Anda gunakan untuk menghasilkan jawaban yang beralasan. Untuk mengetahui daftar ID model yang tersedia, lihat Model yang didukung.
    • TEMPERATURE: kolom opsional untuk menetapkan suhu yang digunakan untuk pengambilan sampel. Google merekomendasikan suhu 0,0. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_P: kolom opsional untuk menetapkan nilai top-P untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_K: kolom opsional untuk menetapkan nilai top-K untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • LANGUAGE_CODE: kolom opsional yang dapat digunakan untuk menetapkan bahasa untuk jawaban yang dihasilkan dan untuk teks bagian yang ditampilkan. Jika bahasa tidak dapat ditentukan dari kueri, kolom ini akan digunakan. Nilai defaultnya adalah en. Untuk mengetahui daftar kode bahasa, lihat Bahasa.
    • LATITUDE: kolom opsional untuk menetapkan lintang. Masukkan nilai dalam derajat desimal—misalnya, -25.34.
    • LONGITUDE: kolom opsional untuk menetapkan bujur. Masukkan nilai dalam derajat desimal—misalnya, 131.04.

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    {
     "candidates": [
       {
         "content": {
           "role": "model",
           "parts": [
             {
               "text": "ANSWER_TEXT"
             }
           ]
         },
         "groundingScore":GROUNDING_SCORE,
         "groundingMetadata": {
           "supportChunks": [
             {
              "source": "0",
              "sourceMetadata": {
                "uri": "REDIRECTION_URI",
                "domain": "PUBLISHER_DOMAIN"
              }
             }
           ],
           "groundingSupport": [
             {
               "claimText": "CLAIM_TEXT_1",
               "supportScore": SUPPORT_SCORE,
               "supportChunkIndices": [
                 0
               ]
             },
             {
               "claimText": "CLAIM_TEXT_2",
               "supportScore": SUPPORT_SCORE,
               "supportChunkIndices": [
                 0
               ]
             }
           ],
           "webSearchQueries": [
             "QUERY_BUILT_FROM_USER_PROMPT"
           ],
           "searchEntryPoint": {
             "renderedContent": "RENDERED_CONTENT"
           },
         }
       }
     ]
    }
    {
     "candidates": [
       {
         "content": {
           "role": "model",
           "parts": [
             {
               "text": "ANSWER_TEXT"
             }
           ]
         },
         "groundingScore":GROUNDING_SCORE,
         "groundingMetadata": {
           "supportChunks": [
             {}
           ],
           "groundingSupport": [
             {
               "claimText": "CLAIM_TEXT_1",
               "supportScore": SUPPORT_SCORE,
               "supportChunkIndices": [
                 0
               ]
             },
             {
               "claimText": "CLAIM_TEXT_2",
               "supportScore": SUPPORT_SCORE,
               "supportChunkIndices": [
                 0
               ]
             }
           ],
           "webSearchQueries": [
             "QUERY_BUILT_FROM_USER_PROMPT"
           ],
           "searchEntryPoint": {
             "renderedContent": "RENDERED_CONTENT"
           },
           "retrievalMetadata": [
             {
               "source": "GOOGLE_SEARCH",
               "dynamicRetrievalMetadata": {
                 "predictorMetadata": {
                   "version": "V1_INDEPENDENT",
                   "prediction": PREDICTION_SCORE
                 }
               }
             }
           ]
         }
       }
     ]
    }
    

from google.cloud import discoveryengine_v1 as discoveryengine

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

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="How much is Google stock?"
                )
            ],
        )
    ],
    system_instruction=discoveryengine.GroundedGenerationContent(
        parts=[
            discoveryengine.GroundedGenerationContent.Part(text="Be comprehensive.")
        ],
    ),
    # What to ground on.
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource(
                    # Optional: For Dynamic Retrieval
                    dynamic_retrieval_config=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration(
                        predictor=discoveryengine.GenerateGroundedContentRequest.DynamicRetrievalConfiguration.DynamicRetrievalPredictor(
                            threshold=0.7
                        )
                    )
                )
            ),
        ]
    ),
)
response = client.generate_grounded_content(request)

# Handle the response
print(response)

Dalam contoh berikut, permintaan menentukan Google Penelusuran sebagai sumber dasar. Contoh ini menggunakan metode generateGroundedContent. Contoh ini juga menggunakan petunjuk sistem untuk mengakhiri jawaban dengan emoji smiley.

REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
-d '
{
"contents": [{
  "role": "user",
  "parts": [{
    "text": "What is vertex ai agent builder?"
}]
}],
"systemInstruction": {
   "parts": {
      "text": "Add a smiley emoji after the answer."
   }
},
"groundingSpec": {
  "groundingSources": [
  {
      "googleSearchSource": {
        "dynamicRetrievalConfig": {
               "predictor":{
                   "threshold": 0.6
               }
           }
      }
  }
 ]
},
"generationSpec": {
  "modelId": "gemini-1.5-flash"
}
}
'

Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

{
 "candidates": [
   {
     "content": {
       "role": "model",
       "parts": [
         {
           "text": "Vertex AI Agent Builder is a platform developed by Google Cloud that simplifies the creation and deployment of generative AI agents. It offers both no-code and code-first approaches, allowing developers of all skill levels to build AI-powered agents. \n\nHere are some key features of Vertex AI Agent Builder:\n\n* **No-code interface:**  Use natural language to design and build agents without writing code.\n* **Code-first approach:**  Utilize powerful orchestration and customization capabilities, including LangChain on Vertex AI.\n* **Enterprise-grade security and compliance:**  Built-in security, compliance, and governance features align with industry certifications like HIPAA, ISO 27000-series, SOC-1/2/3, VPC-SC, and CMEK.\n* **Integration with enterprise data:**  Easily ground your agents in enterprise data using Vertex AI Search and Retrieval Augmented Generation (RAG) APIs.\n* **Pre-built templates:**  Rapidly prototype and experiment with pre-built templates for conversational AI and process automation agents.\n* **Advanced integrations:**  Supports integrations with frameworks like LlamaIndex and LangChain for enhanced AI capabilities.\n* **Natural language understanding (NLU):**  Accurate query responses and support for multiple languages.\n\nVertex AI Agent Builder is designed to help developers create AI agents that can:\n\n* Answer complex questions\n* Provide support and personalize user experiences\n* Automate tasks and processes\n* Interact with backend systems\n\nOverall, Vertex AI Agent Builder is a powerful tool that makes it easier for developers to build and deploy generative AI agents, regardless of their experience level. 😊 \n"
         }
       ]
     },
     "groundingScore": 0.80400103,
     "groundingMetadata": {
       "supportChunks": [
         {
          "source": "0",
          "sourceMetadata": {
          "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/{unique_string}",
          "domain": "example.com"
         }
        }
       ],
       "groundingSupport": [
         {
           "claimText": "Vertex AI Agent Builder is a platform developed by Google Cloud that simplifies the creation and deployment of generative AI agents.",
           "supportScore": 0.9541752,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "It offers both no-code and code-first approaches, allowing developers of all skill levels to build AI-powered agents.",
           "supportScore": 0.9648506,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **No-code interface:**  Use natural language to design and build agents without writing code.",
           "supportScore": 0.77115613,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **Code-first approach:**  Utilize powerful orchestration and customization capabilities, including LangChain on Vertex AI.",
           "supportScore": 0.8540146,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **Enterprise-grade security and compliance:**  Built-in security, compliance, and governance features align with industry certifications like HIPAA, ISO 27000-series, SOC-1/2/3, VPC-SC, and CMEK.",
           "supportScore": 0.9574074,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **Integration with enterprise data:**  Easily ground your agents in enterprise data using Vertex AI Search and Retrieval Augmented Generation (RAG) APIs.",
           "supportScore": 0.9533333,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **Pre-built templates:**  Rapidly prototype and experiment with pre-built templates for conversational AI and process automation agents.",
           "supportScore": 0.9457701,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **Advanced integrations:**  Supports integrations with frameworks like LlamaIndex and LangChain for enhanced AI capabilities.",
           "supportScore": 0.9541752,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* **Natural language understanding (NLU):**  Accurate query responses and support for multiple languages.",
           "supportScore": 0.97726375,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* Provide support and personalize user experiences",
           "supportScore": 0.8540146,
           "supportChunkIndices": [
             0
           ]
         },
         {
           "claimText": "* Automate tasks and processes",
           "supportScore": 0.82046676,
           "supportChunkIndices": [
             0
           ]
         }
       ],
       "webSearchQueries": [
         "what is vertex ai agent builder"
       ],
       "searchEntryPoint": {
         "renderedContent": "\u003cstyle\u003e\n.container {\n  align-items: center;\n  border-radius: 8px;\n  display: flex;\n  font-family: Google Sans, Roboto, sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n  padding: 8px 12px;\n}\n.chip {\n  display: inline-block;\n  border: solid 1px;\n  border-radius: 16px;\n  min-width: 14px;\n  padding: 5px 16px;\n  text-align: center;\n  user-select: none;\n  margin: 0 8px;\n  -webkit-tap-highlight-color: transparent;\n}\n.carousel {\n  overflow: auto;\n  scrollbar-width: none;\n  white-space: nowrap;\n  margin-right: -12px;\n}\n.headline {\n  display: flex;\n  margin-right: 4px;\n}\n.gradient-container {\n  position: relative;\n}\n.gradient {\n  position: absolute;\n  transform: translate(3px, -9px);\n  height: 36px;\n  width: 9px;\n}\n@media (prefers-color-scheme: light) {\n  .container {\n    background-color: #fafafa;\n    box-shadow: 0 0 0 1px #0000000f;\n  }\n  .headline-label {\n    color: #1f1f1f;\n  }\n  .chip {\n    background-color: #ffffff;\n    border-color: #d2d2d2;\n    color: #5e5e5e;\n    text-decoration: none;\n  }\n  .chip:hover {\n    background-color: #f2f2f2;\n  }\n  .chip:focus {\n    background-color: #f2f2f2;\n  }\n  .chip:active {\n    background-color: #d8d8d8;\n    border-color: #b6b6b6;\n  }\n  .logo-dark {\n    display: none;\n  }\n  .gradient {\n    background: linear-gradient(90deg, #fafafa 15%, #fafafa00 100%);\n  }\n}\n@media (prefers-color-scheme: dark) {\n  .container {\n    background-color: #1f1f1f;\n    box-shadow: 0 0 0 1px #ffffff26;\n  }\n  .headline-label {\n    color: #fff;\n  }\n  .chip {\n    background-color: #2c2c2c;\n    border-color: #3c4043;\n    color: #fff;\n    text-decoration: none;\n  }\n  .chip:hover {\n    background-color: #353536;\n  }\n  .chip:focus {\n    background-color: #353536;\n  }\n  .chip:active {\n    background-color: #464849;\n    border-color: #53575b;\n  }\n  .logo-light {\n    display: none;\n  }\n  .gradient {\n    background: linear-gradient(90deg, #1f1f1f 15%, #1f1f1f00 100%);\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"container\"\u003e\n  \u003cdiv class=\"headline\"\u003e\n    \u003csvg class=\"logo-light\" width=\"18\" height=\"18\" viewBox=\"9 9 35 35\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M42.8622 27.0064C42.8622 25.7839 42.7525 24.6084 42.5487 23.4799H26.3109V30.1568H35.5897C35.1821 32.3041 33.9596 34.1222 32.1258 35.3448V39.6864H37.7213C40.9814 36.677 42.8622 32.2571 42.8622 27.0064V27.0064Z\" fill=\"#4285F4\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 43.8555C30.9659 43.8555 34.8687 42.3195 37.7213 39.6863L32.1258 35.3447C30.5898 36.3792 28.6306 37.0061 26.3109 37.0061C21.8282 37.0061 18.0195 33.9811 16.6559 29.906H10.9194V34.3573C13.7563 39.9841 19.5712 43.8555 26.3109 43.8555V43.8555Z\" fill=\"#34A853\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.6559 29.8904C16.3111 28.8559 16.1074 27.7588 16.1074 26.6146C16.1074 25.4704 16.3111 24.3733 16.6559 23.3388V18.8875H10.9194C9.74388 21.2072 9.06992 23.8247 9.06992 26.6146C9.06992 29.4045 9.74388 32.022 10.9194 34.3417L15.3864 30.8621L16.6559 29.8904V29.8904Z\" fill=\"#FBBC05\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 16.2386C28.85 16.2386 31.107 17.1164 32.9095 18.8091L37.8466 13.8719C34.853 11.082 30.9659 9.3736 26.3109 9.3736C19.5712 9.3736 13.7563 13.245 10.9194 18.8875L16.6559 23.3388C18.0195 19.2636 21.8282 16.2386 26.3109 16.2386V16.2386Z\" fill=\"#EA4335\"/\u003e\n    \u003c/svg\u003e\n    \u003csvg class=\"logo-dark\" width=\"18\" height=\"18\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n      \u003ccircle cx=\"24\" cy=\"23\" fill=\"#FFF\" r=\"22\"/\u003e\n      \u003cpath d=\"M33.76 34.26c2.75-2.56 4.49-6.37 4.49-11.26 0-.89-.08-1.84-.29-3H24.01v5.99h8.03c-.4 2.02-1.5 3.56-3.07 4.56v.75l3.91 2.97h.88z\" fill=\"#4285F4\"/\u003e\n      \u003cpath d=\"M15.58 25.77A8.845 8.845 0 0 0 24 31.86c1.92 0 3.62-.46 4.97-1.31l4.79 3.71C31.14 36.7 27.65 38 24 38c-5.93 0-11.01-3.4-13.45-8.36l.17-1.01 4.06-2.85h.8z\" fill=\"#34A853\"/\u003e\n      \u003cpath d=\"M15.59 20.21a8.864 8.864 0 0 0 0 5.58l-5.03 3.86c-.98-2-1.53-4.25-1.53-6.64 0-2.39.55-4.64 1.53-6.64l1-.22 3.81 2.98.22 1.08z\" fill=\"#FBBC05\"/\u003e\n      \u003cpath d=\"M24 14.14c2.11 0 4.02.75 5.52 1.98l4.36-4.36C31.22 9.43 27.81 8 24 8c-5.93 0-11.01 3.4-13.45 8.36l5.03 3.85A8.86 8.86 0 0 1 24 14.14z\" fill=\"#EA4335\"/\u003e\n    \u003c/svg\u003e\n    \u003cdiv class=\"gradient-container\"\u003e\u003cdiv class=\"gradient\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"carousel\"\u003e\n    \u003ca class=\"chip\" href=\"https://www.google.com/search?q=what+is+vertex+ai+agent+builder&client=app-vertex-grounding&safesearch=active\"\u003ewhat is vertex ai agent builder\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n"
       },
       "retrievalMetadata": [
         {
           "source": "GOOGLE_SEARCH",
           "dynamicRetrievalMetadata": {
             "predictorMetadata": {
               "version": "V1_INDEPENDENT",
               "prediction": 0.671875
             }
           }
         }
       ]
     }
   }
 ]
}

Membuat jawaban yang berdasar dalam beberapa giliran

Dalam pembuatan jawaban multi-giliran, di setiap permintaan, Anda harus mengirim semua teks yang dipertukarkan antara pengguna dan model di semua giliran sebelumnya. Hal ini memastikan kontinuitas dan mempertahankan konteks untuk menghasilkan jawaban untuk perintah terbaru.

Untuk mendapatkan jawaban yang berdasar dengan pembuatan jawaban multi-giliran, lakukan tindakan berikut:

REST

Contoh berikut menunjukkan cara mengirim teks perintah tindak lanjut selama beberapa gilir. Contoh ini menggunakan metode generateGroundedContent dan melandasi jawaban dengan Google Penelusuran. Anda dapat menggunakan langkah serupa untuk menghasilkan jawaban yang berisi rujukan menggunakan sumber rujukan lainnya.

  1. Kirim perintah pertama dalam permintaan 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_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_1"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project Google Cloud Anda.
    • PROMPT_TEXT_TURN_1: teks perintah dari pengguna pada giliran pertama.
    • SYSTEM_INSTRUCTION_TURN_1: kolom opsional untuk memberikan pengantar atau beberapa konteks tambahan. Untuk pembuatan jawaban multi-giliran, Anda harus memberikan petunjuk sistem untuk setiap giliran.
    • MODEL_ID: kolom opsional untuk menetapkan ID model model Gemini yang ingin Anda gunakan untuk menghasilkan jawaban yang beralasan. Untuk mengetahui daftar ID model yang tersedia, lihat Model yang didukung.
    • TEMPERATURE: kolom opsional untuk menetapkan suhu yang digunakan untuk pengambilan sampel. Google merekomendasikan suhu 0,0. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_P: kolom opsional untuk menetapkan nilai top-P untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_K: kolom opsional untuk menetapkan nilai top-K untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • LANGUAGE_CODE: kolom opsional yang dapat digunakan untuk menetapkan bahasa untuk jawaban yang dihasilkan dan untuk teks bagian yang ditampilkan. Jika bahasa tidak dapat ditentukan dari kueri, kolom ini akan digunakan. Nilai defaultnya adalah en. Untuk mengetahui daftar kode bahasa, lihat Bahasa.
    • LATITUDE: kolom opsional untuk menetapkan lintang. Masukkan nilai dalam derajat desimal—misalnya, -25.34.
    • LONGITUDE: kolom opsional untuk menetapkan bujur. Masukkan nilai dalam derajat desimal—misalnya, 131.04.

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    {
    "candidates": [
     {
       "content": {
         "role": "model",
         "parts": [
           {
             "text": "ANSWER_TEXT_TURN_1"
           }
         ]
       },
       "groundingScore": GROUNDING_SCORE,
       "groundingMetadata": {
         "supportChunks": [],
         "groundingSupport": [
           {
             "claimText": "CLAIM_TEXT_1",
             "supportChunkIndices": [
               0,
               1
             ]
           },
           {
             "claimText": "CLAIM_TEXT_2",
             "supportChunkIndices": [
               1
             ]
           }
         ],
         "webSearchQueries": [
           "QUERY_BUILT_FROM_USER_PROMPT"
         ],
         "searchEntryPoint": {
           "renderedContent": "RENDERED_CONTENT"
         }
       }
     }
    ]
    } 
  2. Kirim perintah kedua sebagai tindak lanjut. Tambahkan perintah pertama dari pengguna, diikuti dengan jawaban yang sesuai dari model untuk konteks.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_NUMBER/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "ANSWER_TEXT_TURN_1"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "PROMPT_TEXT_TURN_2"
         }
       ]
     }
    ],
    "systemInstruction": {
       "parts": {
           "text": "SYSTEM_INSTRUCTION_TURN_2"
       }
    },
    "groundingSpec": {
     "groundingSources": [
       {
         "googleSearchSource": {}
       }
     ]
    },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }'
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project Google Cloud Anda.
    • PROMPT_TEXT_TURN_1: teks perintah dari pengguna pada giliran pertama.
    • ANSWER_TEXT_TURN_1: teks jawaban dari model pada giliran pertama.
    • PROMPT_TEXT_TURN_2: teks perintah dari pengguna pada giliran kedua.
    • SYSTEM_INSTRUCTION_TURN_2: kolom opsional untuk memberikan pengantar atau beberapa konteks tambahan. Untuk pembuatan jawaban multi-giliran, Anda harus memberikan petunjuk sistem untuk setiap giliran.
    • MODEL_ID: kolom opsional untuk menetapkan ID model model Gemini yang ingin Anda gunakan untuk menghasilkan jawaban yang beralasan. Untuk mengetahui daftar ID model yang tersedia, lihat Model yang didukung.
    • TEMPERATURE: kolom opsional untuk menetapkan suhu yang digunakan untuk pengambilan sampel. Google merekomendasikan suhu 0,0. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_P: kolom opsional untuk menetapkan nilai top-P untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_K: kolom opsional untuk menetapkan nilai top-K untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • LANGUAGE_CODE: kolom opsional yang dapat digunakan untuk menetapkan bahasa untuk jawaban yang dihasilkan dan untuk teks bagian yang ditampilkan. Jika bahasa tidak dapat ditentukan dari kueri, kolom ini akan digunakan. Nilai defaultnya adalah en. Untuk mengetahui daftar kode bahasa, lihat Bahasa.
    • LATITUDE: kolom opsional untuk menetapkan lintang. Masukkan nilai dalam derajat desimal—misalnya, -25.34.
    • LONGITUDE: kolom opsional untuk menetapkan bujur. Masukkan nilai dalam derajat desimal—misalnya, 131.04.

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    {
    "candidates": [
     {
       "content": {
         "role": "model",
         "parts": [
           {
             "text": "ANSWER_TEXT_TURN_2"
           }
         ]
       },
       "groundingScore": GROUNDING_SCORE,
       "groundingMetadata": {
         "supportChunks": [],
         "groundingSupport": [
           {
             "claimText": "CLAIM_TEXT_1",
             "supportChunkIndices": [
               0
             ]
           },
           {
             "claimText": "CLAIM_TEXT_2",
             "supportChunkIndices": [
               1,
               2
             ]
           }
         ],
         "webSearchQueries": [
           "QUERY_BUILT_FROM_USER_PROMPT"
         ],
         "searchEntryPoint": {
           "renderedContent": "RENDERED_CONTENT"
         }
       }
     }
    ]
    }   
  3. Ulangi proses ini untuk mendapatkan jawaban lanjutan. Pada setiap giliran, tambahkan semua perintah sebelumnya dari pengguna, diikuti dengan jawaban yang sesuai dari model.

Contoh untuk pembuatan jawaban multi-giliran

Dalam contoh berikut, permintaan menentukan tiga teks fakta inline sebagai sumber dasar untuk menghasilkan jawaban selama dua giliran. Contoh ini menggunakan metode generateGroundedContent. Contoh ini juga menggunakan petunjuk sistem untuk mengakhiri jawaban pada giliran pertama dengan emoji smiley.

REST
  1. Kirim perintah pertama dalam permintaan curl berikut.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     }
    ],
    "systemInstruction": {
      "parts": {
          "text": "Add a smiley emoji after the answer."
      }
    },
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    {
    "candidates": [
     {
       "content": {
         "role": "model",
         "parts": [
           {
             "text": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.  😊 \n"
           }
         ]
       },
       "groundingScore": 1,
       "groundingMetadata": {
         "supportChunks": [
           {
             "chunkText": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries. ",
             "source": "1",
             "sourceMetadata": {
               "uri": "some-uri-2",
               "title": "title_2"
             }
           },
           {
             "chunkText": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come. ",
             "source": "0",
             "sourceMetadata": {
               "uri": "some-uri-1",
               "title": "title_1"
             }
           },
           {
             "chunkText": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources. ",
             "source": "2",
             "sourceMetadata": {
               "title": "title_3",
               "uri": "some-uri-3"
             }
           }
         ],
         "groundingSupport": [
           {
             "claimText": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.",
             "supportScore": 1,
             "supportChunkIndices": [
               0,
               1,
               2
             ]
           }
         ]
       }
     }
    ]
    }
    
  2. Kirim perintah kedua sebagai tindak lanjut. Tambahkan perintah pertama dari pengguna, diikuti dengan jawaban yang sesuai dari model untuk konteks.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/123456/locations/global:generateGroundedContent" \
    -d '
    {
    "contents": [
     {
       "role": "user",
       "parts": [
         {
           "text": "Summarize what happened in 2023 in one paragraph."
         }
       ]
     },
     {
       "role": "model",
       "parts": [
         {
           "text": "In 2023, the global average surface temperature increased, the world population surpassed 8 billion, and global e-commerce sales reached an estimated $5.7 trillion.  😊 \n"
         }
       ]
     },
     {
       "role": "user",
       "parts": [
         {
           "text": "Rephrase the answer in an abstracted list."
         }
       ]
     }
    ],
    "grounding_spec": {
     "grounding_sources": [
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come.",
               "attributes": {
                 "title": "title_1",
                 "uri": "some-uri-1"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries.",
               "attributes": {
                 "title": "title_2",
                 "uri": "some-uri-2"
               }
             }
           ]
         }
       },
       {
         "inline_source": {
           "grounding_facts": [
             {
               "fact_text": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources.",
               "attributes": {
                 "title": "title_3",
                 "uri": "some-uri-3"
               }
             }
           ]
         }
       }
     ]
    },
    "generationSpec": {
     "modelId": "gemini-1.5-flash"
    }
    }'
    

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    {
    "candidates": [
     {
       "content": {
         "role": "model",
         "parts": [
           {
             "text": "- The global average surface temperature increased in 2023.\n- The world population surpassed 8 billion in 2023.\n- Global e-commerce sales reached an estimated $5.7 trillion in 2023. \n"
           }
         ]
       },
       "groundingScore": 0.99073017,
       "groundingMetadata": {
         "supportChunks": [
           {
             "chunkText": "In 2023, the global average surface temperature was approximately 0.2 degrees Celsius higher than the 20th-century average. This continued the worrying trend of global warming, underscoring the urgency of worldwide climate initiatives, carbon reduction efforts, and investment in renewable energy sources. ",
             "source": "2",
             "sourceMetadata": {
               "uri": "some-uri-3",
               "title": "title_3"
             }
           },
           {
             "chunkText": "In 2023, the world population surpassed 8 billion. This milestone marked a significant moment in human history, highlighting both the rapid growth of our species and the challenges of resource management and sustainability in the years to come. ",
             "source": "0",
             "sourceMetadata": {
               "uri": "some-uri-1",
               "title": "title_1"
             }
           },
           {
             "chunkText": "In 2023, global e-commerce sales reached an estimated $5.7 trillion. The continued rise of online shopping solidified its position as a dominant force in retail, with major implications for traditional brick-and-mortar stores and the logistics networks supporting worldwide deliveries. ",
             "source": "1",
             "sourceMetadata": {
               "title": "title_2",
               "uri": "some-uri-2"
             }
           }
         ],
         "groundingSupport": [
           {
             "claimText": "- The global average surface temperature increased in 2023.",
             "supportScore": 0.9883382,
             "supportChunkIndices": [
               0
             ]
           },
           {
             "claimText": "- The world population surpassed 8 billion in 2023.",
             "supportScore": 0.9919262,
             "supportChunkIndices": [
               1
             ]
           },
           {
             "claimText": "- Global e-commerce sales reached an estimated $5.7 trillion in 2023.",
             "supportScore": 0.9919262,
             "supportChunkIndices": [
               2
             ]
           }
         ]
       }
     }
    ]
    }
    

Menampilkan jawaban yang berdasar

Anda dapat memilih untuk melakukan streaming jawaban dari model. Hal ini berguna dalam kasus penggunaan saat jawabannya sangat panjang dan mengirim seluruh respons sekaligus akan menyebabkan penundaan yang signifikan. Streaming jawaban akan membagi respons menjadi array beberapa kandidat yang berisi bagian berurutan dari teks jawaban.

Untuk mendapatkan jawaban yang di-streaming dan memiliki dasar, lakukan hal berikut:

RESTPython

Contoh berikut menunjukkan cara melakukan streaming jawaban yang di-ground. Contoh ini menggunakan metode streamGenerateGroundedContent dan mendasarkan jawaban dengan Google Penelusuran tanpa konfigurasi pengambilan dinamis. Anda dapat menggunakan langkah serupa untuk menghasilkan jawaban yang berisi rujukan menggunakan sumber rujukan lainnya.

  1. Kirim perintah dalam permintaan curl berikut.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_NUMBER/locations/global:streamGenerateGroundedContent" \
    -d '
    [
    {
     "contents": [
       {
         "role": "user",
         "parts": [
           {
             "text": "PROMPT_TEXT"
           }
         ]
       }
     ],
     "systemInstruction": {
         "parts": {
             "text": "SYSTEM_INSTRUCTION"
         }
     },
     "groundingSpec": {
       "groundingSources": [
         {
           "googleSearchSource": {}
         }
       ]
     },
    "generationSpec": {
     "modelId": "MODEL_ID",
     "temperature": TEMPERATURE,
     "topP": TOP_P,
     "topK": TOP_K
    },
    "user_context": {
     "languageCode: "LANGUAGE_CODE",
     "latLng": {
       "latitude": LATITUDE,
       "longitude": LONGITUDE
     },
    }
    }
    ]'
    

    Ganti kode berikut:

    • PROJECT_NUMBER: nomor project Google Cloud Anda.
    • PROMPT_TEXT: perintah dari pengguna.
    • SYSTEM_INSTRUCTION: kolom opsional untuk memberikan pengantar atau beberapa konteks tambahan.
    • MODEL_ID: kolom opsional untuk menetapkan ID model model Gemini yang ingin Anda gunakan untuk menghasilkan jawaban yang beralasan. Untuk mengetahui daftar ID model yang tersedia, lihat Model yang didukung.
    • TEMPERATURE: kolom opsional untuk menetapkan suhu yang digunakan untuk pengambilan sampel. Google merekomendasikan suhu 0,0. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_P: kolom opsional untuk menetapkan nilai top-P untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • TOP_K: kolom opsional untuk menetapkan nilai top-K untuk model. Untuk mengetahui informasi selengkapnya, lihat Parameter model Gemini.
    • LANGUAGE_CODE: kolom opsional yang dapat digunakan untuk menetapkan bahasa untuk jawaban yang dihasilkan dan untuk teks bagian yang ditampilkan. Jika bahasa tidak dapat ditentukan dari kueri, kolom ini akan digunakan. Nilai defaultnya adalah en. Untuk mengetahui daftar kode bahasa, lihat Bahasa.
    • LATITUDE: kolom opsional untuk menetapkan lintang. Masukkan nilai dalam derajat desimal—misalnya, -25.34.
    • LONGITUDE: kolom opsional untuk menetapkan bujur. Masukkan nilai dalam derajat desimal—misalnya, 131.04.

    Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

    [{
     "candidates": [
       {
         "content": {
           "role": "model",
           "parts": [
             {
               "text": "ANSWER_TEXT_PART_1"
             }
           ]
         }
       }
     ]
    },
    {
     "candidates": [
       {
         "content": {
           "role": "model",
           "parts": [
             {
               "text": "ANSWER_TEXT_PART_2"
             }
           ]
         }
       }
     ]
    },
    {
     "candidates": [
       {
         "content": {
           "role": "model",
           "parts": [
             {
               "text": "ANSWER_TEXT_PART_3"
             }
           ]
         }
       }
     ]
    },
    {
     "candidates": [
       {
         "groundingMetadata": {
           "supportChunks": [
             {
              "source": "0",
              "sourceMetadata": {
                "uri": "REDIRECTION_URI",
                "domain": "PUBLISHER_DOMAIN"
              }
             }
           ],
           "groundingSupport": [
             {
               "claimText": "CLAIM_TEXT_1",
               "supportChunkIndices": [
                 0
               ]
             }
           ],
           "webSearchQueries": [
             "QUERY_BUILT_FROM_USER_PROMPT"
           ],
           "searchEntryPoint": {
             "renderedContent": "RENDERED_CONTENT"
           }
         }
       }
     ]
    }]
    

from google.cloud import discoveryengine_v1 as discoveryengine

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

client = discoveryengine.GroundedGenerationServiceClient()

request = discoveryengine.GenerateGroundedContentRequest(
    # The full resource name of the location.
    # Format: projects/{project_number}/locations/{location}
    location=client.common_location_path(project=project_number, location="global"),
    generation_spec=discoveryengine.GenerateGroundedContentRequest.GenerationSpec(
        model_id="gemini-1.5-flash",
    ),
    # Conversation between user and model
    contents=[
        discoveryengine.GroundedGenerationContent(
            role="user",
            parts=[
                discoveryengine.GroundedGenerationContent.Part(
                    text="Summarize how to delete a data store in Vertex AI Agent Builder?"
                )
            ],
        )
    ],
    grounding_spec=discoveryengine.GenerateGroundedContentRequest.GroundingSpec(
        grounding_sources=[
            discoveryengine.GenerateGroundedContentRequest.GroundingSource(
                google_search_source=discoveryengine.GenerateGroundedContentRequest.GroundingSource.GoogleSearchSource()
            ),
        ]
    ),
)
responses = client.stream_generate_grounded_content(iter([request]))

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

Contoh untuk streaming jawaban yang berisi rujukan

Dalam contoh berikut, permintaan menentukan Google Penelusuran sebagai sumber dasar untuk melakukan streaming jawaban tanpa konfigurasi pengambilan dinamis. Jawaban yang di-streaming didistribusikan ke beberapa kandidat respons. Contoh ini menggunakan metode streamGenerateGroundedContent.

REST
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://discoveryengine.googleapis.com/v1alpha/projects/123456/locations/global:streamGenerateGroundedContent" \
-d '
[
{
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "text": "Summarize How to delete a data store in Vertex AI Agent Builder?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}
]'

Anda akan menerima respons JSON yang mirip dengan respons yang terpotong berikut. Untuk memahami respons Anda, lihat Data output.

[{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "To"
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": " delete a data store in Vertex AI Agent Builder, you must first purge all data"
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": " from the data store. "
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "supportChunks": [
        {
          "source": "0",
          "sourceMetadata": {
            "uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/{unique_string}",
            "domain": "cloud.google.com"
          }
        }
      ],
      "groundingSupport": [
        {
          "claimText": "To delete a data store in Vertex AI Agent Builder, you must first purge all data from the data store. ",
          "supportChunkIndices": [
            0
          ]
        }
      ],
      "webSearchQueries": [
        "how to delete a data store in vertex ai agent builder"
      ],
      "searchEntryPoint": {
        "renderedContent": "\u003cstyle\u003e\n.container {\n  align-items: center;\n  border-radius: 8px;\n  display: flex;\n  font-family: Google Sans, Roboto, sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n  padding: 8px 12px;\n}\n.chip {\n  display: inline-block;\n  border: solid 1px;\n  border-radius: 16px;\n  min-width: 14px;\n  padding: 5px 16px;\n  text-align: center;\n  user-select: none;\n  margin: 0 8px;\n  -webkit-tap-highlight-color: transparent;\n}\n.carousel {\n  overflow: auto;\n  scrollbar-width: none;\n  white-space: nowrap;\n  margin-right: -12px;\n}\n.headline {\n  display: flex;\n  margin-right: 4px;\n}\n.gradient-container {\n  position: relative;\n}\n.gradient {\n  position: absolute;\n  transform: translate(3px, -9px);\n  height: 36px;\n  width: 9px;\n}\n@media (prefers-color-scheme: light) {\n  .container {\n    background-color: #fafafa;\n    box-shadow: 0 0 0 1px #0000000f;\n  }\n  .headline-label {\n    color: #1f1f1f;\n  }\n  .chip {\n    background-color: #ffffff;\n    border-color: #d2d2d2;\n    color: #5e5e5e;\n    text-decoration: none;\n  }\n  .chip:hover {\n    background-color: #f2f2f2;\n  }\n  .chip:focus {\n    background-color: #f2f2f2;\n  }\n  .chip:active {\n    background-color: #d8d8d8;\n    border-color: #b6b6b6;\n  }\n  .logo-dark {\n    display: none;\n  }\n  .gradient {\n    background: linear-gradient(90deg, #fafafa 15%, #fafafa00 100%);\n  }\n}\n@media (prefers-color-scheme: dark) {\n  .container {\n    background-color: #1f1f1f;\n    box-shadow: 0 0 0 1px #ffffff26;\n  }\n  .headline-label {\n    color: #fff;\n  }\n  .chip {\n    background-color: #2c2c2c;\n    border-color: #3c4043;\n    color: #fff;\n    text-decoration: none;\n  }\n  .chip:hover {\n    background-color: #353536;\n  }\n  .chip:focus {\n    background-color: #353536;\n  }\n  .chip:active {\n    background-color: #464849;\n    border-color: #53575b;\n  }\n  .logo-light {\n    display: none;\n  }\n  .gradient {\n    background: linear-gradient(90deg, #1f1f1f 15%, #1f1f1f00 100%);\n  }\n}\n\u003c/style\u003e\n\u003cdiv class=\"container\"\u003e\n  \u003cdiv class=\"headline\"\u003e\n    \u003csvg class=\"logo-light\" width=\"18\" height=\"18\" viewBox=\"9 9 35 35\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M42.8622 27.0064C42.8622 25.7839 42.7525 24.6084 42.5487 23.4799H26.3109V30.1568H35.5897C35.1821 32.3041 33.9596 34.1222 32.1258 35.3448V39.6864H37.7213C40.9814 36.677 42.8622 32.2571 42.8622 27.0064V27.0064Z\" fill=\"#4285F4\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 43.8555C30.9659 43.8555 34.8687 42.3195 37.7213 39.6863L32.1258 35.3447C30.5898 36.3792 28.6306 37.0061 26.3109 37.0061C21.8282 37.0061 18.0195 33.9811 16.6559 29.906H10.9194V34.3573C13.7563 39.9841 19.5712 43.8555 26.3109 43.8555V43.8555Z\" fill=\"#34A853\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.6559 29.8904C16.3111 28.8559 16.1074 27.7588 16.1074 26.6146C16.1074 25.4704 16.3111 24.3733 16.6559 23.3388V18.8875H10.9194C9.74388 21.2072 9.06992 23.8247 9.06992 26.6146C9.06992 29.4045 9.74388 32.022 10.9194 34.3417L15.3864 30.8621L16.6559 29.8904V29.8904Z\" fill=\"#FBBC05\"/\u003e\n      \u003cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 16.2386C28.85 16.2386 31.107 17.1164 32.9095 18.8091L37.8466 13.8719C34.853 11.082 30.9659 9.3736 26.3109 9.3736C19.5712 9.3736 13.7563 13.245 10.9194 18.8875L16.6559 23.3388C18.0195 19.2636 21.8282 16.2386 26.3109 16.2386V16.2386Z\" fill=\"#EA4335\"/\u003e\n    \u003c/svg\u003e\n    \u003csvg class=\"logo-dark\" width=\"18\" height=\"18\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n      \u003ccircle cx=\"24\" cy=\"23\" fill=\"#FFF\" r=\"22\"/\u003e\n      \u003cpath d=\"M33.76 34.26c2.75-2.56 4.49-6.37 4.49-11.26 0-.89-.08-1.84-.29-3H24.01v5.99h8.03c-.4 2.02-1.5 3.56-3.07 4.56v.75l3.91 2.97h.88z\" fill=\"#4285F4\"/\u003e\n      \u003cpath d=\"M15.58 25.77A8.845 8.845 0 0 0 24 31.86c1.92 0 3.62-.46 4.97-1.31l4.79 3.71C31.14 36.7 27.65 38 24 38c-5.93 0-11.01-3.4-13.45-8.36l.17-1.01 4.06-2.85h.8z\" fill=\"#34A853\"/\u003e\n      \u003cpath d=\"M15.59 20.21a8.864 8.864 0 0 0 0 5.58l-5.03 3.86c-.98-2-1.53-4.25-1.53-6.64 0-2.39.55-4.64 1.53-6.64l1-.22 3.81 2.98.22 1.08z\" fill=\"#FBBC05\"/\u003e\n      \u003cpath d=\"M24 14.14c2.11 0 4.02.75 5.52 1.98l4.36-4.36C31.22 9.43 27.81 8 24 8c-5.93 0-11.01 3.4-13.45 8.36l5.03 3.85A8.86 8.86 0 0 1 24 14.14z\" fill=\"#EA4335\"/\u003e\n    \u003c/svg\u003e\n    \u003cdiv class=\"gradient-container\"\u003e\u003cdiv class=\"gradient\"\u003e\u003c/div\u003e\u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"carousel\"\u003e\n    \u003ca class=\"chip\" href=\"https://www.google.com/search?q=how+to+delete+a+data+store+in+vertex+ai+agent+builder&client=app-vertex-grounding&safesearch=active\"\u003ehow to delete a data store in vertex ai agent builder\u003c/a\u003e\n  \u003c/div\u003e\n\u003c/div\u003e\n"
      }
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "You can purge data from a data store"
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": " using the Google Cloud console or the command line. "
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "groundingSupport": [
        {
          "claimText": "You can purge data from a data store using the Google Cloud console or the command line. ",
          "supportChunkIndices": [
            0
          ]
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "Once the data is purged, you can delete the data store. "
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "groundingSupport": [
        {
          "claimText": "Once the data is purged, you can delete the data store. ",
          "supportChunkIndices": [
            0
          ]
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "You cannot delete"
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": " a data store that is connected to an app. "
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "groundingSupport": [
        {
          "claimText": "You cannot delete a data store that is connected to an app. ",
          "supportChunkIndices": [
            0
          ]
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "You must first delete the app that the data store is connected to. "
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "groundingSupport": [
        {
          "claimText": "You must first delete the app that the data store is connected to. ",
          "supportChunkIndices": [
            0
          ]
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "You also"
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": " cannot delete a data store that is in the process of upgrading or downgrading. "
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "groundingSupport": [
        {
          "claimText": "You also cannot delete a data store that is in the process of upgrading or downgrading. ",
          "supportChunkIndices": [
            0
          ]
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": "You must wait for the upgrade or downgrade to complete before deleting the data store."
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "content": {
      "role": "model",
      "parts": [
        {
          "text": " \n"
        }
      ]
    }
  }
]
}
,
{
"candidates": [
  {
    "groundingMetadata": {
      "groundingSupport": [
        {
          "claimText": "You must wait for the upgrade or downgrade to complete before deleting the data store. \n",
          "supportChunkIndices": [
            0
          ]
        }
      ]
    }
  }
]
}
]

Model yang didukung

Model berikut mendukung grounding:

  • Gemini 1.5 Pro dengan input teks saja
  • Gemini 1.5 Flash dengan input teks saja
  • Gemini 1.0 Pro dengan input teks saja

Untuk mempelajari model Gemini ini lebih lanjut, lihat Versi dan siklus proses model Gemini.

Saat memanggil metode generateGroundedContent, Anda dapat menggunakan ID model berikut:

ID Model Diperbarui otomatis
default Ya
gemini-1.0-pro Ya
gemini-1.0-pro-001 Tidak
gemini-1.0-pro-002 Tidak
gemini-1.5-flash Ya
gemini-1.5-flash-001 Tidak
gemini-1.5-flash-002 Tidak
gemini-1.5-pro Ya
gemini-1.5-pro-001 Tidak
gemini-1.5-pro-002 Tidak

Model fidelitas tinggi

Untuk kasus penggunaan tujuan umum, seperti bantuan perjalanan, metode pembuatan jawaban yang berdasar dapat menghasilkan hasil yang baik dengan menggabungkan konteks yang diberikan, seperti teks inline atau data perusahaan, dengan pelatihan model. Namun, industri khusus, seperti jasa keuangan, layanan kesehatan, dan asuransi, sering kali mewajibkan hasil yang dihasilkan untuk bersumber secara eksklusif dari konteks yang diberikan. Untuk mendukung kasus penggunaan perujukan tersebut, model fidelitas tinggi berikut tersedia untuk digunakan dengan metode pembuatan jawaban yang dilandasi:

Nama model ID Model Berdasarkan Jendela konteks Deskripsi
Akurasi Tinggi Gemini 1.5 Flash gemini-1.5-flash-002-high-fidelity Model Gemini 1.5 Flash 32K Menerima perintah teks sebagai input dan menghasilkan respons teks yang didasarkan pada konteks. Berfokus pada akurasi, keandalan, dan keamanan.

Langkah berikutnya

Pelajari cara menggunakan metode pembuatan berbasis data dengan API RAG lainnya untuk membuat jawaban berbasis data dari data tidak terstruktur.