Codex 实践系列 Vol.04:用 Goal 和 Plan 管住一个长任务

在先前的 Codex 实践中,我们已经跑过 CLI、读过开源项目,也用 /status/diff/review/plan 等 Slash Command 管理过一次完整的开发过程。

到了这一篇,我们来做一个时间更长的任务。

最近,小七一直在用 Codex 做一个叫 huhu-airConditioner 的小项目,中文名叫「隔屏吹风」。做这个项目的原因是有一天,小七在空调房里开着 28 度的空调吹风扇,被冻得瑟瑟发抖,于是萌生了个想法:能不能把风扇、空调、房间环境和人体体感全部算出来?

在这个页面上,你可以调节空调温度、风量和模式,也可以选择不同类型的风扇。页面会根据当前的输入信息,来计算风速、体感温度等结果。当然,小七还弄了个小黑屋------进入隐藏的工程模式,还能继续调整房间、湿度、衣着、距离等参数,查看空调与风扇组合的功耗,最重要的是,你可以知道怎么搭配会更省电!守住钱包很重要。

其实,这个隔屏吹风做到这里,基本上是成型了。接下来,小七带你进入另一种开发状态:基础功能已经有了,但产品还需要一轮一轮继续优化。

正好用来讲解本次 Codex 实践的/goal/plan部分。

长任务里的 Goal 与 Plan

之前介绍 Slash Command 时,我们简单用过 /goal/plan

如果只看名字, /goal/plan两者好像都有一点"先告诉 Codex 准备做什么"的意思,但放到持续迭代的项目里,它们的职责其实很好区分。一开始,小七设想的流程是这样的:

复制代码
Goal
整个阶段最终想做到什么
    ↓
Plan 01
这一轮解决什么
    ↓
执行 + 验证
    ↓
Plan 02
下一轮解决什么
    ↓
执行 + 验证
    ↓
Plan 03
继续推进
    ↓
最终回到 Goal 检查

这样分工就很清楚了,Goal 管的是一段时间里的持续目标;Plan 管的是当前这一阶段准备怎么完成。

OpenAI 官方现在把 Follow a goal 定义成适合长时间工作的 Codex 用法:给 Codex 一个持续目标,让它在多轮工作中朝着可以验证的结果推进。

对于 huhu-airConditioner 来说,我们不会给 Codex 一个需求,然后让它一次性把整个产品重新做一遍。

这次准备围绕几个首屏体验问题继续优化:

  1. 提升首屏液晶数字的可读性;
  2. 让用户更容易理解不同风扇到底会带来什么风感;
  3. 优化工程模式入口,并增加更明显的体感反馈(观看视频的小伙伴可能发现了,有 20s 小七都在尝试进入隐藏模式,这就是这个优化点的由来)。

目前来说,这 3 个任务都在服务于同一个方向。所以,我们先设置 Goal。

项目状态的重新确认

其实,这个项目之前主要是在 Codex 客户端里开发的。这次为了方便观察执行过程和截图,我们回到 CLI,在同一个项目目录里继续。

先进入项目:

图 1:进入 Codex 模式

我们要继续开发旧项目时,小七不建议一上来就告诉 Codex"帮我优化一下"。这个需求本身比较模糊,而项目里又已经有不少现成逻辑,包括体感计算、风扇标定、酒店面板、工程模式和测试。如果 Codex 还没搞清楚这些内容,"优化一下"很容易顺手改到已经稳定的部分。

因此,在开始修修补补的优化工作之前,我让 Codex 整理了一份现有项目的 PRODUCT-FUNCTIONAL-SPEC.md。第一步,我们先让它恢复项目现场:

图 2:让 Codex 了解现有实现

这一步有点像重新接手一个做了一半的项目。代码告诉 Codex 现在是怎么实现的,产品文档则告诉它哪些设计是有意为之。

比如「隔屏吹风」里的那些夸张换算可以很好玩,但底层物理数字不能随便改;酒店面板和工程模式共享状态;体感和能耗计算也已经有对应测试。

这些都是后面 Goal 的边界。

给整个优化阶段设置 Goal

确认完现状:

图 3:Codex 了解完现状之后的返回图

我们就可以正式设置 /goal 了。这次我没有写:

复制代码
/goal 继续优化隔屏吹风

这样的目标信息太少。上面提到过,Codex 知道你要"优化",却不知道优化到什么程度,也不知道哪些东西已经稳定,这样不利于它交付一个好结果。所以,最后给它的需求是这样的:

图 4:输入 /goal 后 Codex 的 Goal 状态

这个 Goal 里主要放了几类信息。第一类是当前基线 。项目已经有酒店面板、工程模式和计算系统,所以后面的任务是在现有产品上继续打磨。第二类是这一阶段真正想改善的东西 。这里没有写具体哪个按钮改成什么颜色,而是把目标放在可理解性、可读性和风感反馈上。第三类是不能随便碰的边界 。尤其是 physics 里的计算、风扇标定和已经固定下来的产品口径。第四类是完成方式。每轮都先规划,再修改,再验证。

接下来,我们就看看这个 Goal 会怎样带着 Codex 继续推进项目。

Goal 设置后,Codex 直接开始干活了

原本按照前面的设想,我准备先从最直观的问题开始,再用 /plan 处理酒店面板液晶数显的可读性。

当前酒店面板用了类似真实空调控制器的液晶屏设计。这个方向我挺喜欢,但实际使用时,"实际 / 体感"这一侧的数字有点暗。尤其是七段数码管还有未点亮的数字段,真正亮起的数字和背景之间层级不够明显。

图 5:项目现有面板

所以,我原本已经准备好了第一条 /plan

复制代码
/plan 根据当前 Goal,先处理酒店面板液晶数显的可读性问题。

当前问题:
设定温度比较清楚,但"实际 / 体感"数字和液晶背景的对比度偏低,用户需要仔细看才能分辨。

请先检查当前数显的组件、字体、颜色、未点亮数字段和相关样式。

要求:
1. 保留现在的液晶屏和七段数码管视觉;
2. 重点提高实际体感温度的可读性;
3. 不要把整个液晶屏简单改成高亮样式;
4. 不要修改任何体感计算;
5. 同时检查桌面端和现有响应式布局。

先给出问题原因、计划修改的文件、视觉调整方案和验证方式,不要修改代码。

但这里出现了一个和我预想不太一样的情况。这条 /plan 我还没来得及输入,Codex 已经根据刚才设置的 Goal 开始工作了。

图 6:Codex 开始修改代码

从执行过程里可以看到,它已经开始读取相关代码、修改文件,并继续运行 TypeScript 检查、Lint 和测试。在这一轮中,Codex 调整了液晶数显的字号,把原来的"实际 / 体感"改成了更直接的"当前体感",同时还修改了与首屏交互有关的代码和测试。

现在,你可以直观地感受到 Codex/goal这个命令的主动性了:它不会等你 Plan 1、Plan 2 ......都拟定好,再一个个接着完成。一旦你设置了目标,它就会立马行动。

只要目标足够明确,Codex 会直接围绕这个 Goal 开始推进。 这也意味着,/goal 写得越具体,Codex 后续自主推进的边界就越清楚。

所以这次真正发生的流程更接近:

复制代码
Goal
明确整个优化阶段
        ↓
Codex 自己分析项目
        ↓
开始修改
        ↓
运行检查和测试
        ↓
持续向 Goal 推进

这也是为什么刚才的 Goal 不能写得太随意。如果我只写:

复制代码
/goal 帮我继续优化隔屏吹风

Codex 同样可能直接开始工作,但我们并没有告诉它哪些地方可以动、哪些计算不能碰,也没有给出完成标准。

前面 Goal 里写进去的项目基线、四个优化方向、禁止修改的内容和验证要求,这时候才真正开始发挥作用。

先看看 Goal 到底做了什么

既然 Codex 已经开始执行,我们就先让这一轮跑完。

在 Codex 执行的过程中可以看到,它并没有只盯着其中一个界面细节,而是在围绕整个 Goal 检查首屏相关实现。任务完成后,我们来运行下 /diff 看看:

图 7:Goal 执行后的 diff

我们来检查两件事。第一,看它实际改了哪些文件。第二,看这些修改有没有越过 Goal 里提前划定的边界,比如有没有顺手修改 physics 里的体感公式、风扇标定或者其他已经稳定的产品逻辑。

然后再回到浏览器里看实际效果。

图 8:Goal 修改后的首屏,效果并不明显,而且把面板拉高了;

用 Plan 收住这一轮修改

Goal 确实主动把任务往前推了,但是你也看到上面效果了:不合格,返工!

原先的问题没解决,还引入了一个新的问题------为了让用户更容易理解风扇,Codex 在面板底部新增了一段风感说明;模式键附近也补充了操作提示。信息确实更多了,但整个酒店面板也被向下撑高,原本一个桌面屏幕可以完整看到的内容,现在需要继续往下滚。

也就是说,这轮 Goal 虽然完成了一部分需求,但最终效果还有继续收敛的空间。这时候,我们再来用 /plan

前面 Goal 已经让 Codex 做过一轮真实修改,所以现在的 Plan 不需要重新规划整个项目。我们只解决当前页面上已经暴露出来的问题。

直接输入:

图 9:Codex 返回的 Plan

这次 Plan 的作用就很明确了:先看清上一轮哪里改得不合适,再决定哪些内容保留、哪些需要收回来。

Plan 给出之后,Codex 还会再确认一次是否按照这份方案实施。这里我们先快速检查下修改范围和验证方式,确认没有继续扩大任务,就可以选择让它继续实施计划:

图 10:确认实施 Plan

确认后,Codex 会退出 Plan mode,按照刚才确定的方案开始修改代码。这一轮里,它主要做了几件事:提高"当前体感"数码管的对比度,压缩新增的风扇说明,把风感反馈重新收进现有区域,同时收紧面板的纵向空间。

图 11:Codex 执行 Plan

修改完成后,再看一次 /diff

图 12:Plan 执行后的 diff

最后回到浏览器检查实际效果。这里重点看三个地方:右侧"当前体感"是否更容易辨认;风扇信息有没有保留下来,同时减少重复说明;酒店面板能不能重新完整显示在桌面首屏里。

图 13:Plan 后的面板,UI 并没有改善

虽然这轮优化没能如期实现,但这次实际跑下来,GoalPlan 的分工也清楚了很多。

Goal 更像整个阶段的持续目标。目标足够明确时,Codex 会直接围绕它往前推进。Plan 更适合放在具体节点上,当实际结果和预期还有偏差时,先让 Codex 停下来分析当前修改,再把下一轮范围、方案和验收条件收紧。

这次的流程最后变成了:

复制代码
Goal
明确整个阶段要改善什么
    ↓
Codex 主动推进
    ↓
人工检查实际结果
    ↓
Plan
收窄下一轮修改范围
    ↓
确认方案
    ↓
执行 + 验证

对于这种已经开发了一段时间、还要继续迭代的旧项目来说,这种组合会比较实用。Goal 负责让 Codex 知道项目接下来要往哪里走,Plan 则帮我们在关键节点重新控制修改范围。

文末吹个风

当然,项目没有停在这轮实践这里。

后面小七又继续处理了数显、风扇反馈、工程模式入口和页面细节,也修掉了这一轮修改过程中出现的一些回归问题。

你可以调调空调温度、换几个不同的风扇,再去找一下那个"酒店不希望你看到"的工程模式。

到这里,这次 Codex 长任务实践也就结束了。

从设置 Goal、让 Codex 主动推进,到人工检查实际结果,再用 Plan 收窄修改范围,这次实践至少说明了一件事:长任务交给 Agent 之后,我们可以把方向交给 Goal,把阶段性的控制交给 Plan,同时还得自己看最终结果有没有真的变好。

项目可以继续往下做,但每一轮要做什么,依然可以很清楚。

相关推荐
仍然.3 小时前
服务端高并发分布式结构演进之路
大数据·数据库·redis
qq_267612893 小时前
从工具整合到AI协作:Gitee DevOps平台如何重塑企业研发全流程效能
人工智能·gitee·devops
2401_859506243 小时前
大漆(天然生漆)产品的品控体系与检测标准——一份行业技术观察
人工智能
我命由我123453 小时前
Android Drawable - gradient
android·java·java-ee·kotlin·android studio·android-studio·android runtime
MC皮蛋侠客3 小时前
Redis 系列(三):底层实现(一)——对象系统、SDS 与 dict
数据库·redis·缓存
杜子不疼.3 小时前
不会SQL也能改数据库?我用NocoDB把MySQL变成了表格界面
数据库·sql·mysql
Eloudy3 小时前
一键构建 pytorch cpp lib 前端和 wheel
人工智能·pytorch·gpu
秋天的一阵风3 小时前
🔥 Network 里那坨 "data:" 我真看吐了,自制开源 Chrome 插件,AI 流式调试直接开挂
前端·人工智能·后端
Wang's Blog3 小时前
AI Agent白手起家53: 动态提示词与情感分析模块实战
人工智能