修复消息顺序判断:VLM返回倒序,取messages[0]而非[-1]

问题:VLM返回消息按时间倒序(最新在前),代码取[-1]导致判断的是旧消息
修复:改为取[0]获取最新消息
This commit is contained in:
2026-04-13 12:02:29 +08:00
parent 1b981d8313
commit b289d11ef5
2 changed files with 12 additions and 11 deletions

View File

@@ -57,13 +57,14 @@ class MessageProcessor:
logger.debug("没有消息,不回复") logger.debug("没有消息,不回复")
return False return False
# 检查最后一条消息 # VLM 返回的消息是按时间倒序的(最新的在前)
last_msg = messages[-1] # 取第一条(最新的)消息进行判断
sender = last_msg.get("sender", "") latest_msg = messages[0]
content = last_msg.get("content", "") sender = latest_msg.get("sender", "")
is_self = last_msg.get("is_self", False) 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: if is_self:
@@ -79,8 +80,8 @@ class MessageProcessor:
def generate_reply(self, chat_snapshot: ChatSnapshot) -> str: 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: for rule in self._rules:
if not rule.enabled: if not rule.enabled:
@@ -89,7 +90,7 @@ class MessageProcessor:
if rule.reply_type == "keyword": if rule.reply_type == "keyword":
# 关键词匹配 # 关键词匹配
for keyword in rule.keywords: for keyword in rule.keywords:
if keyword in last_content: if keyword in latest_content:
logger.info(f"关键词匹配: {keyword}") logger.info(f"关键词匹配: {keyword}")
return rule.reply_content return rule.reply_content
@@ -104,9 +105,9 @@ class MessageProcessor:
try: try:
# 构造 prompt # 构造 prompt
prompt = f"""当前聊天: {chat_snapshot.chat_name} 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 "对方" sender = "" if msg.get("is_self") else "对方"
prompt += f"- [{sender}] {msg.get('content', '')}\n" prompt += f"- [{sender}] {msg.get('content', '')}\n"