arXiv 上挂了篇 AutoDesign(2608.13560),做的是论文自动生成会议海报。我第一眼扫到标题里的 Meta-Harness Optimization,心里"哦"了一声,差点划过去——又是 prompt 搜索换了个名字吧。
后来把图重画了一遍,才发现它讲的是我一直画错的那件事:大多数人优化的是模型,这篇优化的是模型外面那圈壳。
"harness"这词你肯定见烂了。见烂和画开是两回事。来,画张图:
┌────────────── harness(工具架)──────────────┐
│ 工具集 调用顺序 重试规则 编辑循环策略 │
│ ┌──────────────┐ │
│ │ model │ ← 你天天想换的是这个
│ └──────────────┘ │
└──────────────────────────────────────────────┘
模型只管"这一步生成什么"。外面那圈壳管的是"它能看见什么、能调什么工具、错了怎么退、什么时候收手"。你换模型,换的是图里那个小方框,壳一动不动——然后你说"效果还是不行,果然模型不够强"。
这话听着耳熟吧。每次新模型一放榜,大家的第一个动作都是换模型;换完没起色,就等下一个。壳那一层从来没人碰,因为壳不性感,它不像一个能直接下下来的东西。
打个比方:模型是厨子,harness 是厨房动线。同一个厨子,备菜台在走廊尽头、锅铲搁另一个房间,出菜又慢又难吃。你把米其林那位请来,动线不改,照样手忙脚乱。
这比喻顺手,但漏风的地方得先标出来,免得你拿它推太远——厨房动线改一次就定死了,harness 不是。这篇论文干的事,恰恰是让一个智能体没完没了地改这圈壳。比喻能帮你抓住"同一批模型,壳不一样、结果差很多"这一层;再往里,它装不下。
先说这层能抓多稳。论文里有个数字比最高分有意思:七种受控的"代码智能体 + 模型"组合,模型不动,只把学出来的 DesignHarness 装上去,PosterBench 平均分从 54.99 涨到 67.39,相对提升 12.4%。
七种组合,全都涨。
分量在"受控"两个字上。不是挑一个最好的组合出来报喜,是控制变量——壳换掉,模型不换。榜上那个最高分你没法信,因为每家工具、重试、编辑策略都不一样,分不清是模型的功劳还是壳的功劳。这个实验把壳那一层单独切出来称,答案就摆在那儿:你要问 harness 值几个点,就是这 12.4 个点。
Main Track 最高分 78.32,比闭源商业系统 Claude Design 高 7.45。这个我不太想多聊,跨系统比分这种账,条件差一点结论就翻。前面那个受控实验才是能拿走的东西。
等等等等,先别收。真正让我坐直的是标题里那个 Meta。
我第一版把它的机制画错了。当时画成这样:
rollout 反馈 ──► 优化器 ──► 改 prompt ──► 再跑一遍
一条线。把"反馈驱动的优化"直接联想成 prompt 搜索,挺自然,也挺错。
后来盯着"工具架"这个词看了半天才反应过来:它改的不是 prompt,是整圈壳——工具集本身、调用顺序、重试和编辑的策略。而且改壳的不是人,是一个代码智能体:读上一轮的 rollout 反馈,去改壳的代码,改完再跑。
重画:
┌────── meta-harness optimizer ──────┐
│ 读 rollout 反馈 │
│ │ │
│ ▼ │
│ 代码智能体 ──► 改 harness 代码 │
│ ▲ (工具/顺序/重试/ │
│ │ 编辑循环) │
│ └────── 再跑一遍 ◄────────────┘
└─────────────────────────────────────┘
(model 在这张图里一次都没被改)
咔哒一下扣上了 ✨ ——"meta"这两个字不是修辞,它就是"再包一层"。模型不动,壳自己迭代。
这也正是厨房那个比喻装不下的地方:动线不是人定的,是被另一个圈一圈一圈改出来的。你以为优化是"人在调参",其实这层优化本身也被写成了一个 agent 在跑。
这毛病我不是第一次犯。上次画 RAG,第一版漏了"判断查回来的东西相不相关"那一格,图画得顺得像条直线,结果怎么都对不上现象。同一个病根:把递归的圈画成了一条线。这回差点又漏掉"改的是壳、不是模型"这一格。
跑题一句:PosterBench 除了 100 篇论文的主集,还专门切了个 10 篇的 mini 子集做受控对比。控制变量的老办法,土,但能让人信。这个设计我挺想单独画一期……算了,先拉回来。
再说个数:全自主跑的时候,40 分钟里 253 次工具调用、11 轮编辑,成本不到 3 美元,人工评估到了会议海报的平均水平。
253 次摊到 40 分钟,大概九秒多一次。这个密度比"不到 3 美元"有意思——说明它是一小步一小步往前蹭的,不是憋一次大调用糊出来的。你自己写过 agent 的话,这个节奏应该能对上体感:真正跑得动的长任务,步子都是碎的;一次憋个大的,多半中途就崩了。
还有一处我到这会儿也没完全画明白:那 11 轮编辑里,有多少是在"改壳",有多少是在"回滚上一轮改坏的壳"。这个区分对理解它怎么收敛挺关键——是稳步往上爬,还是试错再往回退。我还没找到能把这两者拆开讲的地方,先放这儿,看懂了再补。
画开完了。照例留个自检:现在你能不能用自己的话讲明白,harness 和 prompt 差在哪?一句话说不出来的话,多半是"壳"和"壳里的指令"这两层还糊在一起——你试着把它们画成两层,画不出来,就说明没分开。
下期想画开哪个?我手上候选有三个:embedding、KV cache,还有一个是"为什么同一个 prompt 昨天好使今天不好使"。哪个你最想看?
本期画开:换模型是最懒的优化。太酷了。
