From 7305b7b9c88be497452e4dcf8b70decef0353bad Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 19 十一月 2024 21:55:46 +0800 Subject: [PATCH] 发送问答消息时创建会话记录 --- app/models/__init__.py | 12 +++++ app/models/session_model.py | 7 +-- app/api/chat.py | 7 +++ app/service/session.py | 80 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 5 deletions(-) diff --git a/app/api/chat.py b/app/api/chat.py index a42c819..e0abd8d 100644 --- a/app/api/chat.py +++ b/app/api/chat.py @@ -14,6 +14,7 @@ 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() @@ -203,6 +204,12 @@ # 鎺ユ敹鍓嶇娑堟伅 message = await websocket.receive_json() question = message.get("message") + SessionService(db).create_session( + session_id=chat_id, + name=question, + agent_id=agent_id, + agent_type=AgentType.BASIC + ) if not question: await websocket.send_json({"message": "Invalid request", "type": "error"}) continue diff --git a/app/models/__init__.py b/app/models/__init__.py index 1ec93e6..008613d 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -1,3 +1,7 @@ +from zoneinfo import ZoneInfo + +import pytz + from .agent_model import * from .dialog_model import * from .group_model import * @@ -6,4 +10,10 @@ from .organization_model import * from .resource_model import * from .role_model import * -from .user_model import * \ No newline at end of file +from .user_model import * + + +# 鑾峰彇褰撳墠鏃跺尯鐨勬椂闂� +def current_time(): + tz = pytz.timezone('Asia/Shanghai') + return datetime.now(tz) diff --git a/app/models/session_model.py b/app/models/session_model.py index 21bfb7e..44d0b74 100644 --- a/app/models/session_model.py +++ b/app/models/session_model.py @@ -3,7 +3,7 @@ from enum import IntEnum from sqlalchemy import Column, String, Enum as SQLAlchemyEnum, Integer, DateTime -from app.models import AgentType +from app.models import AgentType, current_time from app.models.base_model import Base @@ -13,9 +13,8 @@ name = Column(String(255)) agent_id = Column(String(255)) agent_type = Column(SQLAlchemyEnum(AgentType), nullable=False) # 鐩墠鍙瓨basic鐨勶紝ragflow鍜宐isheng鐨勮皟鎺ュ彛鑾峰彇 - create_date = Column(DateTime) # 鍒涘缓鏃堕棿 - update_date = Column(DateTime) # 鏇存柊鏃堕棿 - + create_date = Column(DateTime, default=current_time) # 鍒涘缓鏃堕棿锛岄粯璁ゅ�间负褰撳墠鏃跺尯鏃堕棿 + update_date = Column(DateTime, default=current_time, onupdate=current_time) # 鏇存柊鏃堕棿锛岄粯璁ゅ�间负褰撳墠鏃跺尯鏃堕棿锛屾洿鏂版椂鑷姩鏇存柊 # to_dict 鏂规硶 def to_dict(self): return { diff --git a/app/service/session.py b/app/service/session.py new file mode 100644 index 0000000..b3b698f --- /dev/null +++ b/app/service/session.py @@ -0,0 +1,80 @@ +from sqlalchemy.orm import Session + +from app.models import AgentType +from app.models.session_model import SessionModel + + +class SessionService: + def __init__(self, db: Session): + self.db = db + + def create_session(self, session_id: str, name: str, agent_id: str, agent_type: AgentType) -> SessionModel: + """ + 鍒涘缓涓�涓柊鐨勪細璇濊褰曘�� + + 鍙傛暟: + session_id (str): 浼氳瘽ID銆� + name (str): 浼氳瘽鍚嶇О銆� + agent_id (str): 浠g悊ID銆� + agent_type (AgentType): 浠g悊绫诲瀷銆� + + 杩斿洖: + SessionModel: 鏂板垱寤虹殑浼氳瘽妯″瀷瀹炰緥锛屽鏋滀細璇滻D宸插瓨鍦ㄥ垯杩斿洖None銆� + """ + existing_session = self.get_session_by_id(session_id) + if existing_session: + return None # 濡傛灉浼氳瘽ID宸插瓨鍦紝涓嶈繘琛屼换浣曟搷浣� + + new_session = SessionModel( + id=session_id, + name=name, + agent_id=agent_id, + agent_type=agent_type + ) + self.db.add(new_session) + self.db.commit() + self.db.refresh(new_session) + return new_session + + def get_session_by_id(self, session_id: str) -> SessionModel: + """ + 鏍规嵁浼氳瘽ID鑾峰彇浼氳瘽璁板綍銆� + + 鍙傛暟: + session_id (str): 浼氳瘽ID銆� + + 杩斿洖: + SessionModel: 鏌ユ壘鍒扮殑浼氳瘽妯″瀷瀹炰緥锛屽鏋滄湭鎵惧埌鍒欒繑鍥濶one銆� + """ + return self.db.query(SessionModel).filter_by(id=session_id).first() + + def update_session(self, session_id: str, **kwargs) -> SessionModel: + """ + 鏇存柊浼氳瘽璁板綍銆� + + 鍙傛暟: + session_id (str): 浼氳瘽ID銆� + kwargs: 闇�瑕佹洿鏂扮殑瀛楁鍙婂叾鍊笺�� + + 杩斿洖: + SessionModel: 鏇存柊鍚庣殑浼氳瘽妯″瀷瀹炰緥銆� + """ + session = self.get_session_by_id(session_id) + if session: + for key, value in kwargs.items(): + setattr(session, key, value) + self.db.commit() + self.db.refresh(session) + return session + + def delete_session(self, session_id: str) -> None: + """ + 鍒犻櫎浼氳瘽璁板綍銆� + + 鍙傛暟: + session_id (str): 浼氳瘽ID銆� + """ + session = self.get_session_by_id(session_id) + if session: + self.db.delete(session) + self.db.commit() \ No newline at end of file -- Gitblit v1.8.0