1.项目简介
该项目是基于deepseek大语言模型的历史主题的线上考试学习系统。在构建该项目时,我们首先进行了需求分析,经过讨论,我们将项目功能列举:
1.老师在出题时工作量大,需要先人工出题后录入题库系统,且题库需要周期性更新。为解决此问题,我们使用大语言模型,基于每个单元的知识点和史料,自动生成对应知识点的相关题目。
2.在评卷过程中,客观题老师是将答案录入考试系统,但是主观题需要人工评判。我们使用大模型在生成题目的时候同时生成答案。使用程序自动对于学生的答案做成评价。
3.学生反馈不足,学生只是获得了自己的答卷情况,而无法根据答卷情况确定后续学习方向。我们使用大模型根据学生的答题情况指定个性化的学习指导。
因此整个项目的目标可分为三个方向:题目生成智能化,题目测评智能化,答题建议个性化。
2.整体设计
我们初步设计老师端有考试管理模块,学生管理模块,成绩管理模块,知识管理模块四大模块。由于核心功能为出题和答题,我们先对考试管理模块进行开发。
3.出题模块设计
我们的系统面向用户角色有学生和教师,教师端的主要功能是对于学生进行管理(非主要功能),出题,查看答题情况等。学生端的主要功能就是做题和取得反馈。因此我们采取增量式的思想,对于项目进行开发,我们计划先完成主要的教师出题功能。我们计划老师可以选择的参数为客观题的数目,问答题的数目,材料题的数目,简单,中档,困难等难度百分比以及考试的单元范围。出题模块主要前期我们需要的表为教师表,学生表,考试表(主要记录以上出题的参数),以及题目表。我们对于不同的题型分别建立一个表,里面主要储存题目,以及相应的答案,为后续评卷,给出建议做准备。我们整理了按单元,按课程整理知识点,历史资料。老师选择题目对应的单元后,会随机取出相应的知识点,历史资料并根据其生成内容。目前基于脚手架已完成对于出题部分的设计。我们使用vue框架来搭建我们的前端。该模块我们使用el-form组件完成
<template>
<div class="add">
<el-row :gutter="30">
<el-col :span="8">
<el-form ref="form" :model="DTA.form" label-width="60px">
<el-form-item label="试卷名称" :label-style="{ fontSize: '8px' }">
<el-input v-model="DTA.form.source" style="width: 70%;"></el-input>
</el-form-item>
<el-form-item label="介绍">
<el-input v-model="DTA.form.description" style="width: 70%;" ></el-input>
</el-form-item>
<el-form-item label="考试日期">
<el-date-picker
placeholder="选择日期"
v-model="DTA.form.examDate"
style="width: 70%;"
></el-date-picker>
</el-form-item>
<el-form-item label="持续时间">
<el-input v-model="DTA.form.totalTime" style="width: 70%;" ></el-input>
</el-form-item>
<el-form-item label="考生提示">
<el-input type="textarea" v-model="DTA.form.tips" style="width: 70%;"></el-input>
</el-form-item>
</el-form>
</el-col>
<el-col :span="8">
<el-form>
<el-form-item label="试卷类型">
<el-select v-model="DTA.info.type" placeholder="请选择试卷科目" style="width: 70%;">
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="简单题占比">
<el-input v-model="DTA.info.simple" placeholder style="width: 70%;" ></el-input>
</el-form-item>
<el-form-item label="中档题占比">
<el-input v-model="DTA.info.normal" placeholder style="width: 70%;"></el-input>
</el-form-item>
<el-form-item label="困难题占比">
<el-input v-model="DTA.info.diff" placeholder style="width: 70%;"></el-input>
</el-form-item>
<el-form-item label="客观题数量">
<el-input v-model="DTA.info.num1" placeholder="请输入客观题数量" style="width: 70%;"></el-input>
</el-form-item>
<el-form-item label="问答题数量">
<el-input v-model="DTA.info.num2" placeholder="请输入问答题数量" style="width: 70%;" ></el-input>
</el-form-item>
<el-form-item label="材料题数量">
<el-input v-model="DTA.info.num3" placeholder="请输入材料题数量" style="width: 70%;" ></el-input>
</el-form-item>
</el-form>
</el-col>
<el-col :span="8">
<!-- <el-form>
<el-form-item label="考试范围" style="margin-bottom: 20px;">
<el-input v-model="DTA.info.theme" placeholder="请输入考试范围" style="width: 70%;"></el-input>
</el-form-item>
<el-form-item style="margin-bottom: 20px;">
<el-button type="primary" @click="onSubmit()">立即创建</el-button>
<el-button type="text" @click="cancel()">取消</el-button>
</el-form-item>
</el-form> -->
<el-form>
<el-form-item
label="考试范围"
style="margin-bottom: 400px;">
<el-input
v-model="DTA.info.theme"
placeholder="请输入考试范围"
style="width: 70%;">
</el-input>
</el-form-item>
<el-form-item style="margin-top: 360px;">
<el-button type="primary" @click="onSubmit()">立即创建</el-button>
<el-button type="text" @click="cancel()">取消</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
data() {
return {
DTA: {
form: { //表单数据初始化
source: '',
description: '',
institute: '',
major: '',
grade: '',
examDate: '',
totalTime: '',
totalScore: '',
type: '',
tips: '',
paperId: '',
},
info: {
type: '',
simple: '',
normal: '',
diff: '',
num1: '',
num2: '',
num3: '',
theme: ''
}
},
activeName: "first",
typeOptions: [
{ value: "历史", label: "历史" },
{ value: "地理", label: "地理" },
{ value: "政治", label: "政治" },
],
};
},
// created() {
// this.getParams()
// },
methods: {
formatTime(date) {
//日期格式化
let year = date.getFullYear();
let month =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
let day =
date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
let hours =
date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
let minutes =
date.getMinutes() < 10
? "0" + date.getMinutes()
: date.getMinutes();
let seconds =
date.getSeconds() < 10
? "0" + date.getSeconds()
: date.getSeconds();
// 拼接
return (
year +
"-" +
month +
"-" +
day +
" " +
hours +
":" +
minutes +
":" +
seconds
);
},
onSubmit() {
if(this.DTA.form.examDate!='')
{let examDate = this.formatTime(this.DTA.form.examDate);
this.DTA.form.examDate = examDate.substr(0, 10);}
this.$axios(`/api/examManagePaperId`).then((res) => {
this.DTA.form.paperId = res.data.data.paperId + 1; //实现paperId自增1
this.$axios({
url: "/api/exam",
method: "post",
data: {
...this.DTA,
},
}).then((res) => {
if (res.data.code == 200) {
this.$message({
message: "数据添加成功",
type: "success",
});
this.$router.push({ path: "/selectExam" });
}
});
});
},
cancel() {
//取消按钮
this.DTA.form = {};
this.DTA.info = {};
},
back() {}, },
};
</script>
由此制作出老师出题页面,后续会进一步进行优化。
data() {
return {
//新建一个数据结构,来传递相关试卷的参数
info: {}}}
通过info这种数据结构将试卷要求传入后端由后端接收。
效果如图
后端接受到前端传回的考试要求后,将考试的参数传入模型脚本调用函数,调用模型生成对应的试卷,并按照要求存入数据库中。