From 3471e8552f149fbbd325d51763b252773a513642 Mon Sep 17 00:00:00 2001 From: MT-Fire <798521692@qq.com> Date: Wed, 11 Mar 2026 13:39:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B0=86=E7=B3=BB=E7=BB=9F=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E5=8A=A0=E5=85=A5=E4=BC=9A=E8=AF=9D=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E4=B8=AD=EF=BC=8C=E7=B3=BB=E7=BB=9F=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=E4=B8=8D=E4=BC=9A=E6=98=BE=E7=A4=BA=E5=9C=A8?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/chat/ChatMain.vue | 24 +++++++--- src/components/chat/MessageList.vue | 20 ++++++--- .../message/components/ThinkingNode.vue | 2 +- .../modals/ConversationSettingsModal.vue | 20 +++++++++ src/services/api.ts | 45 ++++++++++++------- src/stores/chat.ts | 33 ++++++++++++++ 6 files changed, 115 insertions(+), 29 deletions(-) diff --git a/src/components/chat/ChatMain.vue b/src/components/chat/ChatMain.vue index 85f0eb0..eaa8baf 100644 --- a/src/components/chat/ChatMain.vue +++ b/src/components/chat/ChatMain.vue @@ -223,15 +223,25 @@ async function handleSend( await chatStore.createConversation(); } - // 从当前会话中提取历史消息(用于上下文记忆),在添加新消息之前提取 + // 获取系统提示词(优先使用传入的,否则使用会话设置) + const systemPrompt = options?.systemPrompt || currentConversation.value?.settings?.systemPrompt; + + // 检查是否需要添加系统消息 const existingMessages = currentConversation.value?.messages || []; + const hasSystemMessage = existingMessages.some((m: any) => m.role === MessageRole.SYSTEM); + + // 如果有系统提示词且对话中没有系统消息,添加系统消息 + if (systemPrompt && !hasSystemMessage) { + await chatStore.addMessage(MessageRole.SYSTEM, { + type: MessageType.TEXT, + text: systemPrompt, + }); + } + + // 从当前会话中提取历史消息(用于上下文记忆),在添加新消息之前提取 + const updatedMessages = currentConversation.value?.messages || []; const MAX_HISTORY_ROUNDS = 20; // 最多保留最近 20 轮(40 条消息) - const historyMessages = existingMessages - .filter( - (m: any) => - m.role === MessageRole.USER || m.role === MessageRole.ASSISTANT, - ) - .filter((m: any) => m.content?.text) // 过滤掉空消息 + const historyMessages = updatedMessages.filter((m: any) => m.content?.text) // 过滤掉空消息 .slice(-(MAX_HISTORY_ROUNDS * 2)) .map((m: any) => ({ role: m.role, content: m.content.text })); diff --git a/src/components/chat/MessageList.vue b/src/components/chat/MessageList.vue index d8fa2c9..bf6bd71 100644 --- a/src/components/chat/MessageList.vue +++ b/src/components/chat/MessageList.vue @@ -3,7 +3,7 @@