fix: 跨轮语义去重+KB核心名词加权,修复公告信息匹配到基本信息

1. monitor.py: 新增跨轮语义去重(5分钟TTL, Jaccard≥30%)
   - _recent_user_queries列表 + _is_semantically_duplicate()
   - _poll候选构建阶段检查,回复后写入记录

2. auto_reply.py: non_core_kw新增通用信息类名词
   - '信息','内容','详情','情况','介绍'不应作为核心词
   - 原因:公告信息核心词应是{公告}而非{公告,信息}

3. knowledge_base.py: core_nouns新增公告/更新
   - 查询含核心名词时,section含该名词→2倍加分,不含→0.3倍惩罚
   - 修复近期公告(2.93)被基本信息(6.56)压过的问题
This commit is contained in:
youpaishidifu
2026-08-17 12:09:23 +08:00
parent 0fe4f018ba
commit 174b606721
3 changed files with 56 additions and 2 deletions
+2 -2
View File
@@ -620,7 +620,7 @@ class KnowledgeBase:
# 不在此处penalty——此处penalty会被后续loop的bonus覆盖
# ⭐ 核心名词匹配奖励:查询中的关键名词在 section 中出现 → 巨幅奖励
# 防止"PHP管理员端的默认密码"匹配到不含"密码"的"全局配置" section
core_nouns = {'密码', '用户管理', '领地', '商品', 'CDK', '工单', '债券', '在线'}
core_nouns = {'密码', '用户管理', '领地', '商品', 'CDK', '工单', '债券', '在线', '公告', '更新'}
query_nouns = set(jieba.cut(query_stripped)) & core_nouns
if query_nouns:
# 查询包含核心名词,检查 section 是否包含这些名词
@@ -891,7 +891,7 @@ class KnowledgeBase:
if _download_match:
bonus += 8.0
# ⭐ body 包含查询核心名词(如"密码")→ 巨幅 bonus
core_nouns = {'密码', '用户管理', '领地', '商品', 'CDK', '工单', '债券', '在线'}
core_nouns = {'密码', '用户管理', '领地', '商品', 'CDK', '工单', '债券', '在线', '公告', '更新'}
body_noun_hits = sum(1 for n in core_nouns if n in body and n in query_stripped)
if body_noun_hits >= 1:
bonus += 15.0 # body 包含核心名词 → 优先返回