From 732f9e50298732ec61f5acb188ec20a079859e12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=AF=E8=88=AA?= <280645618@qq.com> Date: Tue, 10 Mar 2026 22:05:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96sessionid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qihangerp/erp/serviceImpl/AiService.java | 31 ++++++++++++++----- vue/src/views/index.vue | 8 +++-- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/api/ai-agent/src/main/java/cn/qihangerp/erp/serviceImpl/AiService.java b/api/ai-agent/src/main/java/cn/qihangerp/erp/serviceImpl/AiService.java index 145227d1..ebb13cea 100644 --- a/api/ai-agent/src/main/java/cn/qihangerp/erp/serviceImpl/AiService.java +++ b/api/ai-agent/src/main/java/cn/qihangerp/erp/serviceImpl/AiService.java @@ -153,17 +153,34 @@ public class AiService { StringBuilder promptBuilder = new StringBuilder(); promptBuilder.append("今天的日期是:").append(today).append("\n"); - // 添加历史对话作为上下文 + // 添加历史对话作为上下文,但限制总长度 + final int MAX_CONTEXT_LENGTH = 2000; // 最大上下文长度限制 + StringBuilder contextBuilder = new StringBuilder(); + if (conversationHistory != null && !conversationHistory.isEmpty()) { - promptBuilder.append("以下是之前的对话历史:\n"); - for (ConversationHistoryManager.Message msg : conversationHistory) { + // 倒序遍历对话历史,优先保留最新的对话 + for (int i = conversationHistory.size() - 1; i >= 0; i--) { + ConversationHistoryManager.Message msg = conversationHistory.get(i); + String msgStr; if (msg.getRole().equals("user")) { - promptBuilder.append("用户: " + msg.getContent()).append("\n"); + msgStr = "用户: " + msg.getContent() + "\n"; } else { - promptBuilder.append("助手: " + msg.getContent()).append("\n"); + msgStr = "助手: " + msg.getContent() + "\n"; + } + + // 如果添加当前消息会超过限制,则停止添加更早的消息 + if (contextBuilder.length() + msgStr.length() <= MAX_CONTEXT_LENGTH) { + contextBuilder.insert(0, msgStr); // 插入到开头,保持时间顺序 + } else { + break; } } - promptBuilder.append("\n当前用户消息:\n"); + + if (contextBuilder.length() > 0) { + promptBuilder.append("以下是之前的对话历史:\n"); + promptBuilder.append(contextBuilder); + promptBuilder.append("\n当前用户消息:\n"); + } } // 添加当前消息 @@ -276,4 +293,4 @@ public class AiService { public String processMessage(String message) { return processMessage(message, "llama3", null, null); } -} +} \ No newline at end of file diff --git a/vue/src/views/index.vue b/vue/src/views/index.vue index 99fd9996..3fe80f8c 100644 --- a/vue/src/views/index.vue +++ b/vue/src/views/index.vue @@ -240,8 +240,10 @@ export default { } }, initSse() { - // 生成唯一客户端ID - this.clientId = 'client_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); + // 从localStorage获取clientId,如果没有则生成新的 + this.clientId = localStorage.getItem('aiChatClientId') || ('client_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)); + // 保存clientId到localStorage + localStorage.setItem('aiChatClientId', this.clientId); // 获取token const token = getToken(); @@ -827,3 +829,5 @@ export default { background: #a8a8a8; } + +``` \ No newline at end of file