这个项目一开始不是为了“做一个 AI 学习产品”。
它更具体。孩子已经学了两年 Python,正在准备 Python 5 级和信息素养相关考试。问题也很清楚:for 循环不够稳,独立写完整程序还吃力,Debug 能力需要慢慢练。
如果只让 Codex 出题,它很快就能生成一堆练习。但那不是我想要的。题目多,不等于训练有效。更容易发生的是,今天五道题,明天五道题,做完就散了,错因没有留下,复做没有安排,长期路线也没有收敛。
所以我让 Codex 做的第一件事,不是出题,而是把项目变成一个学习系统。
我是怎么一步步做的
第一步,我先让 Codex 读现有资料,而不是马上生成新题。它要看 README.md、AGENTS.md、学习路线.md、已有题库和应用设计,先知道孩子当前水平、短板和训练边界。
第二步,清理材料位置。原始考级资料、打印练习和早期 Markdown 周练习不继续混在工程里,而是放到仓库外归档。正式应用只读 content/ 里的结构化题库。这个动作很普通,但它把“资料堆”切成了“输入资料”和“应用数据”。
第三步,写长期路线。Codex 把 12 个月拆成五个阶段:基础加固、结构化编程、算法入门、赛事能力、赛前强化。每周训练什么、每 4 周怎么测、错题怎么复做,都先写进路线,而不是临时想到哪练哪。
第四步,把题目结构化。题目进 content/questions/week-XX.json,答案和测试进 content/solutions/week-XX.json,知识点进 content/curriculum/topics.json,再用 Schema 约束。这样 Codex 后续出题时,不只是写题干,还必须照着数据结构交付。
第五步,设计桌面应用。它没有一上来写界面,而是先写 应用架构设计.md,把 Tauri 2、React、Pyodide Web Worker、SQLite、DeepSeek API Key 存储、本地备份恢复这些边界定清楚。
第六步,进入实现和验收。应用里要能跑 Python、判公开测试和隐藏测试、保存草稿和提交历史、记录错因、安排复做、导出周报。最后还要有手工验收清单,比如死循环超时后环境能不能恢复,备份恢复会不会覆盖 API Key。
这条路走完,项目就不再是“让 AI 出题”。
它变成了一个本地学习系统:题目、判题、记录、复盘和 AI 建议各在各的位置上。
先定一句硬规则
这个项目里有一句很重要的话:
本地程序负责事实,大模型负责建议。
这句话把边界切开了。
题库、答题记录、学习画像、判题结果都保存在本机。Python 代码优先在本机运行,不依赖云端判题。AI 可以做学习诊断、题目草拟和分级提示,但不能直接判题,不能自动修改学习画像,也不能自动发布新题目。
这个边界很重要。学习系统最怕把“建议”和“事实”混在一起。孩子的代码有没有通过测试,应该由确定性测试说了算;AI 可以解释错误,但不能替代判题器。
Codex 帮我把材料变成工程
后来项目慢慢长成几个层次。
第一层是学习路线。学习路线.md 里把 12 个月训练拆成基础加固、结构化编程、算法入门、赛事能力、赛前强化几个阶段。每周默认 5 道题,包含热身、专项、Debug 和趣味综合挑战。
第二层是结构化题库。题目放在 content/questions/,标准答案和测试用例放在 content/solutions/,知识点放在 content/curriculum/,再用 JSON Schema 约束格式。
第三层是桌面应用。技术上用 Tauri 2 + React + TypeScript,用 Pyodide Web Worker 在本机跑 Python,用 SQLite 保存学习记录,用系统原生凭据库存 DeepSeek API Key。
这些选择不是为了显得技术栈很满。它们服务的是同一个目标:这个工具平时能离线用,关键数据留在本机,AI 只在需要建议时出现。
这个用法适合什么
Codex 很适合把“我有一堆材料”变成“我有一个可维护系统”。
它可以帮你做几件麻烦事:
- 把长期学习目标拆成阶段。
- 把题目和答案从 Markdown 变成结构化数据。
- 给题库加 Schema 和校验脚本。
- 把应用功能拆成前端、运行器、本地存储、AI 辅助和家长审核。
- 写出手工验收清单,比如死循环超时后 Python 环境能不能恢复,备份恢复会不会覆盖 API Key。
这些事都不神奇,但很费心。
更关键的是,Codex 会把“当下的想法”沉到文件里。README.md 说明项目定位,AGENTS.md 说明后续维护规则,应用架构设计.md 说明技术边界。下一次继续做,不用重新解释一遍。
这类项目真正难的不是写一个页面,也不是接一个模型。
难的是让学习这件事有记忆。