AIML-上下文-为什么上下文在所有情况下都不具有最高优先级?

时间:2018-10-23 18:47:26

标签: aiml

使用AIML上下文时(通过),我得到了一些我无法解释的对话。 我希望上下文能够优先于其他任何事物。

下面我首先显示脚本。然后,我展示了一些对话。我在响应后面用//标记了意外的部分。

我将此Aiml文件添加到标准的ALICE对话中。

脚本:

false

在下面的对话中,我用//?标记了意外的响应。

select()

您能解释两种意外的对话流程吗?

1 个答案:

答案 0 :(得分:1)

<that>元素优先于相同模式级别的其他模式 。我不知道您使用的是AIML v1还是v2,但是从广义上讲,有3种模式 [但请参见下面的说明]

  1. 最重要的级别=包括下划线通配符(_)在内的模式
  2. 中级=没有通配符的原子模式
  3. 最低级别=包括星号通配符(*)在内的模式

您的意外响应是因为存在更高优先级的ALICE响应。例如,当机器人回复“步骤3”,而人类回答“否”时,您希望<pattern>*</pattern><that>STEP 3</that>类别生效。但是,如果有更高级别的ALICE响应(例如<pattern>NO</pattern><pattern>STEP _</pattern>),则ALICE响应将在您的3级类别<pattern>*</pattern><that>STEP 3</that>上生效。查找“驴友”类别的最快方法是问“否”,然后查看机器人的答复。您也可以搜索ALICE文件,但这将非常耗时。

[note] 在AIML v2中,至少有两个额外级别:下划线通配符上方的级别0,以及使用模式边集的级别2.5。但是,更简单的AIML v1级别可以解释您的异常情况。