1. SecurityClaw 学习笔记/

17 可观测性与 Agent 评测:从最终答案到运行证据

结论先说:看最终答案,只能判断“像不像对”;看 trace,才能判断“系统到底怎么到这一步的” #

Agent 评测最容易犯的错,就是只看最后一句输出。

但真实系统里,真正值得评测的是整条运行链:

  • 计划是什么
  • 调了哪些工具
  • 哪一步失败
  • 是否进入恢复
  • 为什么停止
  • 是否浪费了预算

也就是说:

Agent 评测的对象不只是 final answer,而是运行证据本身。


一、可观测性和评测为什么不能分开看 #

可观测性回答:

  • 系统做了什么
  • 花了多久
  • 失败在哪

评测回答:

  • 这样做是否合理
  • 是否达成目标
  • 是否值得复用

所以这两层在 Agent 系统里天然耦合。

如果没有 trace、metrics、replay,你的评测只能停留在“看答案像不像对”。


二、trace 应该记录什么 #

一个最小可用的 Agent trace,至少应当包括:

TraceEntry = {
    "step": 3,
    "plan_summary": "query_asset_db(ip=10.0.0.4)",
    "tool_name": "query_asset_db",
    "duration_ms": 182,
    "status": "success",
    "evaluation_reason": "evidence insufficient",
}

真正重要的不是“记录很多”,而是记录这些决策级字段:

  1. 这一步试图做什么
  2. 实际调用了什么
  3. 花了多少时间
  4. 成功还是失败
  5. 评估层怎么解释这个结果

这几项合在一起,才构成一条可审计证据链。


三、metrics 不是为了仪表盘好看,而是为了发现系统退化 #

至少要有这几类指标:

3.1 成本指标 #

  • 平均 token 消耗
  • 单任务平均步数
  • 平均工具调用次数

3.2 质量指标 #

  • 成功率
  • 恢复率
  • 空结果率
  • 提前停止率

3.3 稳定性指标 #

  • timeout 比例
  • permission denied 比例
  • schema mismatch 比例

如果你只看最终答案是否“对”,是看不到这些系统退化信号的。


四、为什么 replay 是 Agent 系统里的高价值能力 #

replay 的本质不是“回放一遍很酷”,而是:

  • 复现 bug
  • 比较模型升级前后行为
  • 评估恢复路径是否合理
  • 验证新 guardrail 是否改变结果
# 伪代码:replay 依赖结构化 trace 和 checkpoint
replay_session = {
    "initial_input": question,
    "state_snapshots": checkpoints,
    "trace": trace_entries,
    "observations": tool_results,
}

如果系统没有结构化 trace,replay 基本做不起来。因为你根本不知道上一轮到底是:

  • 计划变了
  • 工具变了
  • 评估逻辑变了
  • 还是 budget 护栏提前触发了

五、Agent eval 为什么不能只看最终答案 #

一个答案看起来像对,不代表路径正确。

例如:

  • 模型猜对了
  • 工具结果其实为空,但模型用背景知识补了答案
  • 系统走了错误恢复路径,但阴差阳错给出合理文本

这种情况如果只用“最终答案正确率”评测,会误把偶然命中当成系统质量。

所以 Agent eval 至少应该增加这些维度:

  1. 证据充分性:答案有没有足够依据
  2. 工具使用合理性:是否调用了适合的能力
  3. 恢复路径合理性:失败后是否做了有意义的转向
  4. 停止条件合理性:系统何时停止是否合适

六、Mock 为什么比 demo 更可信 #

你前面提过一个关键点:

Mock、trace 和测试为何比最终文案更可靠

这点在评测层尤其成立。

为什么 demo 不够 #

  • demo 只展示成功样本
  • demo 无法稳定复现
  • demo 看不到系统边界

为什么 Mock 更值钱 #

  • 可以构造极端失败路径
  • 可以稳定复现某种输入输出
  • 可以判断系统在坏路径是否仍然守约
def test_timeout_path_records_recovery_trace():
    ...


def test_zero_result_marks_plan_exhausted():
    ...

这些测试的价值不在“让 CI 绿”,而在于它们定义了系统的行为契约。


七、这一篇真正要记住的框架 #

可观测性和评测可以压成这条链:

trace 记录发生了什么
  -> metrics 统计系统趋势
  -> replay 复现具体路径
  -> eval 判断路径是否合理

所以真正成熟的 Agent 系统,评测的对象不只是 answer,而是:

  • answer
  • path
  • evidence
  • cost
  • recovery

八、验证命令 #

pytest tests/ -k "trace or replay or eval or observability" -v