Agent Harness 04:评测、复现与安全
评测对象是整个闭环
Agent 的结果由至少五个变量共同决定:
只写“某模型得分 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:注入可恢复故障后最终成功的比例。
可靠性
若每个任务跑 次、成功 次:
pass@k问“给 k 次机会,至少一次成功吗”,适合可筛选候选解;pass^k问“连续 k 次都成功吗”,适合具有现实副作用的流程。
报告 pass^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_FAILURE | API、命令或依赖异常 | Tool/Executor |
POLICY_BLOCK | 需要能力或审批 | TaskSpec/Policy |
ENVIRONMENT_SETUP | 镜像或初始状态错误 | benchmark infra |
EVALUATOR_ERROR | 误判、flaky test | evaluator |
BUDGET | step/token/时间耗尽 | 预算/策略效率 |
SECURITY | 注入、泄漏、越权 | 多层联合修复 |
环境没装好却计为模型失败,会惩罚错误对象;只排除失败实例又会高估系统。两者都要单独报告。
威胁模型
资产
用户数据、凭据、代码、写权限、支付能力、外部通信、评测隐藏答案、Trace 和长期记忆。
攻击者入口
用户输入、网页/邮件/文档、仓库文件、工具描述、MCP/插件、依赖包、模型输出、检索索引和被污染的记忆。
主要攻击
| 威胁 | 例子 | Harness 控制 |
|---|---|---|
| 间接 prompt injection | 网页要求上传本地文件 | 来源标记、能力隔离、egress policy |
| confused deputy | 低权限用户诱导 Agent 用高权限凭据 | 用户身份向下传递、逐工具授权 |
| 过度代理 | “整理邮箱”被解释为删除邮件 | 默认只读、写操作确认、范围约束 |
| 参数替换 | 正确工具但收件人/金额被篡改 | 结构化参数策略与二次确认 |
| 凭据泄漏 | token 进入 prompt 或 trace | 短期凭据、字段脱敏、secret broker |
| 重放 | 超时后重复支付 | 幂等键、事务状态机、执行回执 |
| 资源耗尽 | 无限循环、日志洪泛、fork bomb | step/时间/CPU/内存/pid/输出配额 |
| 供应链 | 恶意工具或依赖更新 | 固定 digest、签名、来源审计 |
五道真正的安全边界
- 能力边界:没授予的工具和凭据在执行环境中不存在;
- 参数策略:允许
send_email不等于允许任意收件人和附件; - 人类审批:针对具体结构化动作,而非笼统点一次“允许”;
- 执行隔离:进程、文件、网络和资源在模型之外受限;
- 事后审计:能把环境副作用对应到任务、动作、授权人与模型请求。
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下一步用框架地图选择实验载体;不要让框架选择替代实验设计。
许可协议:CC BY
作者:Davids
本文链接:https://hustjjd.github.io/llm/agent-harness/evaluation-security/
更新于:2026年10月12日