构建代理

本指南介绍了如何使用 Dialogflow CX 控制台构建和测试简单的衬衫订购代理。与此代理互动时,您可以查询商店位置、获取商店营业时间或创建衬衫订单。

针对本指南的已完成代理将由控制台绘制成图,如下所示:

代理图屏幕截图

准备工作

在阅读本指南之前,请先完成以下事项:

  1. 阅读 Dialogflow CX 基础知识
  2. 执行设置步骤

创建代理

为本指南创建新代理:

  1. 打开 Dialogflow CX 控制台
  2. 创建或选择 GCP 项目。
  3. 点击+创建
  4. 填写基本代理设置表单。 您可以选择任何名称。
  5. 点击保存

可选的代理导入

本指南将介绍如何完成构建一个简单衬衫订购代理的步骤。如果要跳过控制台步骤,您可以下载代理将其导入

默认流和意图

系统会自动为新代理创建以下流和意图。要查找意图,请点击管理,然后点击意图。您可以点击构建以找到流。

术语 定义
默认欢迎意图 默认欢迎意图具有简单的训练短语(例如“Hi”或“Hello”),旨在匹配初始最终用户输入。您可以根据需要修改此意图。
默认负意图 您可以使用默认负意图将训练短语添加到此意图中作为反例。
默认初始流 默认初始流可用作唯一的流。它是本指南中使用的唯一的流。对于更复杂的代理,您可以添加更多流。该流具有默认的意图路由,以默认欢迎意图作为意图要求。

测试默认欢迎响应消息

默认流和默认意图可处理仅含有欢迎消息的基本对话。要测试新代理,请执行以下操作:

  1. 点击测试代理按钮以打开模拟器。
  2. 在文本条目中输入 hello,然后按 Enter 键。
  3. 代理会使用默认欢迎响应做出响应。
  4. 关闭模拟器。

模拟器屏幕截图

代理为此最终用户执行了以下步骤:

  1. 提供输入后,默认初始流成为活跃流,而流的初始页面成为活跃页面。应用于活跃流的每个状态处理程序都在范围内,因此代理会对其进行评估。
  2. 其中一个已评估的路由具有默认欢迎意图作为意图要求。您输入的内容与此意图匹配,因此系统调用该路由。
  3. 调用的路由具有多个 fulfillment 响应消息。代理会随机选择其中一个,并将其添加到响应队列
  4. 调用的路由没有转换目标,因此活跃流和活跃页面没有变化。
  5. 代理使用响应队列的内容进行了响应。

修改欢迎响应消息

您可以更改此欢迎消息。要修改欢迎响应消息,请执行以下操作:

  1. 点击构建标签页。
  2. 部分中选择默认初始流
  3. 点击图表中的初始节点。这是默认初始流的初始页。
  4. 找到具有默认欢迎意图的意图路由作为意图要求,然后点击它。 此时会打开一个面板,供您修改意图路由信息。
  5. 找到 fulfillment 部分并删除所有响应消息,然后添加 Hello, this is a shirt ordering virtual agent. How can I help you? 作为唯一响应。
  6. 点击保存
  7. 关闭意图路由修改面板。

代理响应屏幕截图

测试更新后的欢迎响应消息

要测试更新后的响应,请执行以下操作:

  1. 点击测试代理按钮以打开模拟器。
  2. 在文本条目中输入 hello,然后按 Enter 键。
  3. 代理会以您的新消息做出响应。
  4. 关闭模拟器。

商店位置页面

Dialogflow CX 对话(会话)可以描述并直观呈现为状态机。CX 会话的状态由页面表示。到目前为止,您只有一个页面,因此代理不是很有用。在本部分中,您将创建另一个页面,以处理有关商店位置的问题。

创建位置意图

意图用于对一轮对话中的最终用户意图进行分类。要创建与最终用户输入请求商店位置时匹配的意图,请执行以下操作:

  1. 选择管理标签页。
  2. 点击意图 (Intents)。
  3. 点击创建
  4. 输入 store.location 作为意图名称。
  5. 输入以下训练短语:
    • Where is the store?
    • Directions
    • Tell me the address
    • Where do I pick up my order?
    • How do I get there?
    • Where is the store located?
    • What street are you on?
    • What is your address?
    • How do I get to your store?
    • Where are you located?
  6. 点击保存

意图屏幕截图

创建位置页面

现在创建新页面。您可以将 fulfillment 条目添加到此页面,只要页面变为活跃页面,就会调用此页面。此 fulfillment 条目应具有提供商店位置的响应消息。要创建商店位置页面,请执行以下操作:

  1. 点击构建标签页。
  2. 部分中选择默认初始流
  3. 点击页面部分中的添加 按钮。 此时会显示网页名称的文本条目。
  4. 输入 Store Location 作为页面名称,然后按 Enter。
  5. 点击页面名称旁边的选项 按钮。
  6. 选择修改以打开页面修改面板。
  7. 找到条目对话框 (Entry dialog),然后点击 Edit fulfillment
  8. 代理说字段中输入 Our store is located at 1007 Mountain Drive, Gotham City, NJ.
  9. 点击保存
  10. 关闭页面修改面板。

页面屏幕截图

向流添加位置意图路由

现在,您需要创建一个将商店位置页面作为转换目标的路由。调用此路由时,会话将转换到商店位置页面。此路由适用于默认初始流,因此只要该流处于活跃状态,它就在范围内。对于单流代理,这意味着路由始终在范围内。在对话中的任何时间点,最终用户都可以询问商店位置,并且此路由将被调用。

要创建此路由,请执行以下操作:

  1. 点击构建标签页。
  2. 部分中选择默认初始流
  3. 点击图表中的初始节点。这是默认初始流的初始页。
  4. 添加以下意图路由:
    • 意图store.location
    • 转换页面Store Location
  5. 点击保存
  6. 关闭意图路由修改面板。

意图路由屏幕截图

当您关闭修改窗格时,您会注意到新页面在图表上具有一个节点。从初始节点到商店位置节点的箭头表示会话如何从节点转换到节点。

测试商店位置页面

要测试您的页面,请执行以下操作:

  1. 点击测试代理按钮以打开模拟器。
  2. 输入 What is the store location?,然后按 Enter 键。
  3. 代理会提供地址。
  4. 关闭模拟器。

代理为最终用户输入执行了以下步骤:

  1. 提供输入后,默认初始流成为活跃流,而流的初始页面成为活跃页面。应用于活跃流的每个状态处理程序都在范围内,因此代理会对其进行评估。
  2. 有一个已评估的路由具有 store.location 作为意图要求。您输入的内容与此意图匹配,因此系统调用该路由。
  3. 调用的路由没有 fulfillment 响应消息,因此它没有向响应队列添加任何内容。
  4. 调用的路由具有转换目标,因此该活跃页面已更改为商店位置页面。
  5. 商店位置页面具有 fulfillment 条目,因此该 fulfillment 的响应消息已添加到响应队列(地址)中。
  6. 代理使用响应队列的内容进行了响应。

使用内嵌创建功能创建商店营业时间页面

在本部分中,您将创建一个商店营业时间页面,以处理最终用户关于商店营业时间的问题。在上面的部分中,您通过构建管理标签页创建了页面和意图。本部分介绍如何使用内嵌创建功能来更快地创建这些类型。

要内嵌创建意图路由、意图和页面,请执行以下操作:

  1. 点击图表中的初始节点。
  2. 点击意图路由添加 按钮。此时会打开意图路由修改面板。
  3. 意图部分中,选择新意图 (New intent)。此时会打开意图修改面板。
  4. 使用以下训练短语创建 store.hours 意图:

    • What are your store hours?
    • What time do you close?
  5. 点击保存以保存该意图。意图编辑面板会关闭。

  6. 在意图路由修改面板中向下滚动到转换部分。

  7. 对于页面转换,请选择新页面 (New page)。

  8. 在显示的文本条目中输入 Store Hours

  9. 点击保存。此时图表上会显示一个新页面,因为现在有一个导向它的转换。

  10. 关闭意图路由修改面板。

  11. 添加一个提供商店营业时间的条目 fulfillment,与为商店位置执行的步骤类似。

  12. 关闭所有打开的修改面板。

订购商品页面

接下来,您将创建一个使用表单参数的页面。当最终用户请求新的衬衫订单时,会话将转换到此页面。处于活跃状态时,此页面会收集衬衫的尺寸和颜色。

为衬衫尺寸创建自定义实体类型

实体类型用于控制最终用户输入数据的提取方式。Dialogflow 提供预定义的系统实体,这些系统实体可以匹配许多常见数据类型。例如,有用于匹配日期、时间、颜色、电子邮件地址等类型的系统实体。您还可以自行创建自定义实体来匹配自定义数据。

对于此代理,您可以将系统实体用于衬衫颜色,但您需要为衬衫尺寸创建自定义实体。尺寸实体类型应具有以下实体条目:

实体 同义词
small
中、标准、平均

要创建此实体,请执行以下操作:

  1. 选择管理标签页。
  2. 点击实体类型
  3. 点击+创建
  4. 将名称设置为 size
  5. 添加上表中列出的实体条目。
  6. 点击保存

使用意图参数创建订单意图

您需要一个在最终用户请求新衬衫订单时匹配的意图。此意图还应选择捕获最终用户提供的所需衬衫颜色和/或尺寸,以防他们预先提供该信息。

参数用于捕获和引用最终用户在会话期间提供的值。每个参数都有一个名称和一个实体类型。与原始的最终用户输入不同,参数是结构化数据,可以轻松用于执行某些逻辑或生成响应。

您可以通过为部分训练短语添加注释并配置关联的意图参数来控制提取最终用户数据的方式。例如,假设有一条训练短语为“What is the forecast tomorrow for Tokyo?” 您应使用 date 参数为“tomorrow”添加注释,使用 location 参数为“Tokyo”添加注释。当您为训练短语的特定部分添加注释后,Dialogflow 会识别出这些部分只是最终用户将在运行时提供的实际值的示例。 对于“What is the forecast on Friday for Sydney?”这样的最终用户输入,Dialogflow 会从“Friday”中提取 date 参数,并从“Sydney”中提取 location 参数。

如需使用控制台为训练短语添加注释,请执行以下操作:

  1. 选择要添加注释的训练短语部分。
  2. 从列表中选择所需的实体类型。
  3. 系统会在下方的参数表中为您创建一个参数。

创建一个类似于您上面所遵循的步骤的意图。将此意图命名为 order.new。 对于包含颜色的每个短语,请使用 color 参数和 @sys.color 系统实体类型为颜色添加注释。对于包含衬衫尺寸的每个短语,请使用 size 参数和您在先前步骤中创建的 @size 自定义实体类型来为尺寸添加注释。训练短语和参数应如下所示:

意图屏幕截图

创建订单页面

按照与上述步骤类似的步骤创建新订单页面:

  • 姓名:New Order
  • 条目 fulfillment:Ok, let's start a new order.

向订单页面添加表单

您需要为每个页面定义一个表单,该表单上列出应从该页面的最终用户处收集的参数。代理会与最终用户进行多轮对话,直到收集到所有表单参数(也称为“页面参数”)。您还需要针对每个表单参数提供“提示”,供代理用于向最终用户询问该信息。此过程称为“表单填充”。

当最终用户提供意图匹配的意图参数时,意图参数将成为会话参数。当页面最初处于活跃状态时,其所有表单参数都会预填充任何类似的会话参数。 因此,如果最终用户在 order.new 意图匹配时提供尺寸或颜色,系统将自动填充这些值。

对于新订单页面,您需要定义两个必需的表单参数:

必需 姓名 实体类型 为列表 Prompt
color @sys.color 您想要哪种颜色?
尺寸 @size 您想要哪种尺寸?

要添加此表单,请执行以下操作:

  1. 点击图表中的新订单页面。
  2. 点击参数 添加 按钮。此时会打开参数编辑面板。
  3. 按照上表中的说明添加参数。
  4. 点击保存
  5. 关闭参数编辑面板。

向流添加订单意图路由

与上述步骤类似,向默认初始流添加路由。当最终用户想创建新订单时,应调用此路由:

  • 意图:order.new
  • “转换目标”页面:新订单

确认页面

您的最终页面将只是确认订单并结束会话。

创建确认页面

创建一个确认页面,其中包含使用会话参数确认订单的响应:

  • 名称Order Confirmation
  • 条目对话框You can pick up your order for a $session.params.size $session.params.color shirt in 7 to 10 business days. Goodbye.

向订单页面添加条件路由

您还可以使用条件来确定是否调用某个路由。条件通常用于检查表单是否完成,或者配置为在评估时始终调用。

将以下路由添加到订单页面(将在填写订单页面表单时调用)。 请注意此条件路由如何在对最终用户的响应中使用参数引用以及如何将会话转换到订单确认页面。

  • 条件$page.params.status = "FINAL"
  • 代理说You have selected a $session.params.size, $session.params.color shirt.
  • 转换页面Order Confirmation

将以下路由添加到订单页面,系统将对该页面处于活跃状态且评估条件路由的每轮对话调用该页面。在评估和调用上述条件时,页面会变为非活跃状态,因此不会评估此 true 条件路由:

  • 条件true
  • 代理说I'd like to collect a bit more information from you.

创建结束会话的条件路由

将以下条件路由添加到确认订单页面,以在该页面变为活跃状态并处理其条目 fulfillment 后结束会话:

  • 条件:true
  • 转换目标页面End Session

测试已完成的代理

使用以下对话框测试代理:

对话框 说明
最终用户:你好
代理:你好,这里是衬衫订购虚拟代理。您需要什么帮助?
  1. 系统调用默认初始流中的默认欢迎意图路由。
  2. 此状态处理程序的 fulfillment(“你好,这里是...”)已添加到响应队列中。
  3. 代理将响应队列发送给最终用户。
最终用户:我想买件蓝色衬衫
代理:好的,我们来创建一个新订单。
代理:我想从您那里收集更多信息。
代理:您想选择哪种尺寸?
  1. 系统会评估默认初始流中的 order.new 意图路由。
  2. order.new 意图匹配,蓝色意图参数设置为“蓝色”。
  3. 会话转换到新订单页面,而颜色意图参数则成为会话参数。
  4. 新订单页面包含一个 fulfillment 条目(“好的,让我们开始…”)因此,它会添加到响应队列中。
  5. 颜色会话参数用于填充相似名称的表单参数。
  6. 新订单页面中的真实条件路由将进行评估和调用。其中包含一条响应消息(“我想收集...”)因此,它会添加到响应队列中。
  7. 页面的表单未填写,因此代理会使用尺寸提示(“多大尺寸...”)并将其添加到响应队列中。
  8. 代理将响应队列发送给最终用户。
最终用户:大
代理:您选择了大尺寸蓝色衬衫。
代理:您可以在 7 到 10 个工作日内为这一款大尺寸蓝色衬衫下订单。再见。
  1. 最终用户输入填充了代理在上一轮对话中请求的尺寸参数。
  2. 系统会评估并调用新订单页面中的表单完成路由。它具有一个 fulfillment(即“您已选择...”),它会添加到响应队列中,其参数引用解析为最终用户提供的实际值。
  3. 会话会转换到订单确认页面。
  4. 订单确认页面包含一个 fulfillment 条目(“您可以获得...”)。
  5. 代理将响应队列发送给最终用户。
  6. 会话转换到结束会话