diff --git a/auto_reply.py b/auto_reply.py index 9cd991e..f6f4852 100644 --- a/auto_reply.py +++ b/auto_reply.py @@ -451,6 +451,9 @@ class AutoReply: '一嘴', # 2026-08-17 新增:口语"咱那家"的"那家"(OCR常写成"那价") '那家', '那价', + # 2026-09-17 新增:时间疑问词不应作为核心词 + # "持续到几月几号"的核心词应是{'邀请','活动','持续'},而非{'几月','几号'} + '几月', '几号', '几日', '什么时候', '何时', } core_kw = q_mean - non_core_kw # ⭐ OCR碎片过滤:纯ASCII且≤2字符的词(如"丿IJ"切成'ij')是OCR噪声 diff --git a/gui.py b/gui.py index e15a2af..a98a2c2 100644 --- a/gui.py +++ b/gui.py @@ -1217,6 +1217,8 @@ class MsgBotApp(ctk.CTk): '有人', '一嘴', '那家', '那价', + # 2026-09-17 新增:时间疑问词不应作为核心词 + '几月', '几号', '几日', '什么时候', '何时', } core_kw = q_tokens - non_core_kw # OCR碎片过滤 diff --git a/knowledge_base.py b/knowledge_base.py index 8b17565..5f819f4 100644 --- a/knowledge_base.py +++ b/knowledge_base.py @@ -48,6 +48,12 @@ class KnowledgeBase: # ⭐ 口语"云包"= 云背包(用户常说"云包插件",OCR识别"云背包"为"云包") # 修复"怎么装那个云包插件?"无法命中beibao.md的安装方法section "云包": ["云背包"], + # ⭐ 时间口语"持续到"= 持续时间(用户常说"活动持续到几月几号") + # 修复"邀请活动持续到几月几号"无法命中invite.md"### 持续时间"section + "持续到": ["持续时间"], + "持续多久": ["持续时间"], + "到几月": ["持续时间"], + "到几号": ["持续时间"], } @staticmethod @@ -671,6 +677,13 @@ class KnowledgeBase: if (any(w in query_stripped for w in ('怎么配置', '如何配置', '配置方法', '配置步骤', '配置教程', '怎么设置', '如何设置')) and '配置' in heading_clean): combined_scores[i] *= 4.0 + # ⭐ 持续时间意图加权:查询含"持续到几月/到几号/什么时候"等,heading含"持续时间"的section加权 + # 修复"邀请活动持续到几月几号"被root heading"草原探险服务器玩家邀请活动奖励规则" + # 压过"### 持续时间"section的问题。根因:root heading含"邀请"+"活动"获得heading_hits加分, + # 但body为空无实际内容。"持续时间"heading虽只含"持续"但有真实答案。 + if (any(w in query_stripped for w in ('持续到', '持续多久', '到几月', '到几号', '什么时候', '持续时间', '活动时间', '活动日期', '截止', '结束时间')) + and '持续时间' in heading_clean): + combined_scores[i] *= 4.0 # ⭐ 兑换码插件特殊加权:查询含"兑换码插件"且文档标题含"sdf1"→ 巨幅加权 # 修复"兑换码插件怎么用"被"CDK管理"section压过的问题 if ('兑换码插件' in query_stripped and 'sdf1' in doc.get('title', '').lower()):