【发布时间】:2014-06-24 06:21:25
【问题描述】:
我想制作一个聊天机器人,所以我的疑问是如何以多种方式响应目标中的单一模式? 例如,如果用户询问下一步是什么,聊天机器人应该响应 step1 如果他再次询问下一步它应该响应第 2 步。
【问题讨论】:
我想制作一个聊天机器人,所以我的疑问是如何以多种方式响应目标中的单一模式? 例如,如果用户询问下一步是什么,聊天机器人应该响应 step1 如果他再次询问下一步它应该响应第 2 步。
【问题讨论】:
您可以在模板中使用“that”标签,它会记住最后一个 bot 语句并做出相应的回答,尽管这只会为您提供一个级别的控制。如果您想要更多关卡,更好的方法是使用“think”标签设置主题,然后定义将首先使用的主题特定模板。
【讨论】:
要对单个<pattern> 进行多个响应,您可以使用<random> 和<li> 标签:
<category>
<pattern>WHATS NEXT</pattern>
<template><random>
<li>Step 1</li>
<li>Step 2</li>
</random></template>
</category>
但是,响应将随机生成,而不是按特定顺序生成。
例如,如果用户输入“下一步是什么?”第一次,响应可能是“Step 1”,下次用户输入相同的关键字时,响应可能仍然是“Step 1”。
【讨论】:
首先,您需要一个知道步骤的类别,并以定义的格式返回答案。在我的示例中,格式为
制作吐司步骤 * *
其中第一个星是步骤号,第二个星代表返回文本的其余部分。这是类别:
<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>
那么您需要一个调用下一步的类别但前提是之前的答案是一个令人敬佩的问题。此类别使用 that 标签来确保它仅在 toast 制作对话期间被激活。它使用 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) 它使用 calculate 标签,它不是标准的 AIML,但应该很容易编码。 (2) 它使用 AIML v2 元素,例如与 get 和 set 一起使用的变量。 (3) 我还没有测试过,但我相信这个过程应该可以工作。
【讨论】: