那个开关我早就开着了,只是从没接上线

cover

Hello,我是飞飞。

刷到一个 Codex 的玩法,说法是这样的:让贵模型只负责拆任务和审代码,具体实现全部委托给便宜模型去干。

听着有点道理。我第一反应是去查自己的配置。

然后发现一件挺难为情的事。那个开关我早就开着了,只是从没接上线。

那个开关我早就开着了

先说我查到了什么。

我的 ~/.codex/config.toml 里,[features] 段下面明明白白写着 multi_agent = true。这是启用多代理能力的总开关,不知道什么时候开的,反正开着。

然后我去看 ~/.codex/agents/

这个目录不存在。

也就是说,能力我早就打开了,但从来没定义过任何一个子代理。开关合上了,线一根没接。

再看主设置。model = "gpt-5.6-sol"model_reasoning_effort = "high"

Sol 是这一代最贵的那档,high 是高推理档。我用这个组合干所有活,包括那些完全不需要它的活。

配置长什么样

去核了官方文档和本地二进制,格式是这样的。

子代理定义放在两个地方之一:~/.codex/agents/ 是个人级的,项目里的 .codex/agents/ 是项目级的。一个 TOML 文件定义一个子代理。

每个文件必填三样:namedescriptiondeveloper_instructions

可选的部分才是重点。**它能单独指定 modelmodel_reasoning_effort**,还能单独设沙箱模式和挂哪些 MCP 服务。

取值的优先级官方写得很清楚:文件里写死的最优先,其次是调起时显式传的值,再次是 [agents] 段的默认值,最后才回落到父代理的设置。

顶上还有几个闸口:agents.max_depth 管嵌套深度,agents.max_threads 管并发数,agents.job_max_runtime_seconds 管单个子任务最长跑多久。

主代理调度子代理靠一组事件:spawn_agent 派活、send_input 追加输入、wait 等结果、resume_agent 接着跑、close_agent 收工。

所以那个玩法的本体很简单:建一个文件,把 model 钉在便宜档,让主代理把实现类的活派给它。

二十五倍的价差

这一档到底差多少钱,我去核了官方定价。

Sol 是每百万输入 5 美元、输出 30 美元。Terra 是 2 美元和 12 美元。Luna 是 0.2 美元和 1.2 美元

Sol 和 Luna 之间,输入输出都是二十五倍。

七月底还调过一次价,Luna 直接降了八成,从 1 美元和 6 美元砍到现在这个数,Terra 降了两成。所以这个价差是最近才拉到这么开的。

二十五倍是什么概念?同一个活,让 Sol 从头干到尾,和让 Sol 拆完活交给 Luna 实现,中间那段执行的开销差了一个数量级还多。

我省下来的是额度

得赶紧说清一件事,不然这篇就是误导。

上面那些数是 API 按量计费的价格。而我的配置里写着 preferred_auth_method = "login",走的是订阅登录。

所以这套配置替我省的是额度。月底那张账单,一分没动。

订阅有速率限制,不同档位的模型消耗额度的速度不一样。把执行类的活挪到便宜档,省下来的是我一天能跑多少活的上限,不是月底那张账单上的数字。

这两件事经常被混着说,但对个人用户来说差别很大。你如果也走订阅,别指望这套配置能让你省钱,它省的是你撞限速的次数。

我以前算过一笔真账:把缓存命中率从三成调到七成三,账单从 106 美元压到 33 美元。那笔是 API 口径的,跟这次不是一回事。

我现在是怎么省的

说说我原来的做法,好对比。

我一直靠的是手动过秤。调 Opus 之前在心里掂量一下这个活值不值得,杂活手动切便宜模型。这套办法我用了很久,也写过好几次。

它的问题现在看很清楚:它依赖我每次都记得掂量。

而且它是二选一的。要么整个会话用贵的,要么整个会话用便宜的。一个会话里既要判断力又要执行力的时候,我只能整体按最高需求配,等于让最贵的那档把所有活都干了。

子代理这套不一样。它是在同一个任务内部按活的性质分配,不是在会话之间切换。

这是结构上的差别,不是省钱技巧。

工头不该自己砌墙

想清楚这层之后,我对「贵模型该干什么」的理解变了。

Sol 卖 5 美元和 30 美元,卖的是判断力:把一个模糊的需求拆成几步、看出某个实现方案早晚要出事、审代码时发现那个边界条件没处理。

而写实现代码这件事,很大一部分是执行力。让 Sol 去写实现,等于花判断力的钱买执行力。

官方那份系统提示词里有几句话说得比我清楚,我照原文译一下:不要把已经委派出去的子任务自己再做一遍,专注于整合结果或处理不重叠的部分。 还有一句:对编码任务,当子代理能在明确的写入范围内做出有界的修改时,优先委派具体的代码改动,而不是只读的探索分析。

翻译成人话就是:让子代理去动手改,别只让它去看。

贵模型那份钱真正值的地方,不在它替你写了多少,在它替你拦下了多少。

工头的价值在于知道这堵墙该砌在哪、砌歪了能看出来,不在于他亲手搬了多少砖。

有一条我没料到

官方那份提示词里还有一句,我看到的时候愣了一下。

原话是:不要把读取、总结或解释 skill 指令这件事委派给子代理。主代理必须自己读完每一份需要的指令或参考文件再行动。子代理仍然可以在所选 skill 允许的范围内执行任务工作。

这条正好戳中我。

我那条内容流水线是 13 个 skill 加一个 8 阶段编排,主编排 agent 派活给各个环节。而我前几天刚写过,我那本规则库 57 万字节,agent 是靠索引跳读的。

如果哪天我把「读规则库」这件事也委派下去,让某个便宜的子代理去读了再总结给主代理,那规则就等于被转述了一道。转述会丢东西,这一路我写了好几篇了。

官方把这条单独写出来,说明这是个真踩过的坑。

我打算先派哪个活

诚实边界摆在这儿:这套配置我今天才查明白,还没真跑过。 下面是我打算怎么开始,不是实测报告。跑上一两周才有资格给数字。

我准备先建一个 worker,只派一类活:判得死的活。

具体说就是格式检查、字数统计、链接连通性、硬扫描矩阵那几条 grep 规则的初筛。这些活有明确的对错,跑砸了我一眼能看出来,不需要判断力,纯执行。

拆解、选题、最后那句能不能发,全部留在主代理,也留在我这儿。

model 钉在便宜档,model_reasoning_effort 我打算设成中档而不是 max。那个玩法建议设 max,但我这几类活压根不需要深推理,设高了等于把省下来的又烧回去。

跑一段时间之后我会写实测,包括额度实际省了多少、便宜档在哪类活上翻过车。

你那个开关开着吗

所以这篇给你的东西很具体。

如果你也在用 Codex,今天可以做一件事:打开 ~/.codex/config.toml 看一眼 [features] 段有没有 multi_agent,再看一眼 ~/.codex/agents/ 这个目录存不存在。

开关开着、目录不存在,你就跟我一样,能力一直摆在那儿没用过。

我这次真正的收获跟省钱关系不大。是我发现自己有个功能开了很久,却从来没往下走一步去用它。配置文件里躺着的东西,不查就等于没有。

这话我上个月刚说过一遍,那次是查我的 deny 清单,查出来是空的。这次是查子代理,查出来是没建过。同一个毛病,两个月里被我抓到两回。

最后想问问你:你手上那个工具,有没有哪个功能是你开了、配了一半、然后就再没回头看过的?说说是哪个,我猜这种半截工程大家都有几处。