我想制作一个聊天机器人,所以我的疑问是我如何以多种方式响应aiml中的单个模式? 例如,如果用户接下来问什么,聊天机器人应该响应step1 如果再问他接下来应该回应第2步。
答案 0 :(得分:2)
您可以使用"那"模板中的标签,记住最后一个机器人语句并相应地回答,虽然这只给你一个级别的控制。如果你想要更多关卡,更好的方法是使用" think"设置主题。标签,然后定义将首先使用的主题特定模板。
答案 1 :(得分:0)
要为单个<pattern>
提供多个回复,您可以使用<random>
和<li>
代码:
<category>
<pattern>WHATS NEXT</pattern>
<template><random>
<li>Step 1</li>
<li>Step 2</li>
</random></template>
</category>
但是,响应将以随机生成,而不是按特定顺序生成。
例如,如果用户输入&#34;接下来会是什么?&#34;第一次,响应可能是&#34;步骤1&#34;并且下次用户输入相同的关键字时,响应可能仍然是&#34;步骤1&#34;。
答案 2 :(得分:0)
首先,您需要一个知道步骤的类别,并以定义的格式返回答案。在我的例子中,格式是
进行上一步* *
其中第一个星号是步骤编号,第二个星号代表返回文本的其余部分。这是类别:
<category>
<pattern>MAKING TOAST STEP *</pattern>
<template>
<set var="step"><star/></set>
<condition var="step">
<li value="1">Make toast step 1, get some bread</li>
<li value="2">Make toast step 2, put the bread in the toaster</li>
<li value="3">Make toast step 3, wait until it pops up</li>
<li>Make toast step 4, eat the toast</li>
</condition>
</template>
</category>
然后,您需要一个调用下一步 的类别,但前提是前一个答案是致敬问题 。此类别使用那个标记来确保仅在进行对话的吐司期间激活它。它使用 thatstar 来获取上一步骤编号,然后在步骤编号中添加一个:
<category>
<pattern>WHAT IS NEXT</pattern>
<that>MAKE TOAST STEP * *</that>
<template>
<set var="step"><calculate><thatstar/>+1</calculate></set>
<srai>MAKING TOAST STEP <get var="step"/></srai>
</template>
</category>
然后你需要一个类别来启动整个序列:
<category>
<pattern>HOW DO I MAKE TOAST</pattern>
<template>
<srai>MAKING TOAST STEP 1</srai>
</template>
</category>
这种方法的警告是(1)它使用 计算 标签,这不是标准AIML,但应该很容易编码。 (2)它使用AIML v2元素,例如与 get 和 set 一起使用的变量。 (3)我没有测试过,但我相信这个过程应该有效。
答案 3 :(得分:0)