代老师 × 小墨 · v4.0 · 从考研播课到大学数学智慧课堂 核心原则:结构化优先、渐进增强、审计自动化、教师可控
text
课程 (Course) → 章 (Chapter) → 节 (Section) → 知识点 (Keypoint) → 卡片/练习 (Card/Quiz)
粒度示例可做的智能操作课程高等数学跨课程知识图谱关联章无穷级数学习进度追踪、章末综合诊断节幂级数课前预习推送、课后作业布置知识点阿贝尔定理精准搜索、关联推荐、错题溯源卡片定理条件/结论/反例闪卡复习、公式速查、AI答疑引用练习题收敛半径计算形成性评价、自适应推题、错因分析
javascript
window.EP_DATA = {
id: "ch08_s03", title: "幂级数", subtitle: "阿贝尔定理与收敛半径",
course: "高等数学", chapter: "无穷级数", section: "幂级数",
textbook: "同济七版·下册·第十一章第三节",
audioFile: "podcast_ch08_s03.mp3",
totalDuration: 2700,
segments: [ /* {speaker, text, start, end} */ ],
chapters: [ /* {title, start, cls, icon} */ ],
keypoints: [ /* {id, title, formulas, textbookRef, prerequisites, crossRefs} */ ],
methodTree: { root: "...", children: [ /* {name, when} */ ] },
sceneColors: ["#...", "#...", "#...", "#..."],
cards: [ /* {icon, title, tag, label, body} */ ],
cardMap: [ /* {cardIdx, segIndices} */ ],
formulaMap: [ /* {r, v, sub} */ ],
quizzes: [ /* {type, q, options?, ans?, hints?, cardId?, triggerTime?} */ ],
teachingFlow: { /* 教学场景标注 */ }
};
题型type数据字段弹出 UI检查方式选择题choice``options:[...], ans:N点击选项ans === 选择索引简答题text``a:"答案"文本框fuzzyMatch判断题tf``ans:'T'/'F'✅正确/❌错误精确匹配填空题fill``ans:"单空" 或 ans:[...,...]输入框替换 ___fuzzyMatch(支持多空)判断改错judge``ans:bool, correction:"..."判断+改错框两级检查证明题proof``rubric:"采分点1|2|3"AI辅助评分人工审阅+AI
text
hints: ["概念提示 → 检查定义条件",
"方法提示 → 尝试比值审敛法",
"步骤提示 → 先求极限 lim|a_{n+1}/a_n|"]
系统记录提示使用层级 → 判断题目难度与学生掌握程度。
text
timeupdate/setInterval → checkQuizTriggers(t)
→ 匹配 triggerTime ± 2.0s
→ shouldTriggerQuiz(epId, qi) 检查是否已触发
→ triggerQuizPopup(i, q) → 显示底部弹出窗口
→ markQuizTriggered + audio.pause()
popup_triggered_{id} 避免重复弹题工具用法?reset_q=1URL参数清除触发记录forceFirstQuiz()Console手动触发首题toggleQuizDebug()底部调试状态栏[Quiz] 日志checkQuizTriggers实时检查[QuizPopup] 日志popup显示确认
\( 转义地狱: new RegExp('\\(') 在V8中开启捕获组 → 用 \x28 或 [(]EP_CURRENT = D 之后调用typeset(el)text
quiz-bank.js # 基础题库(11专题,100+题)
quiz-bank-expansion-2.js # 扩展卷一(计算+证明,追加100+题)
quiz-bank-expansion-3.js # 扩展卷二(判断+填空,追加44题)
html
<script src="quiz-bank.js"></script>
<script src="quiz-bank-expansion-2.js"></script>
<script src="quiz-bank-expansion-3.js"></script>
<script src="quiz-widget.js"></script>
javascript
B.t01 = B.t01.concat([
{ type: 'fill', q: '极限 $\\displaystyle\\lim_{x\\to 0}\\frac{\\sin x}{x}=$ ___',
ans: '$1$', difficulty: 'basic',
hint: '重要极限', lessonId: 't01-l1' },
{ type: 'tf', q: '可导一定连续。',
ans: 'T', difficulty: 'basic',
hint: '可导与连续的关系',
explanation: '可导⇒连续,反之不成立。', lessonId: 't02-l1' }
]);
markdown
# 第X章第Y节 设计稿
> 教材:同济七版 | 课时:45min | 前置:... | 易错:...
## 教学环节 & 交互设计
## 对话脚本
audit_course.js 全量扫描)#层级技术理由前端原生JS播放器性能优先数据IndexedDB + localStorage离线+触发状态公式MathJax 3 (tex-chtml)成熟LaTeX渲染可视化Canvas 2D + D3.js粒子场景+知识图谱部署Nginx + SCP简单可靠AILLM API出题/答疑/分析
脚本用途generate_section.pysegments → 完整数据文件audit_course.js全课程审计(TT/正则/KP/卡片/编码)fix_missing_triggers.js批量补 triggerTimefix_formula_regex.js修复 \( 转义build_knowledge_graph.py生成跨课程知识图谱deploy.py自动化部署
bash
scp -B -i ~/.ssh/deploy_ode_course player-data/eXX.js root@host:/www/wwwroot/moodle/ode-course/player-data/
scp -B -i ~/.ssh/deploy_ode_course podcast_video_v4.html root@host:/www/wwwroot/moodle/ode-course/
scp -B -i ~/.ssh/deploy_ode_course quiz-bank-expansion-3.js root@host:/www/wwwroot/moodle/
# 验证部署
curl -s -o /dev/null -w "%{http_code}" "http://host/ode-course/podcast_video_v4.html?ep=E01&reset_q=1"
bash
vim chX_sY_design.md # 1. 设计稿
python extract_segments.py > segs.json # 2. 提取 segments
python generate_section.py # 3. 构建数据
node --check player-data/chX_sY.js # 4. 语法验证
node audit_course.js # 5. 全量审计
scp -B -i key player-data/chX_sY.js # 6. 部署
# 浏览器打开 ?ep=EXX 测试弹题触发 # 7. 回归测试
风险对策结构化数据工作量大生成脚本 + AI辅助初稿公式正则转义audit自动检测 + 批量修复音频文件匹配度测试 triggerTime 在 totalDuration 范围内AI生成不稳定强制标注AI来源 + 人工审核教师使用门槛高设计稿模板 + 一键生成 + 培训
节点交付标准M1: 单章Demo数据完整 + 弹题触发 + 审计0warnM2: 教学平台6种题型 + 错题本 + 学习看板M3: 知识图谱三门课图谱 + 诊断推荐M4: AI增强出题/答疑/分析可用M5: 全课程全部章节数据完成