AWS QnA Bot中Handlebars无法获取正确交互计数问题
AWS QnA Bot Handlebars交互计数异常排查方案
这个双计数跳变问题是配置Handlebars自定义计数时的经典冲突问题,根因基本逃不过以下两类:
- 内置计数逻辑与自定义Handlebars计数同时生效:QnA Bot默认开启的Lex V2会话属性自动注入功能,会自带一套计数逻辑,这套逻辑会把Bot后台自动触发的欢迎语、路由校验、兜底澄清、权限检查等所有隐式交互全算入计数,你首次查询拿到的30左右数值,就是这套逻辑统计的全链路交互数;而你参照教程写的Handlebars计数默认只统计用户主动发起的对话轮次,两套逻辑同时运行时,首次查询触发内置计数拉取全量值,第二次查询会直接把两个计数结果累加跳到60区间,后续每次交互两套逻辑各+1,就会出现每次涨2的异常递增表现。
- 教程示例模板的预置偏移未删除:多数旧版QnA Bot Handlebars教程,为了演示数值偏移效果,会在示例计数代码里默认加30的初始偏移量,直接复制模板不修改的话,首次查询就会从30开始计数,叠加内置逻辑的30左右隐式交互值,刚好跳到60区间。
按以下步骤修复即可:
- 打开Content Designer找到配置计数逻辑的QnA条目,进入Handlebars编辑模式全局搜索硬编码数值,删除所有类似
{{add turnCount 30}}、{{setSessionAttr "turnCount" 30}}的预置偏移代码,将计数初始值统一设为0。 - 进入QnA Bot系统设置页,找到Lex V2配置板块,关闭「自动填充会话属性」下的
turnCount自动注入开关,停掉内置计数逻辑避免冲突。 - 调整自定义Handlebars计数代码位置,把计数累加逻辑放到响应模板最顶层,不要嵌在条件判断分支里,确保每次用户触发问答时只执行一次,参考正确写法:
{{#if (eq sessionAttributes.customTurnCount undefined)}} {{setSessionAttr "customTurnCount" 0}} {{/if}} {{setSessionAttr "customTurnCount" (add sessionAttributes.customTurnCount 1)}} 当前交互次数:{{sessionAttributes.customTurnCount}}
- 配置修改完成后,不要只执行Lex Rebuild,需要到Lambda控制台重启QnA Bot对应的Content Designer服务函数,清掉Lambda层缓存的旧模板配置,再用无痕窗口开新会话测试即可——仅重建Lex不会同步更新Handlebars模板的缓存配置,这也是很多人按教程操作完不生效的常见疏漏。
测试注意:不要在同一个历史会话窗口反复验证,交互计数是存在会话维度的属性里的,旧会话残留的属性值会干扰测试结果。
内容的提问来源于stack exchange,提问作者Kera
相关产品推荐
相关产品推荐

