不用直接询问就能获得用户的名字(Watson助手)。

问题描述 投票:0回答:1

我正在创建一个有趣的聊天机器人,想实现一些收集用户姓名的功能,但前提是他必须说一些类似于 "我的名字是..." 或接近于此;给出名字的意图会来自用户,机器人不会要求用户说出名字,也许只会建议用户说出名字。我想,有点像在谷歌助手中。所以,它可以在用户想要的任何时候给出。我的想法是

第一 创建一个意图,用不同的方式让用户告诉机器人他的名字(就像上面的例子)。

第二 使用插槽,如果检测到意图,就把它保存为一个变量。到目前为止,我已经成功了。

第三次 是我被卡住的部分,因为这只是一个想法,我不知道该怎么做。在将整个文本保存为一个变量之前,我想删除意图中包含的部分(我的名字是),并只将其余部分保存在变量中。所以,比如说,用户说 "我叫XXX";该命令将删除 "我的名字是" 部分,只保存 "XXX"名字 意图。

我不知道这样做是否可行,因为我不懂编码。我之前用过一些特殊的语法,比如把其他变量的第一个字母大写,但我真的不知道如何使用JSON编辑器。

我的想法可行吗?我不知道如何删除意图对应的部分,只保存剩余部分作为意图。不知道会是什么命令,也不知道我会写在哪里。如果你有想法可以提出其他建议。最后,我是用葡萄牙语创建的技能,所以无法访问@sys-person实体。感谢阅读。

chatbot ibm-watson watson-assistant
1个回答
0
投票

我使用葡萄牙语技能,面临同样的问题。我看到两个解决方案,虽然他们并不完美。

使用意图。

当识别出意图时,机器人会再次询问名字,告诉用户他应该只说他的名字,比如不说 "我的名字是",然后将整个输入存储在一个上下文变量上,使用... ..:

<? input.text ?>

如果要在槽内嵌入这样的逻辑,你可能需要使用digressions。

但是,这对用户来说很无聊。

使用实体。

实体的识别会带着它们在输入文本中的起始和结束位置,但不会带着意图。有了这一点,就可以对输入进行切割,切割实体。

<? input.text.substring(entities.name.location[1], input.text.length()) ?>

实体可以是 "我的名字是", "人们叫我", "我叫", "我受洗", "我受洗".

所以,"你好,我的名字是Gustavo",会在 "我的名字是 "结尾后被剪掉,结果是 "Gustavo"。前面的附加输入会被忽略,但是名字后面的附加输入就会出现问题。另外,你需要定义更多的 "我的名字是 "这样的实体,可能是所有的可能性,而不是使用意图,因为即使是模糊匹配,实体识别也不会考虑到同义词和类似意义的词。

https:/cloud.ibm.comdocsassistant?topic=assistant-dialog-methods#dialog-methods-strings-substring。

https:/cloud.ibm.comdocsassistant?topic=assistant-expression-language#expression-language-access-entity。

© www.soinside.com 2019 - 2024. All rights reserved.