本项目是一个功能完善的全栈Web应用,旨在提供一个智能、高效的作业批改与处理平台。系统前端采用 React 构建,后端服务使用 TypeScript 和 Express 框架,实现了用户管理、多模态文件处理、AI 自动评分与反馈等一系列现代化功能。
# 1. 克隆仓库
git clone https://github.com/zjzj1206/AI-Grading-System.git
cd AI-Grading-System
# 2. 根据您的操作系统运行启动脚本
# Windows:
.\start-en.ps1
# macOS/Linux:
chmod +x start.sh && ./start.sh
# 3. 访问应用
# 前端: http://<your-ip>:5173
# 或在本机访问: http://localhost:5173注意: 首次运行前请确保已安装 Node.js 18+ 和 Tesseract OCR(用于图片文字识别)
- 用户认证系统:
- 用户注册与登录
- 基于 JWT (JSON Web Token) 的会话管理
- 个性化用户中心:
- 修改昵称: 用户可以随时更新自己的显示昵称。
- 修改头像: 支持图片上传和更换个人头像。
- API Key 管理: 用户可以在前端安全地输入并管理自己的第三方服务 API Key。
- 数据关联: 所有作业处理记录、个人资料和 API Key 都与特定用户账户关联。
- 智能作业处理:
- 多模态内容提交: 支持直接粘贴文本、上传图片、音频、视频及各类文档(
.txt,.pdf,.docx等)。 - 内容自动转换: 后端服务能将上传的非文本文件内容(如图片、音频)智能转换为文本。
- 图片文字识别: 集成 Tesseract OCR 引擎,支持中英文图片文字识别,当OCR失败时自动切换到AI视觉分析。
- AI 自动批改: 用户提交学生作业后,系统会调用大语言模型,根据预设的标准答案进行智能评分,并给出详细评语、优点和改进建议。
- 多模态内容提交: 支持直接粘贴文本、上传图片、音频、视频及各类文档(
- 现代化用户体验:
- 主题切换: 支持亮色、暗色、护眼三种主题模式,并能记住用户的选择。
- 响应式设计: 界面在桌面和移动设备上均有良好表现。
- 实时反馈: 通过消息提示、加载状态、进度条等方式,为用户提供清晰的操作反馈。
- 前端 (Frontend):
- 框架: React 19
- 构建工具: Vite
- UI 组件库: Ant Design 5.x
- 路由: React Router 7.x
- 状态管理: React Context
- 后端 (Backend -
grading):- 运行时: Node.js 18+
- 语言: TypeScript 5.x
- 框架: Express 4.x
- 数据库: SQLite (TypeORM)
- 用户认证: bcryptjs (密码哈希), jsonwebtoken (Token生成与验证)
- 中间件: CORS, Helmet, Compression, Rate Limiting
- 后端 (Backend -
conversion):- 运行时: Node.js 18+
- 语言: TypeScript 5.x
- 框架: Express 4.x
- OCR引擎: Tesseract OCR (node-tesseract-ocr)
- 图像处理: Sharp
- 文档处理: PDF-parse, Mammoth (DOCX), 等
- 功能: 独立的文档转换服务,支持多模态文件转文本
AI-Grading-System/
├── conversion/ # 负责多模态文件转文本的TypeScript服务
├── grading/ # 核心后端服务(用户、评分、API等)- TypeScript
├── frontend/ # 所有前端React代码
├── logs/ # 系统日志目录
├── start-en.ps1 # Windows PowerShell启动脚本
├── start.sh # macOS/Linux Bash启动脚本
├── stop.sh # macOS/Linux 停止脚本
└── README.md # 你正在阅读的文件
首先克隆项目到本地:
git clone https://github.com/zjzj1206/AI-Grading-System.git
cd AI-Grading-System在开始之前,请确保您的系统已安装以下软件:
- Node.js 18+ 和 npm
- Tesseract OCR (用于图片文字识别)
Windows 系统:
-
下载 Tesseract 安装程序:
- 访问 GitHub Tesseract Release 页面
- 下载适合您系统的安装程序(推荐:
tesseract-ocr-w64-setup-v5.3.0.20221214.exe)
-
安装 Tesseract:
- 运行下载的安装程序
- 安装时务必勾选"Additional language data"
- 或手动选择
Chinese - Simplified和Chinese - Traditional语言包
-
配置环境变量:
- 将 Tesseract 安装目录添加到系统 PATH 环境变量中
- 默认安装路径:
C:\Program Files\Tesseract-OCR
-
验证安装:
tesseract --version tesseract --list-langs
应该能看到
chi_sim(简体中文)和eng(英文)在语言列表中
macOS 系统:
-
使用 Homebrew 安装:
# 安装 Tesseract brew install tesseract # 安装中文语言包 brew install tesseract-lang
-
验证安装:
tesseract --version tesseract --list-langs
确认输出中包含
chi_sim和eng
Ubuntu/Debian 系统:
# 安装 Tesseract 和中文语言包
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-chi-sim tesseract-ocr-chi-tra
# 验证安装
tesseract --version
tesseract --list-langs注意事项:
- 如果
tesseract --list-langs中没有显示chi_sim,说明中文语言包未正确安装 - Windows 用户如果遇到环境变量问题,可能需要重启系统或命令行工具
- 确保 Tesseract 版本为 4.0+ 以获得最佳识别效果
根据您的操作系统选择对应的启动脚本:
Windows 系统:
# 使用 PowerShell 运行
.\start-en.ps1macOS/Linux 系统:
# 添加执行权限
chmod +x start.sh
# 运行启动脚本
./start.sh启动脚本会自动:
- 检查系统环境和依赖
- 安装所有必要的 npm 依赖
- 构建 TypeScript 项目
- 启动所有服务(后端 grading、conversion 和前端)
- 检查服务健康状态
- 在 macOS 上自动打开浏览器
Windows 系统:
- 可以直接关闭 PowerShell 启动的命令行窗口
macOS/Linux 系统:
# 停止所有服务
./stop.sh停止脚本会:
- 关闭所有相关进程
- 清理 PID 文件
- 可选择清理日志文件
如果您更喜欢手动控制每个服务,可以分别启动后端服务和前端开发服务器:
确保你的系统中已安装 Node.js 18+ 和 npm。
# 进入后端服务目录
cd grading
# 安装依赖
npm install
# 在 grading 目录下创建 .env 文件
# 并填入以下内容(请替换为你自己的密钥).env 文件内容:
# 服务端口
PORT=3000
# 用于生成和验证 JWT 的密钥,请修改为一个复杂的随机字符串
JWT_SECRET_KEY=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
# 用户需要在前端自行输入,这里可以留空,或作为备用
QWEN_API_KEY=
SILICONFLOW_API_KEY=
# 数据库配置
DB_TYPE=sqlite
DB_NAME=database.db# 编译TypeScript
npm run build
# 运行后端服务
npm start
# 或者开发模式(自动重启)
npm run dev在新开一个终端窗口中执行以下操作:
# 进入转换服务目录
cd conversion
# 安装依赖
npm install
# 在 conversion 目录下创建 .env 文件(可选)
# 如果不创建,服务将使用默认端口 5001conversion 服务 .env 文件内容(可选):
# 转换服务端口(默认:5001)
PORT=5001
# 日志级别(默认:info)
LOG_LEVEL=info
# Node 环境(默认:development)
NODE_ENV=development# 编译TypeScript
npm run build
# 运行转换服务
npm start
# 或者开发模式(自动重启)
npm run dev在新开一个终端窗口中执行以下操作:
# 进入前端目录
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev服务启动后,您可以通过以下地址访问:
- 前端界面: http://localhost:5173 (本机访问) 或 http://:5173 (公网访问)
- 后端 grading 服务: http://localhost:3000 (本机访问) 或 http://:3000 (公网访问)
- 后端 conversion 服务: http://localhost:5001 (本机访问) 或 http://:5001 (公网访问)
在浏览器中打开前端地址,即可看到项目界面并开始使用。系统会自动检测并适配不同的访问方式。
项目使用JavaScript和TypeScript进行开发,两个后端服务都配置了:
- 编译:
npm run build - 开发模式:
npm run dev - 代码检查:
npm run lint - 代码格式化:
npm run format
grading服务使用TypeORM管理SQLite数据库,实体定义在 src/entities/ 目录下。
后端 grading 服务提供了以下主要接口:
POST /api/auth/register: 用户注册POST /api/auth/login: 用户登录GET /api/user/profile: 获取当前用户信息PUT /api/user/profile: 更新用户信息(昵称、API Keys)POST /api/user/avatar: 上传头像POST /api/grading/standard-answer: 提交标准答案POST /api/grading/grade-homework: 提交学生作业进行批改GET /api/grading/models: 获取可用的AI模型列表
后端 conversion 服务提供文档转换接口:
POST /api/convert-to-text: 统一文件转文本接口- 支持图片格式:
.png,.jpg,.jpeg,.gif,.bmp,.tiff - 支持文档格式:
.pdf,.docx,.pptx - 支持文本格式:
.txt,.py,.java,.c,.cpp,.js,.ts,.html,.css,.json,.xml,.md,.log - 图片处理:先尝试 Tesseract OCR,失败时自动切换到 AI 视觉分析
- 需要提供有效的 API Key 用于 AI 服务调用
- 支持图片格式:
问题:macOS/Linux 上提示 "Permission denied" 错误
解决方案:
# 为脚本添加执行权限
chmod +x start.sh stop.sh
# 然后重新运行
./start.sh问题:Windows PowerShell 提示执行策略错误
解决方案:
# 临时允许脚本执行
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 然后运行脚本
.\start-en.ps1问题:服务启动后无法停止(macOS/Linux)
解决方案:
# 使用停止脚本
./stop.sh
# 或者手动查找并结束进程
ps aux | grep node
kill -9 <PID>
# 或者按端口查找进程
lsof -i :3000
lsof -i :5001
lsof -i :5173问题:图片上传后提示 "OCR失败" 或无法识别中文
解决方案:
-
确认 Tesseract 已正确安装:
tesseract --version
-
检查中文语言包:
tesseract --list-langs
确保输出中包含
chi_sim和eng -
Windows 用户检查环境变量:
- 确保 Tesseract 安装目录已添加到 PATH
- 重启命令行工具或系统
-
如果问题持续存在,系统会自动切换到 AI 视觉分析模式
问题:启动时提示端口被占用
解决方案:
-
检查端口占用情况:
# Windows netstat -an | findstr :3000 netstat -an | findstr :5001 netstat -an | findstr :5173 # macOS/Linux lsof -i :3000 lsof -i :5001 lsof -i :5173
-
结束占用端口的进程或修改配置文件中的端口设置
问题:npm install 失败
解决方案:
-
清理 npm 缓存:
npm cache clean --force
-
删除 node_modules 并重新安装:
rm -rf node_modules package-lock.json npm install
-
使用国内镜像源:
npm config set registry https://registry.npmmirror.com
问题:上传的临时文件没有被清理
这通常是由于:
- 文件被其他进程锁定(如杀毒软件扫描)
- 磁盘权限问题
- OCR 处理过程中的异常
系统已经实现了自动清理机制,如果发现 uploads 目录中有残留文件,可以手动删除。
欢迎对本项目进行贡献!你可以通过以下方式参与:
- 提出 Issue 来报告 Bug 或建议新功能。
- Fork 本仓库,创建你自己的分支,然后提交 Pull Request。
本项目采用 MIT License 开源许可证。