创新实训开发日志5--功能扩展
·
基于前面已经开发好的刷题功能前后端,本周主要实现了利用ai生成相似题的功能。
一、功能目的
在已完成的408考研刷题系统基础上,集成智谱AI大模型,实现根据当前题目自动生成相似选择题的功能,以丰富专项刷题模块的练习资源,提升学习效果。
二、技术原理
1.大模型选择:选用智谱AI的 GLM-4-Flash-250414 模型
2.提示词选用
生成相似题的核心在于设计高质量的提示词,主要包含以下要素:
- 角色设定:扮演408考研出题老师
- 输入信息:原题内容、选项、正确答案、知识点、题型
- 输出约束:明确指定输出JSON数组格式,包含
content(题目内容)、options(四个选项)、answer(正确答案)、analysis(解析)、knowledge_point(知识点) - 内容要求:保持相同题型、相同知识点、相同难度,不得与原题重复
3.异步与异常处理
AI API调用具有不确定性(网络延迟、模型限流、输出格式错误等)。后端做了两重保障:
- 超时控制:设置30秒超时,避免长期阻塞。
- 降级策略:若AI调用失败或返回JSON解析失败,则返回基于知识点的数据库相似题(
_fallback_similar_questions),保证用户体验不中断。
三、功能实现
1.整体架构
系统规划采用“前端请求 → 后端代理 → AI API”三层结构:
- 前端:用户提交答案后,点击“AI生成相似题”按钮,携带当前题目ID发起HTTP请求。
- 后端:接收到请求后,从MySQL数据库查询原题的完整信息(题干、选项、标准答案、知识点等),构造特定的提示词,调用智谱AI的对话补全接口。
- AI服务:GLM-4-Flash-250414模型根据提示词生成指定数量、符合格式要求的相似题(JSON数组),返回给后端。
- 后端解析:将AI返回的文本解析为Python对象,进行格式校验和补全,最后返回给前端。
- 前端展示:相似题列表显示在卡片底部,点击任意题目可弹窗进行独立练习(用户选择选项、提交、获得批改结果)。
2.后端设计
- 采用服务分层设计:
- AI服务层 (
ai_service.py):封装智谱SDK,提供generate_similar_questions方法。def generate_similar_questions(self, original_question, count): prompt = self._build_prompt(original_question, count) response = self.client.chat.completions.create( model="GLM-4-Flash-250414", messages=[{"role": "user", "content": prompt}], response_format={"type": "json_object"} ) return self._parse_response(response) - API层 (
practice_api.py):新增/ai/similar-questions路由,接收题目ID和生成数量,调用AI服务并返回结果。 - 依赖注入:通过FastAPI的
Depends将AI服务注入路由,便于测试和替换。
2.前端交互
在 QuestionCard.vue 组件中:
- 用户提交答案后,显示“AI生成相似题”按钮。
- 点击后发起异步请求,显示loading状态。
- 收到响应后,将生成的题目列表渲染在卡片下方。
- 点击题目支持做题并ai批改生成解析。
因为生成的相似题是AI生成且都为选择题,所以决定采用前端模拟批改:前端根据标准答案判断正确性,解析直接使用AI返回的analysis。
// 打开相似题弹窗
const openSimilarQuestionDialog = (question) => {
currentSimilarQuestion.value = question
// 重置弹窗内的答题状态
similarUserAnswer.value = ''
similarSubmitted.value = false
similarResult.value = null
similarDialogVisible.value = true
}
// 提交相似题答案(前端判卷)
const submitSimilarAnswer = () => {
if (!similarUserAnswer.value) {
ElMessage.warning('请选择一个选项')
return
}
const correctAnswer = currentSimilarQuestion.value.answer
const isCorrect = (similarUserAnswer.value === correctAnswer)
const fullScore = 2
const score = isCorrect ? fullScore : 0
similarResult.value = {
is_correct: isCorrect,
score: score,
full_score: fullScore,
correct_answer: correctAnswer,
analysis: currentSimilarQuestion.value.analysis || '暂无解析'
}
similarSubmitted.value = true
}
四、测试
经实际运行,用户在点击“AI生成相似题”按钮后通常响应时间有5秒左右,耗时较长、等待感受明显。但整体运行顺畅,能够实现根据卡片题目生成相似题,且知识点、题型重合度较高。后期可针对响应时间较长这一问题进行优化。
五、后续计划
实现对收藏题目的数据统计与分析,根据收藏题目的科目、知识点生成数据统计与分析图表。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)