From a17252c1d624adf2eb50d581899ec2aa5b1b020f Mon Sep 17 00:00:00 2001 From: GuoQing Zhang Date: Thu, 20 Jun 2024 11:59:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8A=80=E8=83=BD=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E6=97=B6=E5=86=99=E5=AE=A1=E8=AE=A1=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/bisheng/api/services/audit_log.py | 26 ++++++++++++++++++- src/backend/bisheng/chat/manager.py | 14 +++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/backend/bisheng/api/services/audit_log.py b/src/backend/bisheng/api/services/audit_log.py index 2f15ac0f..addfb924 100644 --- a/src/backend/bisheng/api/services/audit_log.py +++ b/src/backend/bisheng/api/services/audit_log.py @@ -1,10 +1,12 @@ from typing import Any +from uuid import UUID from loguru import logger from bisheng.api.services.user_service import UserPayload from bisheng.database.models.audit_log import AuditLog, SystemId, EventType, ObjectType, AuditLogDao from bisheng.database.models.assistant import AssistantDao +from bisheng.database.models.flow import FlowDao from bisheng.database.models.group_resource import GroupResourceDao, ResourceTypeEnum from bisheng.api.errcode.base import UnAuthorizedError from bisheng.api.v1.schemas import resp_200 @@ -36,7 +38,7 @@ def create_chat_assistant(cls, user: UserPayload, ip_address: str, assistant_id: 新建助手会话的审计日志 """ # 获取助手所属的分组 - assistant_info = AssistantDao.get_one_assistant(assistant_id) + assistant_info = AssistantDao.get_one_assistant(UUID(assistant_id)) groups = GroupResourceDao.get_resource_group(ResourceTypeEnum.ASSISTANT, assistant_info.id.hex) group_ids = [one.group_id for one in groups] audit_log = AuditLog( @@ -52,3 +54,25 @@ def create_chat_assistant(cls, user: UserPayload, ip_address: str, assistant_id: ) AuditLogDao.insert_audit_logs([audit_log]) logger.info(f"act=create_chat_assistant user={user.user_name} assistant={assistant_id}") + + @classmethod + def create_chat_flow(cls, user: UserPayload, ip_address: str, flow_id: str): + """ + 新建技能会话的审计日志 + """ + flow_info = FlowDao.get_flow_by_id(flow_id) + groups = GroupResourceDao.get_resource_group(ResourceTypeEnum.FLOW, flow_info.id.hex) + group_ids = [one.group_id for one in groups] + audit_log = AuditLog( + operator_id=user.user_id, + operator_name=user.user_name, + group_ids=group_ids, + system_id=SystemId.CHAT.value, + event_type=EventType.CREATE_CHAT.value, + object_type=ObjectType.FLOW.value, + object_id=flow_info.id.hex, + object_name=flow_info.name, + ip_address=ip_address, + ) + AuditLogDao.insert_audit_logs([audit_log]) + logger.info(f"act=create_chat_flow user={user.user_name} flow={flow_id}") diff --git a/src/backend/bisheng/chat/manager.py b/src/backend/bisheng/chat/manager.py index 4f928b75..9bb1dbd1 100644 --- a/src/backend/bisheng/chat/manager.py +++ b/src/backend/bisheng/chat/manager.py @@ -10,6 +10,7 @@ from loguru import logger from fastapi import WebSocket, WebSocketDisconnect, status, Request +from bisheng.api.services.audit_log import AuditLogService from bisheng.api.services.user_service import UserPayload from bisheng.api.utils import build_flow_no_yield from bisheng.api.v1.schemas import ChatMessage, ChatResponse, FileResponse @@ -21,7 +22,8 @@ from bisheng.chat.utils import process_node_data from bisheng.database.base import session_getter from bisheng.database.models.flow import Flow -from bisheng.database.models.user import User +from bisheng.database.models.message import ChatMessageDao +from bisheng.database.models.user import User, UserDao from bisheng.processing.process import process_tweaks from bisheng.utils.threadpool import ThreadPoolManager, thread_pool from bisheng.utils.util import get_cache_key @@ -394,6 +396,16 @@ async def _process_when_payload(self, flow_id: str, chat_id: str, start_resp = ChatResponse(type='begin', category='system', **base_param) if is_begin: await self.send_json(flow_id, chat_id, start_resp) + # 判断下是否是首次创建会话 + if chat_id: + res = ChatMessageDao.get_messages_by_chat_id(chat_id=chat_id) + if len(res) <= 1: # 说明是新建会话 + websocket = self.active_connections[key] + login_user = UserPayload(**{ + "user_id": user_id, + "user_name": UserDao.get_user(user_id).user_name, + }) + AuditLogService.create_chat_flow(login_user, websocket.client.host, flow_id) start_resp.type = 'start' # should input data