API 参考

文件上传接口

上传模块提供 PDF、图片、语音和文本四种内容录入方式,所有上传接口均会调用 AI 自动提取题目,挂载于 /api/upload所有接口均需认证。

文件上传接口使用 multipart/form-data 格式,单文件最大 10 MB(可通过 MAX_FILE_SIZE 环境变量调整)。上传超时时间为 120 秒(因 AI 解析较慢)。

上传 PDF

POST /api/upload/pdf 🤖 AI · multipart/form-data

上传 PDF 文件,服务端使用 pdf-parse 提取文字,再调用 AI 识别并结构化题目。

请求体(multipart/form-data)

字段类型说明
fileFile必填,PDF 文件,最大 10MB
subjectstring可选,科目名称,默认"未知科目"

成功响应 200

{
  "success": true,
  "message": "PDF解析成功",
  "data": {
    "fileId": "uuid",
    "text": "第一章 函数\n1. 下列函数中...",   // 前2000字
    "extractedQuestions": [
      {
        "title": "函数判断题",
        "content": "下列哪个是函数?",
        "question_type": "multiple_choice",
        "options": ["A. y²=x", "B. y=x²", "C. |y|=x", "D. y=±x"],
        "correct_answer": "B",
        "explanation": "函数要求一个x对应唯一y...",
        "difficulty": "easy",
        "topic": "函数定义"
      }
    ]
  }
}

前端调用示例

const formData = new FormData();
formData.append('file', pdfFile);
formData.append('subject', '数学');

await uploadAPI.uploadPDF(pdfFile, '数学');
// 等价于:
await axios.post('/api/upload/pdf', formData, {
  headers: { 'Content-Type': 'multipart/form-data' },
  timeout: 120000
});

上传图片(OCR 识别)

POST /api/upload/image 🤖 GPT-4V · multipart/form-data

上传图片(截图、拍照等),通过 GPT-4 Vision API 识别图片中的题目文字。

请求体(multipart/form-data)

字段类型说明
fileFile必填,支持 .jpg / .jpeg / .png
subjectstring可选,科目名称
图片 OCR 需要 AI 模型支持 Vision(多模态)能力。若使用 DeepSeek 或不支持 Vision 的模型,该接口将返回错误。建议使用 gpt-4ogpt-4-vision-preview

上传音频(语音转文字)

POST /api/upload/audio 🤖 Whisper ASR · multipart/form-data

上传音频文件,通过 OpenAI Whisper API 转为中文文字,再提取题目。

请求体(multipart/form-data)

字段类型说明
fileFile必填,支持 .mp3 / .wav / .m4a
subjectstring可选,科目名称
语音识别使用 OpenAI Whisper API(whisper-1 模型),目前仅 OpenAI 官方 API 支持。使用第三方兼容 API 时,该功能可能不可用。

文本直接解析

POST /api/upload/text 🤖 AI · application/json

直接提交文本内容,AI 识别并提取其中的题目。无需文件上传,使用标准 JSON 请求体。

请求体

{
  "text": "1.已知函数f(x)=x²-2x+3,求f(2)的值\n\n2.化简:(a+b)²-2ab",
  "subject": "数学"
}

成功响应 200

{
  "success": true,
  "data": {
    "extractedQuestions": [
      {
        "title": "函数值计算",
        "content": "已知函数f(x)=x²-2x+3,求f(2)的值",
        "question_type": "calculation",
        "correct_answer": "3",
        "explanation": "f(2) = 4-4+3 = 3",
        "difficulty": "easy",
        "topic": "函数求值"
      }
    ]
  }
}

获取上传记录

GET /api/upload/history

返回当前用户最近 50 条上传记录。

成功响应 200

{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "original_name": "数学试卷.pdf",
      "file_type": "pdf",
      "file_size": 524288,
      "status": "completed",    // pending / processing / completed / failed
      "created_at": "2024-01-15T08:00:00.000Z"
    }
  ]
}