From 21adfd441c3b6e38f58870650b00b43b7d6c1302 Mon Sep 17 00:00:00 2001 From: RockYang Date: Fri, 5 May 2023 17:45:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20ChatFree=20=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=88=B7=E6=B6=88=E6=81=AF=E7=9A=84=20Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/handler_chat.go | 19 ++++++++++--------- web/src/views/ChatFree.vue | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/server/handler_chat.go b/server/handler_chat.go index 3d0080a3..f50aadfb 100644 --- a/server/handler_chat.go +++ b/server/handler_chat.go @@ -68,7 +68,7 @@ func (s *Server) ChatHandle(c *gin.Context) { ctx, cancel := context.WithCancel(context.Background()) s.ReqCancelFunc[sessionId] = cancel // 回复消息 - err = s.sendMessage(ctx, session, chatRole, string(message), client, false) + err = s.sendMessage(ctx, session, chatRole, string(message), client) if err != nil { logger.Error(err) } else { @@ -81,7 +81,7 @@ func (s *Server) ChatHandle(c *gin.Context) { } // 将消息发送给 ChatGPT 并获取结果,通过 WebSocket 推送到客户端 -func (s *Server) sendMessage(ctx context.Context, session types.ChatSession, role types.ChatRole, prompt string, ws Client, resetContext bool) error { +func (s *Server) sendMessage(ctx context.Context, session types.ChatSession, role types.ChatRole, prompt string, ws Client) error { cancel := s.ReqCancelFunc[session.SessionId] defer func() { cancel() @@ -189,6 +189,10 @@ func (s *Server) sendMessage(ctx context.Context, session types.ChatSession, rol retryCount-- } + if response != nil { + defer response.Body.Close() + } + // 如果三次请求都失败的话,则返回对应的错误信息 if err != nil { replyMessage(ws, ErrorMsg, false) @@ -223,14 +227,15 @@ func (s *Server) sendMessage(ctx context.Context, session types.ChatSession, rol _ = utils.SaveConfig(s.Config, s.ConfigPath) // 重发当前消息 - return s.sendMessage(ctx, session, role, prompt, ws, false) + return s.sendMessage(ctx, session, role, prompt, ws) // 上下文超出长度了 } else if strings.Contains(line, "This model's maximum context length is 4097 tokens") { logger.Infof("会话上下文长度超出限制, Username: %s", user.Name) - // 重置上下文,重发当前消息 + replyMessage(ws, "温馨提示:当前会话上下文长度超出限制,已为您重置会话上下文!", false) + // 重置上下文 delete(s.ChatContexts, ctxKey) - return s.sendMessage(ctx, session, role, prompt, ws, true) + break } else if !strings.Contains(line, "data:") { continue } @@ -243,9 +248,6 @@ func (s *Server) sendMessage(ctx context.Context, session types.ChatSession, rol break } - if resetContext { - replyMessage(ws, "温馨提示:当前会话上下文长度超出限制,已为您重置会话上下文!", false) - } // 初始化 role if responseBody.Choices[0].Delta.Role != "" && message.Role == "" { message.Role = responseBody.Choices[0].Delta.Role @@ -272,7 +274,6 @@ func (s *Server) sendMessage(ctx context.Context, session types.ChatSession, rol continue } } // end for - _ = response.Body.Close() // 关闭资源 // 消息发送成功 if len(contents) > 0 { diff --git a/web/src/views/ChatFree.vue b/web/src/views/ChatFree.vue index 05c7ed90..6e7d8061 100644 --- a/web/src/views/ChatFree.vue +++ b/web/src/views/ChatFree.vue @@ -430,6 +430,7 @@ export default defineComponent({ // 加载聊天历史记录 fetchChatHistory: function (chatId) { + this.chatData = []; const list = getChatHistory(chatId); if (list) { const md = require('markdown-it')();