简化回复逻辑:只要对方有新消息就回复,不依赖has_new判断

1. 移除has_new_message依赖,只要有对方消息(is_self=False)就回复
2. 修复防重复逻辑:基于消息内容+聊天名的hash,10秒内不重复
3. 移除多余的chat_key赋值
This commit is contained in:
2026-04-13 12:11:30 +08:00
parent f325025365
commit 0a4f0ccdbb
2 changed files with 13 additions and 10 deletions

View File

@@ -256,16 +256,18 @@ class WeChatAgent:
chat_name = chat_info.get("current_chat", "")
messages = chat_info.get("messages", [])
# 防重复处理(同一聊天 5 秒内不重复处理)
# 防重复处理基于最新消息内容hash10秒内不重复回复同一条
current_time = time.time()
chat_key = f"{chat_name}_{hash(str(messages[-1:]))}"
if chat_key in self._last_processed_time:
if current_time - self._last_processed_time[chat_key] < 5:
if messages:
latest_content = messages[0].get("content", "")[:50] # 取最新消息的前50字符
dedup_key = f"{chat_name}_{latest_content}"
if dedup_key in self._last_processed_time:
if current_time - self._last_processed_time[dedup_key] < 10:
logger.debug(f"消息已处理过,跳过: {latest_content[:30]}")
return
self._last_processed_time[dedup_key] = current_time
if has_new or messages:
self._last_processed_time[chat_key] = current_time
# 创建快照
snapshot = ChatSnapshot(
timestamp=current_time,
@@ -290,8 +292,9 @@ class WeChatAgent:
})
# 判断是否需要回复
if self.processor.should_reply(snapshot):
logger.info(f"需要回复,生成回复内容...")
# 策略只要对方有新消息is_self=False就回复不依赖 has_new_message
if messages and not messages[0].get("is_self", True):
logger.info(f"检测到对方新消息,准备回复...")
reply = self.processor.generate_reply(snapshot)
if reply:
logger.info(f"发送回复: {reply[:50]}...")
@@ -300,7 +303,7 @@ class WeChatAgent:
else:
logger.warning("生成回复为空")
else:
logger.debug("不需要回复")
logger.debug("不需要回复(无新消息或自己发送)")
except Exception as e:
logger.error(f"轮询处理异常: {e}")