Dialogflow 基础知识

本页面介绍使用 Dialogflow 的基础知识。您应先阅读本页面上的内容,然后再参阅其他文档或快速入门。

帮助用户与技术进行交互

传统的计算机界面需要结构化且可预测的输入才能正常工作,这使得这些界面使用起来不自然,并且有时候难以使用。 如果最终用户无法轻松理解这种结构化输入方式,便很难确定要执行哪些操作。理想情况是,您的界面可以根据最终用户所使用的自然语言,推断最终用户希望执行哪些操作。

例如,设想一个简单的用户请求,如“What's the weather forecast today?”。其他最终用户可能还会提出以下问题:

  • "What's the weather like right now?"
  • "What's the temperature going to be in San Francisco tomorrow?"
  • "What will the weather be on the 21st?"

即便是这些简单的问题,您也会发现很难具有良好的对话体验。解读和处理自然语言需要非常强大的语言解析器。Dialogflow 会为您处理此问题,因此您可以为最终用户提供高质量的对话体验。

代理

Dialogflow 代理是负责与最终用户对话的虚拟客服人员。它是一种自然语言理解模块,能够理解人类语言的细微差别。Dialogflow 可以在对话过程中将最终用户输入的文字和音频转换为应用和服务可以理解的结构化数据。您可以设计并构建 Dialogflow 代理来负责您的系统所需的各种对话。

Dialogflow 代理类似于人类呼叫中心的客服人员。您可以对代理/客服人员进行训练来处理预期的对话场景,您的训练不需要过于明确。

意图

意图对最终用户每轮对话的意图进行分类。您可以为每个代理定义多个意图,组合意图可以处理一段完整的对话。当最终用户输入文字或说出话语(称为“最终用户表述”时,Dialogflow 会将最终用户表述与代理中的最佳意图进行匹配。匹配意图也又称为“意图分类”

例如,您可以创建一个天气代理,用于识别并响应最终用户关于天气的问题。您可以为与天气预报有关的问题定义一个意图。如果最终用户说出“What's the forecast?”,Dialogflow 会将该最终用户表述与预测意图相匹配。您还可以定义意图,以便从最终用户表述中提取实用信息,例如所需哪个时间或地方的天气预报。提取的数据对于系统为最终用户执行天气查询非常重要。

代理从请求天气预报的最终用户表述中提取数据

基本意图包含以下内容:

  • 训练短语:这些是最终用户可能会说的示例短语。当最终用户的表述与其中某一短语类似时,Dialogflow 会匹配意图。因为 Dialogflow 的内置机器学习功能可使用其他相似的短语扩展您的列表,所以您无需定义所有可能出现的示例。
  • 操作:您可以为每个意图定义一个操作。当匹配了相应意图时,Dialogflow 会向系统提供该操作,您可以使用该操作触发系统中定义的特定操作。
  • 参数:在运行时中匹配了某个意图时,Dialogflow 会将从最终用户表述中提取的值作为“参数”提供。每个参数都有一个类型,称为实体类型,用于确切规定提取该数据的方式。与原始的最终用户输入不同,参数是结构化数据,可以轻松用于执行某些逻辑或生成响应。
  • 响应:您可以定义要返回给最终用户的文本、语音或视觉响应。这些响应可能是为最终用户提供解答、向最终用户询问更多信息或终止对话。

下图展示了匹配意图和响应最终用户的基本流程:

代理和意图处理最终用户表述

实体

每个意图参数都有一个类型,称为实体类型,该类型确切规定从最终用户表述中提取数据的方式。

Dialogflow 提供预定义的系统实体,这些系统实体可以匹配许多常见数据类型。例如,有用于匹配日期、时间、颜色、电子邮件地址等类型的系统实体。您还可以自行创建自定义实体来匹配自定义数据。例如,您可以定义一个 vegetable 实体,来匹配杂货店代理出售的蔬菜类型。

上下文

Dialogflow 上下文类似于自然语言上下文。如果有人告诉您“they are orange”,您需要通过上下文才能理解“they”指的是什么。同样,为了让 Dialogflow 处理类似的最终用户表述,您需要为其提供上下文以正确地与意图匹配。

您可以使用上下文来控制对话流。您可以为意图配置上下文,方法是设置由字符串名称标识的输入和输出上下文。匹配了某个意图时,为该意图配置的所有输出上下文都将变为活跃状态。当所有上下文处于活跃状态时,Dialogflow 更可能匹配配置了输入上下文,且该上下文与当前活跃上下文匹配的意图。

下图是一个将上下文用于银行代理的示例。

用户与意图和上下文的互动图。
  1. 最终用户询问其支票账户的相关信息。
  2. Dialogflow 将此最终用户表述与 CheckingInfo 意图匹配。此意图具有 checking 输出上下文,因此上下文变为活跃状态。
  3. 代理询问最终用户他们希望了解支票账户的哪类信息。
  4. 最终用户回复“my balance”。
  5. Dialogflow 将此最终用户表述与 CheckingBalance 意图匹配。此意图具有 checking 输入上下文,该上下文需要处于活跃状态才能匹配此意图。当 savings 上下文处于活跃状态时,也可能存在类似的 SavingsBalance 意图来匹配该最终用户表述。
  6. 系统执行必要的数据库查询后,代理会回复该支票账户的余额。

后续意图

您可以使用后续意图自动设置意图对的上下文。后续意图是相关父意图下的子意图。创建后续意图时,系统会将输出上下文添加到父意图中,并将同名的输入上下文添加到子意图中。只有父意图在上一轮对话中匹配时,系统才会匹配后续意图。您还可以创建多个级别的嵌套后续意图。

Dialogflow 提供多个预定义后续意图,旨在处理“是”、“否”或“取消”等常见的最终用户回复。您还可以创建自己的后续意图来处理自定义回复。

Dialogflow 控制台

Dialogflow 提供了一个网页界面,称为 Dialogflow 控制台(访问文档打开控制台)。您可以使用此控制台来创建、构建和测试代理。

Dialogflow 控制台与 Google Cloud Platform (GCP) Console 不同(查看文档打开控制台)。Dialogflow 控制台用于管理 Dialogflow 代理,而 GCP Console 用于管理 GCP 专有的 Dialogflow 设置(例如结算)和其他 GCP 资源。

在大多数情况下,您应该使用 Dialogflow 控制台来构建代理,但也可以使用 Dialogflow API 构建用于高级场景的代理。

通过集成服务实现用户互动

Dialogflow 可以与 Google 助理、Slack 和 Facebook Messenger 等许多热门对话平台集成。如果您想要为上述某个平台构建代理,建议从众多集成方案中择一使用。这些集成服务会为您处理直接的最终用户互动,因此您可以集中精力构建代理。每项集成服务均以平台特定的方式处理最终用户互动。如需了解详情,请参阅与您的集成平台对应的文档。

在集成服务中使用 Fulfillment

默认情况下,您的代理会使用静态响应来响应匹配的意图。如果您使用的是某个集成选项,则可以使用 fulfillment 提供更动态的响应。当您为意图启用 fulfillment 时,Dialogflow 会通过调用您定义的服务来响应该意图。例如,如果最终用户希望在星期五安排理发,那么您的服务可以检查数据库,并使用星期五的可预约时段信息来响应最终用户。

每个意图均有一项启用 fulfillment 的设置。如果某个意图需要您的系统执行某项操作或需要动态响应,则应为该意图启用 fulfillment。如果匹配的意图未启用 fulfillment,则 Dialogflow 会使用您为该意图定义的静态响应。

如果匹配的意图启用了 fulfillment,则 Dialogflow 会向您的网络钩子服务发送请求,其中包含有关匹配的意图的信息。您的系统可以执行任何所需操作,并对 Dialogflow 作出响应,提供有关如何进行后续操作的信息。下图展示了 fulfillment 的处理流程。

fulfillment 流程图
  1. 最终用户输入文字或讲述一段话语。
  2. Dialogflow 将最终用户表述与意图相匹配,并提取参数。
  3. Dialogflow 向您的网络钩子服务发送网络钩子请求消息。此消息中包含下列相关信息:匹配的意图以及为该意图定义的操作、参数和响应。
  4. 您的服务会根据需要执行操作,如数据库查询或外部 API 调用。
  5. 您的服务向 Dialogflow 发送网络钩子响应消息。此消息包含应发送给最终用户的响应。
  6. Dialogflow 会将响应发送给最终用户。
  7. 最终用户看到或听到响应。

通过 API 实现用户互动

如果您没有使用某个集成选项,则必须编写与最终用户直接交互的代码。您还必须为每轮对话直接与 Dialogflow 的 API 交互,以发送最终用户表述并接收意图匹配信息。下图展示了使用该 API 进行互动的处理流程。

API 处理流程图
  1. 最终用户输入文字或讲述一段话语。
  2. 您的服务在检测意图请求消息中将此最终用户表述发送到 Dialogflow。
  3. Dialogflow 向您的服务发送检测意图响应消息。此消息中包含下列相关信息:匹配的意图以及为该意图定义的操作、参数和响应。
  4. 您的服务会根据需要执行操作,如数据库查询或外部 API 调用。
  5. 您的服务向最终用户发送响应。
  6. 最终用户看到或听到响应。