教培题库生成:把难度变成可调参数

一、题目生成不难,难在难度可控

让模型出题,一分钟能出上百道。但难度忽高忽低,成套之后没法用。

关键是把难度从"感觉"变成"可调的参数"。

题库生成的难点不在数量,在难度可控。同一道题,初一学生和初三学生做,难度感完全不同。

所以「难度」这个词要拆开:知识难度、计算量、绕弯层数。三个维度分开调,题才有稳定手感。

只用一个「简单/中等/难」,生成出来的题会忽高忽低。

二、难度怎么参数化

三个维度:

一、知识点层级。记忆、理解、应用、分析,四档。

二、干扰项质量。错误选项越接近正确答案,难度越高。

三、解题步数。一步能算出答案的,和需要三步推导的,不是一个难度。

出题时把这三个维度写进提示词,出来的题才成体系。

难度要拆成三个维度:知识难度、计算量、绕弯层数。

三个维度分开调,题才有稳定手感。只用一个「简单/中等/难」,生成出来会忽高忽低。

绕弯层数最容易被忽略,但它对体感的影响最大。

三、题干与解析分开生成

一次让模型既出题又出解析,解析质量往往很差。

分开做:先出题干和选项,再单独生成解析,要求解析写出每一步的理由。

分开之后,解析可以用来做二次校验。解析写不通的题,多半题干有问题。

参数化的做法:知识难度用考点标签,计算量用步骤数,绕弯层数用条件之间的依赖深度。

比如「两步计算、单条件、直接套公式」,这就是一道基础题。改成「三步计算、两个条件互相关联」,难度立刻上一档。

参数不用多,三到四个就够。参数一多,你自己也调不动。

四、难度校准的做法

出一百道题,先让模型自评难度,再找五个真实学生做一遍。

对比两边的分布。如果模型说"中等"的题,实际一半人做错,说明它高估了学生的水平。

校准两三轮,就能把提示词里的难度描述对齐到真实分布。

题干与解析分开生成,这条建议很实用。

一起生成,解析会顺着题干的措辞写,容易变成复述。

分开生成,解析会更像「讲给别人听」,质量明显不同。

五、四个质量红线

一、答案唯一。多解题必须标明"任选其一"。

二、无歧义表述。"以下哪个最好"这种题不要出。

三、不涉及敏感内容。

四、不生成超出大纲的知识点。

四条里第一条最容易破,尤其是语文和人文类。

四个质量红线,我是硬性要求的。第一,答案必须唯一或明确可判。

第二,不能出现超纲知识点。第三,题干不能有歧义表述,尤其是「大约」「若干」这类词。

第四,解析必须能独立看懂,不能只写「故选 B」。

四条里,第二条最难自动化,需要一个考点白名单。白名单建起来麻烦,但它是题库能不能用的分界线。

红线之外还有一条软要求:题目要像人出的。全是模板句的题库,学生做两道就腻。

六、题库怎么管

按知识点建目录,每题挂三个标签:知识点、难度、题型。

后面组卷时按标签抽,比人工翻题库快得多。

四个质量红线:答案唯一、不超纲、无歧义、解析能独立看懂。

第二条最难自动化,需要一个考点白名单。白名单建起来麻烦,但它是分界线。

第四条最常被违反。只写「故选 B」的解析,等于没有解析。

最后提醒:题库要定期去重。生成的题撞车的比例比想象中高。

去重按「考点加答案」比对,比按题干比对有效。

再补一句:题目的「措辞」决定学生的第一印象。同样的考点,用生活场景包装,正确率往往更高。

这不是放水,是考察方式更接近真实使用。

再补一句:题干里的「无用信息」要控制。完全干净会显得假,太多会干扰。

我的经验是每道题留一处无关信息,刚好够让人读一遍,但不影响判断。

这种「有噪音的真实感」,比全部理想化更有训练价值。

再补一句:题目里的数字要「好算」。复杂数字会让人分心。

考的是思路,不是算术。

数字简单,题才清。

延伸参考

落地到接口和数据流的部分,BackendWiki 里写得细一些。

BackendWiki

留一句:题库的价值不在题多,在每道题都知道自己是什么难度。