From 7ed0dad3f6fbff02602c9bd58573ad85cb0275f0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 1 Feb 2026 16:18:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Smart=20Auto=20Mode=20=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=BA=E5=BA=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 Smart Auto Mode 内部单独获取历史消息,避免依赖 后面才定义的 messagesFromDb 变量 Co-authored-by: Cursor --- app/(chat)/api/chat/route.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/(chat)/api/chat/route.ts b/app/(chat)/api/chat/route.ts index d483b01..5f5f3d1 100644 --- a/app/(chat)/api/chat/route.ts +++ b/app/(chat)/api/chat/route.ts @@ -343,6 +343,10 @@ export async function POST(request: Request) { console.log("[Smart Auto Mode] 🚀 Starting intelligent analysis..."); try { + // 🆕 首先获取历史消息(在 Smart Auto Mode 内部单独获取,避免依赖后面的 messagesFromDb) + const smartAutoHistoryMessagesFromDb = await getMessagesByChatId({ id }); + console.log("[Smart Auto Mode] Loaded", smartAutoHistoryMessagesFromDb.length, "messages from DB"); + // 1. 提取用户消息内容 const lastUserMessage = message; const textContent = lastUserMessage.parts @@ -362,13 +366,13 @@ export async function POST(request: Request) { // 🆕 历史图片上下文感知:如果用户没有发送新图片,自动使用历史中最近的图片(支持多张) // 逻辑:只要用户在对话中没有附上新图片,就默认继续处理之前的图片 - if (!hasImage && messagesFromDb.length > 0) { + if (!hasImage && smartAutoHistoryMessagesFromDb.length > 0) { console.log("[Smart Auto Mode] 🔍 No image in current message, auto-searching history..."); // 从历史消息中倒序查找最近一轮包含图片的消息 // 收集该消息中的所有图片(支持多图融合编辑) - for (let i = messagesFromDb.length - 1; i >= 0; i--) { - const msg = messagesFromDb[i]; + for (let i = smartAutoHistoryMessagesFromDb.length - 1; i >= 0; i--) { + const msg = smartAutoHistoryMessagesFromDb[i]; const parts = msg.parts as any[]; if (!parts) continue; @@ -424,7 +428,7 @@ export async function POST(request: Request) { // 🆕 从历史消息中提取对话文本(用于上下文理解) const historyMessages: { role: "user" | "assistant"; content: string }[] = []; - for (const msg of messagesFromDb.slice(-10)) { // 最多取最近10条 + for (const msg of smartAutoHistoryMessagesFromDb.slice(-10)) { // 最多取最近10条 const parts = msg.parts as any[]; if (parts && parts.length > 0) { // 提取文本内容