使用智能体检索功能流式传输答案

本页介绍了智能体检索,并说明了如何将其与 流式传输回答方法搭配使用。

智能体检索简介

将智能体检索与流式传输回答方法搭配使用,可以在某些使用场景中获得更好的结果,例如,为具有多个数据存储区的应用启用多轮检索,或为不同类别的查询自定义回答生成。

使用智能体检索会增加应用的复杂性,但作为回报,您可以更好地控制结果。

Agent Search 包含一个预定义的智能体,您可以使用该智能体自定义搜索引擎的行为。与通过应用配置界面或不使用智能体检索的 流式传输回答方法相比,这种方式可以进行更多自定义。

使用和不使用智能体检索的混合搜索

智能体检索对于混合搜索应用尤其有用。如果不使用智能体检索,搜索会使用单轮扇出,一次性查询所有数据存储区。相比之下,智能体检索支持多轮搜索。智能体会按顺序规划和执行搜索,并为每个步骤选择最佳工具。它可以合并来自多个 Agent Search 数据存储区的结果,还可以使用 Google 搜索和 Google 地图等工具。

例如,您为全球公司政策和区域办事处详细信息设置了单独的数据存储区。用户提问:“东京办事处的合规性规则是什么?”:

  • 如果不使用智能体检索:使用完整的查询字符串同时查询政策存储区和区域办事处存储区。这可能会返回零散的结果。

  • 如果使用智能体检索:智能体会规划执行过程。它首先从区域存储区检索有关东京办事处的详细信息。然后,它会使用该特定上下文在政策存储区中执行第二次有针对性的搜索。

    智能体会将这些发现综合成一个连贯且更准确的回答。

智能体检索还允许您对混合搜索应用执行多轮搜索查询(后续问题)。如果不使用智能体检索,多轮搜索仅适用于单个数据存储区应用。如需在多个轮次中保留对话上下文,您可以选择将智能体检索与 Agent Platform 会话配对

自定义查询分类

回答和流式传输回答方法提供了两种查询分类类型:ADVERSARIAL_QUERYNON_ANSWER_SEEKING_QUERY

智能体检索允许您定义其他分类类型,以匹配您的业务工作流。系统会使用分类器来确定用户的意图,并将请求路由到相应的智能体配置。

例如,您从查询中确定查询的意图是跟踪订单,并且您已指定 TRACK_ORDER 分类。系统不会在所有数据存储区中运行宽泛搜索,而是会加载一个配备了检索发货状态所需的工具和数据的专用智能体。

启用和使用智能体检索的方法

您可以通过以下两种方式启用智能体检索:

  • 预定义的 Google 回答智能体: 如果您已在 Agent Search 中有一个搜索应用,则可以在向该应用发送查询时,通过在 API 请求中设置 enable_agent_invocation=true 来启用智能体检索。在这种情况下,您将保留现有的搜索服务配置。

  • 自定义 AI 模式应用: 创建 Agent Search 应用时,您可以定义不同类型的服务配置,即 default_agent_answer 服务配置。这也可以称为自定义 AI 模式引擎,因为“应用”和“引擎”在 Agent Search 中可以互换使用。

准备工作

在使用智能体检索之前,请执行以下操作:

为多轮会话设置推理引擎

如需在多个轮次中保留对话上下文,您需要在 Gemini Enterprise Agent Platform 引擎(也称为推理引擎)上创建 Agent Runtime。

发出 streamAnswer 请求时,您需要将 Agent Runtime 的资源名称作为 streamAnswer 请求中的 reasoningEngine 字段传递。

  1. 在您的 Google Cloud 项目上启用 Agent Platform

  2. 使用 Agent Engine REST API(或 智能体开发套件)创建 Agent Runtime 实例(也称为推理引擎) 。该实例托管 streamAnswer 方法使用的会话。

    实例资源名称的格式如下:

    projects/PROJECT_NUMBER/locations/LOCATION_ID/reasoningEngines/REASONING_ENGINE_ID
  3. 通过将 roles/aiplatform.reasoningEngineServiceAgent 角色授予 Discovery Engine 服务帐号,向 Discovery Engine 服务代理授予对推理引擎的访问权限:

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com

    其中,PROJECT_NUMBER 是托管推理引擎的项目的编号。有了此权限,流式传输回答后端就可以代表您创建会话、读取会话和向会话附加事件。

  4. 查看适用的配额。由 Agent Runtime 支持的会话会消耗 Agent Platform API 的配额。 相关配额如下:

    • aiplatform.googleapis.com/session_write_requests :每分钟创建、删除或更新的 Agent Runtime 会话数。

    • aiplatform.googleapis.com/session_event_append_requests :每分钟向 Agent Runtime 会话附加的事件数。

    如需了解详情,请参阅 Gemini Enterprise Agent Platform Agent Engine 配额

  5. 记下 Agent Runtime 资源名称,因为您需要将其作为 streamAnswer 请求中的 reasoningEngine 字段传递。

可选:设置自定义 AI 模式应用

默认情况下,智能体检索使用预定义的 Google 回答智能体。它会将查询分类为意图 DEFAULT_ANSWER_SEEKINGDO_NOT_ANSWER。 如果您想自定义工具或添加对新类别的查询意图的支持,可以创建自定义 AI 模式应用。每个自定义意图(或 frame)都会声明智能体将查询分类为该意图的条件,以及智能体用于处理该意图的说明和工具。

  1. 通过带有 engine_config.answer_agent 块的 engines.create REST 方法创建引擎。

    配置结构如下:

    engine {
     name: "YOUR_AI_MODE_ENGINE"
     display_name: "YOUR_AI_MODE_ENGINE_DISPLAY_NAME"
     engine_config {
       answer_agent {
         frames {
           vertical_intent: "YOUR_CUSTOM_INTENT"
           vertical_intent_prompt {
             instructions: "Instructions for when to classify a user query as YOUR_CUSTOM_INTENT."
           }
           initial_prompt {
             instructions: "Instructions for the agent on how to process a user query classified as YOUR_CUSTOM_INTENT."
             tools {
               discovery_engine_search_tool_config {
                 serving_config: "YOUR_SEARCH_SERVING_CONFIG_1"
                 page_size: 10
               }
               tool_description: "This tool can help search corpus 1."
             }
             tools {
               discovery_engine_search_tool_config {
                 serving_config: "YOUR_SEARCH_SERVING_CONFIG_2"
                 page_size: 10
               }
               tool_description: "This tool can help search corpus 2."
             }
           }
         }
       }
     }
    }
    engine_id: "SAMPLE_MULTI_SEARCH_RETRIEVAL"
  2. 创建引擎后,通过其 default_agent_answer 服务配置路由请求:

    projects/*/locations/*/collections/*/engines/YOUR_AI_MODE_ENGINE/servingConfigs/default_agent_answer
  3. 如需获得有关设计或注册自定义 AI 模式应用的帮助,请与 支持团队联系。

使用智能体检索流式传输回答

以下命令展示了如何在启用智能体检索的情况下调用流式传输 回答方法。与不使用智能体检索的输出类似,此调用会以一系列 JSON 响应的形式流式传输生成的回答。

如果您已设置推理引擎,请将其资源名称包含在 reasoningEngine 字段中,以便在多个轮次中保留会话。

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_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/SERVING_CONFIG_ID:streamAnswer" \
      -d '{
            "query": { "text": "QUERY" },
            "session": "SESSION",
            "enableAgentInvocation": true,
            "userPseudoId": "USER_PSEUDO_ID",
            "reasoningEngine": "projects/PROJECT_NUMBER/locations/LOCATION_ID/reasoningEngines/REASONING_ENGINE_ID"
          }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:您要查询的 Agent Search 应用的 ID。
    • SERVING_CONFIG_ID:如需使用自定义 AI 模式应用,请将此值设置为 default_agent_answer。如需使用预定义的 Google 回答智能体,请将此值设置为 default_search.
    • PROJECT_NUMBER:托管推理引擎的项目的编号。
    • QUERY:包含问题或搜索查询的自由文本字符串。
    • SESSION:如果继续进行多轮对话,这是在上一个轮次的响应中返回的会话资源名称,例如 projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/sessions/SESSION_ID。如果不继续对话,请将此值设置为 -(连字符)。
    • USER_PSEUDO_ID:用于 跟踪访问者的唯一标识符。
    • LOCATION_ID:推理引擎的位置,例如 us-central1
    • REASONING_ENGINE_ID:您创建的 Agent Engine 实例的 ID。

Python

如需了解详情,请参阅 Agent Search Python API 参考文档

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

以下示例使用 Discovery Engine Python 客户端 (v1alpha) 在启用 智能体调用的情况下调用 stream_answer_query。传递 reasoning_engine 字段以进行多轮会话。

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1alpha


def run_stream_answer_query():
    PROJECT_ID = "YOUR_PROJECT_ID"
    LOCATION = "global"  # or a specific region
    COLLECTION_ID = "default_collection"
    ENGINE_ID = "YOUR_ENGINE_ID"
    # Use "default_search" for the predefined Google answer agent, or
    # "default_agent_answer" if you have configured a custom AI_MODE app.
    SERVING_CONFIG_ID = "default_search"
    USER_ID = "user-id"
    QUERY_TEXT = "YOUR_QUERY_TEXT"
    REASONING_ENGINE_ID = "YOUR_REASONING_ENGINE_ID"
    # Use "-" to start a new session, or pass the sessionId returned in
    # the previous turn's response to continue an existing session.
    SESSION_ID = "-"

    SESSION_REF = (
        f"projects/{PROJECT_ID}/locations/{LOCATION}/collections/"
        f"{COLLECTION_ID}/engines/{ENGINE_ID}/sessions/{SESSION_ID}"
    )
    SERVING_CONFIG_ENGINE = (
        f"projects/{PROJECT_ID}/locations/{LOCATION}/collections/"
        f"{COLLECTION_ID}/engines/{ENGINE_ID}/servingConfigs/{SERVING_CONFIG_ID}"
    )
    REASONING_ENGINE = (
        f"projects/{PROJECT_ID}/locations/{LOCATION}/"
        f"reasoningEngines/{REASONING_ENGINE_ID}"
    )

    client_options = ClientOptions(
        api_endpoint="discoveryengine.googleapis.com"
    )

    client = discoveryengine_v1alpha.ConversationalSearchServiceClient(
        client_options=client_options
    )

    request = discoveryengine_v1alpha.AnswerQueryRequest(
        query=discoveryengine_v1alpha.Query(text=QUERY_TEXT),
        serving_config=SERVING_CONFIG_ENGINE,
        user_pseudo_id=USER_ID,
        enable_agent_invocation=True,
        session=SESSION_REF,
        reasoning_engine=REASONING_ENGINE,
    )

    print(f"Starting StreamAnswerQuery agentic session with: {request}")
    stream = client.stream_answer_query(request)

    try:
        for response in stream:
            print(f"Received response: {response}")
    except Exception as e:
        print(f"Error during streaming: {e}")


if __name__ == "__main__":
    run_stream_answer_query()

获取 Discovery Engine SDK 的预览版

借助 Discovery Engine SDK,您可以更轻松地与 Google Cloud 应用中的服务进行交互。该 SDK 可帮助您处理错误和进行身份验证,并提供自动重试、分页处理和长时间运行的操作管理等功能。

由于智能体检索功能列入了许可名单,因此您需要使用此功能的 SDK 与通常可用的 Discovery Engine 客户端库不同。

如需获取 Discovery Engine SDK 的预览版,请执行以下操作:

  1. 支持团队 联系,以获取对预览版 SDK Google 云端硬盘 文件夹的访问权限。

  2. 下载适用于您的语言的软件包。

API 变更

由于此功能列入了许可名单,因此 流式传输回答方法页面上的 API 参考文档不会显示所有可用于流式传输回答方法并使用智能体检索的字段 。缺少的字段记录如下。

请求正文字段

  • enableAgentInvocation (布尔值)- 设置为 true 可切换为使用现有搜索服务配置的智能体处理。如果您使用自定义 AI 模式应用指定 answer_agent 服务配置,则此字段为可选字段。

  • reasoningEngine(字符串)- 托管 Agent Runtime的 智能体会话的资源名称,格式为 projects/*/locations/*/reasoningEngines/*

响应字段

启用智能体检索后,每个生成的 Answer.Reference 都包含:

  • queries (重复字符串)- 智能体为生成引用而发出的查询列表。

会话服务

会话服务 REST API 不支持 createupdate 方法。不过,它支持其他方法: listgetdelete

会话服务 RPC API 不支持对用于多轮对话的会话资源执行 UpdateCreate 操作。 不过,它支持对用于多轮对话的会话资源执行其他服务:ListGetDelete 操作。