运行 lab profile 查看各知识点的掌握情况,使用 lab next 开始针对性学习。完成独立短测后,系统更新画像,并安排补学、练习、达标确认或复测。
在实验终端中运行:
lab profile 查看全部知识点的状态、概率和建议
lab profile copy 查看指定知识点及其依据
lab profile --json 导出当前画像的 JSON 视图
lab profile --metrics 查看本机测评预测与实际表现统计
lab profile --metrics --json 导出本机统计的 JSON 视图
lab profile --calibration 查看各知识点的自动校准进展
lab profile --calibration copy 查看指定知识点的调整依据;可加 --json
lab next 按画像选择下一项学习
lab next copy 聚焦指定知识点安排下一步
lab assess 开始或恢复推荐短测
lab assess copy 开始或恢复指定知识点短测
lab assess show 查看当前短测及其工作目录
lab assess submit [答案] 正式提交本次短测
lab assess hint 查看提示,将本次完成作为训练
lab assess abandon 结束当前短测并保留记录
copy 是知识点标识,其他标识见 学生手册。每题说明是否需要答案;文件操作题直接提交,现场问答按题面格式提交。首次正式提交固定本次测评结果;失败后可继续纠错,修正通过计为训练,随后用新的任务实例验证独立应用。lab assess show、重复提交、退出后恢复都不会重复计算首次测评。
短测现场位于 $ORBIT_HOME/assessment-work/<任务编号>/,原来的九关站点仍在自己的目录中。按短测题面进入对应位置完成操作;返回九关可用 cd "$(lab root)"。九关使用 lab check,短测使用 lab assess submit。确认掌握后,自适应路线跳过重复基础练习,九关故事仍需完成原有关卡要求。
每个知识点维护掌握概率 p,含义是“根据当前记录,学生达到这个知识点任务标准的概率”。任务标准具体到可检查的操作或回答,例如完整复制要检查目标层级、隐藏项、内容一致性和原件保留。
系统确认“已掌握”需要同时满足:
- 当前掌握概率不低于 95%。
- 独立通过至少两个不同的任务结构,即
family。 - 由一次独立正式提交通过触发确认。
同一结构只换名称或随机值,仍属于同一个 family。同一结构在同一个 UTC 日期内,最多贡献一次通过和一次失败的概率更新;连续刷同结构不会累计成新覆盖。独立性按本次任务实际记录的帮助状态判定;使用提示或相关帮助的任务保留训练成果,再由独立变式确认。一次自主纠错只要发生在正式提交前,就由最终提交结果判定。
状态与建议面向教学决策:低概率先补学,中间水平针对性练习,接近阈值安排达标短测,已掌握则进入后续知识点或按计划复测。新的独立失败会降低概率并触发补学或复测。历史任务和达标记录保留,不通过删除旧记录来表现进步。
| 状态 | 条件 | 路线 |
|---|---|---|
| 需要学习 | 概率低于 40% | 首次先测起点;已有测评后针对性补学 |
| 正在掌握 | 概率至少 40%,低于 80% | 练习相关目标 |
| 接近掌握 | 概率至少 80%,尚未满足确认条件 | 独立达标短测 |
| 已掌握 | 达到阈值且独立结构覆盖满足 | 进入后续知识点 |
| 需要复测 | 曾确认掌握,随后失败或复测到期 | 新的独立短测 |
算法采用二状态贝叶斯知识追踪,分别设置:
p:任务开始前的掌握概率。s:掌握后仍在本题失误的概率。g:未掌握仍在本题通过的概率。
独立通过:
p_after = p * (1 - s) / (p * (1 - s) + (1 - p) * g)
独立失败:
p_after = p * s / (p * s + (1 - p) * (1 - g))
初始掌握概率为 0.30,现场操作与观察题开始时使用 s=0.05、g=0.20。后续按每个知识点的测评记录自动调整失误率、偶然通过率;训练记录充分时也调整学习率。首次判题前保存当时的参数和预测,再检查答案;原来的选择题复习不进入这组测评参数。
算法策略版本为 linuxlab-bkt-v1,初始参数版本为 engineering-defaults-v1,自动调整后的版本按知识点编号,例如 copy-auto-v1。概率最高保留为 0.995,避免任何有限记录被计算成绝对的 100%。
使用初始参数时,对于三次不同结构的独立操作题,且期间没有其他训练、遗忘或失败更新:
| 记录 | 掌握概率 | 解释 |
|---|---|---|
| 起点 | 30.0% | 初始模型值 |
| 第一次独立通过 | 67.1% | 继续收集不同结构的表现 |
| 第二次独立通过 | 90.6% | 接近阈值,安排达标短测 |
| 第三次独立通过 | 97.9% | 满足覆盖条件,系统确认已掌握 |
下一题预测通过率另算:
predicted_success = p * (1 - s) + (1 - p) * g
上例 p=0.978692,下一道同类题预测通过率为 0.934019。掌握状态的后验和下一题通过预测表达不同问题,界面及报告分别命名,不能都标成“正确率”。
完成一次有记录的指导训练后,使用 p_after = p + (1-p) × T 更新学习预测,初始学习率 T=0.10。两次可计分的独立测评之间最多计一次训练更新,反复看讲解不能无限提高概率;训练不能单独确认掌握,也不能解除复测状态。技术错误、未完成训练和缺少可用观察的任务不更新概率。
复习预测按经过的 UTC 日期天数计算:高于初始值的部分以 60 天为半衰期衰减,即 p_now = 0.30 + (p_then - 0.30) × 2^(-days/60);低于初始值时,不会仅因等待自动提高。确认后最迟 7 天安排复测,如果概率更早跌破 95%,则提早安排。上面三次通过的示例约在第 4 个 UTC 日期边界进入复测。这些时间设置是本版本的明确教学策略。
题库覆盖原有 15 个知识点,每点有三个任务结构,共 45 个模板,题目实例与九关故事分开生成。每份任务合同包含稳定任务标识、知识点、结构标识、任务类型、参数、需要完成的目标及判题规则。完成后保留实际使用的合同信息,后续代码或参数更新不改写历史任务。预计用时通常为 120 秒,进程题为 90 秒,仅用于选题排序,不按用时扣分。
结构变化落在实际能力目标上。例如复制分别考查新目标、已有目标和选择性复制;归档读取分别考查保留成员层级、去掉首层和选择成员;日志分别考查最新有效记录、指定设备和乱序时间。每点合同的核心目标使用 <知识点>:core 标识。题库当前的迁移测评范围就是这些不同结构,复测使用它们的新实例。
选题会考虑先修知识、当前掌握概率、已有结构覆盖和复测需求。只有先修关系约束学习顺序。已经独立通过的结构不被反复当成新的覆盖证据;优先选择尚未覆盖的结构,再以“预期减少的信息不确定性 ÷ 预计用时”选择短测。同日可用的独立结构用尽后,转入指导练习,继续学习但不重复累计独立覆盖。
lab next 对同一知识点连续安排两次短测后,会插入一轮指导练习;出现低概率薄弱点时也先补教。已掌握且未到复测期的主题会从自动路线跳过;学生仍可显式运行 lab assess 知识点 主动挑战。系统给出教学建议时,学生可先查对应资料,再用 lab next 继续。
普通九关结果、命令失败、资料查阅、聊天解释各有自己的用途:九关和错误记录用于定位补学方向,有相关真实操作且检查通过的九关任务可计一次训练更新;资料与助教记录用于解释帮助条件,短测首次正式提交用于独立测评。原有 lab review 继续提供复习问答,不能把反复回答同一道复习题当成新的独立结构。
默认数据根目录是 ~/.local/share/orbit-lab/,也可通过 ORBIT_DATA_DIR 指定。该目录下的 learner-profile.json 保存学习画像,新建周目保留旧画像和旧任务记录。学习画像以数据根为边界;不同学生应使用不同的数据根。从 PLIAC 课程入口创建的周目使用各自绑定的数据目录,对应画像随绑定保存。
记录分为三层:
| 层 | 内容 | 用途 |
|---|---|---|
| 任务与提交 | 任务编号、知识点、结构、合同版本、帮助条件、提交时间、检查项、通过结果 | 保留本次实际发生的事实 |
| 算法更新 | 保存策略与参数版本,按原始事件复算概率和独立、覆盖条件 | 复算和说明系统判断 |
| 当前画像 | 由事件导出当前状态、掌握概率、结构覆盖、达标历史和下一步 | 驱动 profile、next、学习手册与报告 |
画像文件使用 schema_version: 1,包含 policy_version、parameter_version、parameters 和 events。每条事件至少有 id、topic、task_id、family、at、passed;并记录 kind(测评或训练)、independent、observed、technical_error、contract_version 和 checks。新提交保存 prediction_before 与对应参数版本。相同事件编号重试须逐字段一致;同一任务实例按首次正式提交计分。派生视图使用 p_mastery 与 p_next_success 区分两个概率,包含 passed_families、next_review_at、last_confirmed_at、decision 及对应证据编号。
自动校准信息写入 calibration.topics,按知识点保存参数 versions、切换 transitions、拟合 runs、当前 monitor 及 monitor_history。参数切换时保存概率检查点,旧时间点仍按当时版本复算。原始事件、作答和当时的预测不改写。参数切换后才补入、但时间早于切换的记录继续保留,排除于在线推断与校准,并通过 excluded_late_event_count 显示。
查看画像不会自动产生测评记录,重复提交同一任务不会新增计分记录。放弃保留任务历史,不伪装成独立失败;环境异常应按具体错误处理后继续,不能把程序异常作为学生答错。短测与九关保存位置分开,开始新任务不会删除九关成果。
独立短测要求从开始到提交保持操作记录开启,并在短测目录观察到题目所需的相关成功操作。lab tracking off 会关闭后续可选过程记录;正式提交与检查结果仍保存,但记录不完整的这次作答不更新掌握概率。重新开启后使用新短测继续独立评估。针对当前题的 lab assess hint、助教或资料帮助会标记这次训练;常规 show 与画像查询不算帮助。
短测的操作摘要只保存命令类别、退出状态和顺序等有限信息,作答及检查保存于本机任务记录。原始 Shell 命令、密钥和学生答案不作为常规模型摘要上传;这套本地画像不会自动向外部服务发送数据。
系统会根据后续测评自动调整判断。完成短测、续学或查看画像时,程序会检查记录;样本达到门槛后自动拟合和检验,学生继续正常练习即可。lab profile --calibration 展示“积累测评”“沿用当前参数”“已自动调整”“持续观察调整效果”或“已恢复上一版参数”,加知识点标识可查看该点,--json 输出完整依据。
校准按知识点进行。可用样本是有完整观察、没有帮助或技术错误的独立测评首次提交;同一结构在同一个 UTC 日期内只取第一次合格记录。指导训练、重复提交及补入的旧时间记录不冒充新的校准测评。
| 检查项 | 当前门槛 |
|---|---|
| 开始拟合 | 至少 30 条可用测评,覆盖至少 3 个结构,总计至少 6 次通过和 6 次失败 |
| 再次拟合 | 距上次拟合增加至少 12 条可用测评,使用新的一批验证记录 |
| 计分窗口 | 最近最多 120 条;最新 12 条留作验证,其余最多 108 条用于选参 |
| 结果多样性 | 训练段、验证段分别至少包含 2 次通过和 2 次失败 |
| 学习率调整 | 训练段至少有 6 个实际计分的“指导训练后再测评”间隔 |
候选参数只按训练段的 Brier 分数选择;验证段不参与选参。每条预测都从该条记录之前的历史前向计算,最多 120 条是计分窗口,较早历史仍参与状态重放。最近 12 条验证记录在下一轮不会再次用于验收同一轮的候选。
失误率 s 搜索 0.02、0.05、0.10、0.15、0.20 及当前值;偶然通过率 g 搜索 0.05、0.10、0.20、0.30、0.40 及当前值。训练间隔达标时,学习率 T 搜索 0.02、0.05、0.10、0.20、0.30 及当前值,否则保持不变。初始掌握概率、95% 确认阈值、结构覆盖要求、遗忘参数和复测期限保持固定。
候选只有同时满足以下条件才会启用:
- 训练段预测误差下降。
- 验证段 Brier 分数至少下降
0.01。 - 验证段逐题误差改善的均值,大于其标准误的 2 倍。
- 不新增“答前已确认掌握、实际却失败”的记录,且这类错误确认的比例不增加。
验收记录保存训练与验证的证据编号、参数、分数、改善幅度和启用原因。如果验证段未覆盖确认后的测评,对应统计为空,confirmation_validation_covered 为 false,不会标成已验证该项。单次最多搜索 216 组参数,搜索时间预算为 3 秒;一个知识点超过 5000 条可重放原始记录时暂停自动拟合。达到计算上限时保留当前参数,已有版本的预测监测与回滚继续执行。
新参数启用后,每积累 12 条新的合格测评,就与上一版比较一次。新旧两版的预测在首次判题前使用相同历史同时冻结,技术重试或崩溃恢复沿用这份快照。监测每次使用互不重叠的 12 条记录;若新版 Brier 比上一版高至少 0.02,且至少 9 条记录的预测误差更大,就自动恢复上一版。旧版本迟交或缺少同次冻结的对照预测,不进入这项比较。
参数调整或回滚会保存版本和切换时的概率检查点,继续用后续表现作判断;切换本身不直接确认掌握。历史作答、当时的预测及版本原样保留,重新启动和新建周目后继续使用当前版本。
lab profile --metrics 提供本机运行监测,--json 输出包含 auto_calibration 的结构化统计。首次判题前持久化 prediction_before,冻结预测、参数版本、时间与已用证据数量,再检查答案。Brier 分数是预测通过率与实际结果(通过为 1,失败为 0)之差的平方均值,越小表示这些记录中的概率预测越准确;同时列出系统确认后的独立测评通过率。没有合格历史记录时显示空数据,不补造预测或样本。
这些指标说明当前数据目录的预测表现。跨学生的产品效果验收需要另外收集未参与拟合的学生、后续时间段和预留结构,报告预测分组与实际通过率、Brier 分数、确认后新变式通过率,以及人数和样本数。产品目标为“系统确认已掌握后,预留新变式的实际通过率达到 90% 以上”;自动校准的程序测试与单机指标不替代这一效果验收。
验收数据应保留去标识化的学习者及周目标识、知识点与任务结构版本、提交时间、帮助条件、提交前预测及参数、实际检查结果和判定前后状态。现有三个结构用于日常测评与复测;效果验收应另外预留新结构,避免把练过的题算作新结构验证。“已掌握”是系统确认,教师人工复核单独记录。
核心模块是 mastery.py(概率与路线)、calibration.py(拟合、验证、版本与回滚)、assessment_tasks.py(任务合同、实例与检查)和 assessment.py(短测生命周期及终端入口)。mastery 提供 maybe_calibrate、active_parameters 和 calibration_status 接口。实现使用 Python 标准库和真实 Linux 文件行为。
在隔离 Linux 数据目录运行测试,再构建并验证学生包:
python3 -m unittest discover -s tests -v
python3 tools/package.py
python3 tools/verify_handout.py学生包包含上述四个模块和本说明,不包含教师测试、实际画像、学生任务目录或模型密钥。验证记录见 VALIDATION.md,本机构建的精确哈希与包内验证结果写入 dist/validation.json。