我家小孩在学围棋,经常要做书上的死活题。做完之后,总会有一些错题需要重做。传统做法当然也能解决:拿橡皮把原来的答案擦掉,再让孩子重写。
但问题是,擦过的痕迹总还在。尤其是书上的落子、标记、箭头,一旦写上去,再怎么擦,纸面也回不到最初的样子。孩子重做的时候,还是会被原来的痕迹干扰。
我最开始想到的办法其实很直接:既然网上能找到这本书的 PDF,那我把错题从 PDF 里截出来,重新打印,不就行了吗?
可真要开始做,我立刻就感到压力很大。
如果只有两三道题,手工截图当然可以接受。但错题一多,整件事就会迅速变成重复劳动:打开 PDF、翻页、放大、找题号、截图、粘到 A4 页面里,一遍一遍重复,最后再打印。
每一步都不难,但总量一上来,就特别耗神。
我后来突然想到:这种事,交给 AI 啊。
因为它是一条规则明确、重复度高、验收标准也很清楚的流程。人真正该做的,不是亲自一张张截图,而是把目标说清楚,把规则定清楚,然后让 AI 去执行。
于是,这个围棋错题整理项目,就成了我和 Codex Agent 的一次协作。
这件事真正关键的,不是 Codex 自己多会拆步骤。 更关键的是:我先把自己的思路想清楚,然后再把任务交给它。
最重要的:先把自己的思路想清楚,但不需要一开始就想清所有细节
我给自己的目标其实很朴素:
把孩子做错的题,从 PDF 里干净地拿出来,重新排成一份可以直接打印、直接重做的练习页。
不是做一个围棋教学工具,不是自动讲题,也不是识别答案。我只是想解决一个生活里的小麻烦。
而且,我不想把自己的时间耗在这种重复动作上,所以我决定让 AI 来干。
但我不会一上来就把所有要求一股脑扔给 AI。我会先人为地把任务拆成几个顺序明确的步骤。每一步都有清晰的输入和输出。这样即使中间要升级、返工、换书,也不会把整个流程搅乱。
我最后把它拆成了三部分:
先把要整理的错题记下来,写到 错题题目.md
这样的文件里。再让 Codex 按照“第几页第几题”去 PDF 里找题目,截图、命名,并保存到错题文件夹里。 最后再开一个线程,让 Codex 把这些截图按要求排版到 Word 里,生成可以直接打印的练习页。
我的理解,AI 最怕的不是任务难,而是任务模糊。
第一步:先把输入准备成 AI 能消费的形式
我先做的,是把错题整理成结构化清单。
我希望这个工作流是可重复的。如果我每次都把一堆题目直接塞进 Agent 对话框里,很容易因为上下文过长、注意力分散而漏题。写到单独文件里,不但更清楚,也方便不同线程重复调用和复核。
比如我把错题题目写进 Markdown,格式就是“第几页、第几题”。但这些内容不是我一个字一个字敲进去的,而是我拿着书,像和人说话一样,直接和 Typeless 软件说“第几页第几题”,Typeless 再帮我整理成下面这种结构。
项目里现在还保留着这样的文件,比如 错题题目.md 和 围棋死活辞典错题题目.md。
这一步看起来普通,但其实非常关键。
如果要类比成人类协作,它就像是给 Agent 发了一个清清楚楚的待办清单。人会忘事,Agent 也会丢上下文,所以最好不要只靠聊天记录,要给它一个稳定的“笔记本”。

图注:先把错题整理成“页码 + 题号”的结构化清单,Agent 才能稳定接手后续流程。
第二步:我给 Codex 的,不是一句“帮我搞定”,而是一段能执行的任务
第二步要做的是:让 Codex 根据我给出的题目,去 PDF 里找对应的题,截图、重命名,并保存到错题文件夹中。
我当时给它的提示词是这样的:
目录里有一本书是丁开明的《围棋死活大全》,我已经让小朋友做完了书里面的这些题,现在我也已经批改完了。我要做的事情是:我会告诉你这道题是在第多少页的第多少题,你就把对应那道题的题目重新截出来,另存成 PNG 格式的图片。这样我可以让小朋友再把做错的题重新做一遍。可以用第二编 角上死活的 第10题 作为开始。这个提示词看起来很简单,但我现在回头看,它至少有两个关键点。
第一,我用了计划模式。
计划模式的好处,是先让 Codex 像一个协作对象一样,把它理解到的任务写成计划,再由我来判断这个计划是否合理、是否要执行。它不会一上来就闷头开干,而是先和我确认目标、范围和步骤。
第二,我给了它一个最小目标。
我不是一开始就让它把几十道题全做完,而是先让它试一题。这样我可以很快验收它到底有没有理解我的要求。如果第一题就偏了,马上纠正;如果第一题对了,再让它继续扩展。
这一点非常重要。
很多时候,不是 AI 不行,而是我们一上来就让它“哐啷哐啷干半天”,等做完才发现方向错了。先做一个最小闭环,成本最低,反馈最快。
它给我的反馈大致是这样的:先建立一个可复用流程,输入“书内页码 + 题号”,输出对应 PNG;本次先落地一个样例,比如
第12页 第10题
下面就是他的反馈计划
### 计划标题《围棋死活大全》按“页码+题号”裁题为 PNG(先完成第12页第10题)### Summary- 目标是建立一个可复用的单步流程:你给“书内页码 + 题号”,自动输出对应题目的 PNG。- 本次先按你确认的规格落地首例:`第12页 第10题`,裁剪范围为“整题格”,输出名为 `p12_q10.png`(当前目录)。### Key Changes / Implementation- 新增一个本地脚本(建议):`C:\\Users\\hustb\\Documents\\围棋\\scripts\\crop_problem_png.py`。- 脚本接口固定为: - `--page`(书内标注页码) - `--question`(该页题号) - `--scope`(默认 `full_cell`,即整题格) - `--out`(默认 `p{page}_q{question}.png`)- 实现流程: 1. 打开《围棋死活大全》PDF并定位到目标页(本书当前采用已验证偏移:书内页码 `N` -> PDF第 `N+8` 页)。 2. 高分辨率渲染目标页(用于稳定识别题号位置)。 3. OCR识别该页所有数字锚点,筛选题号候选(如 `10`)。 4. 基于同页相邻题号位置推断该题“题格”边界(同列/同行中点分割 + 边缘留白)。 5. 导出 PNG 到当前目录,命名 `p12_q10.png`。- 本次不追索后续解答页,不跳到后面页码,只在第12页完成第10题裁剪。### Test Plan- 功能测试:运行 `--page 12 --question 10`,必须生成 `p12_q10.png`。- 内容校验: - 图片中包含“10题对应整题格”。 - 不应切到相邻题(11题或13题主体不应进入画面中心)。 - 清晰度可用于打印或再次做题。- 稳定性测试:同页重复运行两次,输出尺寸与内容一致(允许极小像素级差异)。### Assumptions- 只处理当前目录这本《围棋死活大全》PDF。- 你提供的“页码”是书内标注页码(非PDF阅读器页序)。- 默认裁“整题格”(你已确认)。- 默认输出到当前目录并自动命名(你已确认)。看到这里,我就知道:它已经理解了任务的方向。至于它内部怎么拆 OCR、怎么判断边界、怎么组织脚本,对我来说反而不是最重要的。那些是它的工作,我只负责判断它拆得合不合理,最后结果能不能验收。
第三步:中间它也出错也会很慢,但我没有自己跳下场
这件事并不是一次就做对的。
中间它也算了很久,也出现过几个错误。但我没有因为它慢、因为它错,就立刻自己跳下场去手工截。
我做的事情是:继续看它的结果,指出问题,让它修,再继续验收。
最后,它还是把“截图、命名、保存”这件事完整干完了。

图注:Codex 按规则把截图保存下来后,文件夹里形成了可继续处理的中间产物。
这一步之后,我其实已经很有信心了。因为只要题目图片能稳定落地,后面的排版就只是另一个子任务。
第四步:另开一个线程做排版,不让两类工作互相污染上下文
接下来,我又开了一个线程。
原因很简单:截图是截图,排版是排版,这是两类工作。
我不希望它们混在一个很长的上下文里,互相占用注意力。所以我把它们拆开,让 Agent 在不同线程里专心处理不同问题。
这一步我给 Codex 的提示词就更简单了:
在“错题题目_PNG”文件夹内,有孩子之前做错的围棋题目。我现在想把它们打印在 A4 纸上,每张纸打印 6 个题目。请帮我把这些文件夹内的错题排好版,放到 Word 或者 MD 文件当中。这类任务不需要太多背景,关键是把输入目录、输出形式和版式要求说清楚。
最后,Codex 就把文件夹里的错题整理进了 Word 里。

图注:第二个线程负责把已经裁好的题图排进 Word,生成可打印的练习页。
第五步:书一换,Agent 也跟着升级
后来我又换了一本书,《围棋死活辞典 上》。目标没有变,还是“把错题从 PDF 里抠出来重新打印”,但书一换,页面版式也变了,旧脚本当然不能直接复用。
如果这件事全靠我自己做,我大概率会很烦。因为这等于前面那套流程又要重新折腾一遍。
但换成 Agent 协作,感觉就完全不同了。
我不是重新开始,而是告诉它:目标不变,输入格式不变,变化的是页面结构,请你按新版式重新适配。
于是,Codex Agent 又生成了一个新脚本:
这一版的思路也跟着调整了:它先检测页面里每一道题的方形题框,再用 OCR 识别题框下方的数字标签,匹配到我要的题号以后完成裁剪。
也就是说,AI 不是“一次写完一个万能工具”,而是在任务条件变化时,继续沿着同一个目标去迭代流程。
下面是《围棋死活辞典 上》自动裁出来的题图样例。

图注:新版式下的自动裁题样例,说明流程不仅跑通了,而且能适配不同的书。
我的感想
这件事对我来说,最有价值的地方,已经不只是“省下了多少分钟”。
更重要的是,我越来越清楚地看到:Agent 不是 Demo,不是玩具,它是真的能帮我处理工作和生活里的具体问题。
而且,这个过程中有一个特别值得提醒自己的地方。
中间有一个多小时,AI 反复出错,一遍一遍尝试。以前遇到这类事情,我的第一反应常常是:算了,我自己来,肯定更快。这个判断在单步上通常没错。比如单独截一张图,我自己动手大概率确实比 AI 快。
但问题在于,这种比较只看到了“单步速度”,没看到“注意力占用”。
人一旦自己下场,注意力就会被整条流程绑住。你要一直盯着页面、切换窗口、命名文件、检查漏项。
反过来,AI 就算慢一点,只要它在独立推进,这段时间我的脑子就是空出来的。我只需要偶尔回来抽查一下结果。
这也是我现在越来越坚定的一个观点:我们要尽量把重复性的工作交给 AI。
不要因为 AI 看起来慢,就忍不住自己跳进去把活抢过来。只要这个任务的规则是可描述的、结果是可验收的、错误是可纠正的,那它就很适合交给 Agent。
围棋错题整理只是一个很小的例子,但截图、填表、汇总、格式转换、信息搬运、批量排版,本质上都是同一类问题。难度不高,却特别消耗人;创造性不强,却特别容易把注意力切碎。
所以这次做完以后,我给自己留下的不是“我又写了两个脚本”,而是一个更有用的提醒:
以后再遇到重复劳动,我第一反应不应该是自己上手,而应该先问一句:这件事能不能先定义规则,然后交给 Agent?
然后还要注意:尽量帮助它,指导它,让它干完,而不是自己跳下场去把活做了。
和 AI 助手也需要磨合,它需要更多的锻炼机会,我也需要更多的领导智慧。
夜雨聆风