当我第一次研究 DeepTutor 和 edulab 时,最直接的冲动是“把优秀能力都接进来”。DeepTutor 有完整的能力路由、知识库、研究与解题工作区;edulab 能把数学问题变成可交互课程页,并用 SymPy 让答案、步骤和画面共享精确计算来源。它们都比一个单点示例更完整。
但对 TeachFlow 来说,整仓移植会带来一个更难解释的问题:最终到底是谁拥有课堂、课程、学生证据与教师决定?
参考项目不是零成本零件
外部项目提供的不只是某个函数,还包含自己的页面、会话、存储、运行时、权限假设和升级节奏。DeepTutor 官方仓库当前描述的是一个覆盖 Chat、Quiz、Research、Visualize、Solve、Course Study、Mastery Path 等多种模式的统一能力运行时;edulab 则把题目规范化、SymPy 精确计算、数据驱动模板和自校验组合成完整交付页。
如果把这些系统整体嵌入 TeachFlow,就会出现“两条河”:
- 一条河保存 TeachFlow 的
Lesson / Scene / Publication / LearningEvidence; - 另一条河保存外部运行时的会话、内容块、知识库或生成页面;
- 教师在两个界面间判断;
- 失败恢复和版本升级需要跨越两套状态;
- 外部模型输出可能绕过 TeachFlow 的人工准入与事实权威。
决策:迁移能力,不迁移权威
TeachFlow 最终采用“窄适配”的方式:从参考项目吸收可独立验证的机制,让输出回到已有领域对象。
edulab 方向最典型。项目没有嵌入整页 HTML、CLI、题型注册器和模板运行时,而是引入最小 analytic_kernel.py 与 SymPy 计算路径:Next.js API 负责输入校验和协议适配,React/SVG 消费结构化结果。这样,精确计算成为 TeachFlow 的一种能力,而不是第二个产品入口。
DeepTutor 方向则更多吸收“能力与工具分层”“模型—工具—观察—再生成”和引用保留的思想。生成结果必须落回 TeachFlow 既有的课程、场景、内容块和教材引用合同;Agent 不能因为来自更强的外部运行时,就直接拥有掌握度、知识图发布或教师审核权。
一个能力进入项目要过五道门
我后来把采纳判断固定为五个问题:
- 用户任务:它解决的是教师或学生的哪个真实任务?
- 最小输入输出:能否用稳定 DTO 或纯函数边界表达?
- 事实权威:结果写回哪个已有对象,谁批准?
- 失败隔离:外部模型、Python 或服务不可用时,哪条基础链仍能继续?
- 停止条件:什么证据不足时必须停止扩展?
这套问题也解释了为什么“功能越多”可能越不可信。如果新增能力无法回答权威归属和失败语义,它只是扩大了演示面积。
开源许可不是架构许可
edulab 使用 Apache-2.0 许可,意味着可以在遵守许可条件的前提下使用和修改代码;但许可证并不会替你解决领域归属、接口稳定、供应链更新或产品一致性。DeepTutor 的功能面和运行时也在持续演进,因此任何比较都应固定访问日期、版本或提交,不能把某天的 README 当成永久合同。
在 TeachFlow 中,外部来源被分成三种状态:
- 已采纳:例如最小 SymPy 计算内核与结构化渲染方法;
- 仅参考:例如完整 Capability/Tool 组织方式;
- 明确不采纳或冻结:第二套前端、第二套会话存储、复杂多 Agent 运行时。
代价与收益
窄适配会失去“直接获得整个上游产品”的速度,也要求自己维护 DTO、兼容和测试。但它换来了更清晰的项目叙事:TeachFlow 拥有教学业务事实,外部能力只在被授权的范围内计算、检索或生成。
这不是否定上游项目。恰恰相反,只有先承认上游是完整产品,才不会把它误当作一段可以随意剪贴的代码。
常见问题与设计边界
为什么不做微服务,把两个项目都保留下来?
拆成服务仍然不能自动解决事实权威。若两个服务都能更新课程或学情,网络边界只会把双写问题藏得更深。先定义唯一写入者,再决定部署形态。
你怎么证明不是“借鉴概念、自己重写”?
对实际采用的代码应保留许可证、来源文件和本地适配边界;对只吸收的方法应明确写成参考,不宣称复用实现。TeachFlow 的 python/analytic_kernel.py 已在文件头记录来源和许可。
什么时候应该整体采用外部系统?
当外部系统本身就是用户要使用的主产品,并且身份、数据、升级与运维责任都愿意交给它时。TeachFlow 当前不是这个前提。
参考资料
- DeepTutor 官方仓库
- edulab 官方仓库
- NIST AI RMF Core:第三方软件与供应链风险
- TeachFlow
项目亮点与演进.md、python/analytic_kernel.py
结论
TeachFlow 与其他项目的关系不是“谁替代谁”,而是“谁拥有什么”。外部项目贡献能力与启发,TeachFlow 保留教学事实、工作流和人工决定。项目真正的成熟度,不体现在接入了多少仓库,而体现在每次接入之后权威边界仍然清楚。