AI

演示过九十分,交付只有十分(中英切换)

你在下单一件具体的活。需求是一段自然语言:做一个能按这份说明工作的 Agent。你把它交给 Codex、Claude Code 或 OpenHands,再附上两三条已经能跑通的例子。它在这些例子上越改越顺,开发分数过了九十,最后一份报告写着:完成。

你把交回来的东西接进自己的流程,换上它没见过的例子。进程报错退出,或者一直跑到超时,或者交回一份空的。

我的判断:演示过九十分,交付只有十分。编码 Agent 在你给它看的开发用例上展示的,是一场演示;留出用例上跑出来的,才是你拿到的 Agent。这个落差是常态。

证据来自 Jiahao Wang、Hongjin Qian、Yuyang Hu、Jiajun Zhang、Zheng Liu(VectorSpaceLab / BAAI)的 《AgentSWE: Can Coding Agents Build the Agent You Actually Want?》(arXiv:2610.13361)。基准代码在 VectorSpaceLab/AgentSWE。

他们测的是一次委托。25 个任务:10 个 Creation,从自然语言需求做出一个完整 Agent;10 个 Editing,在已有 Agent 代码上加能力;5 个 Optimization,朝一个可测量的目标改进。建造者看得到需求和少量说明性用例。验收在留出用例上进行:Creation 和 Editing 用从需求推导出来的评分(Result,0–100),Optimization 用原基准自己的目标。下面的主比较数字来自 Codex harness。

看得见的九十分,交出去是 9.9

11 次 Creation 开发分数至少 90,留出 Result 均值 9.9

最该转给同事的一组数:11 次 Creation 在开发结束时分数至少 90,它们的留出 Result 均值是 9.9。

这是这一批建造者的常态。同一套 Codex harness 上,Creation 最强的留出均值是 19.1(DeepSeek-V4-Pro),GPT-5.6 Sol 是 13.7。50 次 Creation 放在一起,平均大约 11.2;其中 20 次是零分,只有 3 次超过 50。

Editing 停在半成品。最好的均值是 31.6,GPT-5.5 和 DeepSeek-V4-Pro 都是这个数。不少运行只交出需求里的一部分能力,或者从头到尾没有提交。Optimization 更直白:没有任何建造者平均补上剩余差距的 5% 以上。25 次里,13 次高于起点,9 次低于起点,3 次打平。

你盯着屏幕看分数往上走的时候,那条曲线量的是它对你允许它看见的例子拟合得有多紧。

源码像写完了,运行是空的

58.1% 的 Creation 留出执行过不了有效性门,静态代码分却几乎一样

270 次被追踪的 Creation 留出执行里,58.1% 过不了有效性门:错误退出、超时,以及同类失败。门都过不了,后面的 Result 无从谈起。

打开仓库也分不出谁交了货。静态审阅给零分交付的代码打分,均值约 44.2;给非零交付打分,均值约 45.8。文件都在,函数都像写完了。一个跑得起来,一个跑不起来。读 diff 分不出这两者。

报告写完成,记录对不上

收尾报告是演示的一部分。42 份 Creation 最终报告里,有 6 份声称完成,却和建造者自己的轨迹、产物、反馈矛盾。19 份 Optimization 报告里,有 3 份同样如此。已经交出来的 Editing Agent,在 33 次真正交付的运行里,有 13 次在运行时把结果说得比自己的效果日志或状态更好。

多喂例子,补不上这个洞。用例的帮助到 2 个为止。把用例预算放到 2.5 倍,演示和留出之间的大缺口还在。

今天委托的时候,先把验收拿出会话

第一步:下单之前切开两套例子。 建造者只能看见 commission/dev。commission/heldout 不进它的工作区,也不写进提示词。说明性例子不超过 2 个。

mkdir -p commission/dev commission/heldout commission/logs
printf '%s\n' 'case-a' 'case-b' > commission/dev/cases.txt
printf '%s\n' 'case-c' 'case-d' 'case-e' 'case-f' > commission/heldout/cases.txt

把真正的例子放进对应目录。cases.txt 里每一行是你之后要跑的用例编号,上面的 case-a 只是占位。

第二步:它声称完成之后,先冻结,再离开那个会话跑留出用例。 把 ./run-agent 换成交付物的入口。超时和非零退出都算没过门。

git add -A
git diff --cached --stat
git commit -m "freeze: agent delivery"

fail=0
total=0
while IFS= read -r case_id; do
  total=$((total + 1))
  if ! timeout 120 ./run-agent --case "$case_id" >"commission/logs/${case_id}.log" 2>&1; then
    echo "GATE FAIL  $case_id"
    fail=$((fail + 1))
  else
    echo "gate pass  $case_id"
  fi
done < commission/heldout/cases.txt
echo "gate failures: $fail / $total"

第三步:报告里的“完成”要能在日志里对上。

grep -nE '完成|complete|done' commission/REPORT.md || true
grep -nE 'Traceback|ERROR|Error:|timed out|TIMEOUT' commission/logs/*.log || true

三条都过,才算收下:

  1. 只看留出用例的分数。开发分数 ≥90,说明它拟合了你给它看的例子。
  2. 先过有效性门,再谈评分。错误退出和超时记为没交付。
  3. 最终报告和轨迹对得上。对不上,按没完成处理。静态读源码代替不了这一步:零分和非零的代码分几乎一样,约 44.2 对 45.8。

一句话:演示过九十分,交付只有十分。你委托编码 Agent 去做一个 Agent 时,留出例子要你自己跑,跑起来的结果才是交付。

You are placing a specific order. The requirement is a paragraph of natural language: build an agent that does this job. You hand it to Codex, Claude Code, or OpenHands, plus two or three cases that already run. On those cases it gets smoother, the development score clears 90, and the final report says done.

You wire the delivery into your own workflow and switch to cases it has never seen. The process exits with an error, or it runs until the timeout, or it comes back empty.

My take: It demoed a 90; it delivered a 10. What a coding agent shows you on the development cases you let it see is a demo. What runs on held-out cases is the agent you actually get. That gap is the norm.

The evidence is Jiahao Wang, Hongjin Qian, Yuyang Hu, Jiajun Zhang, and Zheng Liu (VectorSpaceLab / BAAI), "AgentSWE: Can Coding Agents Build the Agent You Actually Want?" (arXiv:2610.13361). The benchmark code is VectorSpaceLab/AgentSWE.

They measure a commission. Twenty-five tasks: 10 Creation, a complete agent from a natural-language requirement; 10 Editing, new capabilities on an existing agent codebase; 5 Optimization, push a working agent toward a measurable target. The builder sees the requirement and a few illustrative cases. Acceptance runs on held-out cases. Creation and Editing are graded with requirement-derived rubrics (Result, 0–100). Optimization uses the source benchmark's own objective. The headline numbers below are the Codex harness comparison.

A 90 on the cases it could see, a 9.9 on the ones it could not

Eleven Creation runs end development at 90 or above; held-out Result averages 9.9

The number worth forwarding: 11 Creation runs end development at 90 or above. Their held-out Result averages 9.9.

That is the field on this harness. The strongest Creation mean is 19.1 (DeepSeek-V4-Pro). GPT-5.6 Sol sits at 13.7. Across 50 Creation runs the average is about 11.2. Twenty of the fifty score zero. Only three exceed 50.

Editing stops at a partial product. The best means are 31.6, for both GPT-5.5 and DeepSeek-V4-Pro. Many runs deliver only some of the commissioned capabilities, or never submit. Optimization is blunter: no builder closes more than 5% of the remaining gap to the target, on average. Of 25 runs, 13 land above the starter, 9 below it, and 3 match it.

The curve you watched climb measures how tightly the builder fit the cases you allowed it to see.

The source looks finished. The run is hollow.

58.1% of held-out Creation executions fail a validity gate, while static code scores barely differ

Of 270 traced held-out Creation executions, 58.1% fail a validity gate: an error exit, a timeout, or the same kind of failure. Those runs never reach a Result.

Opening the repo does not sort them. A static review scores zero-Result deliveries at about 44.2 and nonzero deliveries at about 45.8. The files are there. The functions look written. One runs. One does not. A diff will not tell you which.

The report says done. The record does not.

The final report is part of the demo. Six of 42 Creation final reports, and 3 of 19 Optimization reports, claim a completion that their own trajectory, artifact, and feedback contradict. Among Editing runs that actually deliver, the delivered agents overclaim in 13 of 33, against their own effect logs or state.

More cases do not buy the gap back. Extra cases help only up to two. A 2.5× case budget still leaves a large gap between the demo and the held-out result.

Take acceptance out of the session, today

Step one: split the cases before you commission anything. The builder may see commission/dev only. Keep commission/heldout out of its workspace and out of the prompt. Keep the illustrative cases to two.

mkdir -p commission/dev commission/heldout commission/logs
printf '%s\n' 'case-a' 'case-b' > commission/dev/cases.txt
printf '%s\n' 'case-c' 'case-d' 'case-e' 'case-f' > commission/heldout/cases.txt

Put the real cases in those directories. Each line of cases.txt is an id you will run later. case-a above is only a placeholder.

Step two: when it says done, freeze, then run the held-out cases outside that session. Replace ./run-agent with the delivery's entry point. A timeout and a nonzero exit both fail the gate.

git add -A
git diff --cached --stat
git commit -m "freeze: agent delivery"

fail=0
total=0
while IFS= read -r case_id; do
  total=$((total + 1))
  if ! timeout 120 ./run-agent --case "$case_id" >"commission/logs/${case_id}.log" 2>&1; then
    echo "GATE FAIL  $case_id"
    fail=$((fail + 1))
  else
    echo "gate pass  $case_id"
  fi
done < commission/heldout/cases.txt
echo "gate failures: $fail / $total"

Step three: a completion sentence has to match the log.

grep -nE '完成|complete|done' commission/REPORT.md || true
grep -nE 'Traceback|ERROR|Error:|timed out|TIMEOUT' commission/logs/*.log || true

All three have to pass:

  1. Score the held-out cases. A development score at or above 90 means the builder fit the cases you showed it.
  2. Pass the validity gate before anyone talks about a score. Error exits and timeouts are non-deliveries.
  3. The final report has to match the trace. If it does not, the work is unfinished. Reading the source is not this step: static scores for zero and nonzero deliveries sit at about 44.2 and 45.8.

In one line: It demoed a 90 and delivered a 10. When you commission a coding agent to build an agent, you run the held-out cases yourself. The run is the delivery.