实体选项

您可以通过多个实体选项更改实体匹配和数据提取的行为。这些选项是为系统实体预先配置的,因此对于系统实体无法更改,但对于您自己的自定义实体来说,则可进行更改。您可以根据所选的选项创建不同种类的实体:

此外,还有其他选项,这些选项不会确定实体的种类,但会影响实体匹配的行为:

本文档会逐一介绍上述选项。

如何查找此数据

构建代理时,最常见的方法是使用 Dialogflow CX 控制台(访问文档打开控制台)。以下说明着重介绍如何使用控制台。如需访问实体选项数据,请执行以下操作:

  1. 打开 Dialogflow CX 控制台
  2. 选择您的 Google Cloud 项目。
  3. 选择您的代理。
  4. 选择管理标签页。
  5. 点击实体类型
  6. 查看任何现有实体的以下选项(其中一些选项仅在展开高级选项后可见):
    • 仅限实体(无同义词)
    • 正则表达式实体
    • 自动添加实体
    • 模糊匹配
    • 在日志中隐去
    • 实体排除项

如果您要使用 API 而非控制台来构建代理,请参阅 EntityType 类型。API 字段名称与控制台字段名称类似。以下说明重点介绍控制台与 API 之间的重要区别。

为 EntityType 参考选择协议和端口

协议 V3 V3beta1
REST EntityType 资源 EntityType 资源
RPC EntityType 接口 EntityType 接口
C++ EntityTypesClient 不可用
C# EntityTypesClient 不可用
Go EntityTypesClient 不可用
Java EntityTypesClient EntityTypesClient
Node.js EntityTypesClient EntityTypesClient
PHP 不可用 不可用
Python EntityTypesClient EntityTypesClient
Ruby 不可用 不可用

映射实体

映射实体提供从引用值到每个引用值的同义词的映射。每个映射实体条目都包含一个引用值和一个同义词列表。您还可以选择为每个实体设置 DTMF 模式

例如,以下每一行都是 size 实体类型的实体条目:

实体 同义词 DTMF 模式
S S, small, tiny, little
M M, medium, average
L L, large, huge, big

请注意,上述每个实体条目的同义词列表中都包含引用值。为了让引用值得以匹配,需要将其作为同义词本身包含在内。当您最初通过控制台输入引用值时,该值会自动添加为同义词。

如果任何同义词匹配最终用户输入部分,则系统会提取相关引用值作为匹配项,并使用该值来解析关联的参数值。

可以从同义词列表中省略引用值。这只是表示引用值与最终用户输入部分不匹配,但如果引用值的一个同义词匹配,则将引用值用作提取值。当您为最终用户未输入或说出的引用值使用特殊字符串时,这种做法十分可取。

许多系统实体都是映射实体。例如,@sys.date 系统实体匹配常规日期输入内容,如“January 1, 2015”或“The first of January of 2015”。这两项输入都映射到 ISO-8601 格式的引用值:“2015-01-01T12:00:00-03:00”。

如需创建映射实体,请执行以下操作:

  • 使用控制台,取消选中正则表达式实体选项,然后取消选中仅限实体选项。
  • 使用 API,将 EntityType.kind 字段设置为 KIND_MAP

列表实体

列表实体提供单值实体条目的列表。这些实体没有引用值和同义词。例如,以下每一行都是 material 实体类型的实体条目:

fabric
wood
金属

如果任何值匹配最终用户输入部分,则系统会提取该值作为匹配项,并使用该值来解析关联的参数值。

许多系统实体都是列表实体。例如,@sys.color 系统实体匹配常规颜色输入内容,如“red”或“blue”。当某一颜色匹配时,提取值不会映射到任何引用值。例如,“scarlet”或“crimson”等红色系不会映射到“red”,但会被提取为原始值“scarlet”和“crimson”。

如需创建列表实体,请执行以下操作:

  • 使用控制台,取消选中正则表达式实体选项,并选中仅限实体选项。
  • 使用 API,将 EntityType.kind 字段设置为 KIND_LIST

复合实体

复合实体是一种特殊种类的列表实体。列表实体的实体条目通常包含简单的字词或短语,但也可能包含其他实体类型。当某一实体类型被其他实体类型引用时,这种引用称为“别名”。如果某个列表实体包含其他实体类型的别名,则该列表实体称为复合实体。

创建别名时,您需要提供所引用实体类型的名称和所选的属性名称。如果某一复合实体在运行时匹配,则提取值会以 JSON 对象形式返回,其中别名属性名称用作 JSON 属性名称。别名的输入格式如下:

@entity-name:property-name

例如,您可以使用以下实体条目创建匹配城市或州/省/自治区/直辖市的 place 实体类型:

@sys.geo-city:city
@sys.geo-state:state

如果最终用户的输入包含“Nashville”部分,则匹配 place 实体类型。提取值将按如下形式返回:{"city": "Nashville"}

您还可以在一个实体条目中使用多个实体别名。请考虑以下 move 自定义实体类型,该类型包含 direction 实体类型和 @sys.number 系统实体类型的别名:

Direction 自定义映射实体类型

引用值 同义词
forward forward、forwards
back back、backward、backwards

Move 自定义列表实体类型

@sys.number:steps steps @direction:direction

如果 move 实体与包含“five steps backward”的最终用户输入匹配,则 move 实体将匹配。提取值将按如下形式返回:{"steps": 5, "direction": "back"}

许多系统实体都是复合实体。例如,@sys.unit-currency 系统实体用于匹配金额与货币名称。该实体与“50 euros”或“twenty dollars and five cents”之类的最终用户输入匹配。提取值以 JSON 对象形式返回,例如 {"amount": 50, "currency": "EUR"}

正则表达式实体

借助正则表达式实体,您可以提供正则表达式进行匹配。如需了解详情,请参阅正则表达式实体

要创建正则表达式实体,请执行以下操作:

  • 使用控制台,选中正则表达式实体选项。
  • 使用 API,将 EntityType.kind 字段设置为 KIND_REGEXP

自动扩展(自动添加实体)

您可以为自定义实体类型启用自动扩展功能。启用该功能后,您的代理可以识别尚未明确提供的值。例如,考虑一个 shopping list 实体类型:

面包
butter
milk
苹果
冰淇淋

如果最终用户输入为“I need to buy some carrots”,则该实体类型将匹配“carrots”,即使未提供该值也是如此。代理会识别出“carrots”在上下文中与其他值类似。

在考虑使用自动扩展功能时,您应遵循以下最佳做法:

  • 启用自动扩展功能并不能保证提取实体。对于有限列表,您应提供完整列表,而不是提供部分列表并启用自动扩展功能。
  • 如果您在多个实体中启用自动扩展功能,则可能会导致冲突和意外的分类结果。
  • 为了确保更好的参数提取质量,必须提供各种训练数据,这些数据涵盖了在预期代理的流量中可以找到给定实体的所有用例。如果没有足够的示例,则自动实体扩展可能无法按预期运行。

如需启用自动扩展功能,请执行以下操作:

  • 使用控制台,选中自动添加实体选项。
  • 使用 API,将 EntityType.autoExpansionMode 字段设置为 AUTO_EXPANSION_MODE_DEFAULT

模糊匹配

您可以为自定义实体启用模糊匹配。启用模糊匹配后,值或同义词中的字词顺序便无关紧要。如需了解详情,请参阅模糊匹配

如需启用模糊匹配,请执行以下操作:

  • 使用控制台,选中模糊匹配选项。
  • 使用 API,将 EntityType.enableFuzzyExtraction 字段设置为 true

在日志中隐去

如果启用实体隐去,则在记录时隐去所有运行时提取的实体类型的参数值。

作为替代方案,您可以隐去各个参数

实体排除项

您可以添加实体排除项,即不应匹配的短语。 例如,如果您的大小实体类型为实体巨头(形容词),则可以考虑添加巨头(名词)作为排除项。