创建 Dialogflow ES 代理
使用 Dialogflow ES 控制台构建和测试代理。
准备工作
在开始之前,请完成以下步骤:
- 阅读 Dialogflow 基础知识。
- 完成设置步骤。
创建代理
- 前往 Dialogflow ES 控制台。
- 如果系统提示,请登录控制台。如需了解详情,请参阅 Dialogflow 控制台概览。
- 在边栏菜单中,展开加载代理 。
- 点击创建新代理 。
- 输入代理名称、默认语言和默认时区。
- 输入现有项目。如需让 Dialogflow 控制台创建项目, 请选择 创建新 Google 项目。
- 点击创建 。
意图
意图可对一轮对话中的最终用户意图进行分类。您可以为每个代理定义多个意图,这些意图共同处理一段完整的对话。
默认意图
创建代理时,Dialogflow 会为您创建两个 默认意图:
- 默认欢迎意图 :当最终用户开始与您的代理对话时,系统会匹配此意图。它会返回一个响应,让最终用户了解您的代理的功能,或了解他们可以说些什么来开始对话。
- 默认后备意图 :当代理无法将最终用户表述与其他任何意图匹配时,系统会匹配此意图。
如需查看这些意图,请转到您的代理的意图列表:
- 前往 Dialogflow ES 控制台。
- 选择您创建的代理。
- 点击边栏菜单中的意图 。
Dialogflow 控制台 的中间会显示代理的意图列表。

测试默认后备意图

Dialogflow 模拟器位于控制台的右侧。利用模拟器,您可以说出或输入消息来测试代理。
若要立即试用代理,请执行以下操作:
- 点击立即试用字段。
- 输入
What is your name?。 - 按 Enter 键。
代理的响应会显示在默认响应 部分。由于您的输入与任何意图都不匹配,因此系统匹配了默认后备意图,您收到的是一个默认回复。
创建意图
本部分中的步骤创建了一个意图,可以回答“What is your name?”这个问题。 对于每个意图,您可以定义多个训练短语。 训练短语也称为最终用户表述,是最终用户可能对代理输入或说出的内容示例。定义训练短语,以帮助 Dialogflow 将表述与意图匹配。
创建意图:
- 点击边栏菜单中意图 旁边的添加意图 按钮。
- 在意图名称 字段中输入
get-agent-name。 - 在训练短语 部分中,点击添加训练短语 。
输入以下训练短语:
What is your name?Do you have a name?Tell me your name

在响应 部分的文本响应 部分中输入以下内容:
My name is Dialogflow!

点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
测试您的意图

在模拟器中输入 What's your name?,然后按 Enter 键。
即使此表述与提供的训练短语略有不同,代理也会正确响应此表述。
Dialogflow 使用训练短语作为示例,让机器学习模型匹配最终用户表述与意图。模型会根据代理中的每个意图检查表述并为每个意图打分,然后匹配得分最高的意图。如果得分最高的意图的分数非常低,则会匹配后备意图。
参数和实体
当系统在运行时环境中匹配了某个意图时,Dialogflow 会以参数形式提供最终用户表述中的提取值。每个参数都有一个类型,称为实体类型,用于确切规定提取该数据的方式。与原始的最终用户输入不同,参数是结构化数据,可以轻松用于执行某些逻辑或生成响应。如需在构建代理时控制数据的提取方式,请为您的 训练短语的特定部分添加注释,并 配置相关参数。
创建参数
创建意图参数:
- 点击加号 按钮 边栏菜单中意图 旁边的。
- 在意图表单的顶部将意图命名为
set-language。 - 添加以下训练短语:
I know EnglishI speak FrenchI know how to write in German
点击保存 按钮并等到代理训练 窗口指示训练已完成为止。

Dialogflow 会自动检测训练短语中识别为 系统实体的参数。这些系统实体是 Dialogflow 为许多常见数据类型(如位置、颜色和日期)提供的实体。
添加训练短语后,Dialogflow 会在操作和参数 表中创建一行:

- 必需 :未勾选;此参数为可选参数。
- 参数名称 :自动命名为
language,因为它被识别为语言。 - 实体 :被识别为
@sys.language系统实体。 - 值 :引用该参数的值时使用的标识符。
- 是列表 :未勾选;此参数不是列表。
在响应中使用参数数据
您可以在响应中使用参数的值。例如,在构建代理时,您可以在响应中使用 $language 参数引用。在运行时,代理会将其替换为最终用户表述中指定的语言。
添加使用参数的响应:
- 前往响应 部分。
- 在文本响应 部分中,添加以下内容:
Wow! I didn't know you knew $language. - 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
测试您的参数

在模拟器中输入 I know Russian。您可以看到,Dialogflow 正确提取了具有值 Russian 的 language 参数,且在响应中使用了参数引用的地方,正确插入了 Russian。
创建自己的实体
在大多数情况下,您需要向用户收集系统实体未提供的特定数据。您可以创建自定义实体 来处理这种情况。
创建自定义实体:
- 点击边栏菜单中实体 旁边的添加实体 按钮。
- 输入
language-programming作为实体名称。 添加以下实体条目(行):
引用值 同义词 JavaScript JavaScript、js、ECMAScript Java Java Python Python、py 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。

Dialogflow 可以处理复数和大写等简单情况。 为条目添加所有可能的同义词。您添加的同义词越多,代理就越能更好地识别实体。
使用新实体
如需在 set-language 意图中添加训练短语以使用新实体,请执行以下操作:
- 点击边栏菜单中的意图 。
- 点击
set-language意图。 - 添加以下训练短语:
I know javascriptI know how to code in Java
- 请注意,系统会为这些训练短语中的编程语言添加注释,并将其添加到操作和参数 部分的参数中。
- 在响应 部分中,添加以下第二个文本响应:
$language-programming is an excellent programming language。 - 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
测试您的新实体

在模拟器中输入 I know how to code in py。Dialogflow 正确提取了 language-programming 参数的 py 值,将其标识为 Python 实体,并在响应中插入了此值。
上下文
如需控制对话流程,您可以使用 上下文。
添加后续意图
借助__后续意图,您可以 控制对话,而无需手动创建和管理上下文。
创建后续意图时,系统会将 输出上下文 添加到父意图中,并将 同名输入上下文 添加到子意图中。这意味着,只有当父意图在上一对话回合中匹配时,系统才会匹配后续意图。
如需为 set-language 意图添加自定义后续意图,请执行以下操作:
- 选择您在前面步骤中创建的
set-language意图。 - 在响应部分中,更新文本响应:
Wow! I didn't know you knew $language. How long have you known $language?
- 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
- 点击边栏菜单中的意图 。
- 将光标指向
set-language意图,然后点击添加后续意图 。 - 在列表中点击 Custom 。
- 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
Dialogflow 会自动将后续意图命名为 set-language - custom。

与后续意图匹配的意图
系统只会在已匹配父意图之后匹配后续意图。由于系统只会在匹配
set-language意图之后才匹配set-language - custom
意图,因此用户刚刚被询问的是"How long have you known
$language?"这一问题。添加训练短语,指示用户可能用于答复该问题的表述:
- 点击边栏菜单中的意图 。
- 点击
set-language - custom意图。 - 添加以下训练短语:
3 yearsabout 4 daysfor 5 years
- 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
测试您的后续意图
在模拟器中输入 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 意图中,您只询问了用户学习该语言的时长,而未询问引用的语言本身。
如需在响应中引用语言,请执行以下操作:
- 将
set-language - custom意图文本响应更新为I can't believe you've known #set-language-followup.language for $duration! - 点击保存 按钮并等到代理训练 窗口指示训练已完成为止。
#set-language-followup.language 引用是活跃上下文的
参数引用。
测试上下文参数
在模拟器中输入 I know French,然后用 1 week 回答问题。请注意,系统从上下文中检索 language 参数值。
生产环境
在生产环境中运行代理之前,请实施 生产最佳实践。
后续步骤
试用 Fulfillment 快速入门。