数据存储区工具

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

数据存储区工具:控制台

本部分将引导您完成向代理添加数据存储区工具并在履行中对其进行配置的过程。

创建数据存储区工具

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

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

  1. 在最左侧的菜单栏中,选择
  2. 选择一个流和页面,然后点击您要与数据存储区搭配使用的页面的路由
  3. 路由 菜单中,滚动到履行 > 数据存储区工具 。从下拉菜单中选择您的数据存储区工具。
  4. 路由 菜单中,滚动到履行 > 代理回答 。依次点击 \+ 添加对话回答数据存储区工具回答
  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"
  }
]

数据存储区工具回答还可能包含有关用于生成回答的内容来源的代码段。代理可以提供有关如何继续处理数据存储区中的回答或在没有回答时如何响应的说明。

您可以为特定问题添加 常见问题解答条目 ,以覆盖回答。

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

{
  "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 字段,其有效值为“breakfast”“lunch”和“dinner”,以及一个 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.
    
  • 如果 Playbook 面向外部用户受众群体,则可能需要添加说明,以防止 Playbook 可能向用户提供有关构建这些过滤条件的信息。例如:

    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 生成的代理回答。

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

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

限制

存在以下限制:

访问权限控制

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

  • Dialogflow 管理员
  • Discovery Engine 管理员

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

向代理添加数据存储区

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

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

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

测试代理

您可以使用 模拟器 测试代理。

部署代理

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

  • 最简单的选项是使用 集成, 它为您的代理提供用户界面。 每个集成都提供部署说明。

  • Dialogflow CX Messenger 集成是数据存储区处理程序的绝佳选择。 它内置了生成式功能选项。

  • 您可以创建自己的用户界面,并 使用 Dialogflow CX API 进行交互。 您的用户界面实现控制着部署。

特殊 intent

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

  • 代理身份识别: 处理“你是谁?”或“你是人类吗?”等问题。
  • 升级到人工客服人员: 处理“我想与人工客服人员交谈”或 “我想与真人交谈”等问题。

这是通过自动生成的 intentintent 路由实现的。

代理回答

代理回答 部分,您可以提供引用生成式回答的自定义回答。 在代理说 部分使用 $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)
与最佳回答对应的问题(仅限常见问题解答数据存储区回答) $request.knowledge.questions[0]
最佳回答的接地可信度 $request.knowledge.grounding_confidences[0]