ʕ•ᴥ•ʔ 李业林的博客

Lilian Weng推荐的Harness项目:autoresearch到底好在哪里

Lilian Weng推荐的Harness项目:autoresearch到底好在哪里

上个文章中[[deep-read-lilian-weng-harness-engineering]]提到的autosearch, 原文是这么说的:

定义一个让模型能够运行、测试和迭代的工作流是自动化的核心设计。Karpathy 的 autoresearch 是此类工作流构建方式的简洁范例。常见的工作流遵循以目标为导向的循环:规划、执行、观察/测试、改进,然后再次执行,直至达成目标。该过程可能会主动向用户发起请求,以明确任务要求或执行偏好。 这个仓库里面非常非常的简单,repo 被刻意保持得很小,真正重要的只有三个文件:

flowchart TD
    H["人类编写或调整 program.md"] --> A["外部 Agent 读取工作协议"]
    A --> S["创建实验分支并检查数据缓存"]
    S --> B["运行原始 train.py 建立 baseline"]
    B --> I["提出一个实验想法"]
    I --> M["只修改 train.py"]
    M --> C["先创建候选 Git commit"]
    C --> R["运行 train.py 内部 300 秒训练循环"]
    R --> E["prepare.py进行评估"]
    E --> O["Agent 从脚本输出读取 val_bpb(评估的得分)"]
    O --> L["记录到 results.tsv"]
    L --> D{"val_bpb 是否更低"}
    D -->|"是"| K["保留 commit,分支前进"]
    D -->|"否"| X["reset 回上一个有效 commit"]
    K --> I
    X --> I

通过外部Agent( 可能是你的CC Codex cursor 或者是任何Agent) 来进行外层循环 (program.md中的指示 但愿你的Agent会听话) ,然后内层循环 就是通过train.py脚本 反复进行训练; 我第一次见到这么精简的仓库,拉到本地之后, 在MacBookPro上跑了一共8小时,指标从1.44(基线)最终下降到了1.36(毕竟只是一台笔记本,推理效率已经不错了) alt text 图中的白点都是被抛弃了的实验(得分基于之前的最高分),图中的绿点则为超过的当时的最高分的实验,完全都是Gpt-5.6-sol的想法; 这些有进展的实验 分别是通过减小训练批次 缩短训练上下文 加宽模型 增强 Attention来实现的. 我们无需关心他做的这些更改 而是应该聚焦到这个仓库实现训练自进化的方式.

所以 翻回去重新去看这三个文件 program.md:就相当于Harness 的控制协议,里面规定了Agent可操作的范围和空间:只能改train.py,先commit再实验,超过保留,未超过就reset;持续循环,直到用户手动打断; prepare.py相当于基础设施和评估脚本:这里的内容不重要 ,重要的是一定要有一个衡量指标 任务一定要有个得分才行;并且这是整个 Harness 最关键的边界:Agent 可以改变训练方法,但不能改变“考试题”和“评分规则”。 train.py:实验对象 里面的内容是训练模型 但是我们其实不关心;它里面可以是任何我们需要进化的对象; 所以 引申出来 我如果要通过这套harness方案去进化一个prompt: 那么我要有一个"program.md" 告诉外部Agent只能修改我的prompt,然后描述一整套循环流程;
要有一个"train.py" 承载我当前的prompt; 要有一个"prepare.py" 里面可以用各种手段对这个prompt进行测评以及打分 ; 这样 我只需要让我的Agent去阅读program.md 然后就可以放手去等结果了; 这个项目几乎是用最低的复杂度 演示了一个自进化harness要有的必要东西了,缺一不可.

<< Previous Post

|

Next Post >>