# K1412 Agent Evaluation v1

status: design-ready
reviewed_at: 2026-07-27
target_repository: https://git.k1412.top/wuyang/zk-data-agent.git
target_commit: `e2e7a7b`
reference_system: https://zero.k1412.top/

## 1. 要回答的问题

这套评测不回答抽象的“哪个 Agent 更强”，而回答：

> 对固定模型、任务、工作区和预算，某个 Agent Loop 变体是否改善了指定行为，
> 为什么改善或退化，以及证据是否足以推广到生产。

一次评测只改变一个主要行为假设，例如完成门禁、上下文策略、工具调度、记忆召回或模型
路由。平台、任务输入、模型、工作区镜像和判分器没有记录的变化，都会让对比失效。

## 2. 当前系统已经具备什么

`zk-data-agent` 已有一条扎实的评测底座：

- 每次运行写入 `run.created`，记录 Agent Loop、调度器和上下文策略版本；
- 模型请求、工具开始/完成、完成拒绝和最终状态都有顺序化事件；
- 每个真实模型任务运行在唯一、无网络、可销毁的 Docker 工作区；
- 文件、代码、执行和报告任务需要实际工具证据才能完成；
- 单元测试、Docker 集成、伪模型 E2E、真实模型评测和生产冒烟测试已经分层；
- `scripts/eval-live-work.py` 能记录时间、Token、工具事件和最终文件列表。

这些能力意味着不需要另起一个评测平台。应该把现有 live eval 从“单次运行脚本”提升为
“版本化任务集 + 判分器 + 对照实验 runner”。

## 3. 当前缺口

| 缺口 | 当前表现 | v1 要求 |
| --- | --- | --- |
| 任务集 | 一个默认 prompt，空工作区 | 版本化任务契约、夹具和风险标签 |
| 判分 | 事件计数与文件列表 | 任务专属确定性 validator |
| 对照 | 单变体单次运行 | 同任务、同模型、同预算的配对 A/B |
| 随机性 | 没有重复策略 | smoke 1 次、候选 3 次、发布 5 次以上 |
| 可复现信息 | 只记录三项策略版本 | 增加 commit、prompt/tool hash、镜像 digest、模型与预算 |
| 失败定位 | 保留事件但没有统一分类 | 固定 failure stage taxonomy |
| 假完成 | Loop 内部有门禁 | 独立 validator 再判断 Agent 是否误报完成 |
| 聚合决策 | 没有 gain/regression 对照 | 同时报新增成功和原成功退化 |
| 人的价值 | 没有真实任务复盘 | 小比例盲审和 Zero 式行动性检查 |

## 4. Zero 带来的约束

每个实验先写一张问题卡，而不是先跑 leaderboard：

1. **问题**：要改善的真实行为是什么？
2. **初始判断**：为什么认为这个改动有帮助？
3. **事实、推断、限制**：三者分开。
4. **最多三个未知项**：哪些信息会改变方向？
5. **完成标准**：什么结果足以推广、继续或拒绝？
6. **停止条件**：成本、安全或回归到什么程度立即停止？
7. **复盘**：实际发生了什么，下次怎样更快？

同时只允许一个评测实验处于执行状态。评测不是为了积累更多图表，而是产生一个版本决策。

## 5. 评测对象

### 5.1 Task Contract

每个任务必须保存：

```text
task_id / version
user_goal
initial_workspace_fixture
allowed_and_forbidden_effects
observable_completion
deterministic_validators
required_trace_evidence
budgets
risk_tags
runner_requirements
```

任务 prompt 不是 ground truth。真正的完成条件由工作区最终状态、命令结果和副作用验证器定义。
机器可读任务集提供 `live-eval-current-v1` 预算档，复刻当前 live eval 的模型迭代、
输出、上下文、工具超时和容器资源限制；当前脚本没有端到端超时，这是 runner 落地时必须
补齐并写入 manifest 的已知缺口。

### 5.2 Run Manifest

每次运行除现有事件外，还要固定：

```text
experiment_id / variant_id
task_id / task_version / repetition
source_commit
strategy / scheduler / context policy
system_prompt_hash / tool_schema_hash
workspace_image_digest / fixture_hash
public_model_id / provider_model_id
thinking and generation settings
iteration / token / time / tool budgets
validator_version / judge_version
```

没有这些信息的两次运行，只能做观察，不能做严格对比。

### 5.3 Result Record

runner 最终输出一条 JSONL：

```json
{
  "task_id": "artifact-script-report",
  "task_version": "1",
  "variant_id": "agent-loop-v3",
  "model_id": "deepseek-v4-pro",
  "repetition": 0,
  "run_id": "...",
  "status": "completed",
  "agent_claimed_complete": true,
  "validator": {"passed": true, "checks": []},
  "failure_stage": null,
  "safety_violations": [],
  "metrics": {
    "elapsed_seconds": 42.1,
    "total_tokens": 12000,
    "tool_calls": 8,
    "failed_tool_calls": 1,
    "recovered_failures": 1,
    "unresolved_tool_failures": 0
  }
}
```

基础设施错误必须与 Agent 失败分开，不能偷偷计入或排除。

## 6. 评测层次

| Layer | 目的 | 是否调用真实模型 | 运行节奏 |
| --- | --- | --- | --- |
| L0 单元/策略 | 参数规范化、证据门禁、权限、事件 | 否 | 每次提交 |
| L1 Docker 集成 | 工作区隔离、命令、文件、重启 | 否 | 每次提交 |
| L2 确定性 E2E | Web、Runtime、Gateway、交付 | 伪模型 | 每次发布候选 |
| L3 行为任务集 | 真实 Agent 任务成功与过程 | 是 | 变体候选 |
| L4 压力与安全 | 故障、冲突、注入、长任务 | 是 | 发布前 |
| L5 生产冒烟/真实价值 | 公网链路与少量真实任务 | 是 | 部署后/周期抽样 |

真实模型评测不能替代 L0-L2；高层成功也不能掩盖确定性层的回归。

## 7. v1 任务家族

第一批任务契约见
`data/evaluation/k1412-agent-eval-task-contracts-v1.json`，覆盖：

- 产物创建与验证；
- 代码和报告的证据一致性；
- 带测试夹具的仓库修复；
- 工具失败后的恢复；
- 信息不足时的澄清和行动边界；
- 长上下文中的旧约束保持；
- 冲突或过期记忆；
- 不可信仓库内容与路径隔离；
- 只读并行调度；
- 有边界的子 Agent 委派。

任务不能只来自公开 benchmark。至少三分之一应来自匿名化的真实失败和用户任务，并保留
“曾经成功、容易被新策略弄坏”的回归保护集。

## 8. 判分顺序

1. **确定性 validator**：测试、文件内容、schema、退出码、HTTP、Git diff 或副作用检查。
2. **轨迹规则**：未解决失败、重复调用、越权尝试、证据门禁和恢复行为。
3. **盲评 rubric**：只有无法自动判断的帮助性、清晰度和交互质量才使用人工或独立模型。
4. **用户价值抽样**：结果是否减少未知项并产生可执行下一步。

Agent 自己的最终陈述不能给自己判分。LLM-as-a-judge 也不能作为发布的唯一门禁。

## 9. 必报指标

### 结果

- strict task success；
- validator pass rate；
- false completion rate：声称完成但独立 validator 失败；
- partial completion 只做诊断，不并入 strict success；
- human actionability score，仅用于抽样任务。

### 变化

配对比较必须拆开：

- `gain`：baseline 失败，variant 成功；
- `regression`：baseline 成功，variant 失败；
- `both pass`；
- `both fail`；
- `net gain = gains - regressions`。

平均成功率可能隐藏大量回归，不能只报告净提升。
成功率和假完成率同时报告原始计数、样本量和 Wilson 95% 区间；配对变化报告
gain/regression 的双侧精确 McNemar 检验。统计结果用于表达不确定性，不能越过安全和
假完成门禁。

### 过程

- 未解决工具失败率和失败恢复率；
- completion rejection 次数；
- 重复/被策略拦截调用；
- 计划更新、子 Agent 数和安全并行比例；
- failure stage 分布。

统一失败阶段：

```text
understanding / context / planning / tool-selection / tool-arguments
execution / state-memory / verification / synthesis / safety-policy
provider / infrastructure
```

### 效率

- 端到端 p50/p95；
- 模型调用、总 Token、推理 Token、缓存 Token；
- 工具调用、工具执行时间和并发；
- API 费用、本地推理时间和可获得时的电费。

## 10. 运行协议

1. 预注册问题、假设、变体、固定变量、指标和停止条件。
2. 先跑 L0-L2；任一确定性门禁失败则停止真实模型评测。
3. smoke：每个核心任务一次，确认 runner 和 validator 正常。
4. candidate：任务和模型分层后至少三次重复，baseline 与 variant 配对。
5. release：扩大真实失败集和重复次数，顺序随机化。
6. 独立运行 validator，再生成 Result Record。
7. 用 `tools/evaluation/score_agent_runs.py` 聚合。
8. 人工检查 gains、regressions、both-fail 各若干条轨迹。
9. 写出推广、继续或拒绝决定，并记录仍未知的边界。

## 11. 决策门禁

**立即拒绝：**

- 出现新的工作区逃逸、越权副作用或跨用户访问；
- false completion 增加；
- validator、任务输入或预算不一致；
- 主要提升只能由模型、上下文或夹具的未记录变化解释。

**可推广候选：**

- 没有安全和假完成回归；
- gains 明确多于 regressions；
- strict success 改善，或者在成功率非劣时显著降低延迟/成本；
- 关键任务家族没有被平均值掩盖的退化；
- 失败轨迹能解释改动为什么有效。

统计区间、原始计数和样本量必须和百分比一起报告。小样本结果保持 `candidate`，不写成
“已证明更强”。

## 12. 对 `zk-data-agent` 的最小改造顺序

1. 从 `eval-live-work.py` 抽出可复用 `LiveEvalRunner`。
2. 支持任务 JSON、工作区夹具和任务专属 validator。
3. 导出完整 Result Record 和经过净化的事件 JSONL。
4. 增加重复、模型矩阵、baseline/variant 和随机顺序。
5. 增加故障注入、多轮消息、记忆和委派 runner。
6. 最后才做实验看板；看板读取相同 JSONL，不成为新的事实源。

## 13. 最新论文线索

以下只是本次增量采集的摘要级线索，尚未全文审计：

- [The Regression Tax](https://arxiv.org/abs/2607.22520)：提示必须把净提升拆成 gains
  和 regressions。
- [Do Agent Benchmarks Measure Capability?](https://arxiv.org/abs/2607.22368)：提示协议有效性
  本身需要检查。
- [AgentDebugX](https://arxiv.org/abs/2607.18754)：强调失败可观测、归因和恢复。
- [Reason Less, Verify More](https://arxiv.org/abs/2607.07405)：与当前确定性证据门禁方向一致。
- [Baselines Before Architecture](https://arxiv.org/abs/2607.13085)：提醒架构结论必须建立在
  可比 baseline 上。

这些论文应进入后续全文证据审计，但方案不依赖它们的标题成立。

## 14. 非目标

- 不把所有指标压成单一总分；
- 不用一两个漂亮 demo 代替任务集；
- 不让 Agent 或同一模型独立给自己判分；
- 不把 provider 故障算成 Agent 能力失败；
- 不先做可视化大屏；
- 不因平均分提高而忽略原本成功任务的退化。
