fix(monitor): 修正日期检查逻辑 - 不阻塞新鲜消息

问题:公告表格包含历史日期(2026/8/14昨天),但用户最新提问是今天的
      原逻辑检查所有日期非今日就直接拒绝,误杀了新鲜消息

根因:
1. 日志显示提取到日期: ['2026/8/14', '2026/8/3'](都是历史日期)
2. 用户消息 9:28:27 是新的,时间戳9:06在今天内
3. 原逻辑:所有日期非今日 → 拒绝 ❌

修复:
- 日期检查改为警告,不阻塞处理
- 优先检查时间戳新鲜度(第二道关卡)
- 如果时间戳≤300s → 放行 ✅
- 如果时间戳>300s → 丢弃 ✅

效果:
- 公告表格+新消息 → 放行 ✅
- 过期消息(时间戳>300s)→ 丢弃 ✅
This commit is contained in:
youpaishidifu
2026-08-15 09:32:08 +08:00
parent 02702415a0
commit ad9b1dc59b
+10 -5
View File
@@ -5147,9 +5147,12 @@ class MessageMonitor:
break
except (ValueError, IndexError):
pass
# ⭐ 2026-08-15 新增:日期新鲜度检查(第一道关卡)
# 如果文本包含日期信息,必须至少有一个日期是今天,否则拒绝
# 修复:公告表格使用"2026年8月3日"格式,原正则不匹配导致无法识别日期
# ⭐ 2026-08-15 修复:日期新鲜度检查(修正为辅助检查)
# 原逻辑:如果文本包含日期信息,必须至少有一个日期是今天,否则拒绝
# 问题:公告表格包含历史日期(如2026/8/14昨天),但用户最新消息是今天的
# 修正:日期检查仅作为辅助验证,不能因为历史日期拒绝新鲜消息
# - 有时戳:优先检查时间戳新鲜度(第二道关卡)
# - 有日期+无今天日期:仍需检查时间戳,不能直接拒绝
has_today_date = False
if dates:
for date_str in dates:
@@ -5163,11 +5166,13 @@ class MessageMonitor:
has_today_date = True
logger.debug(f"[ocr] 检测到今日日期: {date_str}")
break
elif date_obj < today:
logger.debug(f"[ocr] 检测到历史日期: {date_str} (距今{(today - date_obj).days}天)")
except (ValueError, IndexError):
pass
if not has_today_date:
logger.debug(f"[ocr] 过滤器1结果: 所有日期都非今日({dates}),丢弃: {text[:80]!r}")
return False
logger.debug(f"[ocr] 警告: 所有日期都非今日({dates}),但继续检查时间戳...")
# 不直接拒绝,继续检查时间戳
if not timestamps:
# ⭐ 无可见时间戳:检查噪声文本
logger.debug(f"[ocr] 无可见时间戳")