Skip to content

第一次任务:先读懂项目,不急着修改 ​

一支笔多少钱,你能看懂;一整个项目从哪开始,未必一眼就能找到。这次先不改代码,只让 Codex 回答一个具体问题:这笔订单为什么要付 13 元?

完成后,你会拿到一份有文件依据的项目说明:从哪里开始、价格从哪里来、金额怎么算。下面的四文件样例让你可以亲自核对答案。

准备好 Node.js 和已登录的 Codex CLI。示例不需要安装额外依赖。已经完成购物车修复的读者,可以用这道题练习另一项能力:检查 Agent 对陌生代码的解释。

阅读顺序示意图:从入口找到结账计算,再用固定输入核对 1300 分的输出。

第一步:下载示例,运行订单 ​

本题是虚构的订单计算器,不连接支付系统、数据库或客户账号。已有 Node.js,且完成上一课登录的读者,可以直接准备文件;未登录也能先运行代码、读参考答案。

使用上一课创建的空文件夹 codex-first-project(还没有就先在 Finder 创建),将四个文件下载到该文件夹,放在同一层,不要保存成 .txt:

打开系统终端,输入 cd (后面有空格),将这个文件夹拖入终端后回车。执行 pwd 和 ls,确认目录正确且能看到四个文件。无需 npm install 或额外配置,再执行:

bash
node demo.mjs
node --test checkout.test.mjs

预期演示输出 {"totalCents":1300};测试 4 个通过、0 个失败。金额单位是分,1300 表示 13.00 元的教学金额,不是真实订单。如果找不到 node,先回到环境准备;如果找不到文件,检查当前目录和文件名。

运行成功后,在 Finder 中复制一份练习文件夹,保留原始输入。这次只读文件,结束后可以用副本检查有没有意外改动。

选做:用校验命令代替文件副本

在任务开始前的 macOS 系统终端执行:

bash
shasum -a 256 catalog.mjs checkout.mjs demo.mjs checkout.test.mjs > before.sha256

它记录文件内容的指纹,供任务结束后对比,不会判断代码逻辑是否正确。

第二步:让 Codex 解释这笔订单 ​

在这个练习目录的系统终端启动只读会话:

bash
codex --sandbox read-only --ask-for-approval on-request

以下是自然语言任务,应发在 Codex 对话里,不是当作 shell 命令执行:

text
请只读取当前目录的 catalog.mjs、checkout.mjs、demo.mjs、checkout.test.mjs。
不要修改文件,不安装依赖,不联网,也不生成报告文件。
请用中文说明:
1. 程序从哪里开始,调用哪个函数,商品数据来自哪里。
2. 为什么演示订单输出 1300,金额单位是什么。
3. 测试覆盖了哪些行为,还有哪些输入没有覆盖。
每个结论写出对应文件和函数;从代码不能确定的事情请明确说不知道。
只在对话中回答。

这个任务把范围缩小到四个文件,把输出限定为可逐项核对的说明。先不要求重构、部署或“顺便优化”。模型是否执行准确,需要你核查,不能由提示词本身保证。

这里的“不联网”指不要调用网页搜索、下载等额外工具,不代表 CLI 可以离线使用;模型服务本身仍需要网络。自然语言约束也不能替代系统权限控制。

第三步:先核算金额,再看调用关系 ​

不用先读懂全部代码,先把回答中的算式与你能手算的结果对上:

  1. ① 商品价格与数量笔记本 × 1,笔 × 21200 + 300 × 2
  2. ② 小计减优惠减去 500 分1800 − 500
  3. ③ 得到应付金额13.00 元1300 分

这个项目的调用关系是:

text
demo.mjs(入口)
├── catalog.mjs:提供商品价格
└── checkout.mjs:计算订单金额

checkout.test.mjs(测试)→ checkout.mjs

测试文件单独运行,不是订单计算时调用的模块。如果 Codex 的回答没有说明这层区别,可以追问:“从 demo.mjs 开始,按实际导入关系解释;测试是什么时候运行的?”

对照答案:每个结论到哪里找依据
要核查的结论源码依据不应出现的说法
入口是 demo.mjs导入商品目录与 checkout,构造订单并打印“从 HTTP 路由接收订单”——样例没有服务器
商品数据在 catalog.mjsNOTE 为 1200 分,PEN 为 300 分“实时查询数据库”——样例没有数据库
应付为 13001200 × 1 + 300 × 2 - 500把分当成元,或漏掉数量
优惠不能让结果为负checkout.mjs 最后调用 Math.max“已经实现退款”——零下限不等于退款逻辑
未知商品与非法数量被拒绝两个 throw 及对应测试“所有输入都安全”——优惠、商品价格等未完整校验

测试还覆盖演示订单与优惠超过小计。没有覆盖税费、多币种、整数溢出、折扣为负数等全部情况。这是阅读练习,不是生产金额库。

最后用编辑器比较练习目录和原始副本,四个输入应保持不变。如果之前选用了校验命令,可在系统终端执行:

bash
shasum -a 256 -c before.sha256

四个文件应显示 OK。若不一致,先查看具体差异,不要继续让 Codex“自动接受修改”。本题不要求改代码,任何输入改动都应解释清楚。

回答不清楚时,继续追问 ​

若模型说“有数据库”,追问:“指出数据库调用的文件和函数;找不到就撤回这个结论。”若它只总结功能,追问:“从 demo.mjs 的导入开始,按调用顺序说明。”

如果文件打不开,先核对目录和扩展名。如果遇到权限拒绝,确认请求仍然只是读取练习文件;不要为完成只读任务授予全盘修改权限。

再用一个变化检查解释 ​

不改文件,追问:“如果只把优惠从 500 分改成 800 分,其他输入不变,应付是多少?请用源码规则推算。”答案应为 1000 分:1800 - 800。若回答仍是 1300,要求它逐项列出价格、数量与优惠;这能发现它是否只复述了上一次输出。

用到自己的项目里 ​

真正可以带走的不是这道金额题的答案,而是让解释落到具体文件和一个可核对的结果上。换成自己的项目,先选一条小路径,例如“点击保存到数据写入”:

text
请只解释“点击保存”这条流程,不修改文件。
从页面入口追到数据写入,列出实际经过的文件与函数。
说明在哪里判断保存成功,现有测试覆盖了什么。
找不到的环节请明确指出,不要补写不存在的实现。

把“点击保存”换成你自己的操作;涉及客户数据时使用脱敏输入。源码看不出的业务规则,还需要向业务负责人确认。

参考资料 ​

练习把修改说清楚 · 返回课程

Codex 中文教程与实战 · 非 OpenAI 官方网站