OpenAI 工程师 Rodrigo Roim 在 X 上分享了一段对比:几个月前,他用 Codex 清理死代码,还得明确告诉模型去哪个位置找;现在,Codex 会自己去 Slack 里找候选,对照生产遥测核实,然后起草清理用的 PR。
成果是一组实打实的数字:五个工程师利用业余时间跑了两周,合并 1400 多个 PR,删掉 80 多万行代码。其中一个服务的容器镜像从 3.31GB 降到 1.72GB,缩小 48%。
细节来自 OpenAI 开发者博客 10 月 14 日发布的文章《Maintaining software with the GPT-6 family》。作者在 Core Experimentation 团队,负责支撑公司内部的各种实验,从前端改版到模型服务效率。
死代码:从"指定位置"到"自己找证据"
在编码智能体普及之前,团队清理没人用的代码,靠静态分析系统加运行时日志。这套办法有两个坑:反射之类的动态用法会让静态分析失准;有些代码路径看着没人走,其实是留着给未来故障兜底的开关。
GPT-5.6 Sol 进入 Codex 之后,做法变成:指定一块区域,给出验收标准,让模型自己写静态分析、自己删死代码。按需写出来的分析脚本,维护成本比通用静态分析系统低,可靠性差不多。
换成 GPT-6 Astra,提示词反而更含糊了。作者试的第一条指令很短,原文里还带着拼写错误:
请帮我找出并清理仓库里的死代码。你可以查看 Slack、Statsig(我们用的功能开关和实验平台)或者任何你需要的信息源,确认这些代码确实不再被使用,可以删除或者简化。
这条对 GPT-5.6 Sol 来说太模糊、没法完整处理的指令,Astra 做下来了。它的动作包括:翻历史 PR,从 Slack 讨论里收集上下文,查内部项目追踪工具;读生产环境的性能剖析表,确认要删的那些行从来没有被执行过;再为每一处删除解释理由。
最后一点对评审帮助很大。删代码的难点从来不只是删,更是让人相信这些代码真的没人用——把理由和证据一起交上来,评审明显快了。
过期实验:护栏写进提示词,先出报告再动手
清死代码可以给一条含糊的指令,清过期实验不行。过期实验的代码可能还在生产环境跑,依赖随时会变的资格评估,单看代码判断不了。
第二次尝试,提示词谨慎多了:
在项目 {A} 和 {B} 中,找出并删除与过期的、恒定的 Statsig gate/config或废弃实验相关的大量死代码。核实 Statsig 的线上配置,检查 git 历史和重叠的 PR。保留生产行为、运维保障措施,以及用作 killswitch 之类用途的 gate/config。忽略 SDK 回退和本地覆盖。每个清理项创建一个小的草稿 PR,并在摘要里附上对应的 Statsig 配置控制台链接。
护栏和边界占了这条提示词的大半。什么必须保留、什么不要碰、交付物长什么样,全写在明面上。模型的任务不是删代码,而是先证明某个东西确实不再被使用。
试跑满意后,作者没有直接扫全库。他先在 Astra 开出的 PR 上逐条留评论,让它读取反馈、修正做法,再由 Astra 生成一条扫描整个仓库的新指令。新指令里加了两条约束——先产出报告,不动任何线上配置或服务;报告要按"可并行的所有权/文件工作流"分组。
报告的效果很好。每个候选项都带着证据,还标了 CPU 成本,排在前面的几项是大幅的效率收益——那些实验过期好几年了,一直没人发现。作者逐一核实了较大的几项,才执行完整清理,一共移除数百个实验和功能开关。
文章里还有一个例子:一个多年前创建的内部开关,在 Python 里的映射引发了波及很广的 CPU 开销。Astra 没有直接删——这个开关被标记为"永久",它把决定权交回了人。评审确认可以移除后,预计为主服务省下 0.42% 的 CPU。
GPT-6 系列怎么选:一组现成的账
同一个过期实验审计任务,跑在一个 6000 多个文件、约 100 万行的仓库区域上(语言包括 Python、TypeScript、Go、Rust),结果是这样的:
| 配置 | API 成本 | 人工接受的发现数 | 单个发现成本 |
|---|---|---|---|
| GPT-6 Astra Ultra | $109.06 | 142 | $0.77 |
| GPT-6.1 Sol Ultra | $15.12 | 131 | $0.12 |
| GPT-6.1 Sol Medium | $5.27 | 86 | $0.06 |
简单说,GPT-6.1 Sol Ultra 找到的发现数量是 Astra Ultra 的 92%,成本只有后者的 14%。成本口径里包含了研究子代理和 Codex 的自动追问轮次,按标准 API 价格计算。
两者的差距也有具体表现:Astra 能识别出"被其他开关依赖的常量开关",Sol 经常漏掉这一类。OpenAI 的建议是把这类失败模式写回提示词,下次补上;选择上,大范围清扫用 Sol,含糊和高风险的场景交给 Astra。
可以直接照搬的部分
这套流程依赖 OpenAI 的内部工具:Slack、Statsig、内部追踪器、生产剖析表。换个团队,证据源要换成自己的,但下面几条不依赖具体工具。
含糊地找候选,严格地定边界。让模型自己决定去哪搜、看什么;但删除的边界必须写死在提示词里——保留 killswitch(紧急情况下用来关停功能的开关),忽略 SDK 回退和本地覆盖,不碰线上配置。
先报告,后动手。大规模清理前,让模型产出带证据、分好组的报告。人只核对排在前面的几项,剩下的按组并行处理。
一个清理一个小 PR。每个 PR 只做一件事,摘要里附上证据链接,评审的人可以逐个判断。
把评审反馈喂回去。作者在 PR 上留评论,让 Astra 读反馈、改做法。提示词不是一次性的,评审意见本身就是输入。
维护工作的分工在变。过去是人指出位置、模型动手;现在是模型自己找候选、自己找证据,人负责写护栏、审证据。几个月之间,维护任务的入口从"人给位置"换成了"人给护栏"。