Appearance
第一次任务:先读懂项目,不急着修改
一支笔多少钱,你能看懂;一整个项目从哪开始,未必一眼就能找到。这次先不改代码,只让 Codex 回答一个具体问题:这笔订单为什么要付 13 元?
完成后,你会拿到一份有文件依据的项目说明:从哪里开始、价格从哪里来、金额怎么算。下面的四文件样例让你可以亲自核对答案。
准备好 Node.js 和已登录的 Codex CLI。示例不需要安装额外依赖。已经完成购物车修复的读者,可以用这道题练习另一项能力:检查 Agent 对陌生代码的解释。
第一步:下载示例,运行订单
本题是虚构的订单计算器,不连接支付系统、数据库或客户账号。已有 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,笔 × 2
1200 + 300 × 2 - ② 小计减优惠减去 500 分
1800 − 500 - ③ 得到应付金额13.00 元
1300 分
这个项目的调用关系是:
text
demo.mjs(入口)
├── catalog.mjs:提供商品价格
└── checkout.mjs:计算订单金额
checkout.test.mjs(测试)→ checkout.mjs测试文件单独运行,不是订单计算时调用的模块。如果 Codex 的回答没有说明这层区别,可以追问:“从 demo.mjs 开始,按实际导入关系解释;测试是什么时候运行的?”
对照答案:每个结论到哪里找依据
| 要核查的结论 | 源码依据 | 不应出现的说法 |
|---|---|---|
入口是 demo.mjs | 导入商品目录与 checkout,构造订单并打印 | “从 HTTP 路由接收订单”——样例没有服务器 |
商品数据在 catalog.mjs | NOTE 为 1200 分,PEN 为 300 分 | “实时查询数据库”——样例没有数据库 |
应付为 1300 | 1200 × 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
请只解释“点击保存”这条流程,不修改文件。
从页面入口追到数据写入,列出实际经过的文件与函数。
说明在哪里判断保存成功,现有测试覆盖了什么。
找不到的环节请明确指出,不要补写不存在的实现。把“点击保存”换成你自己的操作;涉及客户数据时使用脱敏输入。源码看不出的业务规则,还需要向业务负责人确认。