1. 项目背景与痛点分析
作为一名参与过多个教育考试系统开发的架构师,我深知试卷自动生成系统的核心难点不在于"能不能实现",而在于"如何在大规模题库下保持高效稳定"。去年我们团队接手某省单招考试系统升级时,就遇到了V1版本系统的典型瓶颈。
V1版本采用业界常见的暴力抽题模式,这种设计在题库规模较小时(比如1万题以内)尚能应付。但随着合作院校增加,题库快速膨胀到20万+题目,覆盖8个专业大类、47本教材时,问题开始集中爆发:
- 性能断崖式下跌:每次生成试卷都需要全量扫描题库,平均耗时从最初的2秒飙升到17秒,高峰期甚至触发超时
- 考纲匹配失真:由于缺乏前置筛选,经常出现"单选题占比超标但综合题不足"的结构性失衡
- 异常处理缺失:当某专业题库更新不及时时,系统仍会强行抽题导致试卷不完整
关键发现:测试数据显示,当题库超过5万题时,V1版本的抽题耗时与题量呈线性正相关(R²=0.98),这在大数据场景下是不可接受的
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 架构设计核心思想
2.1 分层过滤理念
V2版本的核心创新在于将"抽题"这个原子操作拆解为可量化的计算过程。我们借鉴了大数据领域的MapReduce思想,设计出五层处理流水线:
code复制[教材维度统计] → [跨教材聚合] → [动态权重计算] → [分布生成] → [精准抽取]
这种设计带来两个关键优势:
- 计算前置化:80%的运算量在抽题前已完成
- 范围最小化:最终抽题只需在预计算的题目池中进行
2.2 关键数据结构
为实现高效统计,我们设计了三个核心数据视图:
java复制// 教材-题型分布视图
public class TextbookQuestionDistribution {
private Long textbookId;
private String questionType;
private Integer totalCount;
private List<String> knowledgePoints;
private Range<Integer> scoreRange;
}
// 考纲权重规则
public class SyllabusWeightRule {
