修复消息顺序判断:VLM返回倒序,取messages[0]而非[-1]
问题:VLM返回消息按时间倒序(最新在前),代码取[-1]导致判断的是旧消息 修复:改为取[0]获取最新消息
This commit is contained in:
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user