Skip to content

Latest commit

 

History

History
121 lines (72 loc) · 16.7 KB

DESIGN.md

File metadata and controls

121 lines (72 loc) · 16.7 KB

LinuxLab 教学设计与教师说明

按会议意见增加的学习支持

命令迁移边界:lab 及子命令属于本平台辅助功能,界面与文档明确说明其他环境不能默认使用。保留 lab notes 作为中文补充知识入口,保持命令名来源、参数原词、用法与记忆联想;同时鼓励在笔记、错误诊断和助教讲解中对照 --help、man、Bash help、Vim :help。不改名或代理原生帮助命令,也不把平台专有的复习与记录功能说成 Linux 标准。

九关检查返回结构化错误类别和关联知识点,区分实际观察与候选原因。练习中的 lab tutor 可按需调用本地配置的兼容 API 解释概念,本地资料提供单步提示,判题始终由规则执行。模型另承担新周目的兴趣问询和情境创作;这两个用途与判题分离。lab notebook 和 lab review 依据本局记录提供复盘与间隔练习;新旧周目兼容。

本地操作观察在新周目默认开启,入口说明范围并保留关闭开关。记录命令类别、白名单选项、对象角色、退出码、有限文件状态及筛选后的具体输入错误片段;不保存整行命令或逐键行为。情境由完整 JSON 包定义,通过统一映射连接真实文件与固定任务。详见 本地配置与记录边界;源码仓库另有 docs/TEACHING-CHANGES.md 对照会议要求与未实现范围。

具体错误与重复模式

采集已提交的简单命令,保留真正重复的输入,跳过首次提示符与空回车。原生 Shell、编辑器、输出和退出码保持原有行为。确定性分类器只使用有限语法与实验内文件状态;非零退出码本身不构成知识错误,别名、函数、组合语法和不认识的参数不能强行按原生命令解释。没有采集原生 stderr,因此文件不存在与命令失败的关联仍可能只是候选原因。

本局按具体错误片段、命令和位置聚合。一次问题连续失败三次记为三次输入、一个尝试段;观察到使用候选修正的同类命令成功后结束该段,再次出现时另开一段。不能确认修正时不虚构已解决。相同关卡、检查类别、提交与有限相关文件指纹没有变化的重复检查归并,保留原依据;无关观察不会制造新的知识失败次数。

主动求助时,大模型接收有限错误记录编号、问题摘要、重复及修正计数,输出带记录引用的候选解释和一个验证目标。程序验证字段、知识点和引用是否属于已提供证据;这只保障引用存在,不保证解释成立。模型判断不写回观察事实或知识分数。未通过验证或服务失败时使用本地指导。默认开启是本项目针对教学用途的选择,不是已有论文证明了默认采集的效果;研究依据和误报风险见 research/SOURCES.md。

研究依据与独立判断

以下区分研究发现、现成系统机制与本项目的工程推论。原始来源及局限见 SOURCES.md。

依据 支持的判断 不能据此声称
Walkington,2013 兴趣匹配可能帮助学生把情境关系转成抽象表示 换故事或文件名必然提升 Linux 学习
Harp 与 Mayer,1998 有趣但无关的细节可能损害理解与迁移 所有故事都有害,或分栏就能消除干扰
Gentner 等,2003 显式比较共同结构可能促进迁移 多做几个换皮关卡就会自动归纳
PrairieLearn 官方生命周期 参数生成、显示与判分可以保持职责分离 该工程结构已经证明本项目教学有效
STACK 官方变式部署 变式应先检查再使用,进行中的实例应稳定 结构测试通过就意味着各主题难度相等
Yadav 等的 CTAT 原型,2023 大模型可尝试按兴趣改写题目,需保留原意并供检查 该原型已经完成学习效果实验
Logacheva 等,ICER 2024 学生可以接受 AI 个性化练习,但概念与难度匹配仍会出错 喜爱选择题材就等于学习或迁移能力提高

据此,本项目把“为什么要做这个操作”作为情境生成的重要内容,而不以换名数量或剧情长度衡量个性化。主题中的物品、任务动机和操作结果需要保持合理关系,例如“原件需要保全”对应复制工作副本。删除无助于该关系的背景细节,保留原生 Linux 概念和帮助入口。

固定合同、本地编译、独立语义复核、最多一次带诊断重生成和版本冻结,是本项目根据上述证据作出的工程选择;论文并未直接验证这一整套 Linux 流程。另一次模型复核只能增加发现问题的机会,可能与生成模型共享错误,不能当作独立专家或正确性保证。

任务合同、情境方案与学习实例

tasks.py 固定课程 linux-foundations 的九项合同:locate、backup、organize、extract、interpret-log、configure、permissions、process、deliver。每项明确目标、知识点、可观测证据、所需资产、前置依赖和需要由故事解释的操作关系。合同不读取学生随机答案,版本与规范化内容哈希用于标识规则。

默认新周目使用以下流程:

  1. 读取固定任务合同,调用配置的模型提出一个兴趣问题,由学习者自由描述题材。
  2. 模型创作 12 类中性任务对象的语义名称与 ASCII 词干,并按稳定任务标识给出动机和进展;背景、标题与结局围绕这些关系组织,不新增技术任务。
  3. 本地编译器把语义对象编译为 34 个文件与目录名称和练习材料。目录拓扑、隐藏项、扩展名、日志结构、权限需求与判题条件由代码确定,模型不能提供可执行判题代码。
  4. 进行结构检查,再发起独立的语义复核请求,检查主题贴合、动机合理性、关系一致性和多余要求。失败时携带诊断重生成,最多一次;仍失败或服务不可用则中止,不替换旧局。
  5. 冻结实例、完整场景、资产映射、任务合同版本与哈希,再建立真实文件并进入 Bash。文件生成、题面、归档成员与判题共同使用该实例。

这是从合同生成受约束实例的流程,不是让模型自由编造题目后再猜判定标准。模型的语义方案与最终物理路径分开,使无效词干或不合理叙事可以在学生开始前被拒绝。

scenes.py 管理内置或本地场景包与兼容加载,scene_generator.py 调用本地 API,layout.py 提供受约束名称映射,orbit.py 负责真实材料与本地判题。knowledge.py 保持知识点、错误分类、提示和复习依据;各层通过稳定任务标识关联。

根目录 station、.beacon-*、decoy-*.tmp、station-pulse 和配置字段属于固定教学协议。新生成实例采用中性 MODE=active、MODE=deliver;旧周目和旧离线包兼容 rescue、evacuate,任务显示和配置校验按实例版本一致处理。

续学读取冻结实例,不再次问兴趣、不请求模型。对已记录任务合同标识的周目,载入时比对课程、版本与哈希;不匹配时要求使用对应程序版本或由维护者迁移,不静默套用新合同。旧周目没有这些字段时保留原兼容路径。已有局使用 lab scene 切换完整叙事时,原文件和进度保留,这不构成新的练习实例;要生成新名称和材料需新建周目。space、ocean、museum、anime 只是可离线使用的示例,不限制自由题材。旧包的兼容加载不被记作已经过新流程的模型语义复核。

还需要怎样的教学验证

工程测试应检查同一合同在不同主题下是否仍可完成、错误成果是否仍被拒绝、失败是否不改旧局,以及续学是否保持材料与判定一致。真实 API 试验另外记录实际服务响应与抽查意见,以 VALIDATION.md 为准;不在设计说明里预先宣称服务验证通过。

学习验证需要分别测量兴趣体验、当前任务表现、普通 Linux 环境中的迁移和延迟保留。可在已通过关卡后比较两个不同场景中的共同操作关系,再提供无剧情的新目录任务;这是一项后续验证建议,尚未等同于已完成的课堂实验。通关率、模型复核通过率或 API 连通性均不能替代这些证据。

目标与边界

对象是看过指定入门视频、尚未熟练使用终端的学生。目标是让学生通过真实文件操作理解路径、复制与移动、通配符选择与删除边界、归档、日志时序、编辑模式、权限和进程观察,并完成一次综合交付。

实验借用 Bomb Lab 的分阶段推进和现场线索,难点在“观察—操作—检查—修正”,不要求猜谜知识或编程。开源的本地判题程序可以被阅读、修改;本项目适用于练习与形成性评价,不作为防作弊考试环境。

视频范围映射

分集元数据来自 B 站公开接口。总长 3293 秒,约 54 分 53 秒,2 倍速约 27 分 27 秒。映射以已核实的分集主题为基础;不声称逐句复刻讲解顺序或覆盖每个参数。视频首帧和第六分集 150 秒抽样画面另用于确认 top、chmod。

视频分集 时长 本 Lab
P1 cd 命令和 mkdir 命令常见用法 8:12 第 1 关路径定位、创建多层目录
P2 ls 命令和 cp 命令常见用法 14:38 第 1 关隐藏信标,第 2 关完整备份
P3 mv、rm、tar 命令常见用法 6:55 第 3、4、9 关移动、删除、解包与打包
P4 cat 命令和 tail 命令常见用法 7:20 第 4、5 关短文本与长日志,第 8 关可选跟随
P5 vim 文本编辑器基本用法 5:45 第 6、9 关编辑配置
P6 文件权限管理 6:17 第 7 关 chmod、rwx 与数值权限
P7 性能监控和压力测试 5:46 第 8 关 top 与限时低占用探针

视频标题中的“11 个命令”没有单独的官方完整清单可直接读取。本 Lab 将前五分集明确出现的 10 个命令与第七分集首帧的 top 作为核心 11 个,同时覆盖权限章节的 chmod;pwd、./脚本和命令替换是必要辅助。压测部分改为自动结束的低占用练习探针,不复现满载压测;其目的是学习观察进程而非测量机器性能。

如何借鉴 CS:APP 的实验方法

输入错误统一使用中文解释:未知 lab 子命令和笔记主题提供近似拼写建议,参数数量、类型和范围错误显示对应命令的用法,避免直接展示 argparse 的内部命令清单。Bash 的 command_not_found_handle 提供常用命令及漏空格提示,仍返回 127。所有建议只展示,不自动纠正执行,不根据错误输入读取关卡答案。已启动的 Linux 命令保持原生错误输出,不用包装器替换真实命令。程序未预期的异常显示简短反馈;维护者明确设置 ORBIT_DEBUG=1 时才输出 Python 调用栈。

第三关新周目包含六个共同前缀和后缀的清理目标,其中一个中间为空,另有同前缀不同后缀、同后缀不同前缀以及隐藏的保留文件。默认任务给选择规则,不给完整模式;提示逐步引入 *、预览匹配范围及实际写法。判题检查全部目标已清理、保留文件原样存在,不读取命令历史来强制某种解法。旧存档缺少 cleanup_version 时保持原两目标规则;不向玩家现场或旧检查点追加文件。通配符教学是本项目补充设计,不声称已核实原视频讲过该内容。

  • Bomb Lab:阶段锁定、每阶段独立判定、完成后进入下一阶段;本实验把字符串答案扩展为文件状态、配置和真实权限。保留通关仪式,取消扣分爆炸和时间压力。
  • Shell Lab:官方 trace 从简单案例逐渐过渡到复杂组合。本实验先单一目标,再多条件判定,最后检查整个交付包。
  • Linux Bootcamp:官方入门 Lab 本身就使用故事、目录探索与 Vim;本项目采用相同教学方向,但重写场景、文件与校验逻辑。

参考链接与核实范围见 SOURCES.md。没有使用受限的 CMU 教师题解或评分服务器。

循序渐进的安排

第 1 关只给 ls 作为起步命令,保留目录用途与返回指定入口提交的现场要求,让学生自行探索后续操作。第 2~4 关提供产物、路径与保全要求,不提供命令步骤。第 5~7 关需要把上一关线索带到下一关;任务只给资料位置和目标状态,日志筛选方法、Vim 按键、权限数值与执行语法留在主动求助中。第 8 关只给启动练习进程所必需的 lab load,由学生自行观察进程。第 9 关给资源清单与最终包的验收要求,不给顺序化的加工步骤,考查迁移与组合。

三级提示分别回答“往哪看”“用哪种方法”“命令怎么组织”。提示不自动显示;即使第三层也保留每局随机的现场数据,避免只粘贴固定通关密码。判题接受等价操作,不通过扫描 shell 历史强制特定命令;因此教师若要考查 Vim 使用,需要观察编辑过程,不能只看报告。

每关通过后统一显示“本关知识”和“参数与用法说明”:前者概括本关概念,后者简短解释选项名称、行为和对使用者的好处。主动查看的提示与命令卡也就地说明参数,不向默认任务添加解题步骤。非首字母选项区分实际长选项与记忆法,Vim 按键、权限表达式不混称为 Shell 选项。反馈不声称观察到了玩家使用的命令,不把示例用法当作已执行操作。失败时输出首个具体缺项,避免一次堆出大量诊断;可重复检查。lab repair 保存原现场并恢复本关起点,避免一个误删让新手必须重做全局。

建议课时:启动与第 1~3 关 15~20 分钟,第 4~7 关 20~30 分钟,第 8~9 关 15~25 分钟,复盘 10 分钟。这是设计估计,尚无课堂试验数据。

判定与报告

判题器不运行学生提供的任意代码,也不从学生包自动提取文件。最终包只读取成员并检查路径、类型、重复成员、配置、名单、回执、权限;拒绝路径穿越、链接和额外交付文件。归档内容错误时,外部文件已改好也不能通过。应保全的原件与备份在最终检查时再次核对。

程序能确认第 1 关提交时的当前工作目录、第 7 关生成的有效回执和第 8 关本局活进程身份,不能保证学生使用了 ls、cat、Vim 或 top 的具体过程;读取存档或调用内部接口也能绕过自学挑战。反馈与报告不是命令审计,也不证明独立完成、长期记忆或教学效果。

练习目录使用独立周目,支持多个周目保留。检查点记录阶段开始时的完整站点,修复会把原站点保存到 recovery。低占用探针上限 90 秒,停止时通过 PID、启动时间、命令行令牌确认归属,并在支持的 Linux 上使用 pidfd 防止误杀复用 PID。极旧内核不支持时让探针自然超时。

教师使用与验证

Windows 学生版为 dist/linuxlab-student-windows.zip,解压后进入 linuxlab 文件夹,双击 安装环境.cmd,准备好后双击 启动实验.cmd;Linux / WSL 学生版为 dist/linuxlab-student-linux-wsl.tar.gz,解压后在 linuxlab 目录运行 bash setup.sh --install。在程序目录用 python3 linuxlab.py ai init 创建并填写本地配置,再运行 bash start.sh 进入兴趣问询流程;离线课堂可显式运行 bash start.sh --new --scene space 或指定准备好的场景 JSON。GitHub 附件使用上述 ASCII 文件名,并设置中文下载标签。环境要求见 SETUP.md。参考流程在 tests/test_lab.py,不放进学生包。公开教学文件可以在需要时自行增删。

运行 python3 -m unittest discover -s tests -v 做 WSL 集成回归。测试使用临时 Linux 目录,调用真实 Bash、GNU 命令、Vim、top 和 CLI,并用 PTY 检查交互启动与 Vim 的真实按键流程。测试数据与用户周目分开,不会消耗学生进度。结果记录在 VALIDATION.md。

最终 JSON 可收集作为作业附件,重点看完成阶段、失败诊断与提示使用。当前不含登录、联网排行榜或自动提交服务。