训练 Harness 而非 LLM:让 Agent 外壳自动进化的开源框架
开发者推出 PyTorch 风格的 harness 训练器,冻结 LLM 本身,自动改写 prompt、上下文与工具配置…
一名独立开发者在 Hacker News 发布 Show HN 项目,提出把训练目标从 LLM 本身转向其「harness(外壳)」——也就是 prompt、上下文管理、工具调用与修复循环等围绕模型搭建的工程代码。项目以 PyTorch 风格提供 harness 训练器:模型权重保持冻结,每一轮由 Estimator 提出一处对核心文件的 diff,在任务面板上对比候选与基线,再由「贪心单调」的 Optimizer 决定是否将这次改动 fast-forward 为新的 HEAD。所有候选与实验记录都保留在 Git 仓库的 refs/candidates/ 与 refs/experiments/runs/ 目录下,git log 即是完整的晋升历史。
核心思路:一次训练,跨模型复用
作者主张,harness 才是真正承载 Agent 能力的「可调参数」,而模型本身可以保持冻结。其流程与神经网络训练形成显式类比:
- 参数:
src/policy/core.py的当前内容。 - 前向传播:在任务面板上运行候选 harness。
- 反向传播:把候选相对基线的胜/负 verdict 写入
harness.grad。 - 优化步骤:晋升 HEAD,或维持不变。
项目给出的口号是「训练 harness 一次,冻结它,再普遍抬升模型能力」——即同一份训练好的 harness 可在换用不同 LLM 时继续生效,从而把 Agent 工程从手工调参变成自动化搜索。
快速上手与配置
Quickstart 以 Terminal-Bench 的两个任务作为训练集、另外两个作为留出评估。要求环境为 Python 3.13、Docker(linux/amd64)、claude CLI(用于提出 harness 改动,也可换为 CodexAgentBackend),以及一个支持工具调用的 OpenAI 兼容推理服务。仓库自带示例配置覆盖两种小模型:
- Qwen3.5-4B(Q4_K_M GGUF,约 2.7 GB)
- GPT-OSS-20B(MXFP4 GGUF,约 12 GB)
可用 Ollama、llama.cpp 或其它引擎暴露兼容端点。作者特别强调服务器必须单并发解码(llama.cpp 设 --parallel 1,Ollama 设 OLLAMA_NUM_PARALLEL=1),否则批解码的非确定性会让实验结果无法归因于候选改动;客户端则仍可通过 max_rollout_concurrency 控制并发。更大规模训练时建议改用 SGLang Deterministic Inference 并开启批解码。运行前需在 config/llm/local.yaml 中填写 model_name(服务端声明的 id)与 tokenizer_name(HuggingFace Hub id,用于上下文长度统计),并提交该配置——训练器只测量已提交的版本。
训练循环与晋升判据
代码示例展示了训练循环的关键配置:
criterion = StrictPareto():基线能解的任务不得退步,且候选必须解出更多;分数相同时回退到次级指标。optimizer = GreedyMonotonic():把 verdict 翻译为 fast-forward HEAD 或 no-op。estimator = AgenticEstimator(...):默认由 Codex 或 Claude Code CLI 提出有界的 harness 改动,也可替换为其它 estimator。
完整流程的三十个 epoch 会被逐一记录为候选提交,可在 src/trainer/README.md 中查看逐步讲解。
确定性要求与运维提示
作者把「跨 epoch 信号可信」拆成四件事:种子化的确定性推理引擎、固定的容器网络、确定性的运行环境、以及冻结的网络缓存。若其中任何一环飘移,verdict 就无法归因于候选改动。Quickstart 的网络缓存默认通过 host.docker.internal 触达主机服务;停止时可使用 docker compose -f src/env/netcache/docker-compose.caches.yml down,加 -v 一并删除卷。
另外几条关键提示值得注意:
.env必须存在,即使服务器忽略鉴权,否则预检会以「LOCAL_LLM_API_KEY is not set」失败。- 建议在「experiment」分支上运行,因为晋升会 fast-forward 当前 checkout,
git log即是新基线。 - 首次运行会下载模型权重与任务镜像,耗时取决于硬件与模型;后续运行复用基线(除非 harness 偏离了记录的 git commit SHA)。
- 推荐在一次性 VM、容器、独立 OS 账户或专用 Agent 机器上运行,因为 Estimator 是带宿主 shell 环境的宿主机进程。
定位与局限
该项目目前仍处于作者个人博客与开源仓库阶段,没有公开 benchmark 数字或与基线方法的对比数据,因此其「跨模型、跨基准提升」的承诺还需更多独立复现来验证。对于已经在维护 Agent 工具链、并希望把 prompt 与上下文调参自动化的团队来说,这是一套思路清晰、可立即试跑的小型实验框架;对于关注 Agent 评测确定性的研究者,它关于「单并发解码 + StrictPareto 晋升」的设计也提供了可借鉴的工程约束。
