课业罗盘的 AI 协作开发记录
课业罗盘的 AI 协作开发记录
这次课堂练习我选择了“课程作业管理 GUI”,用 Codex 协助开发了一个在本机运行的网页应用,名字叫“课业罗盘”。我的目标是尽量不用重复录入老师已经发过的信息,打开页面就能知道有什么作业、在哪里提交、什么时候上课。
下面按课件的记录模板整理实际协作过程。代码、自动化测试和下文注明的浏览器检查由 Codex 执行;我主要通过查看界面、提出修改要求和复查结果参与迭代。
第1轮(初版)
我给AI的提示词
我想做一个课程作业管理 GUI,用来管理课程和作业、展示课表,并提醒作业截止时间。请先在本地实现一个能运行的初版,让这些基本功能可以实际操作和演示。
AI生成的初版要点
初版是一个本地网页,可以添加课程和作业,显示截止时间、完成状态和逾期情况,并在当前浏览器保存数据。随后补充了编辑、筛选、备份和手动课表等基础功能,能够演示基本操作。但它仍需要我把课程信息手动填进去,离“减少整理课业的麻烦”还有距离。
第2轮(第一次迭代修改)
发现的问题
老师已经在 Canvas 发布的信息,还需要再输入一次;只看平台“作业”栏目,也可能漏掉课件中布置的任务。
我给AI的修改要求
我觉得手动录入有点麻烦,能不能自动抓取 Canvas 中的信息?
AI修改了什么
AI 增加了 Python 本机服务,读取 Canvas 课程、作业、公告和课件,支持打开页面时同步和手动更新;重复同步不会重复添加同一个 ID 的记录,并保留本地完成状态。软件工程的官方作业列表实际为空,因此又补充了 PPTX 文本线索与两项已核实的课件任务,明确“列表为空不代表没有作业”。
第3轮(第二次迭代修改)
发现的问题
课表还需要手填;提取的课件文字比较乱;截止时间、来源和更新时间不够清楚。
我给AI的修改要求
第一,课表不应该再由我手动填写,希望能从 Canvas 中提取上课时间、地点,并提供已有课程链接的跳转。
第二,课件提取后的内容显示得比较乱,可以先用语言模型或规则整理,再展示到页面中。
第三,作业信息可以用更清晰的字段展示,尤其是时间,不要都挤在一起。另外,希望显示最近更新时间,并提供手动更新入口。
AI修改了什么
AI 从课堂录像元数据提取时间与教室,用多个上课日支持的规律生成课表,单次调课另外展示;课件按规则整理为作业线索、课堂讨论和教学参考,并保留原文和页码。作业卡片拆分了截止、时间依据、提交方式、来源和状态,也区分“最近成功同步”与“来源最新修改”。
软件工程曾读取到周二 17:55—20:35、上院 203 的规律;10 月 10 日的周六课堂单列,不因此认定每周六都有课。历史规律不是正式校历;读取失败时显示缓存和提示,不装作刚获取了新课表。我再次查看界面后,反馈前面提到的展示问题已经解决。

图1:真实运行页面。截图显示的是上次同步数据,页面明确标注等待更新。
第4轮(第三次迭代修改)
发现的问题
即使页面能查到作业,如果我没有打开它,还是容易错过新任务和上课时间。
我给AI的修改要求
老师发布作业后,我容易错过。能不能接入飞书,在有新作业时直接发消息提醒我?另外,希望在上课前 30 分钟收到提醒。
AI修改了什么
这一轮增加了本地提醒队列与消息预览:首次同步建立基线,之后检测作业、公告和课件变化,重复同步不重复通知;读取不完整时不推进基线,发送结果不确定时待核对。课前提醒时间和学期结束日期(2027 年 1 月 2 日)已经确认,但飞书机器人凭据、私聊收件人和实发验证尚未完成,后台任务仍暂停,不能把它写成已经稳定送达的功能。
第5轮(第四次迭代修改)
发现的问题
我想到:同一项作业可能在 Canvas 和 PPT 中同时出现。按来源 ID 去重,只能避免同一条记录重复导入,不能识别两个来源描述的是不是同一任务。
我给AI的修改要求
如果一个作业在 Canvas 上发布了,同时 PPT 文本也摘录了,罗盘需要能把它们合并,或者至少分开显示。
AI修改了什么
AI 先实现了“分开显示并提示核对”:Canvas 官方作业、已核实课件任务、手动记录分组并可筛选,未核实摘录只在资料区展示。同一课程中,官方与已核实课件任务标题或编号相同,会提示可能重复并提供跳转;两边的要求、截止和完成状态独立保留,统计明确是记录数,不是假装已经去重的作业数。
这一轮用的是显式标注的模拟记录,检查了来源筛选、从官方未完成记录跳到课件已完成记录、刷新持久化和截止时间不互相覆盖;不是老师实际发布了重复任务。测试后已清理当时的模拟记录。
第6轮(第五次迭代修改:真实历史课程验收)
发现的问题
只通过当前软件工程课和模拟数据,还不足以说明其他课程也能使用。我提出用上学期人工智能、数理统计的真实资料继续验收,并要求把新结果同步写进开发记录。
我给AI的修改要求
可以提取上学期人工智能、数理统计等课程的资料,检查罗盘能否兼容课程网站、Canvas 和课件中的作业信息。如果发现适配不好的地方,就继续迭代,并把验证结果汇总进记录。
AI修改了什么
这次真实检查发现:旧课程列表漏掉了历史课;两门课的资料主要为 PDF,旧提取器只支持 PPTX;人工智能用英文 Coursework 命名,还有两条不同 ID 的同名官方作业。AI 因此补充了历史课程选择、PDF 文字线索、Coursework/CW 编号识别、作业正文中的独立参考链接,并对同平台同名不同 ID 的记录提示核对。长正文默认折叠,避免挤满卡片;作业 PDF 页首被课程名称占据时,也能借助文件名分类。
数理统计有三条图片题目,现在明确提醒打开原作业查看,而不把提取不到文字当作没有要求。页面实测还发现旧脚本缓存会混用新旧模块,AI 为资源增加版本标识和不缓存设置,再检查页面能否初始化。
这里仍然采用保守处理:PDF 不做 OCR,最多读取前 300 页;课件摘录不自动变成新待办,网站资料不自动覆盖 Canvas 截止时间,也没有声称实现任意课程网站的自动抓取和语义合并。
我的检查与验证说明
我怎么确认结果正确
我自己检查的是最初提出的使用问题:课程信息是否仍要手抄,课件文字是否挤在一起,时间与来源字段是否容易辨认。我看过修改后的界面并提出下一轮需求;下面的自动化测试、资料交叉核对和截图操作由 Codex 执行,不写成我亲自逐条运行。
1. 基本功能与边界测试
已有浏览器检查覆盖添加、编辑、完成状态、筛选和刷新持久化;重复同步检查任务不会按同一 ID 重复增加,本地状态不被覆盖。当前自动化测试覆盖空输入、非法日期、损坏备份、重复标识、截止排序、课表合并、提醒去重、来源隔离、PDF 缺少提取工具/扫描件/超时、参考链接清洗等场景。
运行命令:
npm test
python3 -m unittest discover -s tests -p 'test_*.py'
本轮结果:49 项 JavaScript、52 项 Python 测试通过。测试通过只覆盖已检查的场景,不能替代真实数据与界面验收。
2. 人工智能:Canvas、课程网站和 PDF 交叉核对
2026 年 10 月 11 日只读同步人工智能(B类,课程 89538),得到 6 条官方作业、52 份文件。其中 47 份来自模块,另外 5 份 PDF 讲义从作业正文链接补找;有两份附件尚未开放,程序保留其状态和原链接,没有尝试绕过权限。
Coursework 2 有两个不同 Canvas ID:400989 和 400998。两条都保留并提示核对;课程网站指向的是 400989,两条 Canvas 截止字段都对应北京时间 4 月 13 日 23:59:59,网站写到分钟为 23:59。三个可读的 Coursework 2–4 PDF 各提取到 6 页候选文字,仍作为材料展示,不再额外增加三项待办。
网站的 Final Project 还分别列了组队、排行榜关闭和最终文件提交时间,不能强行合成一个截止日期。网站交叉核对由 Codex 在这次验收中完成,目前应用提供来源链接,尚未自动解析网站的全部里程碑。

图2:真实 Canvas 同名记录保留,提示核对,不自动合并或删除。

图3:点击“查看另一条记录”后的实际界面,焦点落在另一条记录上,方便比较。
3. 数理统计:缺失内容不能靠猜
数理统计(课程 87081)同步得到 14 条官方作业、35 份文件,包括 10 次编号作业、1 项选做综合作业和 3 条图片练习。没有截止时间的图片练习保留“未公布”,不会凭空生成倒计时。
第一章 PDF 的物理第 49 页写着“作业”,但渲染查看后只有标题和结束语,没有具体题号;Canvas 第一次作业则列出第一章第 3、5、7、9、12、13 题。因此只能把该页当候选线索,不能认定内容完整或据此自动合并。这里还应区分 PDF 物理页码与幻灯片页脚编号(该页页脚为 36/36)。

图4:图片正文与未公布的截止时间明确提示,完整题目以原作业为准。

图5:资料与待办分区,展开 PDF 线索可以核对物理页码及提取原文。

图6:数理统计的历史规律为周五12:55—15:40、东中院2-206。页面明确提醒它不是未来正式校历。
4. 尚未通过的部分
人工智能第一次同步未取得课堂视频时间,随后在页面重试成功,读到周一 12:55—15:40、东上院 205 的历史规律;软件工程首页截图使用之前的缓存。数理统计本轮同步未返回来源警告。这些情况分别记录,不能以一次成功保证以后每次都能获取,也不能把历史规律直接当下学期课表。
飞书实发、后台运行可靠性以及备份下载文件完整落盘的浏览器端验证仍未完成;标题与编号都不同的重复任务也可能漏报。当前交付是来源分开、线索可查、重复可核对,不是全自动判断所有作业是否相同。
心得
最大的惊喜
最让我惊喜的是,我能用日常使用中的具体问题推动开发,不必一开始就写出完整的技术方案。比如,我提出“手动录入太麻烦”“课件文字太乱”“时间字段挤在一起”,AI 就能据此修改代码,把最初需要手填的小工具逐步改成能读取 Canvas、整理课件和分字段展示作业的应用。提出意见后很快就能看到界面的变化,再继续试用和调整,这种反馈速度是这次协作最有帮助的地方。
最大的失望
最让我失望的是,AI 的自检还不够可靠,测试通过也不代表实际使用没有问题。这次自动化测试通过后,浏览器仍因新旧脚本缓存混用而无法正常初始化;换用上学期的真实课程后,又发现旧版不支持 PDF、会漏掉历史课程等问题。这让我意识到,AI 容易围绕已经实现的功能证明它能运行,却未必主动检查真实使用中还缺了什么。最终仍需要我提出具体的验收场景,让它拿原始资料和实际界面交叉核对,而不能只接受一句“测试已通过”。
本地运行
项目使用原生 HTML、CSS、JavaScript 和 Python 标准库;PDF 文本提取额外调用本机的 pdftotext。在项目目录运行:
python3 start.py
浏览器访问 http://localhost:8000,macOS 也可以双击 启动课业罗盘.command。代码目前保存在本机,尚未公开上传;Canvas 凭据仅由本机后端读取,不放入网页或博客。
浙公网安备 33010602011771号