获取来自 StreamAssist 的搜索结果

在 Web 应用中,您可以以流式回答形式获得问题解答。本文档介绍了如何使用 REST API 获得答案。如果您想使用 Gemini Enterprise Web 应用,请参阅 与助理聊天

StreamAssist 概览

StreamAssist 提供了一种强大且互动的方式来处理用户查询。它以流式方式运行,可实现实时双向互动。

该 API 的主要功能包括:

  • 保持对话式上下文:该 API 使用会话来保持对话式上下文,确保它能理解之前互动范围内的后续查询。

  • 整合提供的文件:该 API 将附加的文件作为上下文添加,以便获得更明智、更相关的回答。

  • 无缝集成:该 API 可与各种代理和工具集成,以满足各种用户请求。

准备工作

确保您具有以下各项:

  • 为您的项目启用 Discovery Engine API Google Cloud。 您可以在Google Cloud 控制台中的 Discovery Engine API 页面上启用该 API。

    前往 Discovery Engine API

  • 已分配 discoveryengine.assistants.assist 权限的 Discovery Engine 角色

  • 现有的 Gemini Enterprise 应用。如需创建应用,请参阅创建应用

获取搜索结果

您可以使用 streamAssist 方法向 Gemini Enterprise 查询并获得答案。以下 curl 命令列出了必填字段。

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://ENDPOINT_LOCATION-discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/assistants/default_assistant:streamAssist" \
  -d '
{
  "query": {
    "text": "QUERY_TEXT_1"
  }
}'

替换以下内容:

  • ENDPOINT_LOCATION:API 请求的多区域。请指定以下某个值:
    • us(表示美国多区域)
    • eu(表示欧盟多区域)
    • global(表示全球位置)
    如需了解详情,请参阅为数据存储区指定多区域
  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • APP_ID:Gemini Enterprise 应用的唯一标识符。
  • LOCATION:数据存储区的多区域:globaluseu
  • QUERY_TEXT_1:搜索查询文本。

如需详细了解这些字段以及返回的内容,请参阅回答正文

Python

试用此示例之前,请按照 Python 设置说明进行操作。 请按照 Gemini Enterprise 快速入门:使用 客户端库中的说明进行操作。 如需了解详情,请参阅 Gemini Enterprise Python API 参考文档

如需向 Gemini Enterprise 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证

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

# TODO(developer): Update these variables before running the sample.
project_id = "YOUR_PROJECT_ID"
location = "YOUR_LOCATION"
engine_id = "YOUR_APP_ID"
query = "What is Gemini Enterprise?"


def stream_assist_sample(
    project_id: str,
    location: str,
    engine_id: str,
    query: str,
):
    # For more information, refer to:
    # https://docs.cloud.google.com/gemini/enterprise/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    client = discoveryengine.AssistantServiceClient(client_options=client_options)

    request = discoveryengine.StreamAssistRequest(
        name=client.assistant_path(
            project=project_id,
            location=location,
            collection="default_collection",
            engine=engine_id,
            assistant="default_assistant",
        ),
        query=discoveryengine.Query(text=query),
    )

    # Make the request
    stream = client.stream_assist(request=request)

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

使用同一会话获取搜索结果

如需在现有会话中继续对话并从 Gemini Enterprise 获得答案,请使用 streamAssist 方法。以下代码示例展示了必填字段:

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://ENDPOINT_LOCATION-discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/assistants/default_assistant:streamAssist" \
  -d '
{
  "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
  "query": {
    "text": "QUERY_TEXT_2"
  }
}'

替换以下内容:

  • ENDPOINT_LOCATION:API 请求的多区域。请指定以下某个值:
    • us(表示美国多区域)
    • eu(表示欧盟多区域)
    • global(表示全球位置)
    如需了解详情,请参阅为数据存储区指定多区域
  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • APP_ID:Gemini Enterprise 应用的唯一标识符。
  • LOCATION:数据存储区的多区域:globaluseu
  • QUERY_TEXT_2:搜索查询文本。
  • SESSION_ID:之前 对话或查询中的会话的 ID。

如需详细了解这些字段以及返回的内容,请参阅回答正文

Python

试用此示例之前,请按照 Python 设置说明进行操作。 请按照 Gemini Enterprise 快速入门:使用 客户端库中的说明进行操作。 如需了解详情,请参阅 Gemini Enterprise Python API 参考文档

如需向 Gemini Enterprise 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证

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

# TODO(developer): Update these variables before running the sample.
project_id = "YOUR_PROJECT_ID"
location = "YOUR_LOCATION"
engine_id = "YOUR_APP_ID"
session = "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID" # From previous session
query = "What is Gemini Enterprise?"


def stream_assist_session_sample(
    project_id: str,
    location: str,
    engine_id: str,
    session: str,
    query: str,
):
    # For more information, refer to:
    # https://docs.cloud.google.com/gemini/enterprise/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    client = discoveryengine.AssistantServiceClient(client_options=client_options)

    request = discoveryengine.StreamAssistRequest(
        name=client.assistant_path(
            project=project_id,
            location=location,
            collection="default_collection",
            engine=engine_id,
            assistant="default_assistant",
        ),
        session=session,
        query=discoveryengine.Query(text=query),
    )

    # Make the request
    stream = client.stream_assist(request=request)

    # Handle the response
    for response in stream:
        print(response.answer)
        # Get Session ID
        print(response.session_info.session)

上传文件并获取搜索结果(预览版)

如需为助理提供更多上下文,请将文件上传到会话,然后查询其内容。请按照以下步骤操作:

  1. 使用 addContextFile 方法将文件上传到会话。

    REST

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://ENDPOINT_LOCATION-discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/sessions/SESSION_ID:addContextFile" \
      -d '
    {
      "fileName": "FILE_NAME",
      "mimeType": "MIME_TYPE",
      "fileContents": "BASE64_ENCODED_FILE"
    }'
    

    替换以下内容:

    • ENDPOINT_LOCATION:API 请求的多区域。请指定以下某个值:
      • us(表示美国多区域)
      • eu(表示欧盟多区域)
      • global(表示全球位置)
      如需了解详情,请参阅为数据存储区指定多区域
    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • LOCATION:数据存储区的多区域:globaluseu
    • APP_ID:Gemini Enterprise 应用的唯一标识符。
    • SESSION_ID:之前 对话或查询中的会话的 ID。
    • FILE_NAME:文件的名称。
    • MIME_TYPE:文件的 MIME 类型,例如 text/plainapplication/pdf。如需详细了解不同的媒体类型, 请参阅媒体类型
    • BASE64_ENCODED_FILE:文件的 base64 编码表示形式。

    如需详细了解这些字段以及返回的内容,请参阅回答正文

  2. 使用同一会话询问有关您使用 streamAssist 方法上传的文件的问题。

    REST

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://ENDPOINT_LOCATION-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/engines/APP_ID/assistants/default_assistant:streamAssist" \
      -d '
    {
      "session": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID",
      "fileIds": ["FILE_ID"],
      "query": {
        "text": "QUERY_TEXT_3"
      }
    }'
    
    

    替换以下内容:

    • ENDPOINT_LOCATION:API 请求的多区域。请指定以下某个值:
      • us(表示美国多区域)
      • eu(表示欧盟多区域)
      • global(表示全球位置)
      如需了解详情,请参阅为数据存储区指定多区域
    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:Gemini Enterprise 应用的唯一标识符。
    • LOCATION:数据存储区的多区域:globaluseu
    • QUERY_TEXT_3:搜索查询文本。
    • SESSION_ID:之前 对话或查询中的会话的 ID。
    • FILE_ID:您上传到助理的文件的 ID。

    如需详细了解这些字段以及返回的内容,请参阅回答正文