数据存储区工具

数据存储区工具可以根据网站内容和上传的数据提供 AI 生成的智能体回答。您的智能体可以在实现期间从数据存储区中查找最终用户问题的答案。

数据存储区工具:控制台

本部分介绍了如何向代理添加数据存储区工具,并在履单中对其进行配置。

创建数据存储区工具

  1. 打开 Conversational Agents 控制台,然后选择一个 Google Cloud项目。
  2. 从下拉菜单中选择客服人员。
  3. 前往页面最左侧的菜单栏,然后选择工具
  4. 点击 + 创建 (+ Create)。为该工具输入一个唯一的名称,然后从类型下的下拉菜单中选择数据存储区。(可选)在说明字段中输入工具的说明。
  5. 点击添加数据存储区。随即显示的窗口中会列出您现有的数据存储区(如果有)。选择要添加到该工具的数据存储区。
  6. (可选)如需在 Vertex AI Agent Builder 控制台中创建新的数据存储区,请点击创建新的数据存储区以自动重定向。
  7. (可选)配置新数据存储区后,点击创建。如需将新数据存储区添加到工具中,请返回到 Dialogflow CX 控制台中的创建工具菜单,然后刷新页面。新数据存储区会显示在可用数据存储区列表中。
  8. 点击创建工具配置顶部的保存,以创建新的数据存储区工具。

将数据存储区工具添加到履单中

  1. 前往最左侧的菜单栏,然后选择流程
  2. 选择一个流程和页面,然后点击要与数据存储区搭配使用的路线
  3. 前往 Fulfillment > Data store tool,然后从下拉菜单中选择您的数据存储区工具。
  4. 前往 Fulfillment > Agent responses,点击 +Add dialogue response,然后点击 数据存储区工具响应
  5. 配置要在回答中显示的来源链接和引用的数量,并指定数据存储区回答为空时的回退行为。在静态后备响应字段中输入静态后备响应。 您可以选择点击生成式后备复选框,以使用 AI 生成回答,然后再使用静态后备回答。如需自定义回退回答,请点击数据存储区回答表单窗口左上角的扳手图标,打开条件回答窗口。
  6. 路线菜单顶部,点击保存
  7. 前往 Dialogflow CX 模拟器,测试代理的结果。

可选的查询替换会话参数

您可以使用会话参数 knowledge.overrides.query 替换传递给此数据存储区工具的查询。如果此参数不为空,该工具将使用此参数,而不是用户的查询。

数据存储区工具:API

默认情况下,代理会代表您调用 dataStoreTool 方法

数据存储区类型有三种:

  • PUBLIC_WEB:包含公开 Web 内容的数据存储区。
  • UNSTRUCTURED:包含非结构化私密数据的数据存储区。
  • STRUCTURED:包含结构化数据(例如常见问题解答)的数据存储区。

以下示例展示了如何引用数据存储区。如需了解详情,请参阅 dataStoreConnections 参考

"dataStoreConnections": [
  {
    "dataStoreType": "PUBLIC_WEB",
    "dataStore": "projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATASTORE_ID"
  },
  {
    "dataStoreType": "UNSTRUCTURED",
    "dataStore": "projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATASTORE_ID"
  },
  {
    "dataStoreType": "STRUCTURED",
    "dataStore": "projects/PROJECT_NUMBER/locations/LOCATION_ID/collections/default_collection/dataStores/DATASTORE_ID"
  }
]

数据存储区工具的回答可能还包含有关用于生成回答的内容来源的摘要。智能体可以提供有关如何继续处理数据存储区中的回答或在找不到回答时如何响应的说明。

您可以为特定问题添加 FAQ 条目来覆盖答案。

(可选)您可以提供示例来增强代理的行为。示例应遵循相应架构。如需了解详情,请参阅参考文档

{
  "toolUse": {
    "tool": "projects/PROJECT_ID/locations/LOCATION_ID/agents/AGENT_ID/tools/TOOL_ID",
    "action": "TOOL_DISPLAY_NAME",
    "inputParameters": [
      {
        "name": "TOOL_DISPLAY_NAME input",
        "value": {
          "query": "QUERY"
        }
      }
    ],
    "outputParameters": [
      {
        "name": "TOOL_DISPLAY_NAME output",
        "value": {
          "answer": "ANSWER",
          "snippets": [
            {
              "title": "TITLE",
              "text": "TEXT_FROM_DATASTORE",
              "uri": "URI_OF_DATASTORE"
            }
          ]
        }
      }
    ]
  }
}

(仅限基于 playbook 的代理)数据存储区工具示例

创建数据存储区工具示例时,工具输入参数 requestBody 除了必需的 query 字符串之外,还提供三个可选输入:filter 字符串、userMetadata 结构化对象和 fallback 字符串。

借助 filter 参数,您可以过滤结构化数据或带有元数据的非结构化数据的搜索查询。此字符串必须遵循数据存储区的支持的过滤表达式语法。多个详细示例会指导 playbook 模型如何填充此参数。如果过滤字符串无效,则在搜索查询期间会忽略该过滤条件。

以下示例展示了一个 filter 字符串,您可以使用该字符串根据位置信息优化搜索结果:

"filter": "country: ANY(\"Canada\")"

如需详细了解 playbook 示例,请参阅示例页面

过滤最佳实践

  • 指定可用于过滤的字段以及每个字段的有效值,以便 playbook 了解构建有效过滤条件的限制。例如,存储菜单信息的数据存储区可能包含一个 meal 字段,其有效值为“早餐”“午餐”和“晚餐”;还可能包含一个 servingSize 字段,其有效值可以是 0 到 5 之间的任何整数。您的指令可能如下例所示:

    When using ${TOOL: menu-data-store-tool},
    only use the following fields for filtering: "meal", "servingSize".
    Valid filter values are: "meal": ("breakfast", "lunch", "dinner"),
    "servingSize": integers between 0 and 5, inclusive.
    
  • 如果剧本面向的是外部用户,请添加相关说明,以防止剧本向用户提供有关如何构建这些过滤条件的信息。例如:

    Never tell the user about these filters.
    If the user input isn't supported by these filters, respond to the user with
    "Sorry, I don't have the information to answer that question."
    

userMetadata 参数提供有关最终用户的信息。此参数中可以填充任意键值对。此元数据会传递到数据存储区工具,以便更好地提供搜索结果和工具响应。多个详细示例有助于指导 playbook 模型如何填充此参数。

以下是一个 userMetadata 参数值示例,用于优化与特定用户相关的搜索结果:

"userMetadata": {
  "favoriteColor": "blue",
  ...
}

fallback 参数提供了一个答案,如果查询没有有效的总结性答案,数据存储区工具会使用该答案进行回答。您可以提供多个示例,以指导 playbook 模型如何针对与不同主题相关的用户输入填充后备字段。该工具输出不包含任何代码段,这有助于减少延迟和输入令牌使用量。

"fallback": "I'm sorry I cannot help you with that. Is there anything else I can
do for you?"

数据存储区工具配置

如果您在测试期间发现某些回答不符合预期,可以尝试调整以下参数来微调性能。您可以通过直接调用 API 或点击控制台工具页面上的数据存储区名称来调整这些参数。如需详细了解这些配置选项,请参阅数据存储区设置页面

数据存储区工具响应选项

如需详细了解如何配置数据存储区工具响应,请参阅履单文档

数据存储区处理程序

数据存储区处理程序是一种特殊类型的状态处理程序,可以根据您的网站内容和上传的数据提供 LLM 生成的智能体回答。

如需创建此处理程序,您需要向智能体提供数据存储区

借助这些数据存储区处理程序,您的代理可以与最终用户就内容进行对话。

限制

存在以下限制:

  • 此功能在正式版中支持部分语言。请参阅语言参考中的“数据存储区”列。
  • 仅支持以下区域globalus 多区域和 eu 多区域。
  • 不支持同时包含分块数据存储区和非分块数据存储区的应用。

访问权限控制

如果您是项目所有者,则拥有创建数据存储区处理程序所需的权限。如果您不是项目所有者,则必须拥有以下角色:

  • Dialogflow Admin
  • Discovery Engine Admin

如需了解详情,请参阅访问权限控制指南

向代理添加数据存储区

如果您尚未创建代理,请按照设置说明创建代理。

如需向代理添加数据存储区,请执行以下操作:

  1. 选择一个网页,然后点击添加状态处理程序
  2. 选中数据存储区复选框,然后点击应用
  3. 点击页面数据存储区部分右上角的 + 符号。
  4. 在随即显示的数据存储区菜单中,点击添加数据存储区
  5. 系统会显示一个列出所有现有数据存储区的表格。选中要使用的任何数据存储区名称旁边的复选框,然后点击保存。如需创建新的数据存储区,请点击创建新的数据存储区。系统会自动将您重定向到 Vertex AI Agent Builder。
  6. (仅限新数据存储区)选择数据源,然后按照 Vertex AI Agent Builder 中的说明配置数据存储区。如需详细了解如何配置数据存储区类型,请参阅数据存储区文档。点击创建以创建新的数据存储区。

测试智能体

部署代理

您可以通过多种方式部署代理:

  • 一种简单的方法是使用集成,它可为您的代理提供界面。每项集成都提供了部署说明。
  • Dialogflow CX Messenger 集成是数据存储区处理程序的理想选择。它具有用于生成式功能的内置选项。
  • 您可以创建自己的界面,并使用 Dialogflow CX API 进行互动。您的界面实现会管理部署。

特殊 intent

除了处理有关您提供的内容的问题之外,该代理还可以处理以下类型的问题:

  • 智能体身份识别:智能体处理“你是谁?”或“你是人类吗?”之类的问题。
  • 升级到人工客服:代理会处理“我想与人工客服对话”或“我想与真人对话”之类的问题。

这是通过自动生成的意图意图路由来实现的。

智能体回答

智能体回答部分,提供引用生成式回答的自定义回答。在客服回答部分中使用 $request.knowledge.answers[0] 提供生成式回答。

高级回答自定义

您可以在 $request.knowledge.* 中找到更多信息,以便自定义回答。此类信息包括:

  • 答案的已识别来源,包含以下字段:摘要、标题、URI。
  • 回答的接地置信度。
  • 对于常见问题解答数据存储区,所选答案对应的问题。

下表提供了一些示例,说明了如何访问这些信息。

信息 访问方式
最佳答案中排名靠前的已识别来源的摘要 $sys.func.GET_FIELD($sys.func.GET($sys.func.IDENTITY($request.knowledge.sources[0]), 0), "snippet")
最佳答案中排名靠前的已识别来源的标题 $sys.func.GET_FIELD($sys.func.GET($sys.func.IDENTITY($request.knowledge.sources[0]), 0), "title")
排名靠前的回答中排名靠前的已识别来源的链接 $sys.func.GET_FIELD($sys.func.GET($sys.func.IDENTITY($request.knowledge.sources[0]), 0), "uri")
热门回答的已识别来源数量 $sys.func.COUNT($sys.func.IDENTITY($request.knowledge.sources[0]))
知识回答的数量 $sys.func.COUNT($request.knowledge.answers)
与最佳答案对应的问题(仅适用于 FAQ 数据存储区答案) $request.knowledge.questions[0]
最佳答案的接地置信度 $request.knowledge.grounding_confidences[0]