一、题目生成不难,难在难度可控
让模型出题,一分钟能出上百道。但难度忽高忽低,成套之后没法用。
关键是把难度从"感觉"变成"可调的参数"。
题库生成的难点不在数量,在难度可控。同一道题,初一学生和初三学生做,难度感完全不同。
所以「难度」这个词要拆开:知识难度、计算量、绕弯层数。三个维度分开调,题才有稳定手感。
只用一个「简单/中等/难」,生成出来的题会忽高忽低。
二、难度怎么参数化
三个维度:
一、知识点层级。记忆、理解、应用、分析,四档。
二、干扰项质量。错误选项越接近正确答案,难度越高。
三、解题步数。一步能算出答案的,和需要三步推导的,不是一个难度。
出题时把这三个维度写进提示词,出来的题才成体系。
难度要拆成三个维度:知识难度、计算量、绕弯层数。
三个维度分开调,题才有稳定手感。只用一个「简单/中等/难」,生成出来会忽高忽低。
绕弯层数最容易被忽略,但它对体感的影响最大。
三、题干与解析分开生成
一次让模型既出题又出解析,解析质量往往很差。
分开做:先出题干和选项,再单独生成解析,要求解析写出每一步的理由。
分开之后,解析可以用来做二次校验。解析写不通的题,多半题干有问题。
参数化的做法:知识难度用考点标签,计算量用步骤数,绕弯层数用条件之间的依赖深度。
比如「两步计算、单条件、直接套公式」,这就是一道基础题。改成「三步计算、两个条件互相关联」,难度立刻上一档。
参数不用多,三到四个就够。参数一多,你自己也调不动。
四、难度校准的做法
出一百道题,先让模型自评难度,再找五个真实学生做一遍。
对比两边的分布。如果模型说"中等"的题,实际一半人做错,说明它高估了学生的水平。
校准两三轮,就能把提示词里的难度描述对齐到真实分布。
题干与解析分开生成,这条建议很实用。
一起生成,解析会顺着题干的措辞写,容易变成复述。
分开生成,解析会更像「讲给别人听」,质量明显不同。
五、四个质量红线
一、答案唯一。多解题必须标明"任选其一"。
二、无歧义表述。"以下哪个最好"这种题不要出。
三、不涉及敏感内容。
四、不生成超出大纲的知识点。
四条里第一条最容易破,尤其是语文和人文类。
四个质量红线,我是硬性要求的。第一,答案必须唯一或明确可判。
第二,不能出现超纲知识点。第三,题干不能有歧义表述,尤其是「大约」「若干」这类词。
第四,解析必须能独立看懂,不能只写「故选 B」。
四条里,第二条最难自动化,需要一个考点白名单。白名单建起来麻烦,但它是题库能不能用的分界线。
红线之外还有一条软要求:题目要像人出的。全是模板句的题库,学生做两道就腻。
六、题库怎么管
按知识点建目录,每题挂三个标签:知识点、难度、题型。
后面组卷时按标签抽,比人工翻题库快得多。
四个质量红线:答案唯一、不超纲、无歧义、解析能独立看懂。
第二条最难自动化,需要一个考点白名单。白名单建起来麻烦,但它是分界线。
第四条最常被违反。只写「故选 B」的解析,等于没有解析。
最后提醒:题库要定期去重。生成的题撞车的比例比想象中高。
去重按「考点加答案」比对,比按题干比对有效。
再补一句:题目的「措辞」决定学生的第一印象。同样的考点,用生活场景包装,正确率往往更高。
这不是放水,是考察方式更接近真实使用。
再补一句:题干里的「无用信息」要控制。完全干净会显得假,太多会干扰。
我的经验是每道题留一处无关信息,刚好够让人读一遍,但不影响判断。
这种「有噪音的真实感」,比全部理想化更有训练价值。
再补一句:题目里的数字要「好算」。复杂数字会让人分心。
考的是思路,不是算术。
数字简单,题才清。
延伸参考
落地到接口和数据流的部分,BackendWiki 里写得细一些。
留一句:题库的价值不在题多,在每道题都知道自己是什么难度。