fix: 修复基线轮吞掉有效消息的问题
问题:基线轮无条件跳过第一条消息,导致后续轮次一直卡在无意义的'关于我们@'消息上,无法处理真正的问句'那登录插件去哪儿下载?' 修复:基线轮先检查第一条消息是否有效(KB能匹配到结果),如果无效则直接跳过,继续处理下一条;只有当第一条消息有效时才作为基线不回复。 文件:monitor.py - 第8210-8237行:修改基线轮逻辑,先验证消息有效性再决定是否跳过
This commit is contained in:
+20
-19
@@ -8208,26 +8208,27 @@ class MessageMonitor:
|
||||
|
||||
# ⭐ 第一轮:评估所有候选消息质量
|
||||
for item in new_items:
|
||||
# 基线轮:只标记第一条消息,不触发回复
|
||||
# 基线轮:只标记第一条"有效"消息,不触发回复
|
||||
# ⚠️ 修复:如果第一条消息是无效的(KB无结果等),直接跳过继续找有效消息
|
||||
if is_baseline and not baseline_handled:
|
||||
# 基线轮:日志标记但不触发回复。
|
||||
# ⚠ 四项关键处置,防止"基线吞消息后永不回复":
|
||||
# 1. 从 seen 移除 item(4383 循环已 seen.add)——否则用户重发
|
||||
# 相同内容 → ts in seen 永久拦截
|
||||
# 2. 清空 _last_sig ——否则下一轮 sig 相同 → 4131 静默跳过,
|
||||
# 用户刚发的新消息被基线误吞后永远等不到回复
|
||||
# 3. ⭐ 不加入 _seen_messages ——基线轮跳过 ≠ 已回复,
|
||||
# 用户重发时仍应被处理
|
||||
# 4. ⭐ 清除截图 hash——否则下次轮询时 hash 相同直接跳过 OCR,
|
||||
# 消息永远等不到回复(截图内容没变但消息需要被处理)
|
||||
logger.info(f"[{platform}] 基线↺(不回复): {item[:60]}")
|
||||
seen.discard(item)
|
||||
# ⭐ 修复:不要加入 self._seen_messages,否则未来轮次永远跳过
|
||||
self._last_sig[platform] = ""
|
||||
self._last_screenshot_hash.pop(platform, None)
|
||||
self._last_new_msg_time[platform] = time.time()
|
||||
baseline_handled = True
|
||||
continue # 基线轮不处理,跳到下一条
|
||||
# 先检查这条消息是否有效(KB能匹配到结果)
|
||||
cleaned_item = self._clean_ocr_prefix(item)
|
||||
kb_result = self._kb_search(cleaned_item, platform)
|
||||
if kb_result and len(kb_result) > 0:
|
||||
# 第一条消息是有效的,作为基线不回复(正常逻辑)
|
||||
logger.info(f"[{platform}] 基线↺(不回复): {item[:60]}")
|
||||
seen.discard(item)
|
||||
self._last_sig[platform] = ""
|
||||
self._last_screenshot_hash.pop(platform, None)
|
||||
self._last_new_msg_time[platform] = time.time()
|
||||
baseline_handled = True
|
||||
continue # 基线轮不处理,跳到下一条
|
||||
else:
|
||||
# 第一条消息无效,直接跳过,继续处理下一条
|
||||
logger.info(f"[{platform}] 基线轮跳过无效消息: {item[:60]}")
|
||||
baseline_handled = True
|
||||
# 不设置 _last_new_msg_time,让后续轮次继续处理
|
||||
continue # 跳过这条无效消息,继续循环
|
||||
|
||||
# ⭐ 清理OCR噪声前缀(如"必选,")后再搜索知识库
|
||||
cleaned_item = self._clean_ocr_prefix(item)
|
||||
|
||||
Reference in New Issue
Block a user