使用 Dialogflow CX 生成器和数据存储区做出明智的决策

1. 概览

上次更新日期:2023 年 10 月 10 日

构建内容

在此 Codelab 中,您将使用 Vertex AI Conversation 和 Dialogflow CX 来构建、部署和配置虚拟客服,为希望献血的人提供帮助,并确保他们符合必需的资格要求。在 Dialogflow CX 执行期间,代理将使用真实的公开数据和 Google 的生成式大语言模型 (LLM)。

您将使用哪些功能

为了完成此 Codelab,您需要配置和使用三项不同的功能:

数据存储区代理

Vertex AI Conversation 功能会创建一个特殊的 Dialogflow 代理,称为“数据存储区代理”

借助此功能,您可以提供网站网址、结构化数据或非结构化数据(数据存储区),然后 Google 会解析您的内容并创建由数据存储区和大语言模型提供支持的虚拟客服。然后,您的客户和最终用户可以与代理进行对话,并询问有关代理内容的问题。如需了解此类代理,请参阅 Vertex AI Conversation 简介

发电机

生成器功能是 Dialogflow CX 的一项功能,让开发者能够使用 Google 最新的生成式大语言模型 (LLM) 和自定义提示,在运行时生成代理的回答。生成器可以处理一般响应,其中涉及从用于训练它的大型文本数据集或对话上下文中的一般知识。

生成式回退

生成式后备功能会使用 Google 最新的生成式大语言模型 (LLM),在最终用户输入与表单填写的意图或参数不匹配时,生成虚拟客服回复。该功能可以配置为指示 LLM 如何回答的文本提示。您可以使用预定义的文本提示,也可以添加自己的提示。您可以为流程、页面或参数填充期间使用的不匹配事件处理脚本启用生成式回退。为非匹配事件启用生成式回退后,每当该事件触发时,Dialogflow 都会尝试生成生成的回复并向用户回复。如果回复不成功,系统会改为发出常规规定的客服人员回复。如果您想详细了解生成式回退,不妨试试此 Codelab

学习内容

  • 如何基于非结构化数据创建数据存储区代理
  • 如何使用知识处理程序允许最终用户与虚拟客服就添加到数据存储区的内容进行对话。
  • 如何使用内置的生成器提示占位符配置生成器文本提示,并将其与上下文相关。
  • 如何将字词标记为生成器提示占位符,并在稍后将其与 fulfillment 中的会话参数相关联,以便在执行期间使用它们的值。
  • 如何配置生成器来处理涉及来自大型文本数据集和当前对话上下文的响应。
  • 如何使用生成器生成正式电子邮件
  • 如何测试代理和模拟会触发生成回复的客户问题

所需条件

  • Google Cloud 项目
  • 浏览器,例如 Chrome

2. 启用 API

您需要先启用 Dialogflow 和 Vertex AI Search and Conversation API,然后才能在 Vertex AI Conversation 中创建数据存储区代理。

如需启用 Dialogflow API,请按以下步骤操作:

  1. 在浏览器中,导航到 Dialogflow API 服务详细信息页面
  2. 点击启用按钮,在您的 Google Cloud 项目中启用 Dialogflow API。

如需启用 Vertex AI Search and Conversation API,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 Vertex AI Search and Conversation 控制台
  2. 阅读并同意服务条款,然后点击继续并激活 API

3. 为您的应用创建新的聊天应用和数据存储区

现在,您将为虚拟客服创建一个新的聊天应用,并为其配置数据源。您构建的代理的目的是为对血液资格有疑问的客户提供帮助。您将使用澳大利亚红十字会生命血作为可信数据来源,并根据供血资格网站上的非结构化数据创建数据存储区。

  1. 如需在 Vertex AI Conversation 中创建新的聊天应用,您可以执行以下任一操作:
    1. 前往 Vertex AI Conversation 控制台,然后点击控制台顶部附近的 + 新建应用
    2. 导航到 Dialogflow CX 控制台,点击 + 创建新代理 (+Create new agent),然后选择自动生成选项,然后系统会将您重定向到 Vertex AI Conversation 控制台中的以下步骤。
  2. 在 Vertex AI Conversation 控制台中,选择 Chat 作为要创建的应用类型。
  3. 公司名称中输入 Save a Life。此参数用于定义您的代理所代表的公司以及代理的范围。
  4. 代理名称指定为 Blood Donation Agent
  5. 点击继续
  6. 点击创建新的数据存储区
  7. 选择 Cloud Storage 作为数据存储区的数据源。
  8. 指定以下 Google Cloud Storage 文件夹,其中包含此 Codelab 的示例数据。请注意,无需添加 gs:// 前缀:
    cloud-samples-data/dialogflow-cx/arc-lifeblood
    
  9. 选择非结构化文档作为您要导入的数据类型。
  10. 点击继续
  11. 数据存储区名称指定为 Australian Red Cross Lifeblood Unstructured
  12. 点击创建以创建数据存储区。
  13. 在数据存储区列表中,选择新创建的 Australian Red Cross Lifeblood Unstructured
  14. 点击创建以创建您的聊天应用。

恭喜!您已完成构建您的知识型聊天应用,可以开始为潜在捐赠人提供帮助了。欢迎花点时间庆祝一下!

不过,要使用户能够访问代理,您仍需做很多工作。在下一部分中,您将使用知识处理程序,让客服人员和最终用户就资格要求展开对话。

4. 配置客服人员,回答与血液资格相关的常见问题解答

提供日期存储提示

虽然文档收集过程在后台运行,但我们可以通过修改数据存储区提示来为代理提供一个品牌。

  1. 在 Vertex AI Conversation 控制台中,点击聊天应用的名称,系统会将您重定向到 Dialogflow CX 控制台,以便您进一步测试和自定义。
  2. 在 Dialogflow CX 控制台和代理中,点击代理设置(页面右上角),前往机器学习标签页,最后打开生成式 AI 标签页。

转到数据存储区提示

  1. 填写下面的表单即可生成以下数据存储提示:您的姓名是Donate,您在 Save a life, a fictitious organization 是一位热心助人且礼貌的chatbot。你的任务是协助humans with eligibility information

填写表单以生成提示

为默认启动流的无匹配事件启用生成式回退

  1. 切换到 Build 标签页并打开 Start Page
  2. 点击 sys.no-match-default 事件处理脚本。除非对应的复选框处于选中状态,否则请启用生成式后备功能。

针对无匹配流程启用生成式回退

检查代理的数据存储区

初始页上,点击修改数据存储区以查看数据存储区设置。

修改数据存储区

Dialogflow 已经为您选择了您之前创建的数据存储区。

关联您创建的数据存储区

向下滚动到 Fulfillment 下的代理响应 (Agent Responses)。履单是指代理对最终用户的响应。Dialogflow 已预先填充参数 $request.knowledge.answers[0]代理说,该参数在运行时包含用户问题的最佳答案。

代理响应包含用户问题的最佳答案

5. 测试代理

在文档可用且可供客服人员使用后,请查看答案是否合适。

点击测试代理,再次打开模拟器

再次测试代理

提出您认为应该在网站的常见问题解答页面中出现的问题:

  • What age do I need to be to donate?
  • Can pregnant women donate?
  • I've just come back from a trip to Africa. Can I donate?
  • How can I schedule an appointment?

检查答案是否来自知识库

请注意,答案是从澳大利亚红十字会生命血液 (Australian Red Cross Lifeblood) 网站检索而来。正如页面中所述,献血者有最低和最高年龄要求。首次捐赠者的最少年龄为 18 岁,最高年龄为 75 岁。从数据存储区中提取信息这一事实的进一步证据是由代理响应上显示的小星形图标和原始 JSON 响应提供的。

检查原始 JSON 响应

最后,我们试着用一个与献血完全无关的问题来质疑代理。

用户:“What's the weather like in Melbourne?”

代理:“抱歉,我无法为你提供这方面的帮助。我能为您提供资格方面的信息吗?”

这个答案包含 AI 生成的内容,源自 Dialogflow 根据之前提供的知识连接器设置创建的文本提示:“您的姓名是‘捐款’,您是救助生命的热心而礼貌的聊天机器人。您的任务是协助相关人员提供资格信息”此文本提示包含公司名称、代理名称,最重要的是,Dialogflow 生成代理响应时所使用的范围。

太棒了!到目前为止,您正在使用数据存储区来帮助人们解决与献血相关的常见问题。在此 Codelab 的下一部分中,我们将介绍如何将生成器文本提示与相同的内容绑定,以便做出明智的决策。

6. 设置代理以参与资格测验

我们的下一个任务是设计代理,以确定用户是否符合献血的条件。捐赠人必须满足一些严格的要求,例如年龄、体重、现有条件、近期旅行等。在此 Codelab 的范围内,我们只考虑年龄和体重。生成器将使用 Google 的大语言模型 (LLM),根据对话的上下文和知识库,动态做出明智的决策。

配置新路由和参数

  1. 打开初始页,然后点击修改数据存储区
  2. 将现有代理的响应更改为 $request.knowledge.answers[0] Would you like to take the eligibility quiz to find out if you can donate blood, and start changing lives?

丰富代理对用户常见问题解答的回答

  1. 点击保存按钮
  2. 现在,我们需要将代理设计为处理“是”和“no”响应。首先,创建一个 confirmation.yes intent 和 confirmation.no intent。请遵循这些关于 intent 重复使用的准则
  3. 然后在初始页上,为 confirmation.yes intent 创建一个路由,用于转换到新页面 eligibility Quiz

为 confirm.yes intent 创建路由

触发 Confirm.yes 时,将转换为新页面的资格测验。

  1. 如前所述,我们会简化此测验,并且仅考虑用户的年龄和体重来确定其是否符合捐款条件。打开资格测验页面,添加新的表单参数 age-weight,然后选择 @sys.any 作为实体类型。提供 "What is your age and weight?" 作为初始提示执行方式。我们希望一次性收集到年龄和体重。保存所有更改。

创建参数

创建和配置资格生成器

generator功能是 Dialogflow CX 的一项功能,让开发者能够在 Dialogflow CX 执行期间使用 Google 最新的生成式大语言模型 (LLM)。用于在运行时生成代理响应的生成器。生成器可以处理一般响应,其中涉及从用于训练它的大型文本数据集或对话上下文中的一般知识。

我们将创建一个新的生成器,将用户提供的信息(如年龄和体重)与资格要求进行比较,以确定用户是否能够捐款。

  1. 在 Dialogflow CX 控制台中,转到管理标签页,选择生成器,然后点击新建

创建新的生成器

  1. 接下来,提供描述性的显示名称并编写文本提示。保留默认的模型质量控制设置。然后,点击保存以创建生成器。
    • 显示名:Blood Donation Eligibility
    • 文本提示:Check the users eligibility against the following criteria: the minimum age is 18 and the maximum age is 75. Weight should be above 50 Kg. The user age and weight is $last-user-utterance. Be nice and tell the user if they are eligible to donate (also tell them why not in case)

文本提示会在运行时执行期间发送给生成模型。它应该是一个明确的问题或请求,以便模型生成令人满意的回答。您可以在文本提示中使用特殊的内置生成器提示占位符:

  • $conversation 代理与用户之间的对话,不包括用户最后一句话。
  • $last-user-utterance 用户最后一条话语。

已配置的文本提示要求用户在一个回合(`$last-user-utterance`)中提供年龄和体重信息。

在 fulfillment 中使用生成器,并配置所有必需的参数

  1. 资格测验页面上,添加一个新路由,当所有参数都已填充后,系统就会执行新路由。输入条件要求 $page.params.status = "FINAL",然后点击保存

添加将在所有参数都填好后执行的新路线

  1. 转到 Fulfillment 窗格的 Generators(生成器)部分,请将其展开。然后,点击添加生成器并选择献血资格生成器。选择生成器后,您需要定义输出参数,其中包含生成器执行后的结果。

选择“献血资格”生成器,将提示占位符与会话参数相关联,然后定义输出参数

  1. 在代理响应中使用输出参数并保存路由。现在,您可以对其进行测试了。

在代理响应中使用输出参数

7. 重新测试代理

点击测试代理,再次打开模拟器。

再次测试代理

模拟器上,开始与代理的新对话。首先询问年龄要求,然后进行资格测验。测试“有效”因此请输入年龄在 18-75 岁之间,体重超过 50 千克。

合格路径

然后,如果不符合其中一项或两项要求,请检查资格检查是否失败。

不符合条件客户的路径

太棒了,生成器能按预期运行!真的吗?如果用户提供了年龄,但未提供体重(反之亦然),会发生什么情况?

提供年龄,但不提供体重

8. 生成器提示调整

除非同时提供了年龄和体重信息,否则在此前收集的年龄和体重数据似乎不起作用。我们应改为创建一个表单,将这两个值作为实体参数进行收集。为了提示所有资格要求(例如年龄和体重),我们可以使用占位符,只需在字词前添加一个 $ 即可。我们稍后会将这些生成器提示占位符与 fulfillment 中的会话参数相关联,并在执行期间将它们替换为会话参数值。

  1. 打开资格测验页面,然后添加两个单独的表单参数:一个用于体重,一个表示年龄。选择 @sys.number-integer 作为实体类型,并标记必需的参数。提供初始提示执行方式,例如 How old are you?What is your correct weight?。保存所有更改。

资格评定表单

  1. 由于我们要添加两个新的自定义占位符,因此在更改生成器的文本提示之前,需要先从路线执行方式中移除生成器。点击保存

移除生成器

  1. 前往管理标签页,选择生成器,然后将献血资格生成器的文本提示更新为:Check the users eligibility against the following criteria: the minimum age is 18 and the maximum age is 75. The weight must be at least 50 kg. The user is $age years old and weighs $weight Kg. Craft an email and politely explain to the user if they're eligible to donate and if not why.。点击保存

请注意,我们不仅使文本提示与年龄和体重形式参数相关,还更改了最后一句,以便能够向用户生成包含资格测验官方结果的正式电子邮件。

重新配置文本提示

  1. 资格条件测验页面上,选择路线并展开 Fulfillment 窗格的 Generators(生成器)部分。然后,点击添加生成器并选择献血资格生成器。选择生成器后,您需要将新的提示占位符与相应的会话参数相关联。此外,您需要重新设置输出参数。点击保存

更新生成器绑定

  1. 再次重新测试代理。现在,资格检查会同时考虑年龄和体重,措辞从对话语气变为更礼貌的回应,可以在没有任何潜在人参与的情况下发出。

电子邮件称用户不符合条件

表明用户符合条件的电子邮件

9. 恭喜

恭喜您完成此 Codelab!

恭喜您完成此 Codelab!

今天,我们以资格测验为背景调查了生成器。您已经了解到,生成器使用 LLM 来生成代理响应,在知识库的支持下,他们也可以做出明智的决策。当然,还有许多其他用例可以利用生成器和数据存储区来实现,我们迫不及待地想了解它们!

清理

您可以执行以下清理操作,以避免因此 Codelab 中使用的资源向您的 Google Cloud 账号收取费用:

了解详情

通过以下指南和资源,继续了解对话式 AI 和生成式 AI:

许可

此作品已获得 Creative Commons Attribution 2.0 通用许可授权。