← Projects
Building software 457 字 · 约 2 分钟阅读

CourseLM

从课程资料生成 Markdown / LaTeX 复习讲义,支持章节缓存、失败续跑与条件性 PDF 导出。

周期 2026-08 → now
更新 2026-10-04
GitHub ↗
Stack
Python notebooklm-py asyncio Pydantic Playwright pytest
目录4 节

从整理课件开始

CourseLM 来自我复习课程时的资料整理需求:上传已有课件,按课程大纲生成绪论与章节,再组装成可以继续修改的讲义。我负责多阶段流程编排、缓存与导出处理。

当前版本统一使用 Python CLI,通过 notebooklm-py 接入资料上传与问答。Playwright 用于登录相关流程;GUI 和 Windows Portable 已移除,Obsidian 同步为可选项。

工作流程

扫描资料 → 上传 NotebookLM → 分析大纲 → 生成绪论与章节
         → 检查与清洗 → Markdown / LaTeX → 可用时导出 PDF

Pydantic 校验课程结构 JSON,章节按“标准例题、逐步讲解、方法归纳、自己练习”组织。输出处理检查标题、例题来源标记与顺序,清洗公式和 Markdown,题型索引直接从章节提取。

缓存与失败续跑

上传状态和章节缓存保存在本地。普通重跑跳过已完成的有效结果,补齐失败章节;调用异常可以重试,登录失效单独报错。已有 Markdown 可再次组装和导出,无需重新访问 NotebookLM。

courselm login
courselm generate 电磁场
courselm export-handout 电磁场

PDF 导出依赖可用的 XeLaTeX 环境;没有编译环境时仍保留 Markdown 和 LaTeX 源码。生成内容仍需要结合课程原始资料检查。

工程验证

测试使用 FakeClient 覆盖适配器、缓存、内容处理与导出流程;GitHub Actions 配置 Windows / Python 3.11、3.12 测试。

2026-10-03 的本地核验记录为 152 passed、2 failed,两个失败场景涉及无效模板的提前拒绝,以及旧章节排除与同步。本页不将这份历史记录描述为当前版本全部通过。

python -B -m pytest tests -q -p no:cacheprovider

后续重点是复查这两个失败场景,并继续验证真实课程资料的生成结果。

仓库、安装与迁移说明

内容核对:2026-10-04;测试记录日期:2026-10-03。