创建 Dialogflow ES 代理

使用 Dialogflow ES 控制台构建和测试代理。

准备工作

在开始之前,请完成以下步骤:

创建代理

  1. 前往 Dialogflow ES 控制台
  2. 如果系统提示,请登录 Dialogflow 控制台。如需了解详情,请参阅 Dialogflow 控制台概览
  3. 在边栏菜单中,点击代理
  4. 选择已部署的智能体标签页。
  5. 点击创建代理
  6. 输入代理名称、默认语言和默认时区。
  7. 输入现有项目。如需让 Dialogflow 控制台创建项目,请选择创建新 Google 项目
  8. 点击创建

意图

意图可对一轮对话中的最终用户意图进行分类。您可以为每个代理定义多个意图,这些意图共同处理一段完整的对话。

默认意图

创建代理时,Dialogflow 会为您创建两个默认意图

  • 默认欢迎意图:当最终用户开始与您的代理对话时,系统会匹配此意图。它返回的响应应该让最终用户知道代理执行了哪些操作或自己可以说些什么来展开对话。
  • 默认后备意图:当代理无法将最终用户表述与其他任何意图匹配时,系统会匹配此意图。

如需查看这些意图,请前往代理的意图列表:

  1. 前往 Dialogflow ES 控制台
  2. 选择您创建的代理。
  3. 点击边栏菜单中的意图

Dialogflow 控制台的中间会显示代理的意图列表。

意图列表屏幕截图

测试默认后备意图

模拟器屏幕截图

Dialogflow 模拟器位于控制台的右侧。利用该模拟器,您可以通过说出或输入消息来测试代理。

若要立即试用代理,请执行以下操作:

  1. 点击立即试用字段。
  2. 输入 What is your name?
  3. 按 Enter 键。

代理的回答会显示在默认回答部分。由于您的输入与任何意图都不匹配,因此系统匹配了默认后备意图,您收到的是一个默认回答。

创建意图

本部分中的步骤创建了一个意图,可以回答“你的名字是什么?”这个问题。对于每个意图,您可以定义多个训练短语。训练短语是最终用户可能对代理输入或说出的内容示例,也称为“最终用户表述”。定义训练短语有助于 Dialogflow 将表述与意图相匹配。

创建意图:

  1. 点击边栏菜单中意图 (Intents) 旁边的添加意图 按钮。
  2. 意图名称 (Intent name) 字段中输入 get-agent-name
  3. 训练短语 (Training Phrases) 部分中,点击添加训练短语 (Add training phrases)。
  4. 输入以下训练短语:

    • What is your name?
    • Do you have a name?
    • Tell me your name

    训练短语屏幕截图

  5. 回答部分的文本回答部分中输入以下内容:

    • My name is Dialogflow!

    训练短语屏幕截图

  6. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

测试您的意图

模拟器屏幕截图

在模拟器中,输入 What's your name? 并按 Enter 键。

即使此表述与提供的训练短语略有不同,代理也会正确响应此表述。

Dialogflow 使用训练短语作为机器学习模型的示例,以将最终用户表述与意图相匹配。模型会根据代理中的每个意图检查表述,为每个意图分配分数,然后匹配得分最高的意图。如果得分最高的意图的分数非常低,则会匹配后备意图。

参数和实体

当系统在运行时环境中匹配了某个意图时,Dialogflow 会以参数形式提供最终用户表述中的提取值。每个参数都有一个类型,称为实体类型,用于确切规定提取该数据的方式。与原始的最终用户输入不同,参数是结构化数据,可以轻松用于执行某些逻辑或生成响应。

如需在构建代理时控制数据的提取方式,请为训练短语的特定部分添加注释,并配置相关参数。

创建参数

创建意图参数:

  1. 点击边栏菜单中的意图旁边的加号 按钮。
  2. 在意图表单的顶部将意图命名为 set-language
  3. 添加以下训练短语:
    • I know English
    • I speak French
    • I know how to write in German
  4. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

    注释训练短语的屏幕截图

Dialogflow 会自动检测训练短语中识别为系统实体的参数。这些实体由 Dialogflow 提供,适用于位置、颜色和日期等许多常见的数据类型。

添加训练短语后,Dialogflow 会在操作和参数 (Actions & parameters) 表中创建一行:

注释训练短语的屏幕截图

  • 必需 (Required):未勾选;此参数为可选参数。
  • 参数名称:自动命名为 language,因为该参数被识别为语言。
  • 实体:被识别为 @sys.language 系统实体。
  • :引用相应参数值时使用的标识符。
  • 是列表:未勾选;此参数不是列表。

在响应中使用参数数据

您可以在回答中使用参数的值。例如,在构建代理时,您可以在响应中使用 $language 参数引用。在运行时,代理会将其替换为最终用户表述中指定的语言。

添加使用参数的响应:

  1. 前往回答部分。
  2. 文本响应部分中,添加以下内容:Wow! I didn't know you knew $language.
  3. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

测试您的参数

模拟器屏幕截图

在模拟器中,输入 I know Russian。您可以看到,Dialogflow 正确提取了具有值 Russianlanguage 参数,且在响应中使用了参数引用的地方,正确插入了 Russian

创建自己的实体

在大多数情况下,您需要向用户收集系统实体未提供的特定数据。您可以创建自定义实体来处理这种情况。

如需创建自定义实体,请执行以下操作:

  1. 点击边栏菜单中实体旁边的添加实体 按钮。
  2. 输入 language-programming 作为实体名称。
  3. 添加以下实体条目(行):

    引用值 同义词
    JavaScript JavaScript、js、ECMAScript
    Java Java
    Python Python、py
  4. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

使用实体的屏幕截图

Dialogflow 可以处理复数和大写等简单情况。请为条目添加所有可能的同义词。您添加的同义词越多,代理就越能更好地识别实体。

使用新实体

如需在 set-language 意图中添加使用新实体的训练短语,请执行以下操作:

  1. 点击边栏菜单中的意图
  2. 点击 set-language 意图。
  3. 添加以下训练短语:
    • I know javascript
    • I know how to code in Java
  4. 请注意,系统会自动为这些训练短语中的编程语言添加注释,并将其添加到操作和参数 (Action and Parameters) 部分的参数中。
  5. 响应部分中,添加以下第二个文本响应:$language-programming is an excellent programming language
  6. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

测试您的新实体

模拟器屏幕截图

在模拟器中,输入 I know how to code in py。Dialogflow 正确提取了 language-programming 参数的 py 值,将其标识为 Python 实体,并将该值插入到响应中。

上下文

如需控制对话流程,您可以使用上下文

添加后续意图

借助后续意图,您可以控制对话,而无需手动创建和管理上下文。

创建后续意图时,系统会将输出上下文添加到父意图中,并将同名的输入上下文添加到子意图中。这意味着,只有当父意图在上一轮对话中匹配时,系统才会匹配后续意图。

如需为 set-language 意图添加自定义后续意图,请执行以下操作:

  1. 选择您在前面步骤中创建的 set-language 意图。
  2. 响应部分中,更新文本响应:
    • Wow! I didn't know you knew $language. How long have you known $language?
  3. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
  4. 点击边栏菜单中的意图
  5. 将光标指向 set-language 意图,然后点击添加后续意图
  6. 点击列表中的自定义
  7. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

Dialogflow 会自动将后续意图命名为 set-language - custom

后续意图屏幕截图

与后续意图匹配的意图

系统只会在匹配父意图之后匹配后续意图。由于系统只会在匹配 set-language 意图之后匹配 set-language - custom 意图,因此用户刚刚被问到“How long have you known $language?”这一问题。请为用户对该问题的可能回答添加训练短语:

  1. 点击边栏菜单中的意图
  2. 点击 set-language - custom 意图。
  3. 添加以下训练短语:
    • 3 years
    • about 4 days
    • for 5 years
  4. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

测试您的后续意图

在模拟器中输入 I know French,然后用 about 2 weeks 回答问题 How long have you known French

尽管第二个表述 (about 2 weeks) 没有响应,但您可以发现,系统将该表述匹配至正确的意图 (set-language - custom),并且正确解析了时长参数 (2 weeks)。

意图和上下文

检查 set-language 意图,您可以看到 set-language-followup 列为输出上下文,前面标有数字 2。此数字称为有效期

输出上下文屏幕截图

set-language 意图匹配之后,set-language-followup 上下文会变为活跃状态,并被附加到对话的两个回合(有效期为 2)。因此,当您回答 How long have you known $language? 之类的问题时,set-language-followup 上下文处于活跃状态。

检查 set-language - custom 意图,您可以看到 set-language-followup 列为输入上下文,该输入上下文与 set-language 意图的输出上下文相同。

如果任何意图的输入上下文与活跃上下文匹配,Dialogflow 会在匹配意图时优先选择该意图。

上下文和参数

上下文会存储参数值,您可以在 set-language 意图的输出上下文处于活跃状态时访问该意图中定义的参数值。在 set-language - custom 意图中,您只询问了用户学习该语言的时长,而未询问引用的语言本身。

如需在响应中引用语言,请执行以下操作:

  1. set-language - custom 意图文本响应更新为 I can't believe you've known #set-language-followup.language for $duration!
  2. 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。

#set-language-followup.language 引用是活跃上下文的参数引用

测试上下文参数

在模拟器中输入 I know French,然后用 1 week 回答问题。请注意,系统从上下文中检索 language 参数值。

生产

在生产环境中运行代理之前,请实施生产最佳实践

后续步骤

不妨试试履单快速入门