70 lines
2.0 KiB
Python
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")
|
|
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,
|
|
}
|
|
)
|