P1-4: Matcher死分支删除+匹配失败兜底全量卡片 + 补全18模板icon/desc/category字段(v3.0未生效) + title匹配增强
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
# 2. approval_type 关键词匹配模板 keywords(如 "VPN账号申请" 含 "VPN")
|
||||
# 3. approval_type 匹配 category(如 "账号权限申请" → 返回该分类下所有模板)
|
||||
# 4. title 匹配模板 name(如 "VPN账号申请" → zero_trust_vpn)
|
||||
# 5. 降级:用户原始文本遍历所有 keywords
|
||||
# 5. 兜底:全部失败时返回全量 18 项卡片(v4.0 P1-4,不再返回 None)
|
||||
#
|
||||
# 输出:标准化卡片数据 card_data,前端纯渲染
|
||||
# =============================================================================
|
||||
@@ -31,44 +31,58 @@ class ApprovalMatcher:
|
||||
self, approval_type: Optional[str], title: Optional[str] = None
|
||||
) -> Optional[dict]:
|
||||
"""一站式匹配 + 构建标准化卡片数据(Dify 正常路径)。
|
||||
|
||||
|
||||
Args:
|
||||
approval_type: Dify 返回的审批类型(可能是 ID、中文分类名或具体名称)
|
||||
title: Dify 返回的具体审批名称(如"VPN账号申请")
|
||||
|
||||
|
||||
Returns:
|
||||
标准化 card_data,或 None(匹配失败)
|
||||
标准化 card_data,或 None(无 approval_type 时)
|
||||
v4.0 P1-4:匹配失败不再返回 None,兜底返回全量卡片
|
||||
"""
|
||||
if not approval_type:
|
||||
return None
|
||||
|
||||
|
||||
# 优先级 1:精确 ID 匹配
|
||||
template = self._match_by_id(approval_type)
|
||||
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 匹配
|
||||
|
||||
# 优先级 4:title 匹配(先关键词后名称,title 是具体名称如"VPN账号申请")
|
||||
if title:
|
||||
template = self._match_by_name(title)
|
||||
template = self._match_by_keyword(title) or self._match_by_name(title)
|
||||
if template:
|
||||
return self._build_single_card(template)
|
||||
|
||||
# 优先级 5:文本 keywords 兜底
|
||||
template = self._match_by_keyword(approval_type)
|
||||
if template:
|
||||
return self._build_single_card(template)
|
||||
|
||||
return None
|
||||
|
||||
# 优先级 5(v4.0 P1-4):兜底返回全量卡片
|
||||
# 原死分支(重复调用 _match_by_keyword)已删除——与优先级 2 数学上等价不可达
|
||||
logger.info(
|
||||
f"[ApprovalMatcher] 匹配失败,兜底全量卡片: "
|
||||
f"approval_type={approval_type}, title={title}"
|
||||
)
|
||||
return self.build_all_categories_card()
|
||||
|
||||
def build_all_categories_card(self) -> dict:
|
||||
"""构建全量 18 项审批卡片(匹配失败兜底 + 快捷申请入口共用)。"""
|
||||
return {
|
||||
"card_type": "multiple",
|
||||
"title": "全部审批类型",
|
||||
"description": "请选择需要提交的审批",
|
||||
"options": [
|
||||
self._template_to_option(t)
|
||||
for t in APPROVAL_TEMPLATES.values()
|
||||
],
|
||||
}
|
||||
|
||||
def match_by_keywords(self, user_text: str) -> Optional[dict]:
|
||||
"""Dify 不可用时,用用户原始文本关键词降级匹配。
|
||||
|
||||
Reference in New Issue
Block a user