使用 RAG 產生有憑有據的答案

在 AI 應用程式中使用檢索增強生成 (RAG) 技術時,您可以根據下列基礎來源,生成有根據的提示回覆:

  • Google 搜尋:如果您想將模型連結至網路中的世界知識、各種主題或最新資訊,建議利用 Google 搜尋建立基準。Grounding with Google Search 支援動態擷取,可讓您選擇僅在必要時,透過 Google 搜尋生成以 Google 搜尋結果為依據的內容。因此,動態擷取設定會評估提示是否需要近期事件的相關知識,並啟用「以 Google 搜尋建立基準」。詳情請參閱「動態擷取」。
  • 內嵌文字:使用內嵌文字建立基準,根據要求中提供的文字片段 (稱為「事實文字」) 建立答案基準。事實文字是使用者提供的陳述,且系統認為與特定要求相關。模型不會檢查事實文字的真實性。
  • Vertex AI Search 資料儲存庫:如要將模型連結至 Vertex AI Search 資料儲存庫中的企業文件,請使用 Vertex AI Search 建立基準。

本頁面說明如何使用下列方法,根據這些基礎來源生成有根據的答案:

此外,您也可以選擇串流模型回覆。透過串流生成基準化回覆是實驗功能。

您可以視應用程式需求,使用其他方法生成有依據的答案。詳情請參閱「Vertex AI API,用於建構搜尋和 RAG 體驗」。

術語

使用有根據的答案生成方法前,建議先瞭解輸入內容和輸出內容、如何建構要求,以及 RAG 相關術語。

RAG 條款

檢索增強生成 (RAG) 是一種方法,可讓大型語言模型 (LLM) 根據您選擇的資料來源生成回覆。RAG 分為兩個階段:

  1. 擷取:快速取得最相關的事實是常見的搜尋問題。有了 RAG,您就能快速擷取重要事實,生成回覆。
  2. 生成:LLM 會使用檢索到的事實,生成有依據的回覆。

因此,有依據的答案生成方法會從依據來源擷取事實,並生成有依據的答案。

輸入資料

以資料為依據的答案生成方法需要在要求中提供下列輸入內容:

  • 角色:指定文字的傳送者,可以是使用者 (user) 或模型 (model)。

  • 文字:如果角色是 user,文字就是提示;如果角色是 model,文字就是根據脈絡資訊生成的答案。在要求中指定角色和文字的方式如下:

    • 如要生成單輪對話的答案,使用者會在要求中傳送提示文字,模型則會在回覆中傳送答案文字。
    • 如果是多輪對話的答案生成作業,要求會包含所有前幾輪對話的提示詞/答案配對,以及使用者在當輪對話中輸入的提示詞文字。因此,在這種要求中,提示文字的角色是 user,答案文字的角色是 model
  • 系統指令:提示的前言,可控管模型行為,並據此修改輸出內容。舉例來說,您可以在生成的回覆中加入角色,或是指示模型以特定方式設定輸出文字格式。如要生成多輪對話的答案,您必須為每一輪對話提供系統指令。詳情請參閱「使用系統指令」。

  • 依據來源:答案的依據來源,可以是下列一或多項:

    • Google 搜尋:根據 Google 搜尋結果生成回覆。如果建立基準的來源是 Google 搜尋,您可以指定動態擷取設定和動態擷取門檻。詳情請參閱「動態擷取」。

    • 內文:根據要求中提供的事實文字,提供答案。事實文字是使用者提供的陳述,且系統認為與特定要求相關。模型不會檢查事實文字的真實性。每個內嵌文字來源最多可提供 100 個事實文字。事實文字可使用中繼屬性支援,例如標題、作者和 URI。引用支援答案的區塊時,這些中繼屬性會以回應形式傳回。

    • Vertex AI Search 資料儲存庫:以 Vertex AI Search 資料儲存庫中的文件做為回覆基準。您無法指定網站搜尋資料儲存庫做為基礎來源。

    在特定要求中,您可以同時提供內嵌文字來源和 Vertex AI Search 資料儲存庫來源。你無法將 Google 搜尋與這兩個來源的任一者合併。因此,如要根據 Google 搜尋結果提供答案,請務必傳送個別要求,並指定 Google 搜尋做為唯一基礎來源。

    最多可依任意順序提供 10 個基礎來源。舉例來說,假設您依下列順序提供基礎來源,並取得總共 10 個基礎來源:

    • 三個內嵌文字來源,每個來源最多可包含 100 個事實文字
    • 六個 Vertex AI Search 資料儲存庫
    • 一個內嵌文字來源,最多可包含 100 個事實文字

    系統會按照要求中指定的順序,為每個來源指派索引。舉例來說,如果您在要求中指定來源組合,系統會按照下表指派來源索引:

    依據來源 索引
    內嵌文字 #1 0
    內嵌文字 #2 1
    Vertex AI Search 資料儲存庫 #1 2
    內嵌文字 #3 3
    Vertex AI Search 資料儲存庫 #2 4

    這項索引會顯示在回覆中,有助於追蹤出處。

  • 生成規格:模型設定的規格,包含下列資訊:

    • 模型 ID:指定用於生成答案的 Vertex AI Gemini 模型。如需可用於生成有根據答案的模型清單,請參閱「支援的型號」。

    • 模型參數:指定可為所選模型設定的參數。這些參數包括:語言、溫度、Top-P 和 Top-K。如要進一步瞭解這些參數,請參閱「Gemini 模型參數」。

  • 語言代碼:生成答案的語言通常會與提示的語言相符。如果提示中沒有單一語言 (例如提示很短,且適用於多種語言),則語言代碼欄位會決定答案的語言。

    如需語言代碼清單,請參閱「語言」。

  • 經緯度:指定使用者的經緯度。如果查詢內容包含特定地點的問題,例如「尋找我附近的咖啡店」,系統就會使用這些欄位。如果系統無法判斷查詢語言,且未設定語言代碼,系統就會使用經緯度判斷答案語言。

輸出資料

模型生成的回覆稱為「候選答案」,其中包含下列資料:輸出內容可能不會顯示所有欄位。

  • 角色:已建立基準答案的傳送者。回覆一律包含根據事實的答案文字。因此,回覆中的角色一律為模型。

  • 文字:已建立基準的答案。

  • 基礎分數:介於 [0, 1] 之間的浮點值,表示答案與指定來源的關聯程度。

  • 建立基準中繼資料:建立基準來源的中繼資料。基礎中繼資料包含下列資訊:

    • 支援的區塊:支援答案的區塊清單。每個支援區塊都會指派支援區塊索引,有助於追蹤出處。每個支援區塊都包含下列內容:

      • 文字塊:從來源逐字引用的一段文字,答案或部分答案 (稱為「主張文字」) 即是從這段文字擷取而來。回覆中不一定會顯示這項資訊。
      • 來源:指派給要求中來源的索引。
      • 來源中繼資料:區塊的中繼資料。視來源而定,來源中繼資料可以是下列任一項:

        • 如果是內嵌來源,中繼資料可以是要求中指定的其他詳細資料,例如標題、作者或 URI。
        • 如果是 Vertex AI Search 資料儲存庫,中繼資料可以是文件 ID、文件標題、URI (Cloud Storage 位置) 或頁碼。
        • 如果使用「以 Google 搜尋建立基準」功能生成結果,中繼資料會包含 URI,重新導向至用於生成結果的內容發布者。中繼資料也包含發布者的網域。生成基礎結果後,您最多可在 30 天內存取提供的 URI。
    • 基礎支援:答案中聲明的基礎資訊。 基礎支援包含下列資訊:

      • 主張文字:以支援區塊文字佐證的答案或答案的一部分。
      • 支援區塊索引:指派給支援區塊的索引,順序是區塊在支援區塊清單中出現的順序。
      • 網路搜尋查詢:Google 搜尋建議的建議搜尋查詢。
      • 搜尋建議:如果回覆內容包含 Google 搜尋建議,則該回覆為「建立基準的結果」,須遵守「利用 Google 搜尋建立基準」的服務條款。詳情請參閱服務條款searchEntryPoint 欄位中的 renderedContent 欄位是導入 Google 搜尋建議的程式碼。如要使用 Google 搜尋建議,請參閱「使用 Google 搜尋建議」。

在單一回合中生成有憑有據的答案

本節說明如何根據下列來源生成答案:

以內嵌文字和 Vertex AI Search 資料儲存庫做為回覆基準

下列範例說明如何指定內嵌文字和 Vertex AI Search 資料儲存庫做為基準來源,藉此傳送提示文字。您無法將網站搜尋資料儲存庫指定為基礎來源。 這個範例使用 generateGroundedContent 方法。

REST

  1. 在下列 curl 要求中傳送提示。

    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
     },
    }
    }'
    

    更改下列內容:

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。
    • PROMPT_TEXT:使用者提供的提示。
    • SYSTEM_INSTRUCTION: 選填欄位,可提供前言或其他背景資訊。
    • FACT_TEXT_N: 用來提供答案的內嵌文字。最多可提供 100 則事實文字。
    • TITLE_N: 這個選用欄位可為內嵌文字設定標題中繼屬性。
    • URI_N: 這個選填欄位可為內嵌文字設定 URI 中繼屬性。
    • AUTHOR_N: 選用欄位,可為內嵌文字設定作者中繼屬性。
    • APP_ID_N:Vertex AI Search 應用程式的 ID。
    • MODEL_ID: 這個選填欄位可設定要用來生成基礎答案的 Gemini 模型 ID。如需可用模型 ID 清單,請參閱「支援的型號」。
    • TEMPERATURE: 選填欄位,用於設定取樣時使用的溫度。Google 建議將溫度設為 0.0。詳情請參閱「Gemini 模型參數」。
    • TOP_P: 選用欄位,可為模型設定 top-P 值。詳情請參閱「Gemini 模型參數」。
    • TOP_K: 選用欄位,可為模型設定前 K 個值。詳情請參閱「Gemini 模型參數」。
    • LANGUAGE_CODE: 這個選用欄位可用於設定生成答案和傳回的區塊文字語言。如果系統無法從查詢判斷語言,就會使用這個欄位。預設值為 en。如需語言代碼清單,請參閱「語言」。
    • LATITUDE: 選填欄位,用於設定緯度。輸入十進位度數值,例如 -25.34
    • LONGITUDE: 設定經度的選填欄位。輸入十進位度數值,例如 131.04

根據內嵌文字和 Vertex AI Search 生成單輪回覆的範例

在下列範例中,要求指定了以下基礎來源:一個內嵌文字事實和一個 Vertex AI Search 資料儲存庫。這個範例使用 generateGroundedContent 方法。這個範例也使用系統指令,在答案結尾加上笑臉表情符號。

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
    }
  }
}'

透過 Google 搜尋生成有憑有據的答案

您可以根據公開網路資料,生成有憑有據的回覆。

動態擷取

您可以在要求中使用動態擷取功能,選擇何時關閉 Grounding with Google Search。如果提示的回覆不需要使用 Google 搜尋做為基準,且支援的模型可根據自身具備的知識做出回覆,不必建立基準,就很適合使用這項功能。這有助於更有效地管理延遲時間、品質和成本。

動態擷取預測分數和門檻

當您傳送要求生成有根據的答案時,AI Applications 會為提示指派預測分數。預測分數是介於 0 到 1 之間的浮點值。這個值取決於提示是否能從 Google 搜尋的最新資訊中獲益。因此,如果提示要求根據網路上最新的事實提供答案,預測分數就會較高;如果提示只需要模型生成答案,預測分數就會較低。

以下列舉幾個提示及其預測分數。

提示 預測分數 註解
「寫一首關於牡丹的詩」 0.13 模型可根據自身具備的知識做出回覆,不必建立基準
「Suggest a toy for a 2yo child」(為 2 歲兒童推薦玩具) 0.36 模型可根據自身具備的知識做出回覆,不必建立基準
「可以提供亞洲風味酪梨醬的食譜嗎?」 0.55 Google 搜尋可以提供以基準為依據的回覆,但並非必要;模型知識可能就已足夠
「什麼是 AI 應用程式?在 AI 應用程式中,如何計算基礎功能的費用? 0.72 需要 Google 搜尋生成有根據的答案
「最近一次的 F1 大獎賽是誰贏得冠軍?」 0.97 需要 Google 搜尋生成有根據的答案

在生成以基礎事實為依據的答案要求中,您可以指定具有門檻的動態擷取設定。閾值是範圍 [0,1] 內的浮點值,預設值為 0.7。如果閾值為零,回覆一律以 Google 搜尋為基準。如為其他門檻值,則適用下列情況:

  • 如果預測分數大於或等於門檻,系統會根據 Google 搜尋結果提供答案。門檻越低,表示有更多提示詞的回覆是使用 Google 搜尋建立基準。
  • 如果預測分數低於門檻,模型可能仍會生成答案,但不會以 Google 搜尋為基準。

如要找出符合業務需求的合適門檻,您可以建立預期會遇到的代表性查詢組合。然後,您可以根據回應中的預測分數排序查詢,並為您的用途選取合適的門檻。

利用 Google 搜尋建立回覆基準

以下範例說明如何指定 Google 搜尋做為基礎來源,根據提示生成有根據的答案。這個範例使用 generateGroundedContent 方法。

REST

  1. 在下列 curl 要求中傳送提示。

    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
     },
    }
    }'
    

    更改下列內容:

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。
    • PROMPT_TEXT:使用者提供的提示。
    • SYSTEM_INSTRUCTION: 選填欄位,可提供前言或其他背景資訊。
    • DYNAMIC_RETRIEVAL_THRESHOLD:選用欄位,可設定叫用動態擷取設定的門檻。這是介於 0 到 1 之間的浮點值。如果您新增 dynamicRetrievalConfig 欄位,但未設定 predictorthreshold 欄位,閾值會預設為 0.7。如果未設定 dynamicRetrievalConfig 欄位,系統一律會以基礎知識為依據提供答案。
    • MODEL_ID: 這個選填欄位可設定要用來生成基礎答案的 Gemini 模型 ID。如需可用模型 ID 清單,請參閱「支援的型號」。
    • TEMPERATURE: 選填欄位,用於設定取樣時使用的溫度。Google 建議將溫度設為 0.0。詳情請參閱「Gemini 模型參數」。
    • TOP_P: 選用欄位,可為模型設定 top-P 值。詳情請參閱「Gemini 模型參數」。
    • TOP_K: 選用欄位,可為模型設定前 K 個值。詳情請參閱「Gemini 模型參數」。
    • LANGUAGE_CODE: 這個選用欄位可用於設定生成答案和傳回的區塊文字語言。如果系統無法從查詢判斷語言,就會使用這個欄位。預設值為 en。如需語言代碼清單,請參閱「語言」。
    • LATITUDE: 選填欄位,用於設定緯度。輸入十進位度數值,例如 -25.34
    • LONGITUDE: 設定經度的選填欄位。輸入十進位度數值,例如 131.04

在下列範例中,要求會將 Google 搜尋指定為基礎來源。這個範例使用 generateGroundedContent 方法。這個範例也使用系統指令,在答案結尾加上笑臉表情符號。

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 ai applications?"
}]
}],
"systemInstruction": {
   "parts": {
      "text": "Add a smiley emoji after the answer."
   }
},
"groundingSpec": {
  "groundingSources": [
  {
      "googleSearchSource": {
        "dynamicRetrievalConfig": {
               "predictor":{
                   "threshold": 0.6
               }
           }
      }
  }
 ]
},
"generationSpec": {
  "modelId": "gemini-1.5-flash"
}
}
'

在多輪對話中生成基準化回覆

在多輪對話的答案生成過程中,您必須在每個要求中,傳送使用者和模型在先前所有輪次中交換的所有文字。這可確保連續性並保留脈絡,以便為最新的提示生成答案。

如要透過多輪對話生成有根據的回覆,請按照下列步驟操作:

REST

下列範例說明如何透過多個回合傳送後續提示文字。這些範例使用 generateGroundedContent 方法,並以 Google 搜尋為答案建立基準。您可以使用類似的步驟,透過其他依據來源生成有依據的回覆。

  1. 在下列 curl 要求中傳送第一個提示。

    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
     },
    }
    }'
    

    更改下列內容:

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。
    • PROMPT_TEXT_TURN_1:使用者在第一輪提供的提示文字。
    • SYSTEM_INSTRUCTION_TURN_1: 選填欄位,可提供前言或其他背景資訊。 如要生成多輪對話的答案,您必須在每一輪提供系統指示。
    • MODEL_ID: 這個選填欄位可設定要用來生成基礎答案的 Gemini 模型 ID。如需可用模型 ID 清單,請參閱「支援的型號」。
    • TEMPERATURE: 選填欄位,用於設定取樣時使用的溫度。Google 建議將溫度設為 0.0。詳情請參閱「Gemini 模型參數」。
    • TOP_P: 選用欄位,可為模型設定 top-P 值。詳情請參閱「Gemini 模型參數」。
    • TOP_K: 選用欄位,可為模型設定前 K 個值。詳情請參閱「Gemini 模型參數」。
    • LANGUAGE_CODE: 這個選用欄位可用於設定生成答案和傳回的區塊文字語言。如果系統無法從查詢判斷語言,就會使用這個欄位。預設值為 en。如需語言代碼清單,請參閱「語言」。
    • LATITUDE: 選填欄位,用於設定緯度。輸入十進位度數值,例如 -25.34
    • LONGITUDE: 設定經度的選填欄位。輸入十進位度數值,例如 131.04
  2. 接著傳送第二個提示詞做為後續提示。加入使用者的第一個提示,然後加入模型對應的回覆,做為情境。

    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
     },
    }
    }'
    

    更改下列內容:

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。
    • PROMPT_TEXT_TURN_1:使用者在第一輪提供的提示文字。
    • ANSWER_TEXT_TURN_1:第一輪對話中模型提供的答案文字。
    • PROMPT_TEXT_TURN_2:使用者在第二輪提供的提示文字。
    • SYSTEM_INSTRUCTION_TURN_2: 選填欄位,可提供前言或其他背景資訊。 如要生成多輪對話的答案,您必須在每一輪提供系統指示。
    • MODEL_ID: 這個選填欄位可設定要用來生成基礎答案的 Gemini 模型 ID。如需可用模型 ID 清單,請參閱「支援的型號」。
    • TEMPERATURE: 選填欄位,用於設定取樣時使用的溫度。Google 建議將溫度設為 0.0。詳情請參閱「Gemini 模型參數」。
    • TOP_P: 選用欄位,可為模型設定 top-P 值。詳情請參閱「Gemini 模型參數」。
    • TOP_K: 選用欄位,可為模型設定前 K 個值。詳情請參閱「Gemini 模型參數」。
    • LANGUAGE_CODE: 這個選用欄位可用於設定生成答案和傳回的區塊文字語言。如果系統無法從查詢判斷語言,就會使用這個欄位。預設值為 en。如需語言代碼清單,請參閱「語言」。
    • LATITUDE: 選填欄位,用於設定緯度。輸入十進位度數值,例如 -25.34
    • LONGITUDE: 設定經度的選填欄位。輸入十進位度數值,例如 131.04
  3. 重複這個程序,即可取得後續追問的答案。在每個回合中,加入使用者先前提供的所有提示,以及模型相應的回覆。

多輪對話的答案生成範例

在下列範例中,要求會指定三個內嵌事實文字做為依據來源,在兩個回合中生成答案。本範例使用 generateGroundedContent 方法。這個範例也使用系統指令,在第一輪對話中以笑臉表情符號結束回覆。

REST

  1. 在下列 curl 要求中傳送第一個提示。

    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"
    }
    }'
    
  2. 接著傳送第二個提示詞做為後續提示。加入使用者的第一個提示,然後加入模型對應的回覆,做為情境。

    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"
    }
    }'
    

逐句顯示已建立基準的答案

您可以選擇串流模型回覆的答案。如果答案特別長,一次傳送整個回覆會造成嚴重延遲,這時這項功能就非常實用。串流傳輸答案時,回應會分解為多個候選項目陣列,其中包含答案文字的連續部分。

如要取得串流式有根據的回覆,請按照下列步驟操作:

REST

以下範例說明如何串流傳輸有根據的答案。這個範例會使用 streamGenerateGroundedContent 方法,並以 Google 搜尋做為回覆的依據,不必進行動態擷取設定。您可以使用類似的步驟,透過其他依據來源生成有依據的回覆。

  1. 在下列 curl 要求中傳送提示。

    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
     },
    }
    }
    ]'
    

    更改下列內容:

    • PROJECT_NUMBER:您的 Google Cloud 專案編號。
    • PROMPT_TEXT:使用者提供的提示。
    • SYSTEM_INSTRUCTION: 選填欄位,可提供前言或其他背景資訊。
    • MODEL_ID: 這個選填欄位可設定要用來生成基礎答案的 Gemini 模型 ID。如需可用模型 ID 清單,請參閱「支援的型號」。
    • TEMPERATURE: 選填欄位,用於設定取樣時使用的溫度。Google 建議將溫度設為 0.0。詳情請參閱「Gemini 模型參數」。
    • TOP_P: 選用欄位,可為模型設定 top-P 值。詳情請參閱「Gemini 模型參數」。
    • TOP_K: 選用欄位,可為模型設定前 K 個值。詳情請參閱「Gemini 模型參數」。
    • LANGUAGE_CODE: 這個選用欄位可用於設定生成答案和傳回的區塊文字語言。如果系統無法從查詢判斷語言,就會使用這個欄位。預設值為 en。如需語言代碼清單,請參閱「語言」。
    • LATITUDE: 選填欄位,用於設定緯度。輸入十進位度數值,例如 -25.34
    • LONGITUDE: 設定經度的選填欄位。輸入十進位度數值,例如 131.04

串流傳輸有依據的答案範例

在下列範例中,要求會將 Google 搜尋指定為基礎來源,以便串流傳輸答案,而不使用動態擷取設定。串流答案會分散在多個候選回應中。這個範例使用 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 AI Applications?"
        }
      ]
    }
  ],
  "groundingSpec": {
    "groundingSources": [
      {
        "googleSearchSource": {}
      }
    ]
  },
  "generationSpec": {
    "modelId": "gemini-1.5-flash"
  }
}
]'

支援的模型

下列模型支援基礎:

  • 僅支援文字輸入的 Gemini 1.5 Pro
  • 僅支援文字輸入的 Gemini 1.5 Flash

如要進一步瞭解這些 Gemini 模型,請參閱「Gemini 模型版本和生命週期」。

呼叫 generateGroundedContent 方法時,可以使用下列模型 ID:

模型 ID 自動更新
default
gemini-1.5-flash
gemini-1.5-flash-001
gemini-1.5-flash-002
gemini-1.5-pro
gemini-1.5-pro-001
gemini-1.5-pro-002

後續步驟

瞭解如何搭配其他 RAG API 使用基礎生成方法,從非結構化資料生成基礎答案