【OpenHarmony/HarmonyOs 】数学题库结构设计12 个年级、知识点标签与本地题库索引项目类型OpenHarmony / HarmonyOS ArkTS 数学学习应用项目名称数学视界对应主题端侧 AI、元服务能力集成、隐私保护方案关键词ArkTS、本地题库、年级体系、知识点标签、题库索引、智能组卷 一、为什么题库结构值得单独写前面已经写过知识点掌握度评估但掌握度分析的基础是题库结构。如果题库只是一个普通数组后续很难做筛选、组卷、统计和推荐。数学视界项目中的题库设计有几个特点12 个年级30 个知识点选择题、填空题、判断题、计算题多题型每道题绑定年级和知识点每道题有难度、答案、解析、标签本地题库可直接筛选后续可用于智能组卷和元服务“今日一题”。这篇文章就聚焦题库建模不再写挑战页 UI。二、年级模型从小学到高中项目中定义了Gradeexport interface Grade {id:stringname:stringshortName:stringlevel:numbercolor:stringbgColor:stringicon:stringdescription:stringsortOrder:number}年级数据示例export const GRADES:Grade[] [{ id:g1,name:一年级,shortName:小一,level:1,description:加减法、认识图形,sortOrder:1}, { id:g12,name:高三,shortName:高三,level:12,description:综合复习、冲刺高考,sortOrder:12}, ]年级模型不只是显示名称它还能用于按学习阶段筛题控制知识点范围生成年级挑战统计年级掌握度。三、知识点模型题库分析的关键维度知识点结构如下export interface KnowledgePoint {id:stringname:stringshortName:stringcategory:stringicon:stringcolor:stringbgColor:stringdescription:stringgrades:string[] difficulty:numberquestionCount:numbersortOrder:number}一个知识点示例{ id: kp_quadratic_func, name: 二次函数, shortName: 二次, category: 函数,icon:,description:二次函数的图像、开口、顶点,grades: [g9,g10,g11],difficulty:4,questionCount:0,sortOrder:17}知识点比年级更细它可以用于专项练习薄弱点复习正确率统计题库数量展示智能组卷权重。四、题目模型每道题都要可分析项目中的Question定义如下export interface Question { id:stringtype: QuestionType gradeId:stringknowledgeIds:string[] difficulty:numbertitle:stringoptions?: QuestionOption[] answer:stringanalysis:stringtags?:string[] createdAt:numberusageCount:numbercorrectRate:number}这个结构很完整type题型gradeId年级knowledgeIds关联知识点difficulty难度title题干options选择题选项answer标准答案analysis答案解析tags题目标签usageCount和correctRate为后续统计预留。题库越结构化后续越容易做智能推荐。五、题型设计选择、填空、判断、计算项目中题型是联合类型exporttypeQuestionType choice|fill|judge|calc选项结构exportinterfaceQuestionOption{ label:stringvalue:string}这让题库能覆盖不同学习场景choice适合快速练习fill适合公式和概念judge适合判断性质calc适合计算题。后续如果要扩展还可以增加多选题连线题排序题图形题。六、题库生成函数统一创建题目项目通过makeQuestion()创建题目function makeQuestion(id:string,type:QuestionType,gradeId:string,knowledgeIds:string[],diff:number,title:string,options:QuestionOption[] | undefined,answer:string,analysis:string, tags?: string[] ):Question{return{id, type, gradeId, knowledgeIds,difficulty:diff, title, options, answer, analysis,tags:tags ?? [],createdAt:Date.now(),usageCount:0,correctRate:0,}}统一工厂函数的好处是字段不会漏默认值统一后续新增字段更容易维护题库数据更规范。七、题目示例一道题的完整信息题库中的题目示例makeQuestion(q_g1_as_001,choice,g1, [kp_addsub], 1,3 5 ?, [ {label:A, value:6}, {label:B, value:7}, {label:C, value:8}, {label:D, value:9} ],C,358想想3个苹果加上5个苹果一共8个苹果。, [口算,基础] )这道题绑定了一年级加减运算知识点选择题难度 1答案和解析口算、基础标签。这样才能在答题后做知识点统计。八、本地索引按年级和知识点筛题项目提供了题库筛选函数exportfunctiongetQuestionsByGradeAndKnowledge( gradeId:string, knowledgeIds:string[] ): Question[] {if(knowledgeIds.length 0) {returngetQuestionsByGrade(gradeId) }returnQUESTION_BANK.filter((q: Question):boolean q.gradeId gradeId knowledgeIds.some((kid:string):boolean q.knowledgeIds.indexOf(kid) 0) ) }这个函数是本地题库索引的核心。它支持年级挑战知识点专项练习分类入口智能组卷。九、题库数量统计知识点可以显示题量项目还提供了更新题量的方法exportfunctionupdateQuestionBankCounts(): void {for(leti:number0; i KNOWLEDGE_POINTS.length; i) { const kp: KnowledgePoint KNOWLEDGE_POINTS[i]letcount:number0for(letj:number0; j QUESTION_BANK.length; j) {if(QUESTION_BANK[j].knowledgeIds.indexOf(kp.id) 0) {count } } KNOWLEDGE_POINTS[i].questionCount count} }这样知识点列表可以显示“这个知识点有多少题”用户选择练习时更有预期。十、端侧 AI智能组卷从结构化题库开始有了这些字段就可以继续做端侧智能组卷function calcQuestionWeight(q: Question, weakKnowledgeIds: string[]): number { let weight 1if(weakKnowledgeIds.some((kid: string) q.knowledgeIds.indexOf(kid) 0)) { weight 2}if(q.correctRate0.6) { weight 1} return weight }这里的智能不是云端大模型而是本地规则薄弱知识点权重更高正确率低的题更容易出现难度可以按阶段递进最近做过的题可以降低权重。十一、元服务扩展今日一题结构化题库也很适合做元服务今日一题薄弱点一题年级速练错题复习公式相关题。元服务只需要从QUESTION_BANK中取一题再用Question结构渲染即可不需要重新建数据模型。十二、隐私保护本地题库不上传学习内容本地题库还有一个隐私优势不需要拍照识题不需要上传题目不需要网络请求不需要云端返回解析。用户做题、看解析、生成结果都可以在端侧完成。十三、总结这篇文章聚焦数学视界的题库建模和之前“知识点掌握度评估”文章区分开本篇讲数据结构前篇讲统计分析。核心实现包括 用Grade建立 12 个年级体系 用KnowledgePoint建立知识点标签系统 用Question表达题目、答案、解析、难度和标签 用makeQuestion()统一创建题目 用getQuestionsByGradeAndKnowledge()构建本地索引 用updateQuestionBankCounts()统计知识点题量 为端侧智能组卷和元服务“今日一题”打基础 题库和解析都在本地避免 AI 识图和云端上传。结构化题库是学习 App 的地基。地基打好了后续才能稳稳扩展挑战、复盘、推荐、报告和元服务。