Agent 评测系统架构:从指标分层到 GT/Judge 闭环的工程化落地

拆解 Agent 评测如何用指标分层、GT 来源和 Judge 校准,形成可回归的质量闭环。

原文链接AI 小老六

导语

Agent 上线后​,最难回答的问题往往不是"模型有没有变强",而是"这个 Agent 在业务里到底有没有帮上忙"。传统软件可以用单测、集成测试、覆盖率来兜住质量,Agent 却绕不开自然语言判断:一句回答是否有用、一次路由是否准确、一段诊断是否真的缩短了排障时间,都不是字符串相等能解决的事。

评测系统要解决的是这个落差。它不能只给一个漂亮的总分,也不能靠几条人工样本临时验收。更可靠的做法,是把业务价值拆成几层能独立观测的信号,再用线上行为、LLM 推断和人工 Golden Set 组成 Ground Truth 来源,最后把 LLM-as-Judge 放进一个可校准、可回归、可持续运行的工程闭环。

这篇文章不展开具体项目故事,只讨论一套可复用的 Agent 评测架构:指标怎么分层,GT 怎么拿,Judge 怎么防偏,知识库和诊断类 Agent 又该怎样接入同一套评测引擎。

Agent 评测的工程矛盾:语义正确性、业务价值和持续运营

图:将自然语言输出、行为信号和业务结果拆成可观测评测层

Agent 评测有三类麻烦,任何一类处理不好,分数都会变得不可用。

第一类是准确性。Agent 的输出通常是自然语言或多步执行结果,正确性强依赖领域知识。一个故障诊断回答可能方向对了,但证据不够;一个知识库回答可能引用了来源,却漏掉了关键约束。二值的"对/错"很难承载这些中间态。

第二类是有效性。Agent 做对了一件事,不等于业务一定变好。回答准确率、路由准确率、诊断采纳率、MTTR 降低幅度属于不同层次的信号,混在一起只会让问题失焦。

第三类是在线运营。离线评测集会过期,线上行为信号又稀疏且带噪声。评测系统必须能持续吸收新问题、识别 badcase、校准 Judge,并在每次版本变更后快速跑出可比较的结果。

图:Agent 评测面对的准确性、有效性、稳定性和在线运营挑战

这也是为什么通用 benchmark 不够用。HELM、AgentBench 这类基准可以告诉我们模型或 Agent 在标准任务上的能力,但业务评测要回答的是另一件事:在一个具体系统里,Agent 是否产生了可验证、可归因、可持续追踪的价值。

指标分层:不要把业务结果和 AI 质量揉成一个数

评测体系的第一步是分层​。SRE 里常用 Four Golden Signals 区分系统健康、流量和业务 SLO;Agent 评测也需要类似的拆解。底层信号要快、自动、可定位;顶层信号要接近业务价值,但可以周期更长。

层级 关心的问题 典型指标 用法
AI 性能指标 Agent 能不能稳定运行 成功率、错误率、P99 耗时、TTD 实时发现系统故障和链路退化
AI 质量指标 Agent 做得对不对 路由准确率、知识准确率、Faithfulness、KeyPoints Coverage 定位模型、召回、工具调用或 Prompt 问题
AI 有效性指标 Agent 是否被业务采纳 覆盖率、采纳率、有效回复率 判断 Agent 是否触达并解决真实问题
业务结果 引入 Agent 后业务是否变好 MTTR、定位时长、人工处理成本、SLO 改善 评估投入产出,通常周期更长

这种分层的价值在于归因。比如"有效诊断率"下降,不一定说明模型变差。可能是覆盖率下降,Agent 没有触达足够多的场景;也可能是诊断质量下降,工程师看到了但不采纳;还可能是整体 Oncall 流量结构变了。一个总分无法区分这些原因。

一个更可用的拆解方式是:

复制代码
AI 有效诊断率
≈ 诊断覆盖率 × 诊断采纳率诊断覆盖率 

= 产生 AI 诊断卡片的 Oncall 数 / 总 Oncall 数诊断采纳率 
= 被工程师采纳的 AI 诊断卡片数 / 产生 AI 诊断卡片的 Oncall 数

如果覆盖率低,应该先检查触发策略、白名单、召回入口和工具可用性;如果采纳率低,才进入诊断内容质量、证据完整性和 Judge 评分标准的排查。

图:性能、质量、有效性与业务结果之间的支撑关系

Ground Truth 生成:线上信号优先,LLM 推断兜底,人工集校准

图:从线上确认、上下文证据到人工 Golden Set 的 GT 生产链路

Agent 评测的上限,常常不是 Judge 模型决定的,而是 Ground Truth 决定的。​GT 不可信,后面的评分再复杂也没有意义​。

可以把 GT 来源分成三类。

GT 来源 适用场景 优点 风险
线上行为信号 用户有明确操作反馈,如点击采纳、确认处理、选择团队 实时、低成本、贴近真实业务 覆盖不全,沉默用户无法解释
LLM 推断 有上下文但没有直接标注,如从群聊推断实际处理团队、从对话判断诊断是否被采纳 自动化、覆盖更广 需要防幻觉,必须有置信度和排除机制
人工 Golden Set 知识库问答、关键业务规则、无法从行为推断的内容 最可靠,可复用 成本高,会过期,需要维护

工程上不建议把三者看成互斥方案。更稳妥的策略是分级兜底:

图:线上信号、LLM 推断和人工 Golden Set 的分级兜底机制

这里最关键的原则是"无法判断时排除,而不是猜"。把噪声样本硬塞进分母,会让指标看起来覆盖更全,实际上是在稀释判断力。

对于路由类问题,线上按钮点击往往是最可靠的信号;没有点击时,可以用群聊里的处理人、关闭前最后处置人、明确"已修复/已回滚"的发言来推断;仍然无法解析时,就不要计入准确率分母。对于知识库问答,人工核准的标准答案和 Key Points 更适合作为 GT,线上 query 可以用来扩充问题池,但不能自动升级成准确率评测集。

LLM-as-Judge:先拆任务,再评分

图:用事实抽取、分项评分和人工抽检降低 Judge 偏差

LLM-as-Judge 很好用,也很容易被用坏​。常见偏差包括位置偏差、冗长偏差和自我增强偏差。更长的回答看起来更"完整",排在前面的答案更容易被偏袒,同源模型也可能对自己的输出更宽容。

可靠的 Judge 设计不是让模型"一步给分",而是把判断拆开。

几个细节很重要。

设计点 解决的问题 推荐做法
任务拆解 一步评分容易幻觉 先抽取根因和证据,再进入评分
三级评分 二值评分看不到中间改进 使用 0 / 0.5 / 1 捕捉"方向对但证据薄"的状态
Gating 熔断 冗长回答可能拿虚高分 结论准确性为 0 时直接 rejected,不再加权
业务类型打标 不同问题的满分标准不同 先识别 issue_tag,再按类型套评分标准
异源裁判 既当选手又当裁判 Judge 模型和被评 Agent 不同源,且不读取被评系统内部状态
人工抽检 Judge 偏差会积累 每轮抽 3%~5% 样本复核,用于修 Prompt 和阈值

知识库评测也适合类似结构。准确率不应该只看"回答像不像标准答案",而要拆成三个维度:

指标 权重 检测对象
Answer Relevancy 0.2 是否回答了目标问题,是否偏题或用通用话术搪塞
KeyPoints Coverage 0.5 是否覆盖人工核准的必答要点,是否漏掉关键边界条件
Faithfulness 0.3 是否有出处支撑,是否与来源材料冲突或无中生有

其中 KeyPoints Coverage 通常最有价值。很多知识库回答看上去写了不少,其实漏掉了"例外条件""适用边界""违反规则后的处理方式"。整体相似度很难抓住这类问题,逐条 Key Point 判定更稳。

覆盖率判定:识别"看似回答,实际拒识"

知识库 Agent 的覆盖率不是"有没有吐出文字"。真正要判断的是:知识库是否掌握了这个问题需要的知识,并且回答是否建立在可追溯的证据上。

有些系统不会直接说"不知道",而是输出领域通用知识、反问用户补充信息,或者确认政策存在但不给具体内容。这些都属于未覆盖,只是形式比显式拒识更隐蔽。

图:结构化信号与 LLM 偏转检测结合判断覆盖状态

覆盖率和准确率必须分开看​。覆盖率高、准确率低,说明系统愿意回答但答得不稳;准确率高、覆盖率低,说明系统保守,能答的范围太窄。把二者合成一个分数,会把完全不同的工程问题盖住。

评测数据集:L1 问题池和 L2 Golden Set 分工

一套评测集同时承担"看覆盖面"和"看准确性"会很吃力。更可维护的设计是两层数据集。

层级 作用 关键字段 准入标准
L1 问题池 覆盖率分母,越全越好 问题、来源文档、优先级、LLM 草稿答案、Key Points 初稿 可由线上 query、文档切分、LLM 扩展生成
L2 Golden Set 准确率和回归基准,越精越好 L1 字段 + 人工核准标准答案 + 人工核准 Key Points 必须人工核准,P0 问题优先进入

问题优先级也要进入数据结构。

优先级 含义 处理方式
P0 必须答对,答错会造成实质影响 强制升级 L2,进入回归红线
P1 应该答对,答错会明显影响体验 优先升级 L2
P2 补充知识或低频问题 可长期停留 L1,先扩大覆盖率分母

L1 可以通过三类来源融合构建:历史用户 query、权威文档切分后的知识点、LLM 从边界条件和跨章节关系中补充的问题。这里 LLM 适合做批量扩展,不适合直接做最终裁判。它生成的答案和 Key Points 必须带"待验证"标记,人工核准后才能升级成 L2。

问题池大小也要和告警精度匹配。50 道题只能可靠捕捉较大的覆盖率变化;100 道题可以看 3% 左右的波动;如果希望把 2% 作为回归告警阈值,问题池通常需要扩到 300 题量级。

稳定性评测:pass@k 看上限,pass^k 看下限

Agent 的非确定性决定了"跑一次通过"不够。多次运行可以回答两个完全不同的问题。

指标 定义 衡量对象 适用场景
pass@k k 次中至少 1 次通过 峰值能力:Agent 有没有可能做到 新能力探索,看上限
pass^k k 次全部通过 稳定性:Agent 是否每次都能做到 生产上线门槛,看下限

如果 pass@1 高但 pass^5 低,说明系统处在"偶发成功"状态。它有能力答对,但不可靠。对故障定位、安全审计这类关键决策 Agent,pass^k 的失败容忍度应该接近 0;对辅助分析类 Agent,可以接受少量波动;对创意生成或代码建议类场景,多样性本身是特性,稳定性阈值可以更宽。

Agent 类型 pass^k 失败容忍 原因
关键决策类 0% 任意一次失败都可能造成严重误判
辅助分析类 ≤ 10% 偶发偏差可通过人工复核兜底
创意生成类 ≤ 40% 输出多样性本身有价值

评测集生命周期:能力集找上限,回归集守底线

图:能力探索、badcase 修复和回归红线构成持续运营闭环

单一评测集很快会失效​。更健康的做法,是把评测集分成 Capability 和 Regression 两类。

类型 核心问题 目标通过率 更新方式 触发机制
Capability 能力测评集 Agent 能把什么做好 起步 20%~50%,随迭代爬坡 频繁调整,加入新能力和边界场景 新 Skill、新链路、新能力开发时启动
Regression 回归测评集 原有能力是否还在 接近 100% 只增不减,作为守门员 每次 PR、CI、模型或知识库版本更新触发

两类集合之间要有流转机制:

图:线上 badcase 从能力集沉淀到回归集的持续运营链路

这样评测系统就不只是验收工具,而是持续改进机制。线上发现的 badcase 会进入能力集,修复稳定后沉淀为回归红线,后续版本不能再把同一个坑踩回去。

落地顺序:先跑通基线,再补全自动化

大型评测体系不要一口吃完。比较现实的顺序是:

复制代码
Phase 1:跑通核心链路
- 打通目标 Agent 接口到评测引擎的数据通路
- 先做 P0 问题,构建 30--50 条最小评测集
- 算出第一版基线,明确当前质量水位

Phase 2:补全能力和自动化
- 扩充 L1 问题池,分层管理 P0/P1/P2
- 接入 LLM Evaluator、覆盖率判定和回归告警
- 建立趋势看板,版本变更后能自动比较

Phase 3:进入持续运营
- 按周期抽检 Judge 偏差
- 根据线上 badcase 扩充评测集
- 支持多 Agent、多知识库横向对比

第一阶段最重要的是跑出可信基线,而不是追求评测集完美。只要分层指标、GT 来源和回归触发机制先站住,后续问题池、Judge Prompt、Adapter 和看板都可以迭代。

结语

Agent 评测不是给模型打一个分数,也不是上线前做一次抽查。它更像一套质量基础设施:底层看运行稳定性,中层看回答和动作是否正确,上层看业务是否真的被改善。

这套基础设施的关键不在复杂,而在克制。指标分层,不把不同问题揉成一个总分;GT 分级,不把猜测伪装成事实;Judge 拆解,不让模型一步做完所有判断;评测集分生命周期,不让一次性验收变成长期幻觉。

当这些机制连起来,Agent 的每次改动就能留下可比较的质量轨迹。团队不再靠感觉判断"好像变聪明了",而是能看到它在哪一层进步,在哪一层退化,哪个 badcase 已经修掉,哪个红线不能再破。

推荐阅读

团队落地 Agent 工程化 Loop 的一些必看小技巧!

Agent 工程化新底座:用 CLI 契约层打通 HTTP 接口与业务能力

AI Coding 不只靠 Prompt:Agent 工程闭环如何接入 DevOps

Agent Loop 架构拆解:让 AI Agent 自己跑完验收闭环

SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent