创建 Dialogflow ES 代理

本指南介绍了如何使用 Dialogflow 控制台构建和测试简单代理。

准备工作

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

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

创建代理

如果尚未创建代理,请立即创建一个:

  1. 转到 Dialogflow ES 控制台
  2. 如果系统要求登录 Dialogflow 控制台,请登录。如需了解详情,请参阅 Dialogflow 控制台概览
  3. 点击左侧边栏菜单中的创建代理 (Create Agent)。如果您已有其他代理,请点击代理名称,滚动到底部,然后点击创建新代理 (Create new agent)。
  4. 输入您的代理名称、默认语言和默认时区。
  5. 如果您已经创建了项目,请输入该项目。如果要允许 Dialogflow 控制台创建项目,请选择创建新 Google 项目 (Create a new Google project)。
  6. 点击创建 (Create) 按钮。

将示例文件导入代理

本指南中的步骤对您的代理进行了假设,因此您需要import为本指南准备的代理。 导入时,这些步骤会使用恢复选项,这样会覆盖所有代理设置、意图和实体。

为本指南准备的代理是新代理,没有用户定义的意图或实体。

如需导入文件,请按以下步骤操作:

  1. 下载 new-agent.zip 文件。
  2. 转到 Dialogflow ES 控制台
  3. 选择您的代理。
  4. 点击代理名称旁边的设置 按钮。
  5. 选择导出和导入标签页。
  6. 选择从 ZIP 文件恢复 (Restore from ZIP),然后按照说明恢复下载的 zip 文件。

意图

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

默认意图

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

  • 默认欢迎意图:当最终用户与您的代理开始对话时,系统会匹配此意图。此意图应返回一个响应,让最终用户知道代理可以做什么或最终用户可以说什么来开始对话。
  • 默认后备意图:当代理无法将最终用户表述与任何其他意图匹配时,系统会匹配此意图。

如需查看这些意图,请转到您的代理的意图列表:

  1. 转到 Dialogflow ES 控制台
  2. 选择刚创建的代理。
  3. 点击左侧边栏菜单中的意图

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

意图列表屏幕截图

测试默认后备意图

模拟器屏幕截图

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

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

  • 点击立即试用字段。
  • 输入 What is your name?
  • 按 Enter 键。

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

创建新意图

本部分中的步骤创建了一个意图,可以回答“what is your name?”这个问题。对于每个意图,您可以定义多个训练短语。训练短语也称为最终用户表述,是最终用户可能对代理输入或说出的内容示例。您应该定义许多训练短语,以便为 Dialogflow 提供应该与意图匹配的各种表述。

创建意图:

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

    • 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 会在训练语句 (Training phrases) 部分下方的操作和参数 (Actions & parameters) 表中创建一行:

注释训练短语的屏幕截图

  • 必需 (Required):该复选框未勾选,因此这项参数为可选参数。
  • 参数名称(Parameter Name):该参数自动命名为 language,因为该参数被识别为语言。
  • 实体 (Entity):这是实体类型。它被识别为 @sys.language 系统实体。
  • (Value):这是引用该实体的值时使用的标识符。
  • 是列表 (Is List):该复选框未选中,因此该参数不是列表。

在响应中使用参数数据

您可以在响应中使用参数的值。例如,您可以在构建代理时在响应中使用 $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 正确提取了值为 pylanguage-programming 参数,将其标识为 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 意图上,然后点击添加后续意图 (Add follow-up intent)。
  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 参数值。

生产化

在生产环境中运行代理之前,请务必实施生产化最佳做法

后续步骤

试用 fulfillment 快速入门