P1-4b: Matcher优先级修正 - title匹配提到category之前(title是Dify判断的具体意图,比大类更精确,真实场景: approval_type=账号权限申请+title=VPN账号申请应输出单卡)

This commit is contained in:
Simon
2026-07-18 01:42:05 +08:00
parent 6e74631ecb
commit 9cbf2650e1
+16 -14
View File
@@ -5,9 +5,9 @@
# #
# 匹配优先级: # 匹配优先级:
# 1. approval_type 精确匹配模板 ID(如 "zero_trust_vpn" # 1. approval_type 精确匹配模板 ID(如 "zero_trust_vpn"
# 2. approval_type 关键词匹配模板 keywords(如 "VPN账号申请" 含 "VPN" # 2. title 匹配(关键词 + 名称)— title 是 Dify 判断的具体意图,比大类更精确
# 3. approval_type 匹配 category(如 "账号权限申请" → 返回该分类下所有模板 # 3. approval_type 关键词匹配模板 keywords(如 "VPN账号申请" 含 "VPN"
# 4. title 匹配模板 name(如 "VPN账号申请" → zero_trust_vpn # 4. approval_type 匹配 category(如 "账号权限申请" → 返回该分类下所有模板
# 5. 兜底:全部失败时返回全量 18 项卡片(v4.0 P1-4,不再返回 None # 5. 兜底:全部失败时返回全量 18 项卡片(v4.0 P1-4,不再返回 None
# #
# 输出:标准化卡片数据 card_data,前端纯渲染 # 输出:标准化卡片数据 card_data,前端纯渲染
@@ -48,22 +48,24 @@ class ApprovalMatcher:
if template: if template:
return self._build_single_card(template) return self._build_single_card(template)
# 优先级 2关键词匹配 # 优先级 2title 匹配(先关键词后名称)
template = self._match_by_keyword(approval_type) # v4.0 P1-4btitle 是 Dify 判断的具体意图(如"VPN账号申请"),
if template: # 比 approval_type 大类(如"账号权限申请")更精确,应优先输出单卡
return self._build_single_card(template)
# 优先级 3category 匹配
options = self._match_by_category(approval_type)
if options:
return self._build_multi_card(approval_type, options)
# 优先级 4:title 匹配(先关键词后名称,title 是具体名称如"VPN账号申请"
if title: if title:
template = self._match_by_keyword(title) or self._match_by_name(title) template = self._match_by_keyword(title) or self._match_by_name(title)
if template: if template:
return self._build_single_card(template) return self._build_single_card(template)
# 优先级 3approval_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):兜底返回全量卡片 # 优先级 5(v4.0 P1-4):兜底返回全量卡片
# 原死分支(重复调用 _match_by_keyword)已删除——与优先级 2 数学上等价不可达 # 原死分支(重复调用 _match_by_keyword)已删除——与优先级 2 数学上等价不可达
logger.info( logger.info(