Files
2025-12-29 16:30:36 +08:00

70 lines
2.0 KiB
Python

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")
async 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")
async 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,
}
)