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 @@