使用 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. 为应用创建新的聊天应用和数据存储区

现在,您将为虚拟客服创建新的聊天应用,并为其配置数据源。您将构建的代理的用途是,帮助客户解答与献血资格有关的问题。您将使用 Australian Red Cross Lifeblood 作为可信来源,并根据献血资格网站中的非结构化数据创建数据存储区。

  1. 如需在 Vertex AI Conversation 中创建新的聊天应用,您可以执行以下任一操作:
    1. 前往 Vertex AI Conversation 控制台,然后点击控制台顶部附近的 + 新应用
    2. 前往 Dialogflow CX 控制台,点击 +创建新代理,然后选择自动生成选项,之后您将被重定向到 Vertex AI Conversation 控制台中的下一步。
  2. 在 Vertex AI Conversation 控制台中,选择要创建的应用类型:聊天
  3. 输入 Save a Life公司名称。此参数用于定义您的代理所代表的公司以及代理的范围。
  4. 指定 Blood Donation Agent代理名称
  5. 点击继续
  6. 点击创建新的数据存储区
  7. 选择 Cloud Storage 作为数据存储区的数据源。
  8. 指定以下包含本 Codelab 的示例数据的 Google Cloud Storage 文件夹,并注意不需要 gs:// 前缀:
    cloud-samples-data/dialogflow-cx/arc-lifeblood
    
  9. 选择非结构化文档作为要导入的数据类型。
  10. 点击继续
  11. 指定 Data store nameAustralian 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. 切换到构建标签页,然后打开起始页
  2. 点击 sys.no-match-default 事件处理脚本。除非用于启用生成式后备的复选框已选中,否则请启用该功能。

在流程无匹配时启用生成式后备

检查代理的数据存储区

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

修改数据存储区

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

关联您已创建的数据存储区

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

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

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 响应

最后,我们尝试向代理提出一个与献血完全无关的问题,看看会发生什么。

用户:“墨尔本的天气如何?”

客服:“很抱歉,我无法提供这方面的帮助。我可以为您提供哪些资格信息方面的帮助?

此回答包含 AI 生成的内容,且是根据 Dialogflow 基于之前提供的知识连接器设置创建的文本提示生成的:“你的名字是 Donate,你是 Save a Life 的一个乐于助人且彬彬有礼的聊天机器人。你的任务是帮助人类获取资格信息”此文本提示包含公司名称、代理名称,最重要的是包含代理范围,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. 现在,我们需要设计代理来处理“是”和“否”回答。首先,创建 confirmation.yes 意图和 confirmation.no 意图。请遵循有关 intent 重用的这些准则
  3. 然后在起始页上,为 confirmation.yes intent 创建一条路线,该路线会过渡到新页面 Eligibility Quiz

为 confirmation.yes 意图创建路由

当触发 confirmation.yes 时,会转换到新页面“资格测验”。

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

创建参数

创建和配置资格要求生成器

生成器功能是一项 Dialogflow CX 功能,可让开发者在 Dialogflow CX 响应的过程中使用 Google 最新的生成式大语言模型 (LLM)。生成器用于在运行时生成代理回答。生成器可以处理通用回答,这类回答涉及它接受训练时所用的大型文本数据集中的一般知识或对话中的上下文。

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

  1. 在 Dialogflow CX 控制台中,前往 Manage 标签页,选择 Generators,然后点击 Create new

创建新的生成器

  1. 接下来,提供一个描述性显示名称,并撰写文本提示。保留默认的模型质量控制设置。然后点击 Save 以创建生成器。
    • 显示名: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 用户的最后一句话。

您配置的文本提示要求用户在一个对话轮次中(即用户的最后一句话)同时提供年龄和体重。

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

  1. Eligibility Quiz 页面上,添加一个新路由,该路由将在所有参数都已填写时发生。输入条件要求 $page.params.status = "FINAL",然后点击保存

添加了一个新路由,该路由将在所有参数都已填充时发生

  1. 前往 Fulfillment 窗格的 Generators 部分,然后将其展开。然后,点击 Add generator,并选择 Blood Donation Eligibility 生成器。选择生成器后,您需要定义输出参数,该参数将在生成器执行后包含其结果。

选择“Blood Donation Eligibility”生成器,将提示占位符与会话参数相关联,并定义输出参数

  1. 在智能体回答中使用输出参数并保存路线。现在,您可以测试所有内容了。

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

7. 重新测试代理

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

再次测试代理

模拟器中,开始与代理进行新对话。首先询问年龄要求,然后继续进行资格测验。先测试“符合条件”路径,因此请输入 18-75 岁之间的年龄和 50 公斤以上的体重。

符合条件客户的路径

然后,检查在不满足一项或两项要求时,资格检查是否失败。

不符合条件客户的路径

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

提供年龄但未提供体重

8. 生成器提示调优

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

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

资格条件表单

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

移除生成器

  1. 前往 Manage 标签页,选择 Generators,并将 Blood Donation Eligibility 生成器的文本提示更新为: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. Eligibility Quiz 页面上,选择路由,然后展开 Fulfillment 窗格的 Generators 部分。然后,点击 Add generator,并选择“Blood Donation Eligibility”生成器。选择生成器后,您需要将新的提示占位符与相应的会话参数相关联。此外,您还需要重新设置输出参数。点击保存

更新生成器绑定

  1. 再次测试代理。资格检查现在会同时考虑年龄和体重,并且措辞已从对话语气更改为更礼貌得体的回答,这种回答可以直接发送,无需任何潜在的人机协同 (human-in-the-loop)。

电子邮件内容为用户不符合条件

告知用户符合条件的电子邮件

9. 恭喜

恭喜您完成本次 Codelab 课程!

恭喜您完成此 Codelab!

今天,我们探讨了生成器在资格测验场景中的应用。您已经看到,生成器使用 LLM 来生成代理回答,并且在知识库的支持下,还可以做出明智的决策。当然,还有许多其他应用场景可以利用生成器和数据存储区实现,我们迫不及待想要探索它们!

清理

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

了解详情

请参阅以下指南和资源,继续了解对话式 AI 和生成式 AI:

许可

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