Dialogflow - 组件
Dialogflow 是 Google 提供的一项用于构建聊天机器人或虚拟助手的技术。它让您能够更轻松地听取他人的意见并做出正确的回应。这些组件组合起来后,即可创建能够与用户进行自然对话的智能聊天机器人。
Dialogflow 的组件
Agents
Intents
Entities
Invocation
Fulfillment Request
Response
Context
User says
Training Phrases
现在让我们在下面的部分详细讨论每一点 −
代理
Dialogflow 代理是虚拟代理,可同时处理与最终用户的多个对话。它是一个自然语言解释模块,可以识别口语的差异。 Dialogflow 将对话过程中的最终用户文本或音频转换为您的服务和应用可以理解的结构化数据。您可以设计和构建 Dialogflow 代理来处理系统所需的多种类型的对话。
Dialogflow 代理类似于现实世界的呼叫中心代理。他们都接受了如何处理常见辩论案例的指导,但这种指导不需要深入。
代理还充当数据和设置的顶级容器:
要查看哪些语言、机器学习和其他偏好会影响代理的行为,请查看代理设置。
尝试在整个对话过程中对最终用户意图进行分类。
用于识别和提取用户口语中特定信息的实体。
阅读书面内容(如常见问题解答)和识别准备好的答复的能力。
可以集成在硬件上运行的程序或直接处理最终用户交互的服务(如 Google Assistant)。
使用集成连接服务时,请使用履行。
预建代理
Dialogflow 提供了一系列代理,也称为预建代理,用于常见用例。您可以使用这些代理开始有关送货、预订酒店、获取路线和其他事项的对话。
预建代理为某些用例提供意图和实体,但您仍需要提供意图响应。反应通常取决于您的具体情况或需要满足才能得到满足。
代理的限制
适用以下限制 −
只有全球范围内可用的预建代理。
部分预建代理支持所有 Dialogflow 语言。浏览预建代理时,仅显示支持活动代理默认语言的预建代理。
导入预建代理
以下是将预建代理导入项目的方法:
转到 Dialogflow ES 控制台。
从左侧边栏菜单中选择"预建代理"。
将鼠标光标指向现有代理。
单击"查看详细信息"。
选择"导入"。
从活跃的 GCP 项目中选择或启动一个全新的项目。
选择"从模板创建代理"。
多语言代理
Dialogflow 支持多种语言。创建代理时选择的语言将成为默认语言,您可以添加更多语言。语言有两种类别:
根语言:根语言是那些缺乏位置规范的语言,例如英语 (en)。
特定于地区的语言:特定于地区的语言包括英语-美国 (en-US),它将某个地方标识为某个国家或地区。
意图
意图将最终用户在对话中的单次意图进行分类。您可以为每个代理描述许多意图,而您的全部意图可以管理整个对话。Dialogflow 将代理的最佳意图与最终用户的书面或口头语言(也称为最终用户表达)进行匹配。匹配意图也称为分类意图。
创建一个可以识别并响应用户有关天气的询问的天气代理是一个典型的用例。如果问题是关于天气预报,您很可能会指定一个目标。Dialogflow 会将预报意图与最终用户的表达相匹配,例如"天气预报怎么样?"您还可以指定是否要从最终用户表达中提取特定信息,例如预期的天气预报位置或时间。您的系统需要这些提取的数据才能向最终用户提供天气查询。
基本意图包括以下项目 −
训练短语:最终用户可以使用训练短语作为代表术语。如果这些句子中的任何一个听起来像最终用户会使用的表达,那么 Dialogflow 就会匹配意图。无需识别每种可能的情况,因为 Dialogflow 的内置机器学习可以扩展以适应列表中更多相关短语。
操作:我们能够向代理提供操作。当我们匹配意图时,Dialogflow 会提供系统操作。这些操作可用于启动不同的预定义系统操作。
参数:如果您想在运行时执行意图,Dialogflow 会将最终用户表达作为参数接受。实体类型或精确描述如何检索数据并将其分配给每个参数的类型。设置与最终用户的原始输入不同。 "参数"一词描述了用于提供响应或执行逻辑的已安排数据。
响应:您可以为用户提供音频、视觉或文本响应。这些响应能够响应来自最终用户的查询,从他们那里获取更多数据并结束对话。
下图显示了意图匹配的基本流程以及它如何响应最终用户。
操作
操作字段是一项简单的实用功能,可改善服务的逻辑。构建代理时,您可以输入找到的任何有用的文本。
当意图在运行时匹配时,Dialogflow 会将操作值提供给您的履行 webhook 请求或 API 交互响应。它可用于启动服务中的某些逻辑。
参数
当意图在运行时匹配时,Dialogflow 会将其从最终用户表达式中收集的值作为参数返回。与每个参数相关的实体类型指定了提取数据的精确方式。参数是有组织的数据,可以轻松用于执行逻辑或生成与非结构化最终用户输入相比的回复。
通过标记训练短语的特定部分并设置相关参数,您可以在创建代理时管理数据收集过程。
响应
当意图匹配时,集成的响应处理程序可以给出响应。此功能仅允许静态响应,但您可以使用参数引用使这些响应更具动态性。对于呈现最终用户提供的数据,这很有帮助。例如,要回答查询,请说"好的,我已于 10 月 20 日为您预订了一个房间"。
默认意图
创建代理时,会自动设置两个意图 −
默认问候意图:最终用户开始与您的代表交谈时立即匹配。
默认后备意图:当您的代理无法将最终用户输入与另一个意图匹配时,它将匹配默认后备意图。
实体
实体被定义为代理用来回答用户问题的知识库。系统实体有很多种类型,例如天气、位置、日期等。
实体可帮助 Dialogflow 理解用户陈述的特定部分。例如,尝试句子"新德里的天气怎么样?" "新德里"是一个实体(一个位置)。
实体选项
许多实体参数可以改变数据提取和实体匹配的行为方式。这些参数是为系统实体预先配置的,因此您无法更改它们。但您可以修改它们以适合您自己的自定义实体。根据您选择的设置,您可以创建多种类型的实体:
映射实体:对于每个参考值,映射实体提供从同义词到参考值的映射。每个映射实体项都包含同义词列表和单个参考值。
列表实体:列表实体提供单值实体项列表。它们具有参考值和同义词。
复合实体:复合实体是一种特定类型的列表实体。虽然还可以包含更多实体类型,但列表实体的实体条目通常包含简单的单词或句子。对可以在另一种实体类型中找到的一种实体类型的引用称为别名。当列表对象具有其他实体类型的同义词时,它被称为复合实体。
正则表达式实体:您可以使用正则表达式实体提供用于匹配的正则表达式。
此外,还有两个选项可以修改实体匹配的行为,但不指定实体的类型:
自动扩展
模糊匹配
履行请求
当意图匹配时,代理的默认响应是静态的。如果您使用其中一个集成选项,则可以使用履行来提供更动态的答案。当启用意图以进行履行时,Dialogflow 会调用您指定的服务来响应意图。例如,如果最终用户想要预约周五的理发,您的服务可以在数据库中查找信息,并向他们返回周五的可用时间。
要允许履行,每个意图都有一个设置。每当意图需要动态响应或系统采取某种行动时,您都应该允许意图履行。如果 Dialogflow 与未启用实施的意图匹配,则 Dialogflow 将使用您为意图提供的静态响应。
当启用实施的意图匹配时,Dialogflow 会通过发送包含匹配意图详细信息的请求,将匹配的意图告知您的 webhook 服务。您的系统能够执行任何必要的任务,并为 Dialogflow 提供下一步操作的说明。您为意图提供的静态响应仅在启用实施后 webhook 服务失败的情况下使用。下图显示了履行处理流程。
当用户与 Dialogflow 代理交互时,流程的工作方式如下 −
最终用户说出或输入语句。
Dialogflow 提取参数并将最终用户表达评估为意图。
您的 webhook 服务从 Dialogflow 接收 webhook 请求消息。此消息包含有关操作、参数、意图的定义响应和匹配意图的详细信息。
必要时,您的服务会运行数据库查询或外部 API 调用等命令。
Dialogflow 从您的服务接收 webhook 响应消息。此消息中给出了必须传递给最终用户的答复。
最终用户收到来自 Dialogflow 的响应。
答案对最终用户是可见或可听的。
上下文
Dialogflow 的上下文工作方式与聊天机器人的记忆非常相似。它可以帮助机器人记住用户在对话期间发表的先前评论。这提高了聊天机器人的理解能力,并使其能够根据先前的句子给出精确的答案。
例如,如果用户说"我想预订航班",聊天机器人会跟踪它。当用户稍后说"去新德里"时,机器人会明白他们指的是安排前往新德里的旅行。
有设置,可以实现更自然的对话。下图显示了银行代理如何使用上下文。
以下是 Dialogflow 如何在对话中使用上下文的说明 −
Dialogflow 会努力将用户询问支票账户信息时使用的词语与正确的意图进行匹配。如果两者匹配,系统将进入"支票"上下文。
然后,代理会直接询问用户他们想要了解有关支票账户的哪些信息。如果用户说"我的余额"之类的话,则 Dialogflow 提供的"支票"上下文仍然处于活动状态,并将用户的响应与"支票余额"目的进行匹配。
如果用户在"储蓄"上下文处于活动状态时询问他们的储蓄账户,则可以使用"储蓄余额"意图。
系统确认所需的数据库后,代理将使用支票账户余额进行响应。