
1. 项目概述当一门课的“散装资料”撞上 WorkBuddy 的多 Agent 协同引擎我带数据库原理与应用这门课已经七年了每年开学前最头疼的不是备课内容而是整理资料——学生用的 PDF 讲义、自己写的 Word 笔记、从 MOOC 下载的视频字幕、零散的 SQL 练习题截图、往届学生的错题汇总 Excel 表、甚至还有几页手写板书拍照……全堆在一个叫“数据库_2024秋”的文件夹里命名五花八门“ch3-索引优化_v2_final(改).pdf”、“索引那块儿的几个例子.docx”、“视频05-查询执行计划-字幕.txt”、“学生问的B树分裂问题.png”。去年我试过用传统 PPT 软件硬拖硬贴结果做出来的教案逻辑断层PPT 页面堆满文字动画全是“淡入”讲到 B 树分裂时学生眼神放空——不是内容不行是信息没被真正“消化”过。直到我用 WorkBuddy 搭建了一套教学资料自动重组流水线。它不是个“AI 一键生成 PPT”的玩具而是一套可配置、可追踪、可复用的多 Agent 协同工作流。我把原始散装资料扔进去系统自动拆解、归类、校验、重构一个 Agent 负责识别并提取 PDF 中的定义与定理比如“事务的 ACID 特性”另一个 Agent 对比教材目录结构把零散内容锚定到“第6章 并发控制”下第三个 Agent 把 SQL 练习题按难度和知识点打标生成带解析的卡片最后一个 Agent 把所有结构化输出喂给 PPT 引擎自动生成带分步动画的 B 树分裂示意图页面连配色都按教学场景做了区分——概念页用蓝灰冷色调案例页用橙黄暖色强调错误陷阱页加红色警示边框。整个过程不依赖提示词反复调试也不需要手动复制粘贴更不会把“对偶问题”和“凸优化”混进数据库章节。核心在于WorkBuddy 把教师脑中的知识图谱变成了可执行、可验证、可迭代的工程化流程。这个项目解决的不是“怎么快速做 PPT”而是“如何让教学资料从静态存储态变成动态服务态”。适合三类人直接抄作业高校教师要批量处理新学期课程资料职业教育讲师需快速适配不同培训大纲教育科技公司做课件自动化工具时能直接参考其 Agent 分工逻辑与数据流转设计。关键词 WorkBuddy、教案、PPT、多 Agent 协同、数据库原理与应用不是标签而是这套方案的四个技术支点——WorkBuddy 是执行底座教案是结构化输出目标PPT 是可视化交付载体多 Agent 协同是实现复杂逻辑拆解的核心范式而数据库原理与应用则是验证这套流程是否真正“懂教学”的严苛考题。2. 教学资料的“散装”本质与 WorkBuddy 的协同架构设计2.1 为什么传统方法在教学资料处理上必然失效很多人以为“整理资料重命名归类文件夹”但教学资料的“散装”本质远不止于此。以《数据库原理与应用》为例它的散装性体现在三个不可分割的维度第一是语义碎片化。同一知识点分散在不同载体中教材 PDF 里有“封锁协议”的定义Word 笔记里有“两阶段锁”的手绘流程图Excel 表格里存着“死锁检测算法”的伪代码而学生提问截图里则藏着真实困惑——“为什么时间戳协议不能完全避免幻读”。这些内容在物理上分离在语义上却高度耦合。传统搜索只能匹配关键词无法理解“时间戳协议→幻读→隔离级别→并发控制”这条隐含的知识链。第二是结构非对齐。教材目录是“第7章 事务管理”MOOC 视频分集叫“ACID 与隔离级别详解”而你自己的教案草稿可能按“问题驱动”组织“学生常问的3个事务误区”。三套结构互不映射强行合并只会制造逻辑断层。我试过用 Notion 手动建立双向链接结果维护成本极高——每次更新一个知识点就得同步修改十几处关联。第三是意图模糊化。一份“B 树插入过程.png”图片对教师是教学演示素材对学生是复习图示对助教是批改参考依据。同一份资料承载多重教学意图但文件属性里没有任何字段能标记“适用场景课堂演示/课后自学/考试重点”。没有意图标注自动化就失去决策依据。这三点叠加决定了任何单点工具如 PDF 提取工具、PPT 插件、笔记软件都无法根治问题。必须用系统级方案——而 WorkBuddy 的多 Agent 架构恰恰是为这种复杂、异构、高意图密度的任务设计的。2.2 WorkBuddy 多 Agent 协同的底层分工逻辑WorkBuddy 不是“一个大模型包打天下”而是把教学资料处理任务拆解成四个专业 Agent每个 Agent 专注一个不可替代的子任务并通过标准化数据契约Data Contract交换信息。这种设计源于我对教育场景的长期观察优秀教师备课时大脑也在进行类似分工——有人负责梳理知识脉络架构师有人深挖案例细节研究员有人设计呈现方式视觉设计师有人校验教学效果质量官。WorkBuddy 把这种人类认知模式转化成了可部署的工程模块。Knowledge Extractor Agent知识抽取 Agent专精于非结构化文本与图像的理解。它不简单 OCR而是结合数据库领域知识库我预置了《数据库系统概念》第六版术语表、SQL 标准语法树、常见错误模式库对 PDF 文字进行语义增强解析。例如看到“T1: R(A), W(A), R(B)T2: R(A), W(A), R(B)”它能自动识别这是“事务调度示例”并提取出读写操作序列、冲突关系、可串行化判定结论而非仅存为字符串。对“B 树分裂示意图.png”它调用轻量级 CV 模型定位节点、指针、键值再结合领域规则生成结构化描述“根节点键值[15,30]左子树含键值[5,10,12]右子树含键值[35,40,45]分裂后新根键值30”。Curriculum Mapper Agent课程映射 Agent解决结构非对齐问题。它内置了三套权威课程结构模板高等教育出版社《数据库原理及应用教程》目录、MOOC 平台“数据库系统概论”课程大纲、以及我自定义的“问题导向教学法”结构按“典型问题→原理支撑→案例验证→常见误区”组织。当 Knowledge Extractor 输出“封锁粒度”知识点时它不靠关键词匹配而是用图神经网络计算语义距离将该知识点锚定到三套结构中最优位置——比如在教材结构中归属“第6章 并发控制”在问题导向结构中则归入“典型问题如何平衡并发性能与数据一致性”。Pedagogy Formatter Agent教学格式化 Agent把知识转化为教学资产。它掌握教学法硬规则定义类内容必须配生活类比如“事务回滚就像微信转账失败后自动退款”算法类内容必须有分步执行动画脚本如“B 树插入”拆解为“查找叶节点→插入键值→判断溢出→分裂节点→更新父节点”5帧易错点必须生成对比表格如“共享锁 vs 排他锁”列“能否读取”“能否写入”“能否兼容其他锁”。它输出的不是纯文本而是带元标签的 Markdown[concept:ACID][analogy:银行转账][difficulty:core]这些标签成为后续 PPT 生成的指令源。PPT Generator AgentPPT 生成 Agent最后的交付引擎。它不生成“通用 PPT”而是严格遵循 Pedagogy Formatter 输出的元标签与结构指令。例如收到[concept:B树分裂][animation:step-by-step][visual:tree-diagram]它调用本地安装的 python-pptx 库动态生成 5 页 PPT第1页展示未分裂状态第2页高亮待插入键值第3页显示分裂临界点第4页呈现新节点结构第5页用箭头动画演示指针重连。配色方案由教学场景决定课堂演示页用深蓝背景白字高对比度自学材料页用浅灰背景深蓝字护眼考试重点页加红色边框放大镜图标。四个 Agent 之间不共享内存只通过 Kafka 消息队列传递结构化 JSON 数据包每个包包含source_id原始文件哈希、knowledge_id知识唯一标识、curriculum_path课程结构路径、pedagogy_meta教学元标签。这种松耦合设计带来两个关键优势一是可单独升级某个 Agent比如换用更强的 CV 模型处理手写板书不影响整体流程二是所有操作可审计——我能查到某页 PPT 的第3帧动画源自哪份 PDF 的第12页第4段文字经哪个 Agent 的哪次处理生成。2.3 为什么选 WorkBuddy 而非其他 AI 工具市面上有大量“AI 做 PPT”工具但它们在教学场景中集体失效原因很现实通用大模型缺乏领域纵深让 ChatGPT 写“数据库事务隔离级别”PPT它能罗列四种级别但无法判断“可重复读”在 MySQL 和 PostgreSQL 中的实现差异更不会提醒你讲解时必须强调“幻读”在范围查询中的表现否则学生做实验会困惑。WorkBuddy 允许我注入领域知识库如 MySQL 官方文档片段、PostgreSQL 源码注释让 Agent 在推理时调用这些“外挂记忆”。单体架构无法应对多意图一个“学生错题汇总.xlsx”文件对 Knowledge Extractor 是数据源对 Curriculum Mapper 是知识点分布热力图对 Pedagogy Formatter 是“常见误区”素材库。通用工具要求你先手动分类再分别处理而 WorkBuddy 的 Agent 可同时消费同一份输入各自产出不同维度的结构化输出。黑盒流程不可控某款 PPT 工具生成的“索引优化”页把 B 树和哈希索引用同一张图示意技术上错误。我无法干预它的中间决策。WorkBuddy 的每个 Agent 都暴露可配置参数Knowledge Extractor 的置信度阈值低于0.85的提取结果自动进入人工审核队列Curriculum Mapper 的结构匹配权重教材目录权重0.6MOOC大纲权重0.3自定义结构权重0.1这些参数让我始终握有最终解释权。最关键的是部署形态——WorkBuddy 支持本地化部署所有教学资料包括学生作业、考试题库不出内网。这对高校教师是刚需不是功能选项。我测试过把整门课的 PDF、Word、Excel、PNG 扔进 WorkBuddy 工作区总数据量 2.3GB处理耗时 18 分钟生成教案 Markdown 127 页PPT 89 页全部离线完成。这种可控性是云端 SaaS 工具永远无法提供的教学尊严。3. 实战全流程拆解从散装文件夹到可交付教案与 PPT3.1 环境准备与 WorkBuddy 初始化配置WorkBuddy 的安装本身不复杂但教学场景的特殊性决定了初始化配置才是成败关键。我用的是 WorkBuddy 企业版 2.4.1Linux Ubuntu 22.04 LTS所有组件均部署在本地服务器不依赖任何外部 API。以下是必须完成的六项配置缺一不可第一步创建教学领域知识库这不是简单的“上传文档”而是构建一个可查询的向量数据库。我用 ChromaDB 作为向量存储嵌入模型选用text2vec-large-chinese针对中文教材优化。知识库包含三类内容权威教材原文高等教育出版社《数据库原理及应用教程》PDF 全文已去除页眉页脚OCR 识别准确率 99.2%标准术语表从 SQL 标准文档、IEEE 计算机词典中提取的 1276 个数据库术语每条含定义、英文名、常见变体如“封锁”也收录“加锁”“锁定”错误模式库过去三年收集的学生典型错误每条含错误代码、错误现象、正确写法、教学提示如“WHERE 子句中使用聚合函数未加 GROUP BY”对应提示“聚合函数作用域是分组后GROUP BY 是分组指令”。提示知识库初始化后必须运行validate_knowledge_integrity.py脚本校验术语覆盖度。我曾发现“多粒度封锁”词条缺失导致相关知识点提取失败及时补全后才继续流程。第二步定义课程结构 Schema在 WorkBuddy 后台的curriculum_schema.json中我定义了三层结构{ course: 数据库原理与应用, chapters: [ { id: ch6, name: 并发控制, sections: [ {id: 6.1, name: 事务特性, learning_objectives: [掌握ACID四要素]}, {id: 6.2, name: 封锁协议, learning_objectives: [理解两阶段锁原理]} ] } ] }这个 Schema 不是静态目录而是教学逻辑骨架。Curriculum Mapper Agent 会严格按此结构归类知识点并自动检查“学习目标”字段是否被覆盖——如果某知识点找不到匹配的 learning_objectives它会触发告警避免知识遗漏。第三步配置 Agent 工作流在workflow_config.yaml中声明四个 Agent 的执行顺序与数据契约agents: - name: knowledge_extractor input: [*.pdf, *.docx, *.txt, *.png] output: knowledge_json params: {confidence_threshold: 0.85, max_context_length: 2048} - name: curriculum_mapper input: knowledge_json output: mapped_json params: {schema_ref: curriculum_schema.json, match_weight: [0.6, 0.3, 0.1]} - name: pedagogy_formatter input: mapped_json output: pedagogy_md params: {analogy_db: teaching_analogies.json, animation_rules: animation_rules.json} - name: ppt_generator input: pedagogy_md output: output_pptx params: {template_path: /templates/database_classic.pptx, font: 思源黑体}特别注意animation_rules.json我为数据库核心算法预设了 27 条动画规则如“B树分裂”必须生成 5 帧“查询执行计划”必须用颜色区分扫描方式全表扫描红索引扫描蓝哈希连接绿。第四步准备原始资料文件夹我的database_raw/文件夹结构如下database_raw/ ├── textbook/ # 教材扫描件 │ └── db_concept_6th.pdf ├── notes/ # 教师手写笔记已转为 PNG │ └── ch6_lock_protocol.png ├── exercises/ # 练习题 │ ├── sql_practice.xlsx │ └── transaction_quiz.docx ├── videos/ # MOOC 字幕 │ └── video05_transcript.txt └── student_work/ # 学生作业脱敏处理 └── midterm_errors.xlsx注意所有文件名禁止中文括号、空格、特殊符号。WorkBuddy 默认忽略.开头的隐藏文件所以.gitignore这类文件可安全存在。第五步设置教学意图标签体系在intent_tags.json中定义 12 个教学意图标签每个标签绑定生成规则{ class_demo: {prio: 1, ppt_layout: full_image, animation: step_by_step}, self_study: {prio: 2, ppt_layout: two_column, font_size: 18}, exam_focus: {prio: 3, ppt_layout: highlight_box, border_color: red} }当 Knowledge Extractor 识别到“死锁检测算法”时会根据上下文自动打上class_demo标签触发 PPT Generator 使用全图布局分步动画。第六步验证工作流健康度运行workbuddy health-check --all它会测试 Knowledge Extractor 对 PDF 的 OCR 准确率要求 ≥98%验证 Curriculum Mapper 能否将“时间戳协议”正确映射到ch6.3检查 Pedagogy Formatter 是否能为“幻读”生成生活类比我预设的类比是“淘宝秒杀时库存显示不一致”确认 PPT Generator 能加载指定模板并替换占位符。只有全部通过才允许启动正式处理。3.2 核心处理环节四个 Agent 的实操细节与参数调优Knowledge Extractor Agent让非结构化资料开口说话这个 Agent 的核心能力不是“识别文字”而是“理解教学语境”。以处理ch6_lock_protocol.png一张手写板书照片为例它的处理链路如下预处理调用 OpenCV 进行二值化、去噪、倾斜校正。我实测发现对教师手写体cv2.adaptiveThreshold比全局阈值更稳定尤其处理粉笔字迹时。OCR 与结构识别使用 PaddleOCR v2.6但关键在后处理——它不直接输出文字而是构建“教学元素图”将图像划分为逻辑区域标题区、公式区、示意图区、批注区对公式区调用 LaTeX-OCR将手写公式\frac{d}{dx}f(x)转为标准 LaTeX对示意图区用 YOLOv8n 检测“锁图标”“事务框”“时间轴”再用图卷积网络GCN推断元素关系如“锁图标指向事务框”表示“事务持有锁”。语义增强解析这才是真正的智能。当它识别到手写文字“两段锁扩展段收缩段”会查询知识库确认“两段锁”即“Two-Phase Locking”标准缩写为 2PL匹配错误模式库发现该表述易与“两阶段提交2PC”混淆自动添加校验标签[disambiguate:2PL_vs_2PC]提取隐含条件“扩展段不能释放锁”“收缩段不能获取锁”生成结构化 JSON{ concept: 两阶段锁协议, definition: 事务执行分为扩展段和收缩段..., constraints: [扩展段只增锁, 收缩段只释锁], common_misconception: 与两阶段提交协议名称相似但原理不同 }参数调优心得confidence_threshold设为 0.85 是经验阈值。低于此值的内容如模糊的公式进入人工审核队列我每天花 15 分钟处理比返工整个 PPT 高效得多max_context_length设为 2048因为数据库概念定义通常很短过长会导致上下文稀释比如把“封锁粒度”和“索引类型”错误关联。Curriculum Mapper Agent在混沌中重建教学秩序这个 Agent 的价值在于它解决了“同一知识点在不同资料中表述不一”的痛点。以“可串行化”为例教材 PDF 写“可串行化是最高隔离级别”MOOC 字幕说“可串行化调度等价于某串行调度”学生错题 Excel 记录“SELECT ... FOR UPDATE 在可串行化下仍可能死锁”。Curriculum Mapper 不做简单合并而是执行三步映射语义统一调用 Sentence-BERT 计算三段文字的余弦相似度确认它们指向同一概念生成统一 IDcon:serializability。结构锚定将con:serializability与课程 Schema 匹配。教材目录中它在ch6.4MOOC 大纲中在week7我的问题导向结构中在problem:how_to_avoid_inconsistency。Mapper 根据权重0.6:0.3:0.1选择ch6.4为主路径但保留其他路径作为“跨章节链接”供后续生成教案时使用。缺口检测检查ch6.4的 learning_objectives 是否被覆盖。教材强调“定义”MOOC 强调“判定”学生错题暴露“实践陷阱”。Mapper 发现“实践陷阱”未在 learning_objectives 中自动创建待办事项“补充 learning_objectives分析可串行化下的典型并发陷阱”。实操技巧我在curriculum_schema.json中为每个章节设置了min_coverage_ratio最低覆盖比例。ch6.4设为 0.9意味着该章节知识点覆盖率必须 ≥90%否则整个工作流暂停。这倒逼我补全了 MOOC 中缺失的“快照隔离”内容反而提升了教案完整性。Pedagogy Formatter Agent把知识翻译成教学语言这个 Agent 是 WorkBuddy 最具教学智慧的部分。它输出的不是普通 Markdown而是带执行指令的教学中间格式。以处理con:serializability为例它生成# 可串行化Serializability [concept:serializability][difficulty:advanced][intent:class_demo] ## 定义 可串行化调度是指多个事务并发执行的结果与某个串行执行的结果完全相同。 [analogy:交通调度] 想象十字路口的车辆事务红绿灯调度器决定谁先过。可串行化就像所有车按单一方向如先A后B依次通过结果与A先B后或B先A后完全一致。 ## 判定方法 - **优先图法**构建事务依赖图无环则可串行化 - **冲突可串行化**仅考虑读写冲突忽略写写冲突 [animation:priority_graph] 1. 显示事务 T1、T2 2. 添加 T1→T2 边T1 写 AT2 读 A 3. 添加 T2→T1 边T2 写 BT1 读 B 4. 高亮环形结构 → “存在环不可串行化” ## 常见误区 | 误区 | 正解 | 教学提示 | |------|------|----------| | “可串行化无死锁” | 死锁是资源竞争问题可串行化是结果等价问题 | 死锁可发生于任何隔离级别可串行化是调度性质 |关键配置说明[intent:class_demo]触发 PPT Generator 使用全屏动画[animation:priority_graph]调用预设的动画规则生成 4 帧 PPT表格中的“教学提示”字段来自错误模式库确保直击学生痛点。注意Pedagogy Formatter 会自动检测 Markdown 中的 LaTeX 公式如$T_1 \rightarrow T_2$并转换为 PPT 中的 MathType 兼容格式避免字体丢失。PPT Generator Agent精准交付教学视觉资产这个 Agent 的强大在于它把教学逻辑变成了像素级指令。以生成“优先图法”动画为例模板解析加载database_classic.pptx定位animation_placeholder占位符帧生成根据[animation:priority_graph]指令调用 python-pptx 创建 4 页第1页纯白背景居中显示“T1”“T2”两个圆角矩形第2页在 T1 下方添加“写A”T2 下方添加“读A”并画箭头 T1→T2第3页在 T2 下方添加“写B”T1 下方添加“读B”并画箭头 T2→T1第4页高亮两个箭头形成环右侧弹出红色文本框“存在环 → 不可串行化”样式注入所有文字用“思源黑体”箭头粗细 2.5pt圆角矩形填充色按事务区分T1 蓝T2 橙动画编排每页设置“淡入”进入箭头设置“擦除”动画从起点到终点文本框设置“缩放”动画。避坑经验务必在 PPT 模板中预设好所有占位符title_placeholder,content_placeholder,animation_placeholderWorkBuddy 不会自动创建新占位符字体嵌入Linux 系统默认无“微软雅黑”我用fontconfig将“思源黑体”映射为sans-serif确保导出 PPT 在 Windows 上不换字体图片压缩对 PNG 示意图Agent 自动用pngquant压缩至 80% 质量单页 PPT 体积从 15MB 降至 2.3MB播放更流畅。3.3 输出成果验证教案与 PPT 的教学可用性检验生成的成果不是终点而是教学闭环的起点。我建立了三级验证机制第一级机器校验运行workbuddy validate-output --all它检查教案 Markdown 中所有[concept:*]标签是否能在知识库中找到对应条目防止幻觉PPT 中所有动画帧数是否匹配[animation:*]指令如priority_graph必须生成 4 帧每页 PPT 的字体、字号、配色是否符合intent_tags.json规则如exam_focus页必须有红色边框。未通过项自动归入validation_failed/目录标注失败原因。第二级教学逻辑校验我用一个 Python 脚本模拟学生视角随机抽取教案中 5 个知识点检查其“定义→类比→案例→误区”链条是否完整对 PPT 中的 3 个动画手动播放并计时B 树分裂动画是否严格 5 帧每帧停留是否 ≥2 秒验证跨章节链接点击教案中“参见 ch5.2 索引结构”是否能跳转到对应 PPT 页第三级真实课堂检验这才是终极考验。我选了 3 个班级平行授课A 班用传统 PPT我手工制作B 班用 WorkBuddy 生成 PPT未修改C 班用 WorkBuddy PPT 我微调了 2 页增加一个学生提问的真实案例。课后问卷显示B 班学生对“可串行化”概念理解正确率 72%A 班 58%C 班 81%。差距不在内容深度而在教学节奏——WorkBuddy 的分步动画让抽象概念变得可触摸而我的手工 PPT 一页塞满文字学生跟不上。4. 常见问题与实战排查技巧那些 WorkBuddy 不会告诉你的细节4.1 知识抽取失败手写体识别不准怎么办现象notes/ch6_lock_protocol.png中的“两段锁”被识别为“雨段锁”导致后续所有处理错误。排查思路先确认是 OCR 问题还是语义理解问题——用workbuddy debug ocr --file ch6_lock_protocol.png查看原始 OCR 输出发现确实是“雨段锁”检查 PaddleOCR 的中文模型是否适配粉笔字。实测发现PP-OCRv3对印刷体准对粉笔字差切换为chinese_cht模型专为繁体/手写优化后准确率升至 93%但仍有 7% 错误这时启用“领域词典强制纠正”在ocr_correction_dict.json中添加雨段锁: 两段锁Agent 会在 OCR 后自动替换。独家技巧对高频错别字我用正则批量修正。比如手写“封锁”常被识为“风锁”在ocr_postprocess.py中加入text re.sub(r风锁, 封锁, text) text re.sub(r死所, 死锁, text)比训练新模型快 10 倍且效果稳定。4.2 课程映射偏差知识点被分到错误章节现象学生错题 Excel 中的“MVCC 实现”被映射到ch6.4 可串行化但 MVCC 属于ch7.2 隔离级别实现。根本原因Curriculum Mapper 的语义匹配权重设置不合理。原配置中教材目录权重 0.6但学生错题更贴近 MOOC 大纲权重应提高。解决方案临时调整权重workbuddy config set mapper.match_weight [0.4, 0.5, 0.1]更彻底的做法为student_work/目录单独配置映射策略在workflow_config.yaml中增加- name: curriculum_mapper_student input: student_work/*.xlsx output: mapped_student_json params: {schema_ref: mooc_schema.json, match_weight: [0.2, 0.7, 0.1]}这样学生错题走专用映射通道与教材处理解耦。4.3 PPT 生成异常动画帧数不符或字体丢失现象[animation:bplus_split]指令生成了 3 帧而非要求的 5 帧Windows 打开 PPT 时所有文字变成宋体。排查步骤检查animation_rules.json中bplus_split的定义是否完整bplus_split: { frames: 5, elements: [leaf_node, insert_key, overflow_check, split_nodes, update_parent] }缺少frames字段会导致默认 3 帧字体问题根源在 Linux 系统字体映射。运行fc-list | grep Source确认思源黑体已安装再执行echo fonts.conf ~/.fonts.conf # 内容将 Source Han Sans CN 映射为 sans-serif重启 WorkBuddy 服务生效。救命技巧当 PPT 导出后出现乱码不用重跑整个流程。用python-pptx脚本直接修复from pptx import Presentation prs Presentation(output.pptx) for slide in prs.slides: for shape in slide.shapes: if hasattr(shape, text_frame) and shape.text_frame: for paragraph in shape.text_frame.paragraphs: for run in paragraph.runs: run.font.name Source Han Sans CN prs.save(fixed.pptx)4.4 教学意图错配自学材料页用了课堂演示动画现象exercises/sql_practice.xlsx中的练习题本应生成self_study意图的双栏 PPT却生成了class_demo的全屏动画。原因Knowledge Extractor 在识别 Excel 时将“练习题”误判为“课堂案例”因为两者都含 SQL 代码。解决方法在intent_rules.json中添加显式规则{ file_pattern: exercises/*.xlsx, intent: self_study, override: true }更智能的做法让 Knowledge Extractor 学习区分“案例”与“练习”。我在错误模式库中新增样本案例特征含“演示”“说明”“如”等引导词SQL 后跟结果截图练习特征含“请写出”“完成以下”“结果是什么”SQL 后无结果。重新训练 Knowledge Extractor 的分类器准确率从 78% 提升至 94%。4.5 性能瓶颈2GB 资料处理耗时超 1 小时现象首次运行workbuddy process --input database_raw/12 分钟后卡在 Knowledge Extractor。诊断用htop查看发现 CPU 占用 100%