diff --git a/src/core/__pycache__/engine.cpython-311.pyc b/src/core/__pycache__/engine.cpython-311.pyc index b53542e..5d3aeb9 100644 Binary files a/src/core/__pycache__/engine.cpython-311.pyc and b/src/core/__pycache__/engine.cpython-311.pyc differ diff --git a/src/core/engine.py b/src/core/engine.py index 8319b14..b1ed841 100644 --- a/src/core/engine.py +++ b/src/core/engine.py @@ -57,13 +57,14 @@ class MessageProcessor: logger.debug("没有消息,不回复") return False - # 检查最后一条消息 - last_msg = messages[-1] - sender = last_msg.get("sender", "") - content = last_msg.get("content", "") - is_self = last_msg.get("is_self", False) + # VLM 返回的消息是按时间倒序的(最新的在前) + # 取第一条(最新的)消息进行判断 + latest_msg = messages[0] + sender = latest_msg.get("sender", "") + content = latest_msg.get("content", "") + is_self = latest_msg.get("is_self", False) - logger.debug(f"最后一条消息: sender={sender}, is_self={is_self}, content={content[:30]}") + logger.debug(f"最新消息: sender={sender}, is_self={is_self}, content={content[:30]}") # 如果是自己发的消息,不回复 if is_self: @@ -79,8 +80,8 @@ class MessageProcessor: def generate_reply(self, chat_snapshot: ChatSnapshot) -> str: """生成回复内容""" - # 先检查关键词规则 - last_content = chat_snapshot.messages[-1].get("content", "") + # 先检查关键词规则(取最新消息) + latest_content = chat_snapshot.messages[0].get("content", "") if chat_snapshot.messages else "" for rule in self._rules: if not rule.enabled: @@ -89,7 +90,7 @@ class MessageProcessor: if rule.reply_type == "keyword": # 关键词匹配 for keyword in rule.keywords: - if keyword in last_content: + if keyword in latest_content: logger.info(f"关键词匹配: {keyword}") return rule.reply_content @@ -104,9 +105,9 @@ class MessageProcessor: try: # 构造 prompt prompt = f"""当前聊天: {chat_snapshot.chat_name} -历史消息: +历史消息(按时间倒序): """ - for msg in chat_snapshot.messages[-10:]: # 最近10条 + for msg in chat_snapshot.messages[:10]: # 取最新10条(VLM返回的是倒序) sender = "我" if msg.get("is_self") else "对方" prompt += f"- [{sender}] {msg.get('content', '')}\n"