无尘阁日记

无尘阁日记

Agent 遇到没见过的任务就歇菜?Google 这套框架让 harness 自己改自己(2.3 万星)
silcano

github监控器 · 2026-11-10 · 约 3045 字 · google-research/harness2

 

你的 agent 在训练过的任务上很强,换个没见过的领域就崩。因为它不会为自己造工具。

Harness² 的思路是把"改造 harness"这件事本身递归掉:任务级递归当场调 harness,harness 级递归把这次的教训沉淀下来,下次直接用。

2.3 万星,10 月 6 日建仓,Google Research 出品,Apache-2.0。它最硬的一点:全程模型权重不动。 提升全来自 harness。

一、先说结论:它把"改进"从训练搬到了推理

提升 agent 能力有两条路:改模型权重(训练),改模型周围的东西(harness)。

第一条贵、慢、需要数据。第二条便宜,但以前靠人手工调。

Harness² 的问题是:能不能让 agent 自己调自己的 harness?

它的答案是两层递归。而"权重固定"这个约束,让结果能直接搬到任何模型上。

harness2 数据卡

二、harness 到底指什么(官方定义)

README 给了一句非常清楚的定义,值得原文照抄:

"A harness is the system around a model that enables it to act as an agent: prompts, tools, memory, skills, orchestration, and more. Harnessing is the process of optimizing that system."

翻成人话:模型之外的一切,加上"优化这一切"的动作。

这个定义把"提示词工程"降级成了 harness 的一个子集。工具设计、记忆结构、任务分解方式,权重都比提示词大。

三、两层递归:分别改什么

第一层:任务级递归(task-level)

针对当前这一个任务,反复调整执行用的 harness。方法是 Propose–Probe–Compose:

  1. Propose:提出几处 harness 修改(加个工具、改提示、换分解方式);
  2. Probe:在同一个任务上试探这些修改的效果;
  3. Compose:根据"行为差异"组合出一个更好的 harness。

注意关键一句:"without ground-truth feedback"——不依赖标准答案。

它比较的是"不同 harness 下的执行轨迹差异",不是"对错"。这意味着没有标注数据的任务也能优化。

第二层:harness 级递归(harnessing-level)

把这一轮被采纳的 harness 变更、以及有证据支撑的经验,写进一个持久化的改进 harness。

下次遇到新任务,从这份积累出发,而不是从零开始。

两层的关系是:内层解决这个任务,外层让下次更快。

README 里的流程图

四、装:uv 一条龙

标准流程:

uv venv --python 3.12 .venv
source .venv/bin/activate
uv pip install -e '.[render]'

[render] 这个 extra 是渲染相关依赖——它要出图/出报告,所以带了渲染包。

装完先跑 demo,不需要模型凭据:

harness2-demo --output runs/demo --k 2

--k 2 是递归轮数。先从 2 开始,看它怎么改,别一上来跑 10 轮。

跑完去 runs/demo 看产物——这一步比读文档有用,能直观看到"harness 被改成了什么"。

五、配模型:Vertex AI

要跑真实基准,得配 Google Cloud 的 Vertex AI:

cp .env.example .env
# 编辑 .env,填你的 Vertex AI 项目和模型 ID
gcloud auth application-default login

两步都不能省。.env 里填的是项目 ID 和模型名,gcloud auth 给的是运行时凭据。

这一步是国内用户的主要门槛:需要能访问 Google Cloud,并且有可用的项目配额。

六、跑基准:五条命令的顺序

README 给的完整流程:

# 1. 准备基准环境
harness2-setup lab

# 2. 自检(不要跳过)
harness2-check --bench lab

# 3. 跑
harness2 --bench lab --k 1 --mode parallel \
--only-domains antitrust-competition --max-tasks 1

# 4. 评判
harness2-judge --bench lab --k 1 --mode parallel

# 5. 出报告
harness2-report --bench lab

五步的顺序不能乱:setup → check → run → judge → report。

第二步 check 最容易被跳过。它检查环境、模型连通性、数据完整性——跳过它的代价是跑到一半失败,白烧配额。

第一次跑建议用 --only-domains antitrust-competition --max-tasks 1:一个领域、一个任务,先把链路跑通。

这个"先跑通一条最小链路"的习惯,比任何框架知识都值钱。所有跑不起来的人,都是想一次跑全量。

七、--k 是什么:递归深度

--k 出现在多个命令里,含义是递归轮数。


k 值
效果
成本
1
单轮:只做一次 harness 调整
最低,适合调试
2
两轮:调一次,再用调整后的结果再调
中等,demo 默认
更大
持续改进,但收益递减
线性上升

关键判断:k 增大后如果指标不涨,说明瓶颈不在 harness,在别处。这时候加 k 只是烧钱。

八、六个坑

  • 跳过 harness2-check。 跑到一半失败,配额白花;
  • 一上来跑全量基准。 先用 --max-tasks 1 跑通链路;
  • k 开太大。 收益递减,成本线性;
  • 没有 Vertex AI 配额。 装完也跑不了真实基准,只能看 demo;
  • 忘了 activate venv。 命令找不到,先 source .venv/bin/activate;
  • 以为它能提升模型能力。 它改的是 harness,权重是固定的。

九、为什么"权重固定"是个优点

这点容易被忽略。

如果靠训练提升,你会遇到三个问题:要数据、要算力、换模型就失效。

权重固定意味着:这套 harness 改进可以搬到任何模型上。今天在 A 模型上摸索出来的 harness,明天贴到 B 模型上大概率还有用。

这跟你自己积累 prompt 和工具的习惯是一个逻辑——harness 是可迁移资产,权重不是。

README 里的组件图

十、谁该读这个项目


你是谁
该看什么
做 agent 框架的人
两层递归的设计,是这一轮最重要的范式
做评测的人
看它怎么在"没有标准答案"下比较轨迹
想提升自己 agent 的
先跑 demo,看 harness 怎么被改
普通使用者
现在别装,它是研究框架,不是产品
没有 GCP 账号的
读文档 + 跑 demo 就够了

十一、和"自动 prompt 优化"的区别


自动 prompt 优化
Harness²
优化对象
提示词
提示词 + 工具 + 记忆 + 编排
反馈来源
通常要标准答案
行为差异对比,不要求真值
是否沉淀
单次
持久化到改进 harness
层级
一层
两层递归

第二行是它最实用的创新。"不需要标准答案"意味着它能用在你没标注的场景里。

十二、版本与地址


用途
地址
仓库
github.com/google-research/harness2
论文
README 的 Citation 一节(Xu 等,2026)
许可
Apache-2.0
版本
0.1.0
依赖
Python 3.12 + uv + Vertex AI
包名: harness2
版本: 0.1.0
许可: Apache-2.0
安装: uv pip install -e '.[render]'
命令: harness2-setup / check / harness2 / judge / report
约束: 模型权重固定,只优化 harness

最后一句:这个项目最值钱的不是代码,是那句定义——harness 是模型之外的一切。 想清楚这一点,你就知道该往哪儿使劲了。

 

关于作者 · 江天(楠哥)
AI 实战导师 / 企业 AI 落地顾问 / 智能体工程师,17 年跨界、15,000+ 小时 AI 实操、20+ 套已交付工作流。 看完整履历海报 → skills 实验室 →