AIML中是否可实现逻辑合取与析取的条件判断?
关于AIML多条件判断的实现方案(Pandorabots平台适用)
1. <condition>标签支持嵌套,可直接实现逻辑合取/析取
Pandorabots遵循AIML 2.0规范,允许<condition>互相嵌套,你要同时判断gender和adult两个变量的需求可以直接用嵌套实现,示例如下:
<category> <pattern>DO YOU FIND ME ATTRACTIVE</pattern> <template> <condition name="gender"> <li value="male"> <condition name="adult"> <li value="true">I find you very handsome, sir.</li> <li value="false">I find you really cool, kid.</li> </condition> </li> <li value="female"> <condition name="adult"> <li value="true">I find you very pretty, madam.</li> <li value="false">I find you really cute, kid.</li> </condition> </li> <li>I find you very attractive.</li> </condition> </template> </category>
如果要实现逻辑析取(或),只需要调整嵌套层级和判断顺序,把满足任意条件就触发的分支放在对应位置即可。
2. 用<think>+<set>预生成组合变量的方案完全可行
对于多条件判断场景,你可以提前用<think>标签包裹逻辑,把多个变量的组合结果设置为一个新的临时变量,后续直接判断这个变量即可,代码逻辑会更简洁易读,示例如下:
<category> <pattern>DO YOU FIND ME ATTRACTIVE</pattern> <template> <think> <set name="gender_adult"><get name="gender"/>_<get name="adult"/></set> </think> <condition name="gender_adult"> <li value="male_true">I find you very handsome, sir.</li> <li value="male_false">I find you really cool, kid.</li> <li value="female_true">I find you very pretty, madam.</li> <li value="female_false">I find you really cute, kid.</li> <li>I find you very attractive.</li> </condition> </template> </category>
Pandorabots平台额外说明
目前Pandorabots对AIML 2.0的条件判断特性支持完整,上述两种写法都可以正常运行,不需要额外调用平台专属扩展功能。
内容的提问来源于stack exchange,提问作者Ellen Spertus
相关产品推荐
相关产品推荐

