fix: 移除不存在的_kb_search调用,回退基线轮逻辑到原版

问题:commit 9673ed6 添加了 self._kb_search() 调用,但 MessageMonitor 没有此方法
导致 AttributeError: 'MessageMonitor' object has no attribute '_kb_search'

修复:回退基线轮逻辑到 c3f12cd 原版,简单标记第一条消息为基线不回复
This commit is contained in:
youpaishidifu
2026-08-18 16:41:36 +08:00
parent 9673ed6dab
commit 8aa3639cf3
+19 -20
View File
@@ -8208,27 +8208,26 @@ class MessageMonitor:
# ⭐ 第一轮:评估所有候选消息质量
for item in new_items:
# 基线轮:只标记第一条"有效"消息,不触发回复
# ⚠️ 修复:如果第一条消息是无效的(KB无结果等),直接跳过继续找有效消息
# 基线轮:只标记第一条消息,不触发回复
if is_baseline and not baseline_handled:
# 先检查这条消息是否有效(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 # 跳过这条无效消息,继续循环
# 基线轮:日志标记但不触发回复。
# ⚠ 四项关键处置,防止"基线吞消息后永不回复":
# 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 # 基线轮不处理,跳到下一条
# ⭐ 清理OCR噪声前缀(如"必选,")后再搜索知识库
cleaned_item = self._clean_ocr_prefix(item)