|
|
@@ -126,9 +126,47 @@ public class RetrieverService {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ /** 已知药物过敏检测:用户明确询问对某药物的过敏处理方法 */
|
|
|
+ private static final List<String> KNOWN_ALLERGY_DRUGS = List.of(
|
|
|
+ "青霉素", "头孢", "磺胺", "阿莫西林", "布洛芬",
|
|
|
+ "阿司匹林", "链霉素", "庆大霉素", "四环素",
|
|
|
+ "红霉素", "氯霉素", "万古霉素", "喹诺酮",
|
|
|
+ "普鲁卡因", "利多卡因", "碘", "破伤风"
|
|
|
+ );
|
|
|
+
|
|
|
+ private static final java.util.regex.Pattern[] KNOWN_ALLERGY_REGEX = {
|
|
|
+ java.util.regex.Pattern.compile("对.{1,6}过敏"), // 对青霉素过敏
|
|
|
+ java.util.regex.Pattern.compile(".{1,6}药过敏"), // 头孢药过敏
|
|
|
+ java.util.regex.Pattern.compile("药物过敏"), // 药物过敏
|
|
|
+ java.util.regex.Pattern.compile(".+过敏(处理|怎么办|急救|替代|注意|救治|抢救|应急)"),
|
|
|
+ };
|
|
|
+
|
|
|
+ private boolean isKnownDrugAllergy(String query) {
|
|
|
+ // 必须包含"过敏"
|
|
|
+ if (!query.contains("过敏")) return false;
|
|
|
+
|
|
|
+ // 精确匹配已知过敏药物清单
|
|
|
+ for (String drug : KNOWN_ALLERGY_DRUGS) {
|
|
|
+ if (query.contains(drug)) return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 正则模式匹配(对XX过敏 / XX药过敏 / 药物过敏 / 过敏处理/急救等)
|
|
|
+ for (var pattern : KNOWN_ALLERGY_REGEX) {
|
|
|
+ if (pattern.matcher(query).find()) return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
public String classifyIntent(String query) {
|
|
|
String q = query.trim();
|
|
|
|
|
|
+ // 0. 已知药物过敏检测(最高优先级,必须在 "过敏" 通用匹配之前)
|
|
|
+ // 如 "青霉素过敏处理" "头孢过敏怎么办" → 用药安全咨询,非症状求药
|
|
|
+ if (isKnownDrugAllergy(q)) {
|
|
|
+ return "usage_guide";
|
|
|
+ }
|
|
|
+
|
|
|
// 1. 用药安全/用法用量(优先级最高,避免"过敏"与症状类冲突)
|
|
|
if (anyMatch(q, "怎么吃", "吃多少", "怎么用", "怎么服用", "孕妇", "儿童用量",
|
|
|
"副作用多大", "伤肝", "伤肾", "安全吗", "副作用", "不良反应",
|