Codex 的 Reasoning Effort 应按任务的不确定性、失败代价和验收难度分配,而不是按“编码、调试、审计”三个名称机械固定。实用起点是:日常编码用 medium,边界明确且可自动验证的小改动可降到 low;复杂调试用 high,涉及并发、分布式状态或长期无法复现时再评估 xhigh;安全审计通常从 high 开始,只有范围足够大、调查面可并行且资源预算允许时才考虑更高档位或 Ultra 编排。
档位不是任务标签,而是动态资源决策。运行中发现新证据后应允许升档或降档:一个看似简单的改名可能暴露兼容性风险,一个复杂项目也可能在根因确认后进入机械修复阶段。最佳策略是为每类任务设置起点、升级触发器、降级条件和停止标准。
需求是否清楚,根因是否已知,代码结构是否熟悉,外部依赖是否稳定。未知越多,越需要推理来形成假设、比较路线和验证结论。
失败只是一次容易撤销的格式改动,还是可能造成数据丢失、权限绕过、线上停机或合规问题。失败代价高时,即使修改代码不多,也应提高推理与复核强度。
是否有快速、确定的自动测试,还是必须依赖多环境观察、人工安全分析或长期运行。验收越弱,模型越需要在修改前后主动寻找遗漏。
可以用一个简单评分表作为路由依据:
| 维度 | 低 | 中 | 高 |
|---|---|---|---|
| 不确定性 | 步骤明确 | 需局部调查 | 根因未知或系统复杂 |
| 失败代价 | 易撤销 | 影响有限功能 | 数据、安全或生产风险 |
| 验收难度 | 自动测试充分 | 需多项检查 | 难以穷举或缺少测试 |
日常编码包括范围清楚的功能实现、常规缺陷修复、测试补充、配置更新和文档同步。推荐从 medium 建立团队基线,因为它通常能在计划能力、工具使用、延迟和资源消耗之间取得平衡。
# ~/.codex/config.toml
model_reasoning_effort = "medium"
以下情况可以降到 low:
一次性使用 low 可以通过命令行覆盖:
codex --config 'model_reasoning_effort="low"'
low 不代表可以省略验收。恰恰因为推理投入较少,任务描述应更具体:指出目标文件、预期行为、禁止改动和验证命令。模糊地要求“优化整个模块”,不适合低档执行。
当出现以下信号时,从 low 升到 medium,或从 medium 升到 high:
升级的目的不是让模型输出更多文字,而是重新检查问题定义、依赖和验证策略。若只重复同一路线,高 effort 也不会自动解决错误假设。
复杂调试的核心成本在于建立和淘汰假设。推荐从 high 开始,让 Codex 有足够空间读取调用链、比较日志、设计实验并确认根因。典型场景包括偶发并发错误、跨服务超时、内存泄漏、缓存一致性、环境特定故障和大型回归。
codex --config 'model_reasoning_effort="high"'
high 运行前应提供可观测证据:错误日志、复现概率、最近变更、运行环境和已经排除的假设。Reasoning Effort 无法弥补完全缺失的现场数据。
这比从头到尾使用最高档更经济。困难主要集中在根因定位和最终证明,明确补丁的实现本身未必需要同等推理投入。
xhigh 适用于 high 多次运行仍无法区分假设,且额外推理有望带来价值的情况,例如:
如果问题只是缺少日志、无法访问环境或测试服务器离线,提升 effort 不会产生缺失数据。此时应先改善可观测性,而不是继续升档。
安全审计即使只涉及几十行代码,也可能失败代价极高。鉴权边界、密钥处理、路径遍历、注入、反序列化、跨租户访问和供应链配置,都需要从攻击者视角检查非预期路径。因此安全任务通常不应从 low 开始。
推荐将 high 作为单模块安全审查的起点,并要求明确资产、信任边界、攻击面和威胁模型。高 effort 只能提高推理空间,不能替代安全测试、静态分析、依赖扫描和人工复核。
| 阶段 | 推荐起点 | 目标 |
|---|---|---|
| 范围与威胁建模 | high | 资产、攻击者、边界 |
| 机械扫描与清单 | medium | 依赖、入口、敏感调用 |
| 漏洞路径推演 | high 或 xhigh | 前置条件与利用链 |
| 独立调查面并行 | Ultra,按需 | 鉴权、数据、依赖分别审查 |
| 修复实现 | medium 或 high | 最小且兼容的补丁 |
| 最终复核 | high | 绕过、回归和残余风险 |
Ultra 可能启用更主动的多代理协作,适合范围大且调查面相对独立的审计。例如一个代理分析身份认证,一个检查数据库访问,一个审查依赖和构建链,另一个验证测试覆盖。并行可以扩大覆盖面,但也会显著增加总 token 和综合成本。
以下条件同时满足时才值得考虑:
单一函数审查、明确漏洞修复或禁止并行访问的环境,不适合 Ultra。最高编排强度不是安全质量保证。
| 任务 | 起始档位 | 升级条件 | 降级条件 |
|---|---|---|---|
| 机械日常修改 | low | 范围扩大、测试异常 | 保持 low |
| 常规功能与缺陷 | medium | 跨模块、高风险决策 | 进入重复实现阶段 |
| 复杂调试 | high | 证据矛盾、长链因果 | 根因已确认 |
| 单模块安全审计 | high | 复杂利用链 | 机械清单阶段 |
| 大型多域安全审计 | high | 可独立并行的多个调查面 | 进入统一修复阶段 |
表中的档位只是起点。模型支持列表仍是硬约束:如果当前模型不支持 xhigh、max 或 Ultra,就选择它支持的最高合适档位或更换经过批准的模型。
团队可以为常见工作流维护独立 profile 文件。例如日常开发配置:
# ~/.codex/daily.config.toml
model = "<model-id>"
model_reasoning_effort = "medium"
复杂调试配置:
# ~/.codex/debug.config.toml
model = "<model-id>"
model_reasoning_effort = "high"
model_reasoning_summary = "detailed"
使用时显式选择 profile,并通过状态确认实际模型和 effort。安全审计 profile 还应配置更严格的权限与审批,而不只是把 effort 调高。
高 Reasoning Effort 不意味着应扩大文件系统、网络或命令权限。尤其安全审计常接触敏感仓库,应坚持最小权限。推理档位决定模型投入,沙箱和审批策略决定模型能做什么,两者必须独立配置。
一个 high 或 Ultra 审计任务可以保持只读;需要验证漏洞时,再为明确命令提供受控权限。不要因为“模型想得更深”就让它自动获得生产写入权限。
记录首次通过率、测试通过率、改动范围、总完成时间和返工次数。若 low 与 medium 质量相同且更快,可将该类任务稳定下调。
记录有效假设数量、无效实验数量、根因确认时间、复现稳定性和修复后的回归结果。不要只看最终回答 token。
记录真实发现率、误报率、证据完整性、攻击路径可复现性、严重问题漏检和人工复核时间。Ultra 还应统计子代理数量与总资源。
选择一批代表性任务,固定模型、提示、仓库提交和权限,只改变 effort。每个组合重复多次,比较任务合格率、延迟、token 和人工介入。不能用一道简单题决定整个团队的默认值。
对于安全审计,应准备已知漏洞和无漏洞对照样本。只统计发现数量会鼓励误报;需要同时衡量证据质量和误报成本。对于调试,应隐藏根因但保持复现条件一致。
medium 日常任务
├─ 规则明确且测试充分 -> low
├─ 跨模块或出现意外失败 -> high
└─ 完成后独立审查 -> medium/high
high 调试或审计
├─ 根因确认、进入机械修复 -> medium
├─ 证据矛盾且数据充分 -> xhigh
└─ 多个独立调查面 -> 评估 Ultra
状态转换应由可观察事件触发,而不是凭时间或主观感觉。例如“连续两次修复仍失败”“发现鉴权边界变化”比“任务看起来很难”更容易审计。
更高 effort 可能让模型继续探索。每类任务都应定义停止条件:
没有停止条件时,xhigh 或 Ultra 可能带来无休止搜索,而不是更高质量。
这会增加延迟和资源消耗,且对简单任务没有可测收益。高档位还可能在开放任务中产生过度探索。
复杂判断失败后的返工可能比一次 medium 或 high 更贵。应比较每个合格任务的总成本。
推理不能替代静态分析、动态测试、依赖扫描和人工复核。它们提供不同证据。
如果阻塞来自缺少权限、不可用服务或缺失日志,升档没有作用。应先补齐外部条件。
Ultra 的价值可能来自多代理编排。任务不可拆分时,它未必优于较高模型 effort。
Codex 的 Reasoning Effort 应按不确定性、失败代价和验收难度动态分配。日常编码以 medium 为基线,确定且可自动验证的步骤降到 low;复杂调试从 high 开始,只有数据充分但因果链仍困难时升到 xhigh;安全审计通常使用 high,并结合最小权限、自动工具和人工复核,大型可并行审计才考虑 Ultra。为每类任务定义升级触发器、降级条件、指标和停止标准,比把所有工作固定到一个档位更可靠,也更节省实际完成成本。