Dialogflow聊天机器人使用regex实体自定义密码长度校验的实现方案
Dialogflow密码校验需求实现方案
问题根因
你当前遇到的正则实体无法匹配长密码的问题,核心是正则规则写法错误:
你配置的[0-9]{6}$规则含义为仅匹配长度刚好为6位、且全部为数字的结尾字符串,自然无法识别1234567这类长度超过6位的密码。同时仅能匹配训练样例的问题,大概率是正则实体未开启全匹配配置、或训练标注样例不足导致。
可选实现方案
方案1:修正正则实体配置
如果优先用Dialogflow实体侧做校验,可以按以下规则调整:
- 仅要求密码为数字且长度≥6:将正则规则修改为
^[0-9]{6,}$ - 允许密码包含任意字符仅限制长度≥6:将正则规则修改为
^.{6,}$ - 实体配置中开启「匹配所有符合正则规则的输入」选项,补充5-10个不同长度、不同组合的密码作为训练标注样例,重新训练模型后即可生效。
方案2:Webhook侧做业务校验(更推荐)
密码这类业务规则校验逻辑放在自有服务侧处理可控性更高,也能避免Dialogflow实体匹配波动带来的异常,实现步骤如下:
- Dialogflow侧简化配置,直接用系统
@sys.any实体提取用户输入的密码内容即可 - 在Webhook代码中新增密码校验逻辑,不符合要求直接返回提示让用户重新输入,参考修改后的代码片段:
if intent_name == 'get_started': url = 'http://**********.com/create_account' userid = req.get('queryResult').get('parameters').get('email') pwd = req.get('queryResult').get('parameters').get('pwd') name = req.get('queryResult').get('parameters').get('person')['name'] age = req.get('queryResult').get('parameters').get('age') # 新增密码校验逻辑,可自行扩展复杂度规则 if not pwd or len(pwd) < 6: agent.add('您设置的密码长度不足6位,请重新输入符合要求的密码') return # 原有请求逻辑保持不变 myobj = {'userid': userid, 'pwd': pwd , 'name' : name, 'age' : age} x = requests.post(url, data = myobj) result=x.text agent.add(result) # login_screen意图的密码校验逻辑同理添加即可
内容的提问来源于stack exchange,提问作者Samiya Jabbar
相关产品推荐
相关产品推荐

