修复时间戳继承导致新消息被误判为旧消息的问题 (Task #1685)
问题: - OCR继承机制把旧时间戳(15:52:52)关联到新消息(17:38入库的'近期公告') - freshness_score=-10.0,触发Task #1684的强制丢弃逻辑 - 导致新消息被误判为'陈旧历史消息'丢弃 修复: - 区分'自身时间戳陈旧'和'继承时间戳陈旧' - 继承时间戳的消息:检查DB是否有记录,有记录说明是新消息(刚入库),放行 - 自身时间戳陈旧的消息:保持强制丢弃逻辑 测试: - 继承时间戳的新消息(DB有记录):放行 - 自身时间戳陈旧的旧消息(DB无记录):强制丢弃
This commit is contained in:
+18
-9
@@ -10893,6 +10893,9 @@ class MessageMonitor:
|
||||
# - 超过1小时的消息:freshness_score == -10.0(扣10分)
|
||||
# - 选择消息时分数必须>0才能处理
|
||||
# - DB有记录的消息:不加分(避免重复处理)
|
||||
# ⭐ Task #1685 修复: 区分"自身时间戳陈旧"和"继承时间戳陈旧"
|
||||
# 继承时间戳的消息不应被强制丢弃(可能是新消息继承了旧时间戳)
|
||||
_is_inherited_ts = isinstance(item, tuple) and len(item) == 2 and item[1] is not None
|
||||
if freshness_score >= 5:
|
||||
# ≥5分(5分钟内):直接放行,确保最终分数至少为5
|
||||
old_score = score
|
||||
@@ -10901,18 +10904,24 @@ class MessageMonitor:
|
||||
elif freshness_score == -999.0:
|
||||
# ⭐ Task #1661+#1665: 无有效时间戳(整批OCR丢失时间戳)
|
||||
# 完全无法判断消息年龄,直接强制丢弃
|
||||
# ⭐ 与 freshness_score < 0 统一:所有无法确认新鲜度的消息均强制丢弃
|
||||
score = -100.0
|
||||
logger.info(f"[{platform}] 无有效时间戳(OCR丢失?)强制丢弃: {item[:50]}")
|
||||
elif freshness_score < 0:
|
||||
# ⭐ Task #1684: 负分(超过1小时)→ 强制丢弃,不再仅扣10分
|
||||
# 根因:短消息(+5)+疑问词(+10)可得15分,仅扣10分仍为5分>0,
|
||||
# 导致数小时前的旧消息通过阈值被错误处理。
|
||||
# 例:10:55发送的"什么是推广渠道违规?"在16:24被OCR读取,
|
||||
# freshness_score=-10,基础分15-10=5>0 → 误回复。
|
||||
# 修复:与-999.0一样强制丢弃,确保超过1小时的旧消息绝不触发回复。
|
||||
score = -100.0
|
||||
logger.info(f"[{platform}] 陈旧时间戳(>{abs(freshness_score)/10:.0f}h)强制丢弃: {item[:50]}")
|
||||
# ⭐ Task #1684: 负分(超过1小时)→ 强制丢弃
|
||||
# ⭐ Task #1685 修复: 继承时间戳的消息使用DB查重兜底,不强制丢弃
|
||||
if _is_inherited_ts:
|
||||
# 继承时间戳的消息:检查DB是否有记录,有记录说明是新消息
|
||||
if self._msg_history and self._msg_history.has_ocr_message_record(platform, cleaned_item):
|
||||
# DB有记录:说明是新消息(刚入库),继承了旧时间戳,放行
|
||||
logger.info(f"[{platform}] 继承时间戳陈旧但DB有记录(新消息),放行: {item[:50]}")
|
||||
else:
|
||||
# DB无记录:可能是旧消息,强制丢弃
|
||||
score = -100.0
|
||||
logger.info(f"[{platform}] 继承时间戳陈旧且DB无记录,强制丢弃: {item[:50]}")
|
||||
else:
|
||||
# 自身时间戳陈旧:强制丢弃
|
||||
score = -100.0
|
||||
logger.info(f"[{platform}] 自身时间戳陈旧(>{abs(freshness_score)/10:.0f}h),强制丢弃: {item[:50]}")
|
||||
else:
|
||||
# 0-4分(10分钟-1小时):查DB决定是否加分
|
||||
if self._msg_history and self._msg_history.has_ocr_message_record(platform, cleaned_item):
|
||||
|
||||
Reference in New Issue
Block a user