import uuid from uuid import UUID from fastapi import APIRouter, Depends import db.postgres as pg import utils.MyUtils as utils from agent.serviceAgent import get_service_agent_reply from config.security import get_user_id_from_token from llm.memLLM import take_memory from llm.titleChain import get_title from models.BaseResponse import BaseResponse from models.ChatRequest import ChatRequest serviceRouter = APIRouter() # 对话列表 @serviceRouter.get("/sessionsForService") def getSessions(user_id: UUID = Depends(get_user_id_from_token)): if not user_id: return {"error": "userId is required"} return BaseResponse(data=pg.get_sessions(user_id, "service")) # 对话 @serviceRouter.post("/chatForService") def chat(req: ChatRequest, user_id: UUID = Depends(get_user_id_from_token)): if not user_id: return {"error": "userId is required"} if not req.aiId: return {"error": "aiId is required"} sessionName = get_title(req.userInput) # 如果没有 sessionId 就新建 if not req.sessionId: isNewSession = True req.sessionId = str(uuid.uuid4()) pg.insert_session(user_id, req.aiId, req.sessionId, sessionName, "service") else: isNewSession = False pg.update_session_updated_at(req.sessionId) # 插入用户消息 pg.insert_message(req.sessionId, False, req.userInput) answer = get_service_agent_reply( aiId=req.aiId, history=pg.get_history_with_time(req.sessionId, 6), userInput=req.userInput, kn_bases=pg.get_ai_available_kn_bases(req.aiId), ) # 插入 AI 回复 pg.insert_message(req.sessionId, True, answer) # 异步执行:记忆判断 utils.async_new_task( take_memory, req.aiId, req.sessionId, user_id, ) return BaseResponse( data={ "sessionName": sessionName, "isNewSession": isNewSession, "content": answer, "sessionId": req.sessionId, } )