揭示Agent评估中的常见误区:完成运行≠质量测量、提供评估工具≠真实评估、覆盖率上升≠行为正确等。
那张截图是评估报告吗?还是只是一段长对话?
我不断收到看起来很正式的 traces。绿色的勾、Token 计数器、一个宣称测试通过了的模型。然后有人把窗口截图粘贴到设计文档里。
那个窗口不是评估报告。它是一场穿着元数据外衣的对话。本文 FAQ 列举了我依然经常听到的五个说法。每个说法都会附上证据,然后给出一个修正后的心智模型。
你还会有一个小小的测试工具链。把它当作一个提案。我不是在卖排行榜。
本周关于测量的话题又热闹起来了。人们争论着那些模型早已能够刷分的测试。本地 traces 仍然被当作实验室证书对待。
Agent 在免费会话里完成了一个任务?行。但你先把 fixtures 和 assertions 冻结了吗?这才是真正的问题。
Disclosure: This article was prepared as part of MonkeyCode's product outreach.
MonkeyCode 提供免费模型访问和免费服务器选项。我把两者都当作起草测试工具链的草稿纸。我不把它们当作证据。没有模型名字。没有配额表演。没有凭空捏造的 p50。
说法:运行结束了,所以质量已经被测量了。
你实际持有的证据:一份工具调用和 prose 的日志。也许有一个 diff。也许什么也没有打分。
修正后的模型:评估需要冻结的输入、机器检查的断言、以及一份环境回执。
在引用通过率之前先问自己这些问题:
如果这些答案都是空的,别再引用分数了。你只是在叙述一段会话。
# proposal: gate any "eval" label on three files
test -f fixtures/input.md || echo "missing fixture"
test -f tests/test_eval.py || echo "missing assertions"
test -f env/receipt.json || echo "missing receipt"
一个完成的 trace 是原材料,不是结果。保存它。别给它加冕。
说法:我们烧了一大堆免费 Token,所以这项研究是真实的。
你实际持有的证据:消耗量。那是一个财务数字,不是准确度。
修正后的模型:Token 衡量的是消耗。它们不衡量适配度、安全性或延迟。
一个廉价的失败测试可以是极好的证据。一次庞大的聊天可以证明一种 vibe,别的什么都证明不了。你会接受发票大小作为单元测试吗?
保持各列的真实含义:
assertions_passed / assertions_total -> quality signal
tokens_in + tokens_out -> cost signal
wall_clock_seconds -> time signal
永远不要把它们混成一个虚荣指数。如果删掉 assertions 之后你的"分数"依然存在,那你打分的其实是开销。
# proposal: refuse mixed dashboards
if grep -q tokens artifacts/summary.csv && ! test -f artifacts/pytest.out; then
echo "spend without assertions is not an eval"
exit 1
fi
说法:它跑在免费的机器上,所以环境是已知的。
你实际持有的证据:一台借来的机器。镜像会迁移。进程会崩溃。限制会不声不响地出现。
修正后的模型:实验室是能从笔记重建的东西。你能从记忆里重建这个吗?大概不能。
在 agent 触碰文件之前先写一份回执。从命令填充,不要凭感觉。
# proposal: capture only facts the shell can prove
mkdir -p env artifacts
{
echo "git_head=$(git rev-parse HEAD 2>/dev/null || echo none)"
echo "python=$(python3 --version 2>/dev/null || echo none)"
echo "cwd=$(pwd)"
echo "fixture_hash=$(sha256sum fixtures/* 2>/dev/null | sha256sum)"
echo "ran_at_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)"
} > env/receipt.txt
cat env/receipt.txt
如果免费服务器之后消失了,回执还在说话。浏览器标签页不会。这关乎的是打分,不是推广某个分支。
说法:模型说代码看起来不错。绿牌足够了。
你实际持有的证据:一次 review。Review 有帮助。但它们不是套件。
修正后的模型:当你不在这间屋子里的时候,套件依然会失败。如果必须有人盯着看,那它就是一个 demo。
这里是一个未执行的 pytest 草稿。只有在加入真实 fixtures 之后才能复制它。
# eval_smoke.py — proposal, not a vendor score
from pathlib import Path
import json
import subprocess
FIXTURE = Path("fixtures/app.py")
RECEIPT = Path("env/receipt.json")
PYTEST = ["python3", "-m", "pytest", "-q", "tests/"]
def test_fixture_is_frozen():
assert FIXTURE.is_file(), "freeze a fixture before the agent runs"
def test_receipt_has_pins():
data = json.loads(RECEIPT.read_text())
assert data.get("git_head"), "pin the commit under test"
assert data.get("fixture_hash"), "pin the fixture bytes"
def test_assertions_exit_zero():
result = subprocess.run(PYTEST, capture_output=True, text=True)
Path("artifacts/pytest.out").write_text(result.stdout + result.stderr)
assert result.returncode == 0, result.stdout[-2000:]
注意其中的缺席。没有 spinner 截图。没有针对聊天内容的 LGTM 匹配。没有假装先知的模型标识符。
如果 pytest 从未运行过,你欣赏的是一个 patch。你没有评估它。你会为鼓掌而合并吗?
说法:我又发了一遍 prompt。看起来还是没问题。回归已经覆盖了。
你实际持有的证据:来自一个移动系统的又一个样本。工具变了。上下文变了。你从未设置过 seed。
修正后的模型:回归意味着固定的 artifacts 加上确定性检查。同样的 vibe 不是套件。
把这五样东西固定下来,否则就把工作叫做探索:
# proposal: fail the job when pins are missing
set -euo pipefail
test -f tests/test_eval.py
test -n "$(git rev-parse HEAD)"
test -f requirements.txt -o -f poetry.lock -o -f package-lock.json
test -f env/receipt.txt
探索是健康的。把探索命名为回归套件才是 myth。回放字节,不是回忆。
用任何草稿机。免费服务器可以接受,用来起草。不要把那份草稿当作实验室报告发布。
想要更小的循环?哈希、断言、回执、diff。就停在那里。
# proposal: one working-copy rule
cp fixtures/app.py work/app.py
# agent may edit work/app.py only
sha256sum fixtures/app.py > env/fixture.sha256
git diff -- work/app.py > artifacts/work.diff
python3 -m pytest -q tests/
echo $? > artifacts/pytest.exit
把右侧那列读两遍。大多数 Slack 截图都死在那里。
这个工作流不给模型排名。它不证明生产延迟。它不替代安全审查。
免费模型访问可以节流或消失。我没有声称配额、硬件、时长或正常运行时间。我没有发布我没有测量过的数字。
这个工具链是一个提案。在信任它之前填入真实的哈希。短句让我没法夹带额外的声明。
如果你需要认证评估,不要用这个。如果你用于安全关键版本,不要用这个。如果你的团队已经有了一个固定的 eval 集群,也不要用这个。
如果你想要一个模型名字目录,跳过它。我不会编造它们。如果你只是需要一张 Slack 截图,跳过吧。这个过程会感觉很慢。那种慢是重点。
我会接受 fixtures、assertions 和回执。我不接受 vibes。
如果在免费模型机器上起草能帮助你启动,就在上面起草那个循环。把 artifacts 导出来。在你控制的机器上回放同样的 assertions。
如果你想要一个健全性检查,发送回执 schema。不要发送聊天记录。
For further actions, you may consider blocking this person and/or reporting abuse