调用app.getArgument返回参考值时,如何获取请求的实体同义词?
获取用户实际输入的同义词而非标准化参考值
嘿,这个问题我之前做对话机器人时也碰到过!很多NLP框架(比如Dialogflow、Lex这类)都会自动把用户输入的同义词映射到标准化参考值,方便后续逻辑处理,但有时候我们确实需要拿到用户实际说的那个词。
这里给你几个通用解决思路,具体要看你用的框架,但核心逻辑一致:
优先找框架提供的原始输入字段
绝大多数成熟的对话框架都会在参数对象里保存用户的原始输入内容,通常命名为original、rawValue或者类似属性。比如在Dialogflow CX里,你可以这样获取:// 拿到标准化后的参考值 const normalizedPet = app.getArgument("pet"); // 拿到用户实际输入的同义词(比如用户说的"狗子"而不是映射后的"狗") const userInputPet = app.getArgument("pet").original;要是用Amazon Lex,你可以查看
intent.slots[slotName].value.originalValue,本质都是找参数里保存原始输入的属性。如果框架没直接提供,从原始查询文本提取
要是你的框架没单独保存参数的原始值,你可以从用户的整个输入语句(一般在queryText或者userQuery这类字段里)提取对应片段。很多框架会返回实体在原始文本中的起始和结束索引,你可以用这个索引截取:const userQuery = app.getQueryText(); const entityInfo = app.getArgument("pet").entityMetadata; const userInputPet = userQuery.substring(entityInfo.startIndex, entityInfo.endIndex);注意多选参数的情况
如果你的参数支持多选(比如用户说"猫和狗子"),每个选项的原始值可能会放在数组里,你需要遍历数组获取每个用户实际输入的同义词:const petArguments = app.getArgument("pet"); // 这是一个数组 const userInputPets = petArguments.map(pet => pet.original);
总之,先去翻你用的框架的官方文档,找参数对象的结构说明——几乎肯定有保存原始输入的字段,毕竟框架不会平白无故丢掉用户的真实输入内容~
内容的提问来源于stack exchange,提问作者CraPo
相关产品推荐
相关产品推荐

