创建 Dialogflow ES 代理
本指南介绍了如何使用 Dialogflow 控制台构建和测试简单代理。
准备工作
在阅读本指南之前,请先完成以下事项:
- 阅读 Dialogflow 基础知识。
- 执行设置步骤。
创建代理
如果尚未创建代理,请立即创建一个:
- 前往 Dialogflow ES 控制台。
- 如果系统要求登录 Dialogflow 控制台,请登录。如需了解详情,请参阅 Dialogflow 控制台概览。
- 点击左侧边栏菜单中的创建代理 (Create Agent)。如果您已有其他代理,请点击代理名称,滚动到底部,然后点击创建新代理 (Create new agent)。
- 输入您的代理名称、默认语言和默认时区。
- 如果您已经创建了项目,请输入该项目。如果要允许 Dialogflow 控制台创建项目,请选择创建新 Google 项目 (Create a new Google project)。
- 点击创建 (Create) 按钮。
将示例文件导入代理
本指南中的步骤对您的代理进行了假设,因此您需要导入为本指南准备的代理。 导入时,这些步骤会使用恢复选项,这样会覆盖所有代理设置、意图和实体。
为本指南准备的代理是新代理,没有用户定义的意图或实体。
如需导入文件,请按以下步骤操作:
-
下载
new-agent.zip
文件。 - 前往 Dialogflow ES 控制台。
- 选择您的代理。
- 点击代理名称旁边的设置 settings 按钮。
- 选择导出和导入 (Export and Import) 标签页。
- 选择从 ZIP 文件恢复 (Restore from ZIP),然后按照说明恢复下载的 zip 文件。
意图
意图可对一轮对话中的最终用户意图进行分类。您可以为每个代理定义多个意图,组合意图可以处理一段完整的对话。
默认意图
创建代理时,系统会为您创建两个默认意图:
- 默认欢迎意图:当最终用户与您的代理开始对话时,系统会匹配此意图。此意图应返回一个响应,让最终用户知道代理可以做什么或最终用户可以说什么来开始对话。
- 默认后备意图:当代理无法将最终用户表述与任何其他意图匹配时,系统会匹配此意图。
如需查看这些意图,请转到您的代理的意图列表:
- 前往 Dialogflow ES 控制台。
- 选择刚创建的代理。
- 点击左侧边栏菜单中的意图。
控制台的中间会显示代理的意图列表。
测试默认后备意图
Dialogflow 模拟器位于控制台的右侧。利用模拟器,您可以说出或输入消息来测试代理。
若要立即试用代理,请执行以下操作:
- 点击立即试用字段。
- 输入
What is your name?
。 - 按 Enter 键。
代理的响应会显示在默认响应 (Default Response) 部分。由于您的输入与任何意图都不匹配,因此系统匹配了默认后备意图,您收到的是一个默认回复。
创建新意图
本部分中的步骤创建了一个意图,可以回答“what is your name?”这个问题。对于每个意图,您可以定义多个训练短语。训练短语也称为最终用户表述,是最终用户可能对代理输入或说出的内容示例。您应该定义许多训练短语,以便为 Dialogflow 提供应该与意图匹配的各种表述。
创建意图:
- 点击左侧边栏菜单中的意图旁边的添加意图 按钮。
- 在意图名称 (Intent name) 字段中输入
get-agent-name
。 - 在训练短语 (Training Phrases) 部分中,点击添加训练短语 (Add training phrases)。
输入以下训练短语,每次输入后按 Enter 键:
What is your name?
Do you have a name?
Tell me your name
在响应部分的文本响应部分中输入以下内容:
My name is Dialogflow!
点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
测试您的意图
在模拟器中,输入 What's your name?
并按 Enter 键。
即使此表述与您提供的训练短语略有不同,代理也会正确响应此表述。
Dialogflow 使用训练短语作为机器学习模型的示例,以将最终用户表述与意图相匹配。模型会根据代理中的每个意图检查表述并为每个意图打分,然后匹配得分最高的意图。如果得分最高的意图的分数非常低,则会匹配后备意图。
参数和实体
当系统在运行时环境中匹配了某个意图时,Dialogflow 会以参数形式提供最终用户表述中的提取值。每个参数都有一个类型,称为实体类型,用于确切规定提取该数据的方式。与原始的最终用户输入不同,参数是结构化数据,可以轻松用于执行某些逻辑或生成响应。构建代理时,可以注释某些训练短语并配置关联的参数来控制数据的提取方式。
创建参数
如需创建一个含有参数的新意图,请执行以下操作:
- 点击左侧边栏菜单中的意图旁边的加号 按钮。
- 在意图表单的顶部将意图命名为
set-language
。 - 添加以下训练短语:
I know English
I speak French
I know how to write in German
点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
Dialogflow 会自动检测训练短语中识别为系统实体的参数。这些系统实体是 Dialogflow 为许多常见数据类型(如位置、颜色和日期)提供的实体。
Dialogflow 会在训练语句 (Training phrases) 部分下方的操作和参数 (Actions & parameters) 表中创建一行:
- 必需 (Required):该复选框未勾选,因此这项参数为可选参数。
- 参数名称(Parameter Name):该参数自动命名为
language
,因为该参数被识别为语言。 - 实体 (Entity):这是实体类型。它被识别为
@sys.language
系统实体。 - 值 (Value):这是引用该实体的值时使用的标识符。
- 是列表 (Is List):该复选框未选中,因此该参数不是列表。
在响应中使用参数数据
您可以在响应中使用参数的值。例如,您可以在构建代理时在响应中使用 $language
参数引用。在运行时,这项引用将被替换为最终用户表述中指定的语言。
添加使用参数的响应:
- 向下滚动至响应部分。
- 添加以下文字响应:
Wow! I didn't know you knew $language.
- 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
测试您的参数
在模拟器中输入 I know Russian
。
您可以看到,Dialogflow 正确提取了具有值 Russian
的 language
参数,且在响应中使用了参数引用的地方,正确插入了 Russian
。
创建自己的实体
在大多数情况下,您需要向用户收集系统实体未提供的特定数据。您可以创建自定义实体来处理这种情况。
如需创建自定义实体,请执行以下操作:
- 在左侧边栏菜单中,点击实体旁边的添加实体 按钮。
- 输入
language-programming
作为实体名称。 添加以下实体条目(行):
引用值 同义词 JavaScript JavaScript、js、ECMAScript Java Java Python Python、py 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
Dialogflow 可以处理复数和大写等简单事项,但您应该为条目添加所有可能的同义词。您添加的同义词越多,代理就越能更好地确定实体。
使用新实体
如需在 set-language
意图中添加训练短语以使用新实体,请执行以下操作:
- 点击左侧边栏菜单中的意图。
- 点击
set-language
意图。 - 添加以下训练短语:
I know javascript
I know how to code in Java
- 请注意,系统会为这些训练短语中的编程语言添加注释,并将其添加到操作和参数 (Action and Parameters) 部分的参数中。
- 在响应部分中,添加以下第二个文本响应:
$language-programming is an excellent programming language.
。 - 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
测试您的新实体
在模拟器中输入 I know how to code in py
。
您可以看到 Dialogflow 正确提取了值为 py
的 language-programming
参数,将其标识为 Python
实体,并在响应中插入了此值。
上下文
如需控制对话流程,您可以使用上下文。
添加后续意图
后续意图提供了一种控制对话的简单方法,无需手动创建和管理上下文。
创建后续意图时,系统会将输出上下文添加到父意图中,并将同名的输入上下文添加到子意图中。这意味着只有当父意图在上一轮对话中匹配时,系统才会匹配后续意图。
如需为 set-language
意图添加自定义后续意图,请执行以下操作:
- 选择您在前面步骤中创建的
set-language
意图。 - 在响应部分中,更新文本响应:
Wow! I didn't know you knew $language. How long have you known $language?
- 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
- 点击左侧边栏菜单中的意图。
- 将鼠标悬停在
set-language
意图上,然后点击添加后续意图 (Add follow-up intent)。 - 在显示的列表中点击自定义。
- 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
Dialogflow 会自动将后续意图命名为 set-language - custom
。
与后续意图匹配的意图
系统只会在已匹配父意图之后匹配后续意图。由于系统只会在匹配 set-language
意图之后才匹配 set-language - custom
意图,因此您可以假定用户刚刚被询问了问题 How long have you known $language?
。您现在可以添加训练语句,指示用户可能用于答复该问题的表述:
- 点击左侧边栏菜单中的意图。
- 点击
set-language - custom
意图。 - 添加以下训练短语:
3 years
about 4 days
for 5 years
- 点击保存按钮并等到代理训练 (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
意图中,您只询问了用户学习该语言的时长,而未询问引用的语言本身。
如需在响应中引用语言,请执行以下操作:
- 将
set-language - custom
意图文本响应更新为I can't believe you've known #set-language-followup.language for $duration!
- 点击保存按钮并等到代理训练 (Agent Training) 窗口指示训练已完成为止。
#set-language-followup.language
引用称为活跃上下文的参数引用。
测试上下文参数
在模拟器中输入 I know French
,然后用 1 week
回答问题。请注意,系统从上下文中检索 language
参数值。
生产化
在生产环境中运行代理之前,请务必实施生产化最佳做法。
后续步骤
试用履单快速入门。