如何配置医疗诊断聊天机器人的条件参数及意图触发逻辑?
实现方案:在症状收集阶段随时响应'end'终止会话
嘿,这个需求我刚好在搭建医疗问诊Bot时处理过,核心是要让'end'指令能全局打断当前的参数收集流程,下面给你分步骤拆解实现:
1. 确保'symptom-end'意图的触发优先级最高
不管用户当前处于哪个会话阶段(包括'symptom-input'的参数收集过程),只要输入包含'end',就优先触发'symptom-end':
- 在你的Bot平台(比如Dialogflow、Rasa这类主流框架)中,找到意图优先级设置,把'symptom-end'的优先级调到高于'symptom-input'。
- 给'symptom-end'配置明确的训练短语:比如
end、结束、停止问诊等,确保能精准匹配用户的终止指令,避免漏判。
2. 给'symptom-input'意图添加中断判断逻辑
在收集symptom参数的每一步,都要嵌入对'end'指令的检查,避免陷入死循环的参数收集:
- 如果用的是Dialogflow CX:在'symptom-input'的参数收集页面,给每个参数的"填充提示"后添加一个"条件分支"——判断用户输入是否匹配'symptom-end'意图,如果是,直接跳转到'symptom-end'的处理流程,终止当前参数收集。
- 如果用的是Dialogflow ES或Rasa:在参数收集的自定义webhook/动作代码里,每次接收用户输入后先做判断,示例代码(Rasa)如下:
class ActionCollectSymptoms(Action): def name(self) -> Text: return "action_collect_symptoms" def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]: # 检查用户当前输入是否包含终止指令 latest_input = tracker.latest_message.get('text', '').lower() if 'end' in latest_input: # 直接触发symptom-end意图,终止收集流程 return [FollowupAction("symptom_end")] # 正常的症状收集逻辑...
3. 清理会话上下文,避免残留状态
当触发'symptom-end'时,一定要清除当前'symptom-input'相关的会话状态,防止后续会话出现混乱:
- 在'symptom-end'意图的处理逻辑中,添加"清除上下文"的操作:比如Dialogflow里把相关输出上下文的过期时间设为0,Rasa里用
ResetSlot动作清空symptom相关槽位。 - 给用户返回明确的终止提示,比如:
问诊已终止,感谢使用!
额外注意点
- 要确保'symptom'实体的识别不会和'end'冲突:在实体训练时排除这类终止词汇,避免把'end'误识别为症状实体。
- 覆盖所有测试场景:比如用户输入1个症状后输'end'、输入2个后输'end',以及直接在会话开始时输'end',确保每个场景都能正确触发终止流程。
内容的提问来源于stack exchange,提问作者doctopus
相关产品推荐
相关产品推荐

