From 96ac6477affdb75f5bf223a46b222b13475d4903 Mon Sep 17 00:00:00 2001 From: zhaoqingang <zhaoqg0118@163.com> Date: 星期五, 22 十一月 2024 11:06:04 +0800 Subject: [PATCH] 会话保存问题优化 --- app/api/chat.py | 91 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 89 insertions(+), 2 deletions(-) diff --git a/app/api/chat.py b/app/api/chat.py index fe86fb5..b2486ab 100644 --- a/app/api/chat.py +++ b/app/api/chat.py @@ -5,13 +5,18 @@ import asyncio import websockets from sqlalchemy.orm import Session + +from Log import logger from app.api import get_current_user_websocket from app.config.config import settings from app.models.agent_model import AgentModel, AgentType from app.models.base_model import get_db from app.models.user_model import UserModel +from app.service.dialog import update_session_history +from app.service.basic import BasicService from app.service.ragflow import RagflowService from app.service.service_token import get_bisheng_token, get_ragflow_token +from app.service.session import SessionService router = APIRouter() @@ -53,7 +58,7 @@ if len(chat_history) == 0: chat_history = await ragflow_service.set_session(token, agent_id, message, chat_id, True) - print("chat_history------------------------", chat_history) + # print("chat_history------------------------", chat_history) if len(chat_history) == 0: result = {"message": "鍐呴儴閿欒锛氬垱寤轰細璇濆け璐�", "type": "close"} await websocket.send_json(result) @@ -91,11 +96,18 @@ complete_response = "" except json.JSONDecodeError as e: print(f"Error decoding JSON: {e}") - print(f"Response text: {text}") + # print(f"Response text: {text}") except Exception as e2: result = {"message": f"鍐呴儴閿欒锛� {e2}", "type": "close"} await websocket.send_json(result) print(f"Error process message of ragflow: {e2}") + 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 = [ asyncio.create_task(forward_to_ragflow()) @@ -190,6 +202,81 @@ await task except asyncio.CancelledError: pass + elif agent_type == AgentType.BASIC: + try: + service = BasicService(base_url=settings.basic_base_url) + while True: + # 鎺ユ敹鍓嶇娑堟伅 + message = await websocket.receive_json() + question = message.get("message") + try: + SessionService(db).create_session( + chat_id, + question, + agent_id, + AgentType.BASIC, + current_user.id + ) + except Exception as e: + logger.error(e) + if not question: + await websocket.send_json({"message": "Invalid request", "type": "error"}) + continue + logger.error(agent.type) + if agent.type == "questionTalk": + + try: + data = await service.questions_talk(question, chat_id) + output = data.get("output", "") + file_name = data.get("filename", "") + + 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, "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) + except Exception as e2: + + result = {"message": f"鍐呴儴閿欒锛� {e2}", "type": "close"} + logger.error(str(e2)) + logger.error(f"Error process message of basic chuti agent: {e2}") + await websocket.send_json(result) + + else: + async for data in service.excel_talk(question, chat_id): + output = data.get("output", "") + excel_name = data.get("excel_name", "") + image_name = data.get("image_name", "") + + def build_file_url(name, file_type): + if not name: + return None + return (f"/api/files/download/?agent_id={agent_id}&file_id={name}" + f"&file_type={file_type}") + excel_url = build_file_url(excel_name, 'excel') + image_url = build_file_url(image_name, 'image') + try: + SessionService(db).update_session(chat_id, message={"content": output, "role": "assistant"}) + except Exception as e: + logger.error(f"Unexpected error when update_session: {e}") + # 鍙戦�佺粨鏋滅粰瀹㈡埛绔� + data["type"] = "message" + data["message"] = output + data["excel_url"] = excel_url + data["image_url"] = image_url + await websocket.send_json(data) + except Exception as e: + logger.error(e) + await websocket.send_json({"message": "鍑虹幇閿欒锛�", "type": "error"}) + finally: + await websocket.close() + print(f"Client {agent_id} disconnected") else: ret = {"message": "Agent not found", "type": "close"} await websocket.send_json(ret) -- Gitblit v1.8.0