AI作业批改配置:从零搭建自动批改服务的完整步骤
想自己搭一套AI作业批改服务,核心工作其实分三块:准备一台能跑Python的服务器、接上可用的模型接口、把批改程序用Web服务跑起来并配好反向代理。
下面按零基础也能照做的顺序展开,环境以常见的Ubuntu 22.04加Python 3.10为例,其他发行版命令略有差异,思路一致。
先确认服务器和模型接口是否就绪
动手前需要准备三样东西:
一台有公网IP的Linux服务器(建议2核4G起步,
模型调用走API时对本地算力要求不高)、
一个可用的模型API Key(或本地部署的模型服务地址)、
一个域名(可选,
用于HTTPS访问)。
登录服务器后先检查基础环境:
cat /etc/os-release
python3 --version
pip3 --version
如果Python版本低于3.9,建议用apt install python3.10升级或改用pyenv管理。
接着安装虚拟环境和常用依赖:
apt update
apt install -y python3-venv python3-pip nginx
避坑点:不要直接用系统Python全局安装批改程序的依赖,容易和系统包冲突。
后面统一用虚拟环境隔离。
部署批改程序并配置模型参数
假设批改程序是一个Python Web应用(Flask或FastAPI均可),先创建独立目录和虚拟环境:
mkdir -p /opt/ai-grader && cd /opt/ai-grader
python3 -m venv venv
source venv/bin/activate
pip install flask requests gunicorn
把批改程序代码放到/opt/ai-grader/app.py,关键配置通过环境变量注入,避免硬编码密钥。
新建配置文件:
cat > /opt/ai-grader/.env <<'EOF'
MODEL_API_BASE=https://你的模型服务地址/v1
MODEL_API_KEY=你的API密钥
MODEL_NAME=你的模型名称
GRADER_PORT=8000
EOF
程序启动时读取这些变量,
例如在app.py中用os.environ.get("MODEL_API_KEY")获取。不要把API Key提交到代码仓库或写进前端页面。
如果批改程序需要读取学生提交的作业文件,提前建好上传目录并赋予运行用户写权限:
mkdir -p /opt/ai-grader/uploads
chown -R www-data:www-data /opt/ai-grader/uploads
用Gunicorn托管并配好Nginx入口
开发环境用flask run可以,生产环境建议用Gunicorn托管。
先手动测试启动:
cd /opt/ai-grader && source venv/bin/activate
gunicorn -w 2 -b 127.0.0.1:8000 app:app
看到Listening at: http://127.0.0.1:8000说明程序已跑起来。
用curl验证接口:
curl -X POST http://127.0.0.1:8000/grade -H "Content-Type: application/json" -d '{"answer":"测试答案"}'
返回批改结果即表示模型接口调用正常。
接着配置systemd让服务开机自启:
cat > /etc/systemd/system/ai-grader.service <<'EOF'
[Unit]
Description=AI Grader Service
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/ai-grader
EnvironmentFile=/opt/ai-grader/.env
ExecStart=/opt/ai-grader/venv/bin/gunicorn -w 2 -b 127.0.0.1:8000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now ai-grader
systemctl status ai-grader
最后配置Nginx反向代理,把外部请求转发到本机8000端口。
在/etc/nginx/sites-available/ai-grader中写入:
server {
listen 80;
server_name 你的域名;
client_max_body_size 20m;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启用站点并重载:
ln -s /etc/nginx/sites-available/ai-grader /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
常见报错与避坑清单
配置过程中最容易卡在几个地方,提前留意能省不少时间。
- 502 Bad Gateway:通常是Gunicorn没启动或端口不对。先
systemctl status ai-grader看服务状态,再curl 127.0.0.1:8000确认本地端口是否通。 - 模型接口返回401或403:检查
.env里的MODEL_API_KEY是否被正确加载,systemd服务需要EnvironmentFile指向该文件,修改后要systemctl restart ai-grader。 - 上传大文件失败:Nginx默认限制1MB,需在server块加
client_max_body_size,同时确认批改程序本身的文件大小限制。 - 中文乱码或评分格式错乱:确认请求和响应都使用UTF-8编码,Nginx配置中可加
charset utf-8;。 - 权限问题导致上传目录不可写:运行用户为
www-data时,确保/opt/ai-grader/uploads属主正确,否则批改请求会报500。
另一个容易忽略的点:如果模型服务在国内访问较慢,Gunicorn的worker超时时间可能需要调大,在启动参数中加--timeout 120,避免长文本批改被中断。
验证批改效果和运行状态
配置完成后,从外网访问http://你的域名/,提交一份样例题,观察是否返回评分和评语。
建议同时检查三项:
- 服务日志:
journalctl -u ai-grader -f,确认每次请求都有正常响应记录。 - Nginx访问日志:
tail -f /var/log/nginx/access.log,确认请求状态码为200。 - 模型调用耗时:如果批改程序记录了耗时,观察单次请求是否在可接受范围内,超时请求会体现在Gunicorn日志中。
如果后续需要HTTPS,可用certbot --nginx申请证书,注意域名已解析到服务器。
整套AI作业批改配置跑通后,再根据实际作业量调整Gunicorn的worker数量和模型并发限制,避免高峰期请求堆积。
两个常见疑问
批改程序必须用GPU服务器吗? 不一定。
如果模型调用走外部API,普通CPU服务器即可;
只有本地部署大模型时才需要GPU,且要按模型显存要求选卡,具体以模型官方文档为准。
配置改完后需要重启哪些服务? 修改.env或程序代码后重启ai-grader;
只改Nginx配置则执行nginx -t && systemctl reload nginx即可,不必重启系统。
整套流程的核心是隔离运行环境、密钥走环境变量、入口统一由Nginx管理。
按上面的步骤逐项检查,遇到异常优先看服务状态和日志,多数配置问题都能定位到具体环节。