from fastapi import APIRouter, Depends, Request from sqlalchemy.orm import Session from pydantic import BaseModel from typing import Optional from database import get_db from models.chat import AIMessage from services.qwen_service import qwen_service import time router = APIRouter() class BuildPromptRequest(BaseModel): exam_type: str topic: str difficulty: str question_count: int @router.post("/exam/build_prompt") async def build_exam_prompt( request: Request, data: BuildPromptRequest, db: Session = Depends(get_db) ): """生成考试提示词 - 对齐Go版本函数名""" user = request.state.user if not user: return {"statusCode": 401, "msg": "未授权"} prompt = f"""请生成{data.question_count}道关于{data.topic}的{data.exam_type},难度为{data.difficulty}。""" return { "statusCode": 200, "msg": "success", "data": {"prompt": prompt} } class BuildSinglePromptRequest(BaseModel): question_type: str topic: str difficulty: str @router.post("/exam/build_single_prompt") async def build_single_question_prompt( request: Request, data: BuildSinglePromptRequest, db: Session = Depends(get_db) ): """生成单题提示词 - 对齐Go版本函数名""" user = request.state.user if not user: return {"statusCode": 401, "msg": "未授权"} prompt = f"""请生成1道关于{data.topic}的{data.question_type},难度为{data.difficulty}。""" return { "statusCode": 200, "msg": "success", "data": {"prompt": prompt} } class ModifyQuestionRequest(BaseModel): ai_conversation_id: int content: str @router.post("/re_modify_question") async def re_modify_question( request: Request, data: ModifyQuestionRequest, db: Session = Depends(get_db) ): """修改考试题目 - 实际修改ai_message表""" user = request.state.user if not user: return {"statusCode": 401, "msg": "未授权"} # 修改ai_message表中type='ai'的content result = db.query(AIMessage).filter( AIMessage.ai_conversation_id == data.ai_conversation_id, AIMessage.type == 'ai' ).update({"content": data.content}) if result == 0: return {"statusCode": 404, "msg": "消息不存在"} db.commit() return {"statusCode": 200, "msg": "success"} class ReproduceSingleQuestionRequest(BaseModel): ai_conversation_id: int regenerate_reason: str @router.post("/re_produce_single_question") async def re_produce_single_question( request: Request, data: ReproduceSingleQuestionRequest, db: Session = Depends(get_db) ): """重新生成单题""" user = request.state.user if not user: return {"statusCode": 401, "msg": "未授权"} # 获取原消息 message = db.query(AIMessage).filter( AIMessage.ai_conversation_id == data.ai_conversation_id, AIMessage.type == 'ai' ).first() if not message: return {"statusCode": 404, "msg": "消息不存在"} new_question = f"重新生成的题目(原因:{data.regenerate_reason})" return { "statusCode": 200, "msg": "success", "data": { "ai_conversation_id": data.ai_conversation_id, "new_question": new_question } }