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:
+10
-5
@@ -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] 无可见时间戳")
|
||||
|
||||
Reference in New Issue
Block a user