AIML实现机器人基于<date>标签识别生日并送祝福的问题排查
修正AIML生日检查逻辑错误
问题根源
原代码存在3个核心逻辑错误:
- 存储用户生日时,错误将当日日期存入
checkbirthday变量,而非用户输入的生日日期 - 在
BIRTHDAYCHECK分类中,错误将checkbday变量覆盖为字符串"checkbirthday",完全丢失了当日日期的对比值 - 条件判断逻辑错误,未对比日期是否相等,而是判断变量是否等于固定字符串
修正后的完整代码
<category> <pattern>MY BIRTHDAY IS ON <set>day</set> <set>month</set></pattern> <template>Ok! <think> <!-- 将用户输入的日和月组合为生日字符串,存储到user_birthday变量 --> <set name="user_birthday"><star index="1" /> <star index="2" /></set> </think> </template> </category> <category> <pattern>BIRTHDAYCHECK</pattern> <template> <think> <!-- 获取当日的日期(格式:日 月份全称) --> <set name="today_date"><date format="%d %B"/></set> </think> <!-- 对比当日日期和用户存储的生日是否一致 --> <condition name="today_date" value="<get name='user_birthday'/>"> <li>Happy birthday</li> <li>No its not your birthday today</li> </condition> </template> </category>
修正说明
- 变量命名优化:用
user_birthday存储用户输入的生日,today_date存储当日日期,逻辑更清晰 - 存储逻辑修复:直接将用户输入的日和月组合后存入变量,不再错误使用当日日期
- 检查逻辑修复:
- 正确获取当日日期,不再覆盖变量值
- 条件判断直接对比
today_date和user_birthday的字符串值,匹配则返回生日祝福,否则返回提示
测试验证
正确情况(11月7日设置生日为11月7日)
HUMAN: My birthday is on 7 november ROBOT: Ok! HUMAN: BIRTHDAYCHECK ROBOT: Happy birthday
错误情况修正后(11月7日设置生日为11月5日)
HUMAN: My birthday is on 5 november ROBOT: Ok! HUMAN: BIRTHDAYCHECK ROBOT: No its not your birthday today
内容的提问来源于stack exchange,提问作者Aniket Pardhi
相关产品推荐
相关产品推荐

