Rasa后端聊天机器人的超出范围及意外查询处理问题
解决Rasa机器人无法处理超出范围及意外查询的问题
1. 添加out_of_scope意图及训练数据
在NLU训练文件(如nlu.yml)中新增专门的out_of_scope意图,覆盖各类超出业务范围的场景,包含纯数字、随机字符串、无关问题等示例:
nlu: - intent: out_of_scope examples: | - 123456 - asdfghjkl - 今天天气怎么样 - 你会做饭吗 - #$%^&*()
2. 设置NLU置信度阈值
在config.yml的pipeline配置中,为意图分类器设置置信度阈值,确保只有置信度达标的请求才匹配业务意图,否则触发低置信度处理逻辑(以DIETClassifier为例):
pipeline: - name: DIETClassifier confidence_threshold: 0.7 # 可根据实际效果在0.6-0.8区间调整 # 其他pipeline配置项...
同时在domain.yml中设置全局意图置信度阈值:
intents: - your_business_intent_1 - your_business_intent_2 - out_of_scope # 其他业务意图... confidence_threshold: 0.7
3. 用Rules定义超出范围查询的处理逻辑
在rules.yml中添加规则,匹配out_of_scope意图或低置信度情况,返回指定提示:
rules: - rule: 处理超出范围的查询 steps: - intent: out_of_scope - action: utter_out_of_scope - rule: 处理低置信度查询 steps: - intent: nlu_fallback - action: utter_out_of_scope
在domain.yml中定义对应的回复模板:
responses: utter_out_of_scope: - text: "I am not trained for such queries"
4. 配置默认回退动作防止无限循环
若机器人出现无限处理循环,可通过配置默认回退动作限制触发次数。在domain.yml中声明动作:
actions: - action_default_fallback
也可自定义简单的回退动作替代默认逻辑,避免重复进入处理流程。
5. 重新训练模型
完成所有配置后,重新训练NLU和Core模型:
rasa train
测试时,输入超出范围的查询或随机内容,机器人会自动返回指定提示,不再随机匹配业务意图或陷入循环。
内容的提问来源于stack exchange,提问作者Geethapriya G H
相关产品推荐
相关产品推荐

