用途
Autoresearch 是一个自主改进循环技能,用于对任何可量化的代码库指标运行自我驱动的迭代优化。其灵感来自 Andrej Karpathy 的系统化、可度量迭代方法。
核心协议
每次迭代执行以下步骤:
- REVIEW — 阅读 git 日志和结果日志(哪些有效、失败或未尝试)
- PICK — 选择一个聚焦改动(预期影响最高)
- MAKE — 实现该改动(尽可能只改一个文件)
- TEST — 运行测试套件(必须通过,否则回滚)
- COMMIT — 在验证之前用 "experiment:" 前缀进行 git 提交
- VERIFY — 运行机械基准测试/指标
- DECIDE — 如果改进则保留;如果变差则 git revert
- LOG — 将结果追加到 TSV 日志
- REPEAT — 回到第 1 步
设置
1. 定义指标
循环需要一个机械的、数值化的指标,不能是主观评估。示例包括:基准分数(加权总分)、测试通过率、响应时间(p50、p95)、打包体积、代码行数、错误数量。
2. 创建结果日志
创建一个 TSV 文件来跟踪迭代,表头为:iteration、commit、metric、delta、status、description。示例行:0、baseline、4.55、0、baseline、Initial measurement。
3. 创建基线
运行指标测量命令,例如:python tests/bench.py --runs 3 --output tests/bench-results-baseline.json,然后在 TSV 中记录基线。
循环规则
- 规则 1:每次迭代只做一个改动。这能实现精确的失败归因。
- 规则 2:测试必须通过。每次改动后运行完整测试套件。如果测试失败,先修复再继续。绝不跳过测试。
- 规则 3:验证前先提交。在运行基准测试之前,用 experiment: 前缀进行 git 提交。这能保留精确状态以供后续分析。
- 规则 4:只使用机械指标。绝不主观评估。使用自动评分、计时或计数。如果无法测量,就不要优化。
- 规则 5:保留或回滚。基准测试后:改进则保留提交并记录为 keep;无变化则如果改动有其他好处可保留并记录为 neutral;退化则 git revert HEAD 并记录为 reverted。
- 规则 6:以 git 作为记忆。每次迭代前阅读 git log --oneline -20 和结果 TSV。不要重复失败的方法,除非有真正新的角度。
- 规则 7:卡住时更深入思考。如果最近 3 次迭代没有改进:重新阅读指标公式,重新阅读原始数据,尝试激进方法(不同算法、不同架构),考虑是否已达到指标上限。
- 规则 8:记录一切。TSV 日志是实验笔记本,包含足够细节以便数月后理解每次实验。
任务管理
使用 Claude Code 的 TaskCreate/TaskUpdate 作为工作队列。例如:TaskCreate: "Improve speed via connection pooling",工作时状态为 in_progress,完成后为 completed,描述中更新结果。将相关改动分组为轮次:第 1 轮低垂果实(配置改动、测试修复),第 2 轮架构改动(连接池、缓存),第 3 轮算法改进(智能回退)。
示例:Flarecrawl 基准循环
指标为跨 5 个维度的加权基准分数(速度、内容、成本、可靠性、输出质量)。迭代记录示例:
- Iter 0:base,4.55,0,base,初始分数
- Iter 1:b47567c,-,-,keep,networkidle0 用于 JS 渲染
- Iter 2:30f48b4,-,-,keep,丰富元数据(5 个字段)
- Iter 3:4376cf7,-,-,keep,基于文件的响应缓存(7 倍加速)
- Iter 4:c807746,4.15,-0.40,revert,networkidle2 导致超时
- Iter 5:c6c4ca1,4.35,-0.20,keep,回滚 networkidle,添加 --wait-until 标志
- Iter 7:aa8becc,4.45,+0.10,keep,带重试的智能 JS 回退
- Iter 9:b8a15d4,-,-,keep,httpx 连接池(HTTP/2)
- Iter 10:08feecc,-,-,keep,修复 known_text 测试配置
- Iter 11:5eb173a,-,-,keep,元数据丰富到 11 个字段
- Iter 12:round2,4.80,+0.35,keep,内容准确度 + 输出质量 → 5
关键经验
- networkidle0 作为默认值是个坏主意——有些页面永远不会达到空闲(分析脚本)。带超时和重试的智能回退是解决方案。
- 测试配置错误很重要——blog.cloudflare 的 known_text 写错了("Browser Rendering" 与 "browser-rendering")。修复测试免费给 content_accuracy 加了 1 分。
- 元数据很便宜——从现有 markdown 解析标题/链接/字数不消耗 API 调用,但将 output_quality 从 4 推到 5。
- 连接池——用持久 httpx.Client() 替换一次性 httpx.get(),在请求间复用 TCP+TLS。
反模式
- 每次迭代多个改动:无法归因改进/退化。应一次一个改动。
- 主观评估:"看起来更好"不可测量。应只使用机械指标。
- 删除失败的实验:丢失关于什么无效的信息。应使用 git revert 保留历史。
- 优化错误的东西:在 10% 权重的维度上花数小时。应按权重 × 差距排序优先级。
- 忽略测试失败:回归会累积。应每次迭代都让测试通过。
- 不记录日志:无法从过去的迭代中学习。TSV 日志是强制性的。
调用方式
/autoresearch
或指定目标:"Run an autoresearch loop to improve [metric] by [approach]"
该技能在以下情况下效果最佳:有清晰、可度量的指标;代码库有测试套件;改动可以增量进行;git 可用于版本控制。