使用 RAG 生成有依据的回答

在 AI 应用中体验检索增强生成 (RAG) 功能时,您可以根据以下依据来源生成基于事实的提示回答:

  • Google 搜索:如果您想将模型与世界知识、各种主题或互联网上的最新信息相连接,请使用“依托 Google 搜索进行接地”功能。使用 Google 搜索建立依据支持动态检索,让您可以选择仅在必要时使用 Google 搜索生成接地结果。因此,动态检索配置会评估提示是否需要了解近期活动,并启用“依托 Google 搜索进行接地”功能。如需了解详情,请参阅动态检索
  • 内嵌文本:使用内嵌文本进行接地,以将答案接地到请求中提供的称为事实文本的文本片段。事实文本是指用户提供的被认为与给定请求相关的事实陈述。模型不会检查事实文本的真实性。
  • 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 模型参数

  • 语言代码:生成的答案的语言通常设置为与提示的语言一致。如果提示中没有明确的语言(例如,如果提示非常简短,可以采用多种语言),则语言代码字段会决定回答的语言。

    如需查看语言代码列表,请参阅语言

  • 纬度和经度:指定用户的纬度和经度。 如果查询包含特定于位置的问题,例如“查找我附近的咖啡店”,则使用这些字段。如果无法确定查询语言,并且未设置语言代码,则使用纬度和经度来确定回答的语言。

输出数据

模型生成的回答称为候选回答,其中包含以下数据。输出中可能不会显示所有字段。

  • 角色:接地回答的发送者。回答始终包含根据事实依据生成的回答文本。因此,回答中的角色始终是模型。

  • 文本:接地回答。

  • 依据得分:一个介于 [0, 1] 范围内的浮点值,用于指示答案在给定来源中的依据程度。

  • 基础元数据:有关基础来源的元数据。基础元数据包含以下信息:

    • 支持块:支持答案的块列表。每个支持块都会分配一个支持块索引,该索引在跟踪来源时非常有用。每个支持块包含以下内容:

      • 文本块:从答案或部分答案(称为声明文本)的来源中逐字引用的一部分文本。此字段可能不会始终出现在响应中。
      • 来源:请求中分配给来源的索引。
      • 来源元数据:有关块的元数据。根据来源的不同,来源元数据可以是以下任一类型:

        • 对于内嵌来源,元数据可以是请求中指定的其他详细信息,例如标题、作者或 URI。
        • 对于 Vertex AI Search 数据存储区,元数据可以是文档 ID、文档标题、URI(Cloud Storage 位置)或页码。
        • 对于“使用 Google 搜索建立依据”,当生成有依据的结果时,元数据会包含一个 URI,该 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:一个可选字段,用于为内嵌文本设置 title 元属性。
    • 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:一个可选字段,用于设置模型的 Top-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 搜索生成有依据的回答

您可以根据公开提供的 Web 数据生成回答。

动态检索

您可以在请求中使用动态检索功能,选择何时关闭“依托 Google 搜索进行接地”功能。当提示不需要依托 Google 搜索进行接地来获得回答,并且支持的模型能够基于自身知识在不进行接地的情况下提供回答时,就可以利用这项功能。这有助于您更有效地管理延迟时间、回答质量和费用。

动态检索预测得分和阈值

当您发送请求以生成有事实依据的回答时,AI 应用会为提示分配一个预测得分。预测得分是介于 [0,1] 范围内的浮点值。其值取决于提示是否能通过依托 Google 搜索中的最新信息来生成回答。因此,需要根据网络上的最新事实给出回答的提示的预测得分较高,而模型生成的回答就足够的提示的预测得分较低。

以下是一些提示及其预测得分的示例。

提示 预测分数 评论
“写一首关于牡丹的诗” 0.13 模型可以依靠自身知识,回答不需要接地
“为 2 岁儿童推荐玩具” 0.36 模型可以依靠自身知识,回答不需要接地
“你能提供一份灵感源自亚洲的鳄梨酱食谱吗?” 0.55 Google 搜索可以提供有依据的回答,但并非必须进行接地;模型知识可能就足够了
“什么是 AI 应用?AI 应用中,利用 Google 搜索建立回答依据的机制如何收费? 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:一个可选字段,用于设置模型的 Top-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:一个可选字段,用于设置模型的 Top-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:一个可选字段,用于设置模型的 Top-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:一个可选字段,用于设置模型的 Top-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 搭配使用,以从非结构化数据中生成接地回答