Google Assistant中SynonymType.entities的映射结构及配置问题
核心问题定位
你现在写的配置根本没有建立同义词映射关系。在entities节点下直接放空的label:键,相当于只告诉系统有个值叫label,但完全没说哪些用户说的话要对应到这个值,自然没法把"labels"统一换成"label"。
SynonymType.entities 正确的映射结构
所有实体配置必须遵循固定层级,搞反了就完全失效:
entities下的每一个顶级键,是最后要传给业务逻辑的标准化目标值,也就是你最终想拿到的label- 每个目标值下面必须挂
synonyms数组,数组里列的所有内容,都是需要被系统识别、并最终映射为这个顶级键值的用户表述 - 整个映射是单向的:只要用户说的内容命中了
synonyms里的任意条目,解析结果就会替换成对应的顶级键值,不会把用户原话说回去
你当前配置的具体问题
label节点是空的,没写任何同义词列表,系统根本不知道"labels"是需要被映射的内容- 你开了
acceptUnknownValues: false,但这个配置的作用只是“不识别没注册的值”,系统不会自动给你做单复数归一,你没把"labels"列进同义词列表,它就不会把这个表述和"label"绑定 - 你注释掉的
FUZZY_MATCH模式,在没有完整同义词列表的情况下根本帮不上忙,还容易把意思相近但不相关的用户输入错配成目标值
改完就能用的配置
synonym: acceptUnknownValues: false # 用精准匹配,避免模糊匹配带来的识别误差 matchType: EXACT_MATCH entities: # 这个位置的键就是最终要返回的标准化值 label: # 所有需要映射到这个值的用户表述全列在这 synonyms: - label - labels
按这个配置改完,不管用户说的是单还是复数形式的表述,intent.params.{fieldName}.resolved都会统一返回label,不会留着原输入的"labels"。
内容的提问来源于stack exchange,提问作者Colton
相关产品推荐
相关产品推荐

