hillclimb · git:20261104.03bba56 · 2026-11-04 · sha256 837b878a09aaf945

hillclimb git:20261104.03bba56A

Immutable. This exact content never changes and is served at /api/v1/blob/837b878a09aaf945.

---
name: hillclimb
description: 爬山优化:把一个可测指标(性能、命中率、通过率、评分、体积)反复改动、测量、推向目标时使用;一次性修复不用。
---

# 爬山

一次改一处,测一次,保留或回退。agent 的典型失败是前几步进步很快,随后在一个好实现、但有天花板的方向里反复调参;这个流程的关键是认出停滞并换方向。

1. **定指标与停止条件**:一个指标、哪边算好、目标值,再加最少尝试次数,免得早期一次偶然的好结果就收工。用户给了数字就用用户的。完成标准:写下“指标 / 方向 / 目标 / 至少 N 次尝试”。

2. **建评测并冻结**:一条命令输出指标,多次采样取中位数并报噪声幅度,同时跑回归门(必须保持通过的检查)。
   - 按生产配置跑(模型、思考档、工具),单次运行设超时上限。
   - 用例分优化集和留出集。留出集只在收尾确认时跑,结果不拿来改方案;被拿去找过问题的留出题换新题。
   - 评分表和模型裁判先拿几份已知好坏的输出试一遍,确认奖励的是想要的行为(出现过因“缺地址价格”扣分、等于鼓励编造的评分表);人工核对一小批,确认裁判和人一致。整场比较只用这一个裁判。
   - 被优化的一方碰不到评测脚本、用例与参考答案;正确性失败记 0 分。
   - 评测不动生产账号余额、真实设备和共享额度:用独立的 key 或设备,并在每批前对照停止线查余额。
   - 评分表、阈值、用例或裁判一改,旧结果就不可比:换一个批次名重跑基线。

   完成标准:基线、噪声幅度、回归门结果和每批的预计花费都已记下。

3. **开决策记录**:在评测目录(不进仓库)放一张表,每次尝试一行:编号、假设、改动、前后指标、回归门、保留或回退、备注。每次尝试前先读它;中断后据它接着做,已有结果不重跑。

4. **循环**,每轮一个假设:
   - 假设写明机制(“X 在启动路径上阻塞首帧,挪到首帧之后”),不写“试试加缓存”。只针对基线多次运行里重复出现的失败;只出现一次的是噪声,专门改它就是过拟合。
   - 只改这一处。超过噪声且回归门通过才保留,否则整个回退;保留时在运行记录里指出改动起作用的那一刻,只有分数涨了不够。不叠加没测过的改动,不凭读代码宣布变好。
   - 互不依赖的假设各派一个子代理、各用一个 worktree 并行试;你只出假设、看 diff、裁决。几个候选各自过关后合成一版再测一次,不默认叠加。
   - 改动落到最便宜的有效部件:重复的机械活交给脚本,窄流程做成按需技能;写进提示词的规则,模型几次里有一次以上没照做,就不再改措辞,改由脚本或检查保证。

5. **停滞就换方向**:连续 2–3 次回退,或连续几次提升都落在噪声里,就停止在同一方向上微调。
   - 先查测量:各次尝试用的测量和正式评测是不是同一口径、同一条件(出现过团队一直在另一种负载下测速度,校准测量后当轮就破了纪录)。
   - 回看决策记录,判断是不是选了一条有天花板的路,然后换一类做法:换算法或架构、换数据或用例的组织、换模型、把几个差一点的改动组合起来,或者试一个更激进的方案;互斥的几个方向并行试。
   - 换方向也可以是换分工:加一个专门查测量、专职调试或读运行记录找卡点的角色。执行者说“已经到顶”不算停止理由,那是当前做法的顶。
   - 换过方向仍然卡住,带着决策记录交给用户,不空转。

6. **收尾**:达到停止条件,或剩下的想法收益抵不上成本时停;不放宽停止条件来凑数。在留出集上确认,再用生产配置在干净检出上复测一次。汇报:指标从基线到最终的变化、尝试次数(保留/回退)、每个保留的改动一行、决策记录的位置,以及下一个最值得试的想法。