我想做一个可以重复我说的任何名字的代理人:
我有1个实体,叫做:名称。
我有1个Intent,名为:RepeatName。
我有1个训练短语:
@inc
然后我突出显示“ {Name}”并单击我的实体@Name
然后在该训练短语下面是:
"Repeat this name: {Name}"
在“操作和参数”下,我具有:
Parameter Name: Name
Entity: @Name
Resolved Value: {Name}
在回复下,我收到了文字回复:
Required: Checked
Parameter Name: Name
Entity: @Name
Value: $Name
然后我尝试使用:
“重复此名称:约翰”
但是它没有设置参数名称
但是,当我尝试:
“重复此名称:名称”
然后我得到了预期的答复:
“好吧,我会重复这个名字:名字”
我不明白添加更多的训练短语会有所帮助,因为名称可以是任何名称。我是Dialogflow的新手,所以这里可能缺少一些基本概念。
任何帮助将不胜感激。
答案 0 :(得分:2)
尝试使用内置的系统实体-@sys.given-name
。
您要做的是创建一个名为Name
的实体,然后启用了define synonyms
,该实体用于创建您的实体的示例。
但是随后您禁用了allowed automated expansion
,这意味着除您定义的同义词以外的任何内容都不会被识别为您的实体。
您仅定义了一个同义词,即Name
,因此只能被识别。
因此,可以使用经过预先训练以识别名称的@sys.given-name
尝试相同的操作,或者在启用Name
之后使用尽可能多的示例训练您的自定义实体allowed automatic expansion
(但是可能会导致识别错误的值)。
希望有帮助。
答案 1 :(得分:1)
问题是您正在使用Developer Entity Type来尝试定义您希望在此处捕获的参数。然后,除了“名称”外,您无需为该实体类型指定任何可能的实体值。因此,名称“ name”是唯一匹配的名称。
您有一些选择。
您可以使用System Entity Type中的@sys.given-name
。这包括特定语言的最常用名称,但是如果您期望使用其他名称,可能还不够好。
您可以使用@sys.any
的系统实体类型,但不建议过度使用此实体类型,因为它可能会浪费垃圾或与短语不完全匹配。
类似地,您可以将您的实体类型设置为allow automated expansion,但是如果您没有准确的训练短语并捡拾垃圾,您仍然会冒无法正确捕获事物的风险。
弄清楚哪个选项最适合您将需要您进行一些测试。通常,当我可以清楚地定义类型或别名时,将使用实体,而当不能明确定义时,将使用@sys.any
。