AIML检测用户重复语句无法随机返回多条提示该如何解决
问题成因
- AIML的
<condition>标签的<li>匹配规则是自上而下顺序匹配,只要找到第一个满足条件的<li>就会直接返回对应内容,不会继续匹配后续同条件的项 - 你代码里写了两个完全相同的匹配条件
<li><value><star/></value>...</li>,排在前面的“Why are you saying the same thing?”永远会被优先触发,第二条重复提示永远不会被匹配到
修复方案
核心逻辑为:先判断用户输入是否和上一次输入重复,重复的话从重复提示池随机返回内容,不重复的话从正常回复池随机返回内容,需要用到AIML的<random>标签实现随机选取。
修复后代码如下:
<?xml version="1.0" encoding="UTF-8"?> <aiml> <category> <pattern>*</pattern> <template> <condition name="userlast"> <!-- 输入和上一次重复的情况 --> <li> <value><star/></value> <random> <li>Why are you saying the same thing?</li> <li>you are boring you just saying same thing all the time</li> </random> </li> <!-- 输入不重复的情况 --> <li> <random> <li>something from a random pool</li> <li>err</li> <li>mhm</li> </random> </li> </condition> <think><set name="userlast"><star/></set></think> </template> </category> </aiml>
修改说明:
- 将重复触发的两个提示放到同一个匹配条件的
<random>标签下,匹配到重复输入时会从这两个提示里随机选一个返回 - 将非重复的三个正常回复也放到
<random>标签下,实现正常回复的随机返回
内容的提问来源于stack exchange,提问作者Paulo Evan
相关产品推荐
相关产品推荐

