hillclimb · git:20261105.956d98a · 2026-11-05 · sha256 9cc2dc86af5d4562
hillclimb git:20261105.956d98aA
Immutable. This exact content never changes and is served at /api/v1/blob/9cc2dc86af5d4562.
--- name: hillclimb description: 爬山优化:把一个可测指标(性能、命中率、通过率、评分、体积)反复改动、测量、推向目标时使用;一次性修复不用。 --- # 爬山 一次改一处,测一次,保留或回退。agent 的典型失败是前几步进步很快,随后在一个好实现、但有天花板的方向里反复调参;这个流程的关键是认出停滞并换方向。 1. **定指标与停止条件**:一个指标、哪边算好、目标值,再加最少尝试次数,免得早期一次偶然的好结果就收工。用户给了数字就用用户的。完成标准:写下“指标 / 方向 / 目标 / 至少 N 次尝试”。 2. **建评测并冻结**:一条命令输出指标,多次采样取中位数并报噪声幅度,同时跑回归检查(必须保持通过的测试与检查)。 - 按生产配置跑(模型、思考档、工具),单次运行设超时上限。 - 用例分优化集和留出集。留出集只在收尾确认时跑,结果不拿来改方案;被拿去找过问题的留出题换新题。 - 评分表和模型裁判先拿几份已知好坏的输出试一遍,确认奖励的是想要的行为(出现过因“缺地址价格”扣分、等于鼓励编造的评分表);人工核对一小批,确认裁判和人一致。整场比较只用这一个裁判。 - 被优化的一方碰不到评测脚本、用例与参考答案;正确性失败记 0 分。 - 评测不动生产账号余额、真实设备和共享额度:用独立的 key 或设备。按量付费的余额每批前查一次;会自动换号的订阅不设额度停止线,以调用真的失败为准(只看一个号的额度,会把还能用的调用拦下)。 - 评分表、阈值、用例或裁判一改,旧结果就不可比:换一个批次名重跑基线。 完成标准:基线、噪声幅度、回归检查结果和每批的预计花费都已记下。 3. **开决策记录**:在评测目录(不进仓库)放一张表,每次尝试一行:编号、假设、改动、前后指标、回归检查、保留或回退、备注。每次尝试前先读它;中断后据它接着做,已有结果不重跑。完成标准:表已建好,基线是第一行。 4. **循环**,每轮一个假设: - 假设写明机制(“X 在启动路径上阻塞首帧,挪到首帧之后”),不写“试试加缓存”。只针对基线多次运行里重复出现的失败;只出现一次的是噪声,专门改它就是过拟合。 - 只改这一处。超过噪声且回归检查通过才保留,否则整个回退;保留时在运行记录里指出改动起作用的那一刻,只有分数涨了不够。不叠加没测过的改动,不凭读代码宣布变好。 - 互不依赖的假设各派一个子代理、各用一个 worktree 并行试;你只出假设、看 diff、裁决。几个候选各自过关后合成一版再测一次,不默认叠加。 - 改动落到最便宜的有效部件:重复的机械活交给脚本,窄流程做成按需技能;写进提示词的规则,模型几次里有一次以上没照做,就不再改措辞,改由脚本或检查保证。 - 完成标准:这次尝试在决策记录里有一行;回退的改动已撤干净,保留的改动叠在一起时回归检查仍通过。 5. **停滞就换方向**:连续 2–3 次回退,或连续几次提升都落在噪声里,就停止在同一方向上微调。 - 先查测量:各次尝试用的测量和正式评测是不是同一口径、同一条件(出现过团队一直在另一种负载下测速度,校准测量后当轮就破了纪录)。 - 回看决策记录,判断是不是选了一条有天花板的路,然后换一类做法:换算法或架构、换数据或用例的组织、换模型、把几个差一点的改动组合起来,或者试一个更激进的方案;互斥的几个方向并行试。 - 换方向也可以是换分工:加一个专门查测量、专职调试或读运行记录找卡点的角色。执行者说“已经到顶”不算停止理由,那是当前做法的顶。 - 换过方向仍然卡住,带着决策记录交给用户,不空转。 - 完成标准:决策记录里写明这次停滞的判断(测量问题,还是方向的天花板)和换到的新方向。 6. **收尾**:达到停止条件,或剩下的想法收益抵不上成本时停;不放宽停止条件来凑数。在留出集上确认,再用生产配置在干净检出上复测一次。汇报:指标从基线到最终的变化、尝试次数(保留/回退)、每个保留的改动一行、决策记录的位置,以及下一个最值得试的想法。