🤖 把课件变成 AI Agent 能查询的知识库
v2.2.0 让下载完的课件不再只是硬盘上的一堆 PDF。新增的学习层可以索引本地课件、导出 Obsidian 知识库、生成复习 notebook,并通过 MCP 服务把这些内容开放给 Claude Code 等 AI agent。
全部操作本地文件,不需要登录 Moodle —— 复习流程在认证之前就短路返回了。
python main.py --index # 索引本地课件
python main.py --obsidian vault # 导出 Obsidian 知识库
python main.py --notebook revision.ipynb --days 7 # 生成复习 notebook
python -m moodle_scraper.mcp_server --root . # 给 agent 用的 MCP 服务接入 Claude Code:
claude mcp add moodle -- python -m moodle_scraper.mcp_server --root /path/to/materials✨ 新增 / Added
- MCP 服务(
moodle_scraper/mcp_server.py)—— 手写 JSON-RPC over stdio,零额外依赖。5 个工具:list_courses、search_materials、get_material_text、course_overview、revision_plan - Obsidian 导出(
study/obsidian.py)—— 每门课一个 MOC 索引页,材料按周分目录;每篇笔记带 YAML frontmatter、原文件嵌入、复习要点空白区、正文摘要与 wikilink 互联 - 复习 notebook(
study/notebook.py)—— nbformat 4.5 纯 JSON 生成,含 N 天复习计划与「空白回忆」自测区 - 本地索引(
study/index.py)—— 按文件名启发式识别材料类型与周次,可选提取正文,落盘.moodle-index.json - 复习 Skill(
skills/moodle-revision/)—— 让支持 Skills 的 agent 学会完整复习流程 - 排期唯一事实源(
study/planner.py)—— MCP 与 notebook 共用同一套排序与间隔重复实现
🔧 修复 / Fixed
revision_plan此前只做均分、不含间隔重复复习位(只有 notebook 有),现已补齐 d-1 / d-3 / d-7 复习安排,两条路径结果保证一致- 消除 MCP 与 notebook 中重复的排序 / 分天实现(约 60 行),根除了两者结果漂移的可能
- 多课程 notebook 会重复输出课程标题
- SKILL.md 曾描述过一个实际不存在的能力,已修正
⚠️ 如实说明 / Honest notes
请在使用前了解这些边界:
- 这不是"官方 ChatGPT Work 集成"。本项目提供的是标准接口:MCP 服务、Obsidian vault、
.ipynb、Skill 文件。Claude Code / Claude Desktop 可直接接入;ChatGPT 能否使用取决于它自身的 MCP 连接器支持。除此之外没有任何厂商专有集成。 - PDF 正文提取未经真实环境验证。该功能通过
pypdf/pdfminer懒加载,但开发环境两者都未安装,因此只测试到了「库缺失时降级为空文本」这条路径。真实 PDF 的提取质量尚未验证。想要全文检索请pip install pypdf;不装也能正常运行,只是检索退化为按文件名匹配。 .txt/.md/.csv的正文提取无需任何额外依赖,这部分经过完整验证。- 材料类型与周次是启发式识别,靠文件名匹配关键词(
Week 3、Wk3、Topic 3、lecture、lab等)。命名不规范的课件可能被归为other或识别不出周次——这不影响下载与导出,只影响排序与分组。 - 测试全部离线,287 项通过。网络访问隐藏在 Protocol 接缝之后,测试用假 HTTP 客户端注入预设响应,不触碰真实 Moodle。
📦 依赖 / Dependencies
无新增硬依赖,仍是 requests、beautifulsoup4、selenium、rich。
Full Changelog: v2.1.0...v2.2.0