Sunny Code

相同的模型,Agent 本身的提速:Harness 的 Fast 模式

同样的模型,完成同一道代码任务,Agent 还能更快吗?我们在 Sunny Code 中对照 Fast 与标准模式,固定模型和推理设置,只改变执行策略,观察一次本地代码交付需要多久。Fast 的思路是让 Agent 更聚焦当前任务,减少额外展开,完成修改与检查后及时交付。

在上一篇同模型对照实验展示的 token 效率基础上,我们进一步探索:同一个 Agent 能否通过 Fast 更早完成任务交付。

实验使用 GPT-6.1 Sol 与 DS4.1 Flash,均为 low thinking。三批任务分别覆盖 Sunny Code 自身与 Click、验证开销很小的 Python 仓库,以及没有现成单测的三个仓库。共九道任务,每项重复两次,合计 72 次运行。

在本次九个小任务的 36 组配对中,Fast 的本地交付耗时都更短。按每批、每个模型形成的六组汇总,耗时下降 50.4%–80.1%,新 token 下降 10.2%–38.7%。这是分组汇总的范围,不代表任意任务都能获得相同降幅。

所有交付都在计时后独立验收,但并非全部通过。下文保留失败和旧测试冲突;事后验收时间不计入上述耗时。

每次运行的平均耗时秒
标准Fast

常规验证

GPT-6.1 Sol
106.431.3
DS4.1 Flash
94.518.8

低验证开销

GPT-6.1 Sol
54.324.9
DS4.1 Flash
29.614.7

无现成单测

GPT-6.1 Sol
47.623.3
DS4.1 Flash
34.99.6
060120
三批、两个模型共用 0–120 秒刻度;每根条为六次运行的均值,包含失败交付。只在同批、同模型内比较。每项任务仅两次重复,未估计置信区间。
实验是怎么做的

实验于 2026 年 10 月 18 日进行。每批三道任务;每道题在两个模型、两种模式下各重复两次,共 24 次运行。同一配对固定任务、代码快照、依赖环境、模型及推理设置,串行交替运行。比较的是产品中两种模式的整体效果。计时从提交任务到 Agent 结束本次任务,仅衡量本地代码交付,不含独立验收、PR 发布与合并。供应商缓存与服务负载没有完全控制。

三批任务,追问同一个问题

第一批覆盖 Sunny Code 自身与 Click 的任务;第二批选择原生测试基线中位数约 0.7–2.7 秒的任务;第三批选择没有现成第一方单测的仓库。后两批仍观察到更短的交付时间。这并不意味着两种模式做了相同的检查,也不能单凭仓库测试较少就预测收益。

查看耗时精确数值
分组模型标准(秒)Fast(秒)耗时下降
常规验证GPT-6.1 Sol106.431.3−70.6%
常规验证DS4.1 Flash94.518.8−80.1%
低验证开销GPT-6.1 Sol54.324.9−54.1%
低验证开销DS4.1 Flash29.614.7−50.4%
无现成单测GPT-6.1 Sol47.623.3−51.1%
无现成单测DS4.1 Flash34.99.6−72.4%

新 token 也减少,但降幅与时间不同

三批任务中,两模型的新 token 都下降,降幅从 10.2% 到 38.7%。例如无单测组的 Sol,时间下降 51.1%,新 token 只下降 10.2%。减少的 token 数量,不能直接当成节省时间的比例。

每次运行的平均新 tokentokens
标准Fast

常规验证

GPT-6.1 Sol
23.5k14.4k
DS4.1 Flash
23.6k16.0k

低验证开销

GPT-6.1 Sol
25.2k16.6k
DS4.1 Flash
20.0k15.6k

无现成单测

GPT-6.1 Sol
15.3k13.7k
DS4.1 Flash
15.0k9.2k
015k30k
新 token = provider 报告的 input + output,不含 cacheRead 与 cacheWrite。每个值为六次运行的均值;这不是总处理 token,也不是实际账单。上一篇统计包含缓存的总 token,两篇降幅不能直接比较。
查看新 token 精确数值
分组模型标准新 tokenFast 新 token新 token 下降
常规验证GPT-6.1 Sol23,51814,411−38.7%
常规验证DS4.1 Flash23,62616,034−32.1%
低验证开销GPT-6.1 Sol25,21316,650−34.0%
低验证开销DS4.1 Flash19,96415,573−22.0%
无现成单测GPT-6.1 Sol15,28113,726−10.2%
无现成单测DS4.1 Flash15,0049,224−38.5%

所有交付都验收过,不等于全部正确

每次计时结束后,我们在交付代码的独立副本上运行行为边界检查,并结合可用的仓库回归检查。失败运行原样保留,没有修补模型交付的源码再计为通过。模型自己新增的测试另行记录。

分组严格总验收(标准 / Fast)需求行为与补充诊断
常规验证8/12 · 8/12Click 的八次交付都漏了补充验收中的空前缀相关边界。两种模式都错,不能证明质量无损。
低验证开销8/12 · 8/12需求行为 24/24 通过;八次 slugify 交付触发与新需求冲突的旧断言。上游更新测试的补充诊断通过,原失败保留。
无现成单测12/12 · 12/12外部行为与总验收 24/24 通过。在这批任务和已有覆盖下,没有观察到质量下降。

Click 的常规检查通过,补充需求检查失败。slugify 的任务则要求 ASCII 路径绕过转写后端,旧测试仍断言初始化该后端;冻结旧测试合计 16/24 通过,不能用后来的补充诊断覆盖这个结果。这两类失败原因不同,应分别报告。

标准模式交付中附带的测试也可能有后续维护价值。本次交付时间没有衡量这些价值、长期回归风险或返工成本。

这些数字适用于什么范围

现有证据支持的是:这九个小任务中,Fast 的本地交付耗时更短。它不能证明所有任务都会更快,也不能证明读代码或修改本身单独更快。对首批运行记录的事后拆分,仍不足以隔离这些阶段的收益;本实验也没有测量某一项具体实现的独立贡献。

三批没有让两种模式完成完全相同的验证。如果你的流程要求独立验收通过后才算交付,需要把验收时间计回去。本次只有九个任务、两个模型、每项两次重复;低验证组两个任务同属 boltons,无单测组三个仓库来自同一维护者。36 组配对并不等于 36 道独立任务。任务为定向选择,包含历史缺陷与边界案例,并非随机抽样;相同的通过率也不构成质量等价的证明。

把速度、验收与交付范围放在一起看

本次对照说明,在保持模型不变时,Agent 模式的差异仍值得测量。更短的交付时间,应与实际验收结果和工作范围一起看。评估自己的工作流时,固定任务与验收标准,同时记录耗时、token 和失败原因;若要求完成同样的全部验证后再交付,应按那个边界重新计算总耗时。

任务与仓库对照

三批共七个仓库、九道题。A–C 为 Sunny Code 与 Click,D–F 为低验证开销任务,G–I 来自无现成单测的仓库。每道题有八次运行:两个模型 × 两种模式 × 两次重复。

查看七个仓库与题目索引
仓库语言任务
zjc-cloud/sunny-codeTypeScriptA, B
pallets/clickPythonC
mahmoud/boltonsPythonD, F
un33k/python-slugifyPythonE
fogleman/primitiveGoG
fogleman/lnGoH
fogleman/sdfPythonI

常规验证

A · 本地预览链接边界

zjc-cloud/sunny-code · TypeScript · 私有仓库,版本不公开

问题 · 启动日志中的本地地址占位符,会被误识别成可点击的预览链接。

任务要求与范围 · 拒绝 localhost:<port>、IPv4/IPv6 端口占位符和缺少端口的尾冒号;保留完整本地地址及明确写出的默认端口地址,不扩展其他启动功能。

独立验收覆盖 · 检查不完整地址、占位符、完整地址、外部或带认证信息的 URL,以及日志中的 ANSI/标点边界;结合原有回归、类型检查与构建。

严格总验收 · 标准: 4/4 · Fast: 4/4

B · 文本提示词学习与媒体输入

zjc-cloud/sunny-code · TypeScript · 私有仓库,版本不公开

问题 · 可复用提示词学习把同一用户消息的多个文本块直接粘连,丢失句子边界。

任务要求与范围 · 用换行分隔多个文本块,保留块内换行和普通字符串;图片或混合内容、非用户消息和原先禁止学习的内容仍应排除,长度与安全筛选不变。

独立验收覆盖 · 检查多文本块与普通字符串,以及图片、混合媒体、非用户消息和既有筛选边界;结合原有回归、类型检查与构建。

严格总验收 · 标准: 4/4 · Fast: 4/4

C · Choice 补全的归一化匹配

pallets/click · Python · 历史上游参照 2247b35e

问题 · Choice 的 shell 补全与命令行正常取值使用的归一化规则不一致,导致本来可接受的值没有候选建议。

任务要求与范围 · 让前缀匹配遵守既有归一化与扩展钩子,保留大小写、候选顺序、普通值转换、帮助与错误行为;空前缀及归一化后为空的前缀也属于边界。

独立验收覆盖 · 通过真实补全分发检查 Unicode、上下文及自定义归一化、子命令继承与上下文隔离,并补查空前缀边界。八份交付的常规检查通过,补充边界失败。

严格总验收 · 标准: 0/4 · Fast: 0/4

低验证开销

D · Unicode 分行与缩进

mahmoud/boltons · Python · 历史上游参照 1cdc0e9d

问题 · iter_splitlines 对 Unicode 行/段落分隔符处理不正确,还会错误拆开普通日期文本。

任务要求与范围 · 正确识别 U+2028、U+2029,连带保持 indent 正确;保留既有换行符、CRLF、连续及首尾空行,以及 margin、newline、key 参数行为。

独立验收覆盖 · 独立行为检查覆盖分行与缩进的组合边界;运行包含 doctest 的原生测试套件。该任务原生测试三次基线的中位数为 2.747 秒。

严格总验收 · 标准: 4/4 · Fast: 4/4

E · ASCII 绕过转写后端

un33k/python-slugify · Python · 历史上游参照 2fe6cec4

问题 · 已经是 ASCII 的文本仍进入转写后端加载路径,产生不必要的依赖。

任务要求与范围 · 在转写阶段对纯 ASCII 输入跳过后端加载,缺失后端时仍可处理;覆盖默认/显式 legacy 与 modern,保留非 ASCII、allow_unicode、替换、实体解码与参数校验行为。

独立验收覆盖 · 检查 ASCII 路径、后端缺失、非 ASCII 与流水线兼容性,并运行原生测试。行为检查八份均通过;八份均触发旧断言冲突,补充诊断单独报告。原生基线中位数 0.727 秒。

严格总验收 · 标准: 0/4 · Fast: 0/4

F · JSONL 相对定位

mahmoud/boltons · Python · 历史上游参照 51508029

问题 · JSONLIterator 对二进制 JSON 行文件执行 rel_seek 相对定位时抛出 TypeError。

任务要求与范围 · 二进制正向迭代应与相同内容的文本输入一致;保留起止/负相对位置、空文件、末尾、ignore_errors 和文本倒序行为,不扩展二进制倒序的其他问题。

独立验收覆盖 · 比较文本与二进制相对定位结果,检查位置、空文件、错误处理等边界;运行包含 doctest 的原生测试套件。原生基线中位数 2.472 秒。

严格总验收 · 标准: 4/4 · Fast: 4/4

无现成单测

G · 椭圆竖直半径按高度限制

fogleman/primitive · Go · 历史上游参照 69506c92

问题 · 普通 Ellipse.Mutate 在非正方形画布上,用宽度错误限制竖直半径 Ry。

任务要求与范围 · 竖直半径按高度限制,同高度、同随机序列的结果不应因宽度不同而变化;保留随机分支、水平半径、中心变化和 Circle 半径同步,不改 RotatedEllipse。

独立验收覆盖 · 在独立副本中用多组随机种子与不同画布尺寸检查高度约束、不随宽度变化和既有分支行为。仓库没有现成第一方单测,外部行为检查另行提供。

严格总验收 · 标准: 4/4 · Fast: 4/4

H · 零方向射线与盒求交

fogleman/ln · Go · 历史上游参照 12e6c6e7

问题 · 射线某轴方向为零时,Box.Intersect 在盒面、边或角上可能产生 NaN 或错误参数区间。

任务要求与范围 · 覆盖正零与负零:原点在轴闭区间内时该轴不限制参数,区间外为空;保留负参数、斜射/反向射线及盒内语义,并处理零厚度盒与完全静止射线。

独立验收覆盖 · 外部几何行为检查覆盖零方向、盒面/边/角、退化盒和静止射线,以及正常射线的区间结果。仓库没有现成第一方单测。

严格总验收 · 标准: 4/4 · Fast: 4/4

I · 四面体尺寸缩放

fogleman/sdf · Python · 历史上游参照 cee1dace

问题 · 有符号距离场的 tetrahedron(r) 忽略尺寸参数 r。

任务要求与范围 · 让正尺寸控制四面体大小;保留 r=1 场值,尺寸与坐标同比缩放时距离值也同比变化,原点在内部、边界为零;保留批量输出形状和平移组合,不扩展网格或渲染。

独立验收覆盖 · 外部数值行为检查覆盖缩放关系、内部/边界点、批量形状和已有组合方式。仓库没有现成第一方单测。

严格总验收 · 标准: 4/4 · Fast: 4/4

题目要求与验收覆盖为实验材料的整理说明,不是 Fast 的内部指令。版本链接是上游历史参照,不是模型交付补丁;结论对应独立准备的任务快照及本文列出的检查范围。三个位于无单测组的仓库来自同一维护者。

查看 72 次运行明细

Click 的“未通过”指补充需求边界失败;slugify 的“未通过”指冻结旧测试冲突。详细区分见上方验收说明。

任务模型模式重复耗时(秒)New tokens严格总验收
ADS4.1 Flash标准1151.51822,106通过
ADS4.1 FlashFast126.97617,537通过
AGPT-6.1 Sol标准187.58328,162通过
AGPT-6.1 SolFast156.44713,378通过
BDS4.1 Flash标准1120.18023,905通过
BDS4.1 FlashFast112.85114,217通过
BGPT-6.1 Sol标准1118.26419,415通过
BGPT-6.1 SolFast121.98413,519通过
CDS4.1 Flash标准163.84434,484未通过
CDS4.1 FlashFast115.23413,828未通过
CGPT-6.1 Sol标准150.22822,838未通过
CGPT-6.1 SolFast125.95717,554未通过
ADS4.1 Flash标准2168.82522,031通过
ADS4.1 FlashFast224.36717,587通过
AGPT-6.1 Sol标准2149.12428,651通过
AGPT-6.1 SolFast230.48813,254通过
BDS4.1 Flash标准232.27119,765通过
BDS4.1 FlashFast216.93515,329通过
BGPT-6.1 Sol标准2177.76731,566通过
BGPT-6.1 SolFast224.74312,494通过
CDS4.1 Flash标准230.07719,465未通过
CDS4.1 FlashFast216.31117,704未通过
CGPT-6.1 Sol标准255.69210,478未通过
CGPT-6.1 SolFast228.19716,267未通过
DDS4.1 Flash标准125.59814,298通过
DDS4.1 FlashFast110.5559,721通过
DGPT-6.1 Sol标准142.42521,710通过
DGPT-6.1 SolFast124.22519,843通过
EDS4.1 Flash标准146.75634,166未通过
EDS4.1 FlashFast118.65016,833未通过
EGPT-6.1 Sol标准152.41937,344未通过
EGPT-6.1 SolFast128.89014,138未通过
FDS4.1 Flash标准125.35815,272通过
FDS4.1 FlashFast119.42613,263通过
FGPT-6.1 Sol标准146.36313,653通过
FGPT-6.1 SolFast120.54010,349通过
DDS4.1 Flash标准225.62913,579通过
DDS4.1 FlashFast211.29810,137通过
DGPT-6.1 Sol标准239.81511,908通过
DGPT-6.1 SolFast223.82019,623通过
EDS4.1 Flash标准234.50129,873未通过
EDS4.1 FlashFast215.39830,881未通过
EGPT-6.1 Sol标准272.81234,581未通过
EGPT-6.1 SolFast228.11325,126未通过
FDS4.1 Flash标准219.92312,593通过
FDS4.1 FlashFast212.79912,600通过
FGPT-6.1 Sol标准272.05332,083通过
FGPT-6.1 SolFast223.86310,820通过
GDS4.1 Flash标准131.01212,414通过
GDS4.1 FlashFast18.3487,585通过
GGPT-6.1 Sol标准121.66711,140通过
GGPT-6.1 SolFast118.86410,966通过
HDS4.1 Flash标准127.34012,975通过
HDS4.1 FlashFast113.3059,428通过
HGPT-6.1 Sol标准174.57526,442通过
HGPT-6.1 SolFast128.19020,998通过
IDS4.1 Flash标准143.15418,187通过
IDS4.1 FlashFast19.20211,015通过
IGPT-6.1 Sol标准138.36711,841通过
IGPT-6.1 SolFast124.51610,561通过
GDS4.1 Flash标准221.34010,337通过
GDS4.1 FlashFast27.9067,943通过
GGPT-6.1 Sol标准256.84215,482通过
GGPT-6.1 SolFast218.95912,178通过
HDS4.1 Flash标准244.07218,595通过
HDS4.1 FlashFast29.8378,340通过
HGPT-6.1 Sol标准261.82910,902通过
HGPT-6.1 SolFast227.94016,772通过
IDS4.1 Flash标准242.77817,516通过
IDS4.1 FlashFast29.23511,030通过
IGPT-6.1 Sol标准232.37615,876通过
IGPT-6.1 SolFast221.15410,883通过
联系获取实验数据

可通过邮箱联系我们获取实验数据。数据包包含 72 次运行的耗时、用量与验收结果、九个任务的仓库、历史版本参照、问题要求与验收范围,以及三批汇总。全文数字按原始记录计算;数据包不包含运行过程记录、缓存分项、Fast 内部指令或私有版本标识。