From b289d11ef5ed0343d5a770278fdbf0d20e33b382 Mon Sep 17 00:00:00 2001 From: jesxion Date: Mon, 13 Apr 2026 12:02:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B6=88=E6=81=AF=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E5=88=A4=E6=96=AD=EF=BC=9AVLM=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=92=E5=BA=8F=EF=BC=8C=E5=8F=96messages[0]=E8=80=8C?= =?UTF-8?q?=E9=9D=9E[-1]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:VLM返回消息按时间倒序(最新在前),代码取[-1]导致判断的是旧消息 修复:改为取[0]获取最新消息 --- src/core/__pycache__/engine.cpython-311.pyc | Bin 18960 -> 19013 bytes src/core/engine.py | 23 ++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/core/__pycache__/engine.cpython-311.pyc b/src/core/__pycache__/engine.cpython-311.pyc index b53542e2b25043e888ad8c2c3a48ee3641b227b3..5d3aeb9d529f379a5a61d3fb539e16ce59927486 100644 GIT binary patch delta 1234 zcmZvbe@t6d6vuno@+kc^+7z0OwqnyvDnbj}fE7sFu?G~F4w!DyiBL;Zw{#3&YX&F- z7Gt_Ohv5*qkQt|QuIe9FuOTp5f+lmAnAn;oTN)GNAFc8S8UBjKKb-d#5o5f$`P}oq z=bm%#JLkREX5rQ>sIRM3auFS0o%rUs)$yS^TT=`*gE80BTu$X}k!&n3|yzp9sq z{n20~+J7<<5?ZKBsAg!zwEXmhOjK^ZqC@GH4#A*=3@eoYVjNdBfd>~< zRp7#JRr~bnzh5eFYA6~Uie{z4^WmVtV~x7a*+a8LzNeTJ(L=i6C}h0-DMRRzDPyoF zA!De&V`%u=(2yKmv7`-r#=xiO42EKAoL9SxYg2j$o%o%457d$J9bbY%GR~dh1{H@z zgA!aXZE{#?a(V9J%em=~@(Z#2)Cc#LWBCi`^6`bW_{X`)ncR)(d&}pXa^D*360Nmc z^O@1Z%-s}OY2aCZG+V-t1cJlS8N3XSQrM(IBeM(L^)ZV_qU(YQ{8RT{UOGS|` z@yLdVE{l5#%YWe{mU4v@E|S`vl>qOPLlt2$ZNRe03th;Wt0771&C_De#d3Dx?aFFc zAwO4s3R}tzOAUNMez2VXM;Wo&Aw?2ay_6- z#+!+^uAP-ffMny;a769?l+0)b*hY&9}TwA>Uu)-tEk=H{xF%^ z`x0>Pu%PRxXtaWpI2yfRDx9F9GA(VPer!ut>K8&0x^b?_4leR}Qx>2D-*k3^4}Wqd zp%bq*-)dp!3B?TWF-$VZ7)lrx7Gtn9%{;Am*cFAxan;3( zg&y4Deh!|(DR(<8iPh58>0W`j|Kgge|y~$OnS?4#oPTCS4VPs delta 1150 zcmZvbe@t6d6vyA`ULU2jrG0CC8!dwYbL{{NfkI)06=*v;9b&e)`6JHSmO@0Bubsb= zVb#SnY_1E32s4;v^H(*|p;xh)7`N#X6EzmoY}jawi6!ojMV8DT(JXpz`^Tp7y_e5D z`JQvX_uX@IFHFO+Y0$l))v7uA*oVIxx!3-#E?26&{5O5@N~uL}riqogc>dVYpVIM_ zmrvqa^(!XTXdoKf_eeA%chR(5&(MuusULq@;Ea~p-f34twQN{FW0|td4yP1LhWf0b zJ|QfN6*CP}4YN*ttk{?+xgl*@5}UGOQ=%lV(j_&Mnv7{^zKw!@XZIAx%-(&O z2ZNbFkTSbBR1}v~k*q3`QAJh-PJ^G81%+1NxET&RHEuGY(Ezycu+|B^_?gxUZoH!H zFlh?^9~>Wxg~wt!UOq4ymVMZz>)SF&w-UWX5$CAix=mTBG4)VZYQ7{nzL6aBBWJ}W z$&-~l2@Rgnxl0-{(rxrZC~pNjX)FH{%J_rAgb*s*#f5m(8l2{GYNpN~eLkOjZ)G8| z^33T@^~i6uy92ai2Mp&ey{vgH6gfUP9Ejygy-x(g`(q>HW3n4}i8auLk5TT#Sqb z*W$p2b#R(QHY62-oB1-;i298Zd_t@n&%w>=n%ed7IjO9j{Fi#J&J16Z@9QL<8vkm2 z3NDiUwhlolyQm*|$F2f;pdU6_i#sST!d4o@Uz$wNgUaSPxJFJj|Goz1@Fj;CY-GW4 z2!z*I(d+1LuY(Q}ZudiFVXlG7w26gIv637gkRwrA_=VFB-Q+K44xk?|b`H{W*t~Tf zw&U{F3srN>tc2lBhB$+Yp_JhRTy$Arl6>nrq0ryBCrOs;#>BQ5?8fWcyo$?e^tc~| z`*6YSgO3XR)Av~60n*X)C-BE<`IJw>fj%_^$US`;*m8zSHif*%j8et8@Z)#WII5ti zu9ht<`6?zoweT|~&M76Xc&Mj9|CHN!d3Hr+Hs@p*R7~Q@u zfvrmop7U*1r&-8w7ryWN1Jd~R_Jj0P>ia7pP5k{~Xuco7xXS%MuNL%cH)kgl_=A7w EACXI2qW}N^ 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"