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

# 爬山

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

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

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

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

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

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

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

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