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

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

  • Google 搜尋:如果您想將模型連結至網路中的世界知識、各種主題或最新資訊,建議利用 Google 搜尋建立基準。Grounding with Google Search 支援動態擷取功能,可讓您在必要時才使用 Google 搜尋產生基準結果。因此,動態擷取設定會評估提示是否需要近期事件的知識,並啟用 Grounding with Google Search。詳情請參閱「動態擷取」。
  • 內嵌文字:使用內嵌文字的基礎,將答案建立在要求中提供的「事實文字」中。事實文字是使用者提供的陳述,在特定要求中視為事實。模型不會檢查事實文字的真實性。
  • Vertex AI Search 資料儲存庫:如果您想將模型連結至 Vertex AI Search 資料儲存庫中的企業文件,請使用 Vertex AI Search 建立基準。

本頁面說明如何根據這些來源產生根基答案,方法如下:

此外,您也可以選擇從模型串流答案。透過串流產生基準化回答功能是一項實驗功能。

您可以使用其他方法產生有依據的答案,以符合應用程式的需求。如需更多資訊,請參閱建構搜尋和 RAG 體驗的 Vertex AI API

術語

在使用依據事實生成答案的方法前,建議您先瞭解輸入內容和輸出內容、如何建構要求,以及 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 模型參數」。

  • 語言代碼:系統通常會將產生的答案語言設為與提示語言相符。如果提示中沒有單一語言 (例如,如果提示很短,且可在多種語言中使用),則語言代碼欄位會決定答案的語言。

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

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

輸出資料

模型產生的回應稱為候選答案,其中包含下列資料。輸出結果中可能不會顯示所有欄位。

  • 角色:已建立基準的答案傳送者。回應一律會包含具體答案文字。因此,回應中的角色一律是模型。

  • 文字:具體答案。

  • Grounding 分數:介於 [0, 1] 範圍內的浮點值,表示答案與指定來源的關聯程度。

  • 接地中繼資料:接地來源的中繼資料。接地中繼資料包含下列資訊:

    • 支援的片段:支援答案的片段清單。每個支援區塊都會指派一個支援區塊索引,這在追蹤來源時非常實用。每個支援區塊都包含下列內容:

      • Chunk text:從來源擷取的文字片段,其中包含擷取答案或答案片段 (稱為「主張文字」) 的部分內容。回應中不一定會顯示這個值。
      • Source:在要求中指派給來源的索引。
      • 來源中繼資料:關於區塊的中繼資料。視來源而定,來源中繼資料可以是下列任一項目:

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

      • 聲明文字:透過支援片段文字證實的答案或答案的一部分。
      • 支援區塊索引:依照支援區塊在支援區塊清單中的顯示順序,為支援區塊指派的索引。
      • 網頁搜尋查詢: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 搜尋產生有憑有據的答案

您可以使用公開網路資料,為產生的回覆建立基準。

動態擷取

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

動態擷取預測分數和門檻

當您傳送要求以產生具依據的答案時,AI 應用程式會為提示指派預測分數。預測分數是介於 0 到 1 之間的浮點值。這項屬性的值取決於提示是否能從 Google 搜尋中取得最新資訊,並以此做為回覆的基準。因此,如果提示要求以網路上最新的事實為依據提供答案,預測分數就會較高;如果提示只需要模型產生的答案,預測分數就會較低。

以下列舉一些提示和相應的預測分數。

提示 預測分數 註解
「寫一首關於牡丹的詩」 0.13 模型可依靠自身知識提供回覆,不需要建立基準
「推薦適合 2 歲兒童的玩具」 0.36 模型可依靠自身知識提供回覆,不需要建立基準
「能否提供亞洲風味酪梨醬食譜?」 0.55 Google 搜尋可提供建立基準的答案,但不一定需要建立基準;模型知識可能就足以提供答案
「什麼是 AI 應用程式?How is grounding billed in AI Applications?" 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 欄位,答案一律會以 Google 搜尋為基準。
    • 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 使用根據基準生成內容方法,從非結構化資料產生根據基準的答案