From 96ac6477affdb75f5bf223a46b222b13475d4903 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期五, 22 十一月 2024 11:06:04 +0800 Subject: [PATCH] 会话保存问题优化 --- app/service/dialog.py | 7 ++++--- app/api/chat.py | 14 ++++++++------ app/service/session.py | 5 +++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/app/api/chat.py b/app/api/chat.py index e4a439d..b2486ab 100644 --- a/app/api/chat.py +++ b/app/api/chat.py @@ -49,7 +49,6 @@ try: async def forward_to_ragflow(): while True: - is_new = False message = await websocket.receive_json() print(f"Received from client {chat_id}: {message}") chat_history = message.get('chatHistory', []) @@ -57,7 +56,6 @@ if len(chat_history) == 0: chat_history = await ragflow_service.get_session_history(token, chat_id) if len(chat_history) == 0: - is_new = True chat_history = await ragflow_service.set_session(token, agent_id, message, chat_id, True) # print("chat_history------------------------", chat_history) @@ -103,8 +101,12 @@ result = {"message": f"鍐呴儴閿欒锛� {e2}", "type": "close"} await websocket.send_json(result) print(f"Error process message of ragflow: {e2}") - dialog_chat_history = await ragflow_service.get_session_history(token, chat_id, 1) - await update_session_history(db, dialog_chat_history, current_user.id, is_new) + try: + dialog_chat_history = await ragflow_service.get_session_history(token, chat_id, 1) + await update_session_history(db, dialog_chat_history, current_user.id) + except Exception as e: + logger.error(e) + logger.error("-----------------淇濆瓨ragflow鐨勫巻鍙蹭細璇濆紓甯�-----------------") # 鍚姩浠诲姟澶勭悊瀹㈡埛绔秷鎭� tasks = [ @@ -231,14 +233,14 @@ excel_url = None if file_name: excel_url = f"/api/files/download/?agent_id=basic_question_talk&file_id={file_name}&file_type=word" - result = {"message": output, "type": "message", "file_url": excel_url} + result = {"message": output, "type": "message", "file_url": excel_url, "file_name":file_name} try: SessionService(db).update_session(chat_id, message={"role": "assistant", "content": result}) except Exception as e: logger.error(e) logger.error("-----------------杩斿洖鏁版嵁--------------------") - await websocket.send_json(result | data) + await websocket.send_json(result) except Exception as e2: result = {"message": f"鍐呴儴閿欒锛� {e2}", "type": "close"} diff --git a/app/service/dialog.py b/app/service/dialog.py index ea75db8..a0ab574 100644 --- a/app/service/dialog.py +++ b/app/service/dialog.py @@ -24,14 +24,15 @@ return {"rows": [kld.to_json() for kld in dialog_list]} -async def update_session_history(db, data: dict, user_id, is_new): +async def update_session_history(db, data: dict, user_id): session_id = data.get("id") if not session_id: logger.error("鏇存柊鍥炶瘽璁板綍澶辫触锛亄}".format(data)) return data["create_date"] = datetime.strptime(data["create_date"], '%a, %d %b %Y %H:%M:%S %Z') data["update_date"] = datetime.strptime(data["update_date"], '%a, %d %b %Y %H:%M:%S %Z') - if is_new: + conversation = db.query(ConversationModel).filter(ConversationModel.id == session_id).first() + if not conversation: try: data["tenant_id"] = user_id conversation_model = ConversationModel(**data) @@ -42,7 +43,7 @@ db.rollback() else: try: - data["tenant_id"] = user_id + # data["tenant_id"] = user_id del data["id"] db.query(ConversationModel).filter(ConversationModel.id == session_id).update(data) db.commit() diff --git a/app/service/session.py b/app/service/session.py index 7e43223..e43d8aa 100644 --- a/app/service/session.py +++ b/app/service/session.py @@ -1,3 +1,4 @@ +import json from typing import Type from sqlalchemy.orm import Session @@ -39,7 +40,7 @@ agent_id=agent_id, agent_type=agent_type, tenant_id=user_id, - message=[{"role": "user", "content": name}] + message=json.dumps([{"role": "user", "content": name}]) ) self.db.add(new_session) self.db.commit() @@ -57,7 +58,7 @@ SessionModel: 鏌ユ壘鍒扮殑浼氳瘽妯″瀷瀹炰緥锛屽鏋滄湭鎵惧埌鍒欒繑鍥濶one銆� """ session = self.db.query(SessionModel).filter_by(id=session_id).first() - if session.message is None: + if session and session.message is None: session.message = '[]' return session -- Gitblit v1.8.0