17 可观测性与 Agent 评测:从最终答案到运行证据
·1208 字·3 分钟
结论先说:看最终答案,只能判断“像不像对”;看 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",
}
真正重要的不是“记录很多”,而是记录这些决策级字段:
- 这一步试图做什么
- 实际调用了什么
- 花了多少时间
- 成功还是失败
- 评估层怎么解释这个结果
这几项合在一起,才构成一条可审计证据链。
三、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 至少应该增加这些维度:
- 证据充分性:答案有没有足够依据
- 工具使用合理性:是否调用了适合的能力
- 恢复路径合理性:失败后是否做了有意义的转向
- 停止条件合理性:系统何时停止是否合适
六、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