exam.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from fastapi import APIRouter, Depends, Request
  2. from sqlalchemy.orm import Session
  3. from pydantic import BaseModel
  4. from typing import Optional
  5. from database import get_db
  6. from models.chat import AIMessage
  7. from services.qwen_service import qwen_service
  8. import time
  9. router = APIRouter()
  10. class BuildPromptRequest(BaseModel):
  11. exam_type: str
  12. topic: str
  13. difficulty: str
  14. question_count: int
  15. @router.post("/exam/build_prompt")
  16. async def build_exam_prompt(
  17. request: Request,
  18. data: BuildPromptRequest,
  19. db: Session = Depends(get_db)
  20. ):
  21. """生成考试提示词 - 对齐Go版本函数名"""
  22. user = request.state.user
  23. if not user:
  24. return {"statusCode": 401, "msg": "未授权"}
  25. prompt = f"""请生成{data.question_count}道关于{data.topic}的{data.exam_type},难度为{data.difficulty}。"""
  26. return {
  27. "statusCode": 200,
  28. "msg": "success",
  29. "data": {"prompt": prompt}
  30. }
  31. class BuildSinglePromptRequest(BaseModel):
  32. question_type: str
  33. topic: str
  34. difficulty: str
  35. @router.post("/exam/build_single_prompt")
  36. async def build_single_question_prompt(
  37. request: Request,
  38. data: BuildSinglePromptRequest,
  39. db: Session = Depends(get_db)
  40. ):
  41. """生成单题提示词 - 对齐Go版本函数名"""
  42. user = request.state.user
  43. if not user:
  44. return {"statusCode": 401, "msg": "未授权"}
  45. prompt = f"""请生成1道关于{data.topic}的{data.question_type},难度为{data.difficulty}。"""
  46. return {
  47. "statusCode": 200,
  48. "msg": "success",
  49. "data": {"prompt": prompt}
  50. }
  51. class ModifyQuestionRequest(BaseModel):
  52. ai_conversation_id: int
  53. content: str
  54. @router.post("/re_modify_question")
  55. async def re_modify_question(
  56. request: Request,
  57. data: ModifyQuestionRequest,
  58. db: Session = Depends(get_db)
  59. ):
  60. """修改考试题目 - 实际修改ai_message表"""
  61. user = request.state.user
  62. if not user:
  63. return {"statusCode": 401, "msg": "未授权"}
  64. # 修改ai_message表中type='ai'的content
  65. result = db.query(AIMessage).filter(
  66. AIMessage.ai_conversation_id == data.ai_conversation_id,
  67. AIMessage.type == 'ai'
  68. ).update({"content": data.content})
  69. if result == 0:
  70. return {"statusCode": 404, "msg": "消息不存在"}
  71. db.commit()
  72. return {"statusCode": 200, "msg": "success"}
  73. class ReproduceSingleQuestionRequest(BaseModel):
  74. ai_conversation_id: int
  75. regenerate_reason: str
  76. @router.post("/re_produce_single_question")
  77. async def re_produce_single_question(
  78. request: Request,
  79. data: ReproduceSingleQuestionRequest,
  80. db: Session = Depends(get_db)
  81. ):
  82. """重新生成单题"""
  83. user = request.state.user
  84. if not user:
  85. return {"statusCode": 401, "msg": "未授权"}
  86. # 获取原消息
  87. message = db.query(AIMessage).filter(
  88. AIMessage.ai_conversation_id == data.ai_conversation_id,
  89. AIMessage.type == 'ai'
  90. ).first()
  91. if not message:
  92. return {"statusCode": 404, "msg": "消息不存在"}
  93. new_question = f"重新生成的题目(原因:{data.regenerate_reason})"
  94. return {
  95. "statusCode": 200,
  96. "msg": "success",
  97. "data": {
  98. "ai_conversation_id": data.ai_conversation_id,
  99. "new_question": new_question
  100. }
  101. }