Agent Harness 04:评测、复现与安全

评测对象是整个闭环

Agent 的结果由至少五个变量共同决定:

Y=f(model,harness,task,environment,randomness)Y=f(\text{model},\text{harness},\text{task},\text{environment},\text{randomness})

只写“某模型得分 40%”缺少可解释性。模型版本、system prompt、工具 schema、预算、环境镜像、网络、evaluator 与采样种子都可能改变轨迹。

三层判分器

层检查什么例子
协议 evaluator动作能否解析、参数是否有效tool-call schema、patch 能否 apply
任务 evaluator目标环境状态是否达成测试通过、数据库终态、文件内容
政策 evaluator过程与副作用是否合规未越权、先授权后写入、无数据外泄

三层必须分别报告。最终状态正确不表示过程安全:Agent 可能先把数据发给错误收件人再撤回,也可能在未确认时先扣款,最后数据库看起来仍正确。

指标组合

效用

  • task success:独立 evaluator 判定的任务完成率;
  • partial completion:只在完整成功稀疏且子目标可客观验证时使用;
  • valid action rate:合法 schema 动作数 / 总动作数;
  • recovery rate:注入可恢复故障后最终成功的比例。

可靠性

若每个任务跑nn 次、成功cc 次:

passk=Etask[(ck)(nk)],pass@k=1−Etask[(n−ck)(nk)]\mathrm{pass}^{k}= \mathbb{E}_{task}\left[\frac{\binom{c}{k}}{\binom{n}{k}}\right],\qquad \mathrm{pass@}k=1- \mathbb{E}_{task}\left[\frac{\binom{n-c}{k}}{\binom{n}{k}}\right]

  • pass@k 问“给 k 次机会,至少一次成功吗”,适合可筛选候选解;
  • pass^k 问“连续 k 次都成功吗”,适合具有现实副作用的流程。

报告 pass^k 必须满足n≥kn\ge k,并按任务先算后平均;不要假设同一模型温度为 0 就确定性。

成本与时延

  • 输入/输出/缓存 token;
  • 模型费用与工具费用;
  • wall time、模型等待、工具执行、审批等待;
  • step、tool call、重试和上下文压缩次数;
  • 峰值 CPU、内存、磁盘与网络。

成功率增加 2 个百分点但成本翻十倍,可能不是可部署进步。至少画成功率—成本 Pareto frontier。

安全

  • policy violation rate:任一禁止动作实际发生;
  • attack success rate(ASR):攻击目标被执行;
  • utility under attack:存在攻击数据时仍安全完成用户目标;
  • over-refusal:正常任务被安全机制误阻断;
  • secret exposure:敏感值进入模型、Trace 或非授权工具的比例。

只降低 ASR、同时把所有工具都禁掉不是有效防御,因此要与 benign utility 成对报告。

可复现清单

每次运行保存一个 manifest:

run:
  id: 2026-10-11T163400_case-017_seed-3
  seed: 3
task:
  suite: internal-support-v2
  id: case-017
  data_commit: 6b1e...
model:
  provider: example
  name: exact-model-version
  parameters:
    temperature: 0
    max_output_tokens: 4096
harness:
  git_commit: a91c...
  prompt_sha256: "..."
  tool_schema_sha256: "..."
  max_steps: 30
environment:
  image_digest: sha256:...
  network_policy: deny-by-default
  clock_fixture: 2026-10-11T08:00:00Z
evaluation:
  evaluator_commit: 72dd...
  timeout_s: 900
artifacts:
  trajectory: events.jsonl
  final_state: state.json
  patch: result.diff

模型别名如 latest、Docker tag 如 main、没有 commit 的 prompt 都不足以复现。

失败分类先于总分

建议每个失败只标一个主要根因,再保留次要标签:

主类典型现象应修改的层
MODEL_REASONING目标理解或计划错误模型/prompt/训练
ACTION_PROTOCOL工具名或参数无效schema/ACI/adapter
CONTEXT_LOSS忘记约束、摘要丢信息ContextBuilder
TOOL_FAILUREAPI、命令或依赖异常Tool/Executor
POLICY_BLOCK需要能力或审批TaskSpec/Policy
ENVIRONMENT_SETUP镜像或初始状态错误benchmark infra
EVALUATOR_ERROR误判、flaky testevaluator
BUDGETstep/token/时间耗尽预算/策略效率
SECURITY注入、泄漏、越权多层联合修复

环境没装好却计为模型失败,会惩罚错误对象;只排除失败实例又会高估系统。两者都要单独报告。

威胁模型

资产

用户数据、凭据、代码、写权限、支付能力、外部通信、评测隐藏答案、Trace 和长期记忆。

攻击者入口

用户输入、网页/邮件/文档、仓库文件、工具描述、MCP/插件、依赖包、模型输出、检索索引和被污染的记忆。

主要攻击

威胁例子Harness 控制
间接 prompt injection网页要求上传本地文件来源标记、能力隔离、egress policy
confused deputy低权限用户诱导 Agent 用高权限凭据用户身份向下传递、逐工具授权
过度代理“整理邮箱”被解释为删除邮件默认只读、写操作确认、范围约束
参数替换正确工具但收件人/金额被篡改结构化参数策略与二次确认
凭据泄漏token 进入 prompt 或 trace短期凭据、字段脱敏、secret broker
重放超时后重复支付幂等键、事务状态机、执行回执
资源耗尽无限循环、日志洪泛、fork bombstep/时间/CPU/内存/pid/输出配额
供应链恶意工具或依赖更新固定 digest、签名、来源审计

五道真正的安全边界

  1. 能力边界:没授予的工具和凭据在执行环境中不存在;
  2. 参数策略:允许 send_email 不等于允许任意收件人和附件;
  3. 人类审批:针对具体结构化动作,而非笼统点一次“允许”;
  4. 执行隔离:进程、文件、网络和资源在模型之外受限;
  5. 事后审计:能把环境副作用对应到任务、动作、授权人与模型请求。

Prompt 中的“禁止泄漏”可以降低概率,但不属于安全边界。

测试矩阵

维度正常用例故障/攻击用例
工具正确参数缺参、错类型、未知工具、超时
观察短可信结果超长、乱码、注入、敏感字段
环境固定镜像依赖缺失、磁盘满、网络断开
副作用单次写成功返回丢失后重试、部分提交
上下文短任务接近窗口上限、摘要后恢复
用户完整明确信息逐步披露、需求冲突、撤回授权
策略允许动作越权路径、错误收件人、金额超限
生命周期正常结束取消、崩溃、恢复、预算耗尽

发布门禁

一次版本升级至少满足:

  • 固定 golden set 的 task success 不低于阈值;
  • 至少 5 个种子的 pass^k 与置信区间无显著退化;
  • 成本、p95 时延和预算耗尽率在上限内;
  • 所有高风险动作经过参数级策略和审批;
  • prompt injection 回归集的 ASR 不上升;
  • sandbox escape、secret exposure、重复副作用为零容忍;
  • 轨迹包含模型、prompt、工具、环境和 evaluator 版本;
  • 能从最近 checkpoint 恢复并通过幂等测试;
  • 人工抽查失败分类与 evaluator 误判。

最小评测报告模板

Experiment: ACI-v3 vs ACI-v2
Hypothesis: bounded file views reduce context cost without hurting resolution
Constants: model, task set, image digest, prompt, max_steps, evaluator
Changed: tool schema + observation formatter
Runs: 200 tasks x 10 seeds

Utility: success, partial success, valid-action rate
Reliability: pass^1, pass^3, pass^5
Efficiency: tokens, wall time, tool calls, cost
Safety: benign utility, ASR, over-refusal, policy violations
Failures: taxonomy counts + 20 manually audited traces
Artifacts: manifest, raw events, evaluator output, code commit

下一步用框架地图选择实验载体;不要让框架选择替代实验设计。