diff --git a/backend/app/services/approval_matcher.py b/backend/app/services/approval_matcher.py index 8d2576c..1cd707e 100644 --- a/backend/app/services/approval_matcher.py +++ b/backend/app/services/approval_matcher.py @@ -5,9 +5,9 @@ # # 匹配优先级: # 1. approval_type 精确匹配模板 ID(如 "zero_trust_vpn") -# 2. approval_type 关键词匹配模板 keywords(如 "VPN账号申请" 含 "VPN") -# 3. approval_type 匹配 category(如 "账号权限申请" → 返回该分类下所有模板) -# 4. title 匹配模板 name(如 "VPN账号申请" → zero_trust_vpn) +# 2. title 匹配(关键词 + 名称)— title 是 Dify 判断的具体意图,比大类更精确 +# 3. approval_type 关键词匹配模板 keywords(如 "VPN账号申请" 含 "VPN") +# 4. approval_type 匹配 category(如 "账号权限申请" → 返回该分类下所有模板) # 5. 兜底:全部失败时返回全量 18 项卡片(v4.0 P1-4,不再返回 None) # # 输出:标准化卡片数据 card_data,前端纯渲染 @@ -48,22 +48,24 @@ class ApprovalMatcher: if template: return self._build_single_card(template) - # 优先级 2:关键词匹配 - template = self._match_by_keyword(approval_type) - if template: - return self._build_single_card(template) - - # 优先级 3:category 匹配 - options = self._match_by_category(approval_type) - if options: - return self._build_multi_card(approval_type, options) - - # 优先级 4:title 匹配(先关键词后名称,title 是具体名称如"VPN账号申请") + # 优先级 2:title 匹配(先关键词后名称) + # v4.0 P1-4b:title 是 Dify 判断的具体意图(如"VPN账号申请"), + # 比 approval_type 大类(如"账号权限申请")更精确,应优先输出单卡 if title: template = self._match_by_keyword(title) or self._match_by_name(title) if template: return self._build_single_card(template) + # 优先级 3:approval_type 关键词匹配 + template = self._match_by_keyword(approval_type) + if template: + return self._build_single_card(template) + + # 优先级 4:category 匹配(大类兜底,返回该分类多选项) + options = self._match_by_category(approval_type) + if options: + return self._build_multi_card(approval_type, options) + # 优先级 5(v4.0 P1-4):兜底返回全量卡片 # 原死分支(重复调用 _match_by_keyword)已删除——与优先级 2 数学上等价不可达 logger.info(