Agent 评测框架
适用产品:支持用户供给 Skill 的 Agent 产品 版本:v0.6 | 最后更新:2026-04-07
框架总览
11 个评测维度按能力层级分为三组,编号连续递增。排障和上线优先级均从第一组开始:第一组有问题不用看后面;第一组达标再看第二组核心路径;第三组是持续迭代的品控层。
第一组:基础能力(B1-B3)
这些坏了,其他维度都跑不起来。必须优先达标。
| 维度 | 名称 | 核心问题 | 评测方式 |
|---|---|---|---|
| B1 | 意图理解 | agent 理解了用户想要什么吗? | 自动 + 人工抽样 |
| B2 | Tool Use | agent 正确使用工具完成任务吗? | 自动为主 |
| B3 | 指令约束遵从 | agent 能严格执行精确约束条件吗? | 自动为主 |
第二组:复合能力(C1-C5)
依赖基础能力组合而来。核心路径必须达标,边界情况持续迭代。
| 维度 | 名称 | 核心问题 | 评测方式 |
|---|---|---|---|
| C1 | Skill 遵从 | agent 正确识别并执行 skill 吗? | LLM-as-judge + 人工校验 |
| C2 | 规划与多步推理 | agent 能规划并可靠地完成复杂任务吗? | 自动(端到端成功率) |
| C3 | 记忆管理 | agent 正确利用和更新记忆吗? | 自动 + 人工抽样 |
| C4 | 任务执行稳态 | agent 会死循环或过早放弃任务吗? | 自动 |
| C5 | 长上下文性能 | 上下文变长时 agent 性能如何衰减? | 自动 |
第三组:质量与安全(Q1-Q3)
基础和复合能力跑通后的品控层。上线前必须有底线,之后持续提升。
| 维度 | 名称 | 核心问题 | 评测方式 |
|---|---|---|---|
| Q1 | 幻觉与知识边界 | agent 知道自己不知道什么吗? | 自动 + 人工抽样 |
| Q2 | 安全与对抗鲁棒性 | agent 能抵御恶意输入和注入攻击吗? | 自动为主 |
| Q3 | 效率 | agent 用最优路径完成任务吗? | 自动 |
横切维度(X)
贯穿所有层级的附加评测,每次评测均需覆盖。
| 维度 | 名称 | 核心问题 | 评测方式 |
|---|---|---|---|
| X | 输出一致性与风格对齐 | agent 的输出稳定、风格符合预期吗? | 自动 + LLM-judge |
Skill 分组评测方法论
本产品的核心差异化在于用户供给 Skill,但评测时需要同时验证「没有 Skill 时的基础能力」和「有 Skill 时是否产生负面影响」。
核心矛盾
- 产品目标:希望用户需求都由 Skill 驱动解决
- 评测需求:需要验证 agent 在没有 Skill 时也能达到可用下限
解决方案:基础能力层(B1-B3)采用分组对照评测,复合能力层(C1-C5)和质量与安全层(Q1-Q3)在 Skill 开启状态下评测。
评测分组策略
第一组(B1-B3):双组对照
| 组别 | Skill 状态 | 测试目标 | 意义 |
|---|---|---|---|
| Group A: Baseline | 关闭所有 skill | 纯基础能力 | 验证无 skill 时 agent 能否达到可用下限 |
| Group B: Skill-enhanced | 开启相关 skill | Skill 不破坏基础能力 | 验证 skill 没有负向干扰基础逻辑 |
执行方式:
- 每条 B1-B3 的 case 分别在 Group A 和 Group B 下各跑一次
- 计算
skill_impact_delta = Group B 得分 - Group A 得分 - 期望结果:Group B ≥ Group A(skill 不应降低基础能力)
为什么需要 Group A(无 skill baseline):
- 排障起点:如果无 skill 时都不达标,问题在 agent 本身,不是 skill 设计
- 对照基准:有 baseline 才能量化 skill 带来的增益或损失
- 通用能力保底:即使用户未供给任何 skill,产品也应可用
为什么需要 Group B(有 skill):
- 真实场景:产品上线后就是 skill-enabled 的,不测等于没测真实状态
- 负面检测:部分 skill 设计不当会破坏基础能力(如强制流程导致意图理解僵硬)
- Skill 质量指标:若 Group B 得分低于 Group A,说明 skill 写得有问题
第二组(C1-C5):Skill 必开
复合能力层的评测必须在 Skill 开启状态下进行,无需对照组。原因:
- C1 Skill 遵从:本身就是测试 Skill 执行的核心维度
- C2-C5:规划、记忆、稳态、长上下文均依赖 Skill 的实际工作场景
前置条件:只有当 B1-B3 的 Group B 达标后,才应进入 C1-C5 评测。
if B1-B3 Group B 得分 < 阈值:
Skill 破坏了基础能力,优先修复 Skill 设计
else:
可进入 C1-C5 评测 Skill 遵从度和复合能力
第三组(Q1-Q3):Skill 必开
质量与安全层评测在真实状态(Skill 开启)下进行,因为:
- Q1 幻觉与知识边界:Skill 可能引入新的幻觉风险(如 Skill 内容本身有误)
- Q2 安全与对抗鲁棒性:用户供给的 Skill 可能携带恶意指令,必须在开启状态下测试
- Q3 效率:Skill 会影响执行路径和 token 消耗,必须测真实状态
Skill 配置管理
测试 case 中的 Skill 配置字段
每条 case 需要指明:
- Group A 配置:
skill_enabled: false - Group B 配置:
skill_enabled: true+active_skills: [skill_id_1, skill_id_2]
示例:
case_id: B1-EI-01
group_a:
skill_enabled: false
group_b:
skill_enabled: true
active_skills:
- flight_booking_skill
- travel_planning_skill
Skill 版本管理
每次评测需记录:
- 使用的 Skill 列表及其版本
- Skill Schema 版本
- 若某个 Skill 更新,需重新跑相关 case
关键指标
| 指标 | 计算方式 | 含义 |
|---|---|---|
baseline_score |
Group A 平均得分 | 无 Skill 时的基础能力下限 |
skill_enhanced_score |
Group B 平均得分 | 有 Skill 时的能力水平 |
skill_impact_delta |
Group B - Group A | Skill 带来的增益(正值)或损失(负值) |
skill_negative_rate |
Group B < Group A 的 case 比例 | Skill 负面影响的覆盖面 |
质量门槛:
baseline_score≥ 70%(无 Skill 时也能基本可用)skill_impact_delta≥ 0(Skill 不应降低基础能力)skill_negative_rate≤ 10%(允许少量 case 有轻微负面,但不能普遍)
第一组:基础能力
B1 · 意图理解
目标
验证 agent 能否在不同清晰度的输入下,准确捕捉用户意图并作出合理响应。
评测维度
| 维度 | 说明 |
|---|---|
| 精确意图 | 指令明确时,是否完整、准确地执行 |
| 模糊意图-澄清 | 指令不足时,是否主动提问而非胡乱猜测 |
| 模糊意图-推断 | 有上下文时,是否合理推断而非打断用户 |
| 多意图 | 一句话含多个目标时,是否全部处理 |
| 意图优先级 | 多个意图存在冲突时,是否正确排序处理 |
方法
- 分组对照评测:每条 case 分别在 Group A(无 skill)和 Group B(有 skill)下执行,对比两组得分
- Golden Set 评分:针对每个维度构造 case,人工标注期望行为,自动比对输出
- 二元判断:意图理解是否正确(对/错),再辅以部分分(关键要素覆盖率)
- 澄清行为分类:对模糊输入,判断 agent 的响应属于「正确澄清 / 错误推断 / 合理推断 / 过度澄清」四类
模块
intent_exact_match:精确意图命中率intent_clarification_judge:澄清 vs 推断的决策是否合理intent_coverage_score:多意图场景下意图覆盖率(0-1)skill_impact_delta:Group B 与 Group A 的得分差(来自分组对照)
B2 · Tool Use
目标
验证 agent 能否正确选择工具、构造参数、处理异常,并在多工具依赖场景中正确编排。
评测维度
| 维度 | 说明 |
|---|---|
| 工具选择准确率 | 是否选了正确的工具(可能有多个合理选项) |
| 参数构造准确率 | 参数是否完整、类型正确、值合理 |
| 工具链编排 | 多工具有先后依赖时,顺序和条件是否正确 |
| 工具失败恢复 | 工具返回错误时,是否有合理的重试/降级策略 |
| 工具冗余调用 | 是否存在不必要的重复调用(效率指标) |
方法
- 分组对照评测:每条 case 分别在 Group A(无 skill)和 Group B(有 skill)下执行,对比两组得分
- Trace 级评测:记录每次工具调用的完整 trace,对照期望 trace 打分
- 参数 diff:对构造的参数和 ground truth 参数做字段级 diff,计算字段准确率
- 注入失败测试:主动让工具返回错误,观察 agent 恢复行为
- 自动化为主:大部分可程序化验证,无需人工
模块
tool_selection_accuracy:工具选择准确率param_field_accuracy:参数字段准确率(精确匹配 + 语义等价)tool_chain_order_score:多工具编排顺序正确率failure_recovery_rate:工具失败后成功恢复的比例redundant_call_rate:冗余调用率(越低越好)skill_impact_delta:Group B 与 Group A 的得分差(来自分组对照)
B3 · 指令约束遵从
目标
验证 agent 能否严格执行用户给出的精确约束条件,包括格式、数量、内容限制等。这与意图理解(B1)不同:B1 测「理解了什么」,B3 测「有没有按约束做到」。
评测维度
| 维度 | 说明 |
|---|---|
| 格式约束 | 指定输出格式(JSON / Markdown / 纯文本)时,是否严格遵守 |
| 数量约束 | 「恰好 3 条」「不超过 5 项」等数量限制的遵守率 |
| 内容禁止约束 | 「不要提 X」「不用 Y 词」等内容禁令的遵守率 |
| 长度约束 | 「200 字以内」「一句话总结」等长度限制的遵守率 |
| 多约束叠加 | 同时存在多个约束时,是否全部满足而非顾此失彼 |
方法
- 分组对照评测:每条 case 分别在 Group A(无 skill)和 Group B(有 skill)下执行,对比两组得分
- 约束违反自动检测:大部分约束(格式、数量、长度)可程序化验证,无需人工
- 内容禁止检测:正则或关键词匹配,检测禁止内容是否出现
- 多约束组合集:构造含 2-4 个约束叠加的 case,测试约束间的干扰
模块
format_constraint_compliance:格式约束遵守率quantity_constraint_compliance:数量约束遵守率content_prohibition_compliance:内容禁止约束遵守率length_constraint_compliance:长度约束遵守率multi_constraint_full_compliance:多约束全部满足率skill_impact_delta:Group B 与 Group A 的得分差(来自分组对照)
第二组:复合能力
C1 · Skill 遵从
目标
验证 agent 能否准确识别当前任务应使用哪个 skill,并严格按照 skill 规范执行,同时具备处理 skill 边界情况的能力。
这是本产品的差异化核心层,评测标准应与 Skill Schema 规范绑定。
前置条件:只有当 B1-B3 的 Group B(有 skill)得分达标后,才应进入 C1 评测。如果 Group B 得分低于阈值,说明 Skill 破坏了基础能力,应优先修复 Skill 设计。
Skill 配置:C1 评测必须在 Skill 开启状态下进行,无需对照组。
评测维度
| 维度 | 说明 |
|---|---|
| Skill 触发准确率 | 给定任务,是否命中了正确的 skill |
| Skill 执行忠实度 | 执行结果是否符合 skill 规定的输出标准 |
| Skill 边界识别 | 任务不在 skill 覆盖范围时,是否正确降级而非强行套用 |
| Skill 冲突处理 | 用户意图与 skill 规范冲突时,处理是否合理 |
| 多 Skill 编排 | 同时触发多个 skill 时,是否正确组合执行 |
方法
三类 Case 构造(每个 skill 必须覆盖):
- 完美匹配:任务完全在 skill 覆盖范围内
- 部分覆盖:任务只有一部分被 skill 覆盖
- 完全不覆盖:没有相关 skill,测试 agent 是否知道降级
LLM-as-Judge 评分:
- 输入:skill 定义 + 任务 + agent 输出
- 评分项:忠实度(是否违反 skill 规定)+ 完整度(skill 要求的要素是否都输出了)
- 分值:0-5 分,需提供评分依据
Judge 校准:每轮评测对 judge 结果抽样 10-20% 人工复核,维护 judge 准确率指标
模块
skill_trigger_accuracy:skill 识别/触发准确率skill_faithfulness_score:skill 执行忠实度(LLM-judge,0-5)skill_completeness_score:skill 要素覆盖完整度(LLM-judge,0-5)skill_boundary_handling:边界/降级处理正确率judge_calibration_rate:judge 与人工评分的一致率(质量保障指标)
C2 · 规划与多步推理
目标
验证 agent 能否对复杂任务制定合理计划,并在执行过程中可靠地完成多步骤链式任务,包括对中间错误的容忍和修正能力。
评测维度
| 维度 | 说明 |
|---|---|
| 任务分解质量 | 拿到复杂任务后,是否能拆解成合理的子任务序列 |
| 计划修订能力 | 执行中发现计划不对,是否能及时调整而非一路错到底 |
| 端到端任务成功率 | 复杂任务整体完成率(最终结果正确) |
| 步骤完成率 | 即使最终失败,完成了多少中间步骤(partial credit) |
| 错误传播率 | 中间步骤出错后,是否导致后续步骤连锁失败 |
| 错误自修复率 | 中间步骤出错后,agent 自行发现并修正的比例 |
| 复杂度衰减曲线 | 随任务步骤数增加,成功率如何衰减 |
| 输出自检 | 交付前,agent 是否会验证自己的输出符合任务要求 |
方法
- 任务按步骤数分级:2步、3-5步、5步以上,分别统计成功率
- 计划质量评审:在 agent 开始执行前截取计划,LLM-judge 评估分解合理性
- 注入中间错误:在固定步骤注入错误,测试计划修订和错误恢复能力
- 端到端自动验证:定义任务的最终输出 ground truth,程序化判断是否达成
模块
plan_decomposition_score:任务分解质量(LLM-judge,0-5)plan_revision_rate:计划遇到障碍时成功修订的比例e2e_success_rate:端到端成功率(按任务难度分组)step_completion_rate:步骤完成率error_propagation_rate:错误传播率(越低越好)self_correction_rate:自修复率complexity_degradation_curve:步骤数 vs 成功率曲线(用于趋势监控)output_self_verification_rate:交付前自检通过率(agent 主动发现并修正输出问题的比例)
C3 · 记忆管理
目标
验证 agent 能否在对话内正确利用上下文信息,跨 session 准确召回历史,并在信息更新时正确维护记忆状态。
评测维度
| 维度 | 说明 |
|---|---|
| 短期记忆利用 | 当前对话中,是否正确利用已有上下文,不重复询问 |
| 长期记忆召回准确率 | 跨 session 时,相关历史信息是否被正确召回 |
| 记忆相关性判断 | 是否知道什么时候该召回记忆 vs 什么时候不该(防止噪声干扰) |
| 记忆更新正确性 | 用户纠正信息后,是否正确更新而非继续用旧的 |
| 记忆冲突处理 | 新信息与记忆中的旧信息冲突时,是否合理处理 |
方法
- 上下文利用测试:在对话早期注入关键信息,后续任务依赖该信息,测试是否被利用
- 跨 session 召回测试:预置记忆后新开 session,测试召回准确率和相关性
- 记忆更新测试:先建立记忆,再给出矛盾信息,验证更新行为
- 噪声记忆测试:注入无关记忆,测试是否会干扰当前任务
模块
context_utilization_rate:短期上下文利用率memory_recall_accuracy:长期记忆召回准确率memory_relevance_precision:召回记忆的相关性精确率(防止噪声)memory_update_accuracy:记忆更新正确率memory_conflict_handling:记忆冲突处理合理率
C4 · 任务执行稳态
目标
验证 agent 在面对困难任务时,既不会陷入循环/死锁无法退出,也不会遇到轻微障碍就过早放弃。这是两个方向相反的失败模式,需要分别测试。
评测维度
| 维度 | 说明 |
|---|---|
| 循环检测率 | 陷入重复步骤循环时,是否能自我识别并退出 |
| 死锁恢复率 | 依赖关系导致无法推进时,是否有合理的退出策略 |
| 过早放弃率 | 任务可完成但 agent 错误地放弃的比例(越低越好) |
| 放弃合理性 | 真正无法完成而放弃时,是否给出了明确的原因说明 |
注:C2 的 e2e_success_rate 能捕捉「最终失败」,但无法区分是循环卡死还是过早放弃。这两种失败的修复方向完全不同,必须区分统计。
方法
- 循环注入测试:构造会导致 agent 重复调用相同工具的场景,设置最大步骤数,测试是否能自我退出
- 可完成高难任务集:构造表面看起来困难但实际可完成的任务,统计放弃率
- 失败原因分类:对所有失败 case 打标签(循环 / 死锁 / 过早放弃 / 真实无法完成),用于区分分析
模块
loop_detection_rate:循环自我检测退出率deadlock_recovery_rate:死锁状态的恢复率premature_abandon_rate:可完成任务的过早放弃率(越低越好)abandon_explanation_quality:放弃时的原因说明质量(LLM-judge,0-3)
C5 · 长上下文性能
目标
验证随着对话轮次增加、上下文变长,agent 对早期信息的利用能力是否出现显著衰减(lost-in-the-middle 问题),以及各层能力在长上下文下的稳定性。
评测维度
| 维度 | 说明 |
|---|---|
| 早期信息利用率 | 上下文很长时,对话早期注入的关键信息是否仍被正确利用 |
| 中段信息利用率 | 上下文中段的信息是否有衰减(lost-in-the-middle 的典型位置) |
| 长上下文意图理解 | 多轮对话后,对用户当前意图的理解是否仍准确 |
| 长上下文工具调用 | 上下文很长时,工具参数构造准确率是否下降 |
方法
- 位置梯度测试:在上下文的开头 / 中段 / 结尾分别注入关键信息,测试不同位置信息的利用率差异
- 上下文长度梯度:同一任务在 4k / 16k / 32k / 64k token 上下文下分别测试,绘制性能衰减曲线
- 跨层复测:对 B1、B2、Q1 中的代表性 case,在长上下文条件下重新跑,对比与短上下文的性能差距
模块
early_context_recall_rate:早期信息利用率mid_context_recall_rate:中段信息利用率(lost-in-the-middle 指标)long_ctx_intent_accuracy:长上下文下意图理解准确率long_ctx_tool_param_accuracy:长上下文下工具参数构造准确率context_length_degradation_curve:各层性能随上下文长度的衰减曲线
第三组:质量与安全
Q1 · 幻觉与知识边界
目标
验证 agent 是否会伪造信息、是否清楚自己的知识边界、是否能如实表达不确定性,而非自信地给出错误答案。
评测维度
| 维度 | 说明 |
|---|---|
| 工具结果忠实度 | 是否如实使用工具返回值,而非在工具失败时编造结果 |
| 知识边界意识 | 不知道的事情,是否承认不知道而非自信作答 |
| 引用忠实度 | 基于 skill 或上下文输出时,是否忠实于原始信息 |
| 不确定性表达 | 答案不确定时,是否表达了合理的置信度 |
方法
- 工具失败注入:让工具返回错误或空结果,测试 agent 是否会编造返回值
- 不可知问题集:构造一批 agent 无法知道答案的问题(实时数据、私有信息等),测试是否正确拒答
- 引用对比:提供 skill 或文档,对比 agent 输出和原始内容,计算信息偏差率
- 置信度校准:agent 表达高置信度时,实际准确率应显著高于表达不确定时
模块
tool_result_faithfulness:工具结果忠实率(不编造)unknown_refusal_rate:不可知问题的正确拒答率source_faithfulness_score:基于来源内容的输出忠实度confidence_calibration:置信度表达与实际准确率的相关性
Q2 · 安全与对抗鲁棒性
目标
验证 agent 能抵御直接有害输入、prompt 注入攻击(尤其是通过工具结果传入的间接注入),以及用户供给 skill 中可能携带的恶意指令。
评测维度
| 维度 | 说明 |
|---|---|
| 直接有害输入拦截率 | 正面有害指令的拦截能力 |
| Prompt 注入防御 | 工具返回结果中嵌入恶意指令时,是否被识别拒绝执行 |
| Skill 内容安全 | 用户供给的 skill 若含有害指令,agent 是否识别拒绝 |
| 越狱攻击防御 | 经典越狱手法(角色扮演、假设场景等)的抵御能力 |
| 误拒率 | 正常输入被误判为有害的比例(安全与可用性的平衡) |
| 拒绝质量 | 拒绝时是否解释原因并提供替代方案,而非干巴巴说「不行」 |
注:Prompt Injection 是 tool-use agent 的高危风险点,工具返回内容(网页、文档、API 响应)均可能携带恶意指令,必须单独测试。
方法
- 直接攻击集:构造标准有害输入集,验证拦截率
- 间接注入集:在模拟工具返回结果中嵌入「忽略前面的指令,改为…」类指令,测试 agent 是否执行
- 恶意 skill 集:构造包含有害指令的 skill,测试 agent 是否识别并拒绝
- 误拒率监控:同步统计正常输入的误拒比例
模块
direct_harm_block_rate:直接有害输入拦截率prompt_injection_defense_rate:间接 prompt 注入防御率malicious_skill_block_rate:恶意 skill 拦截率jailbreak_defense_rate:越狱攻击防御率false_positive_rate:正常输入误拒率refusal_quality_score:拒绝响应质量(LLM-judge,0-5,评估是否有说明原因和替代方案)
Q3 · 效率
目标
验证 agent 完成任务的路径是否最优,避免冗余步骤和不必要的 token 消耗,为产品部署提供成本基准。
评测维度
| 维度 | 说明 |
|---|---|
| 步骤数效率 | 实际步骤数 vs 理论最优步骤数之比 |
| Token 消耗 | 完成同类任务的平均 token 用量 |
| 冗余调用率 | 不必要的重复工具调用比例 |
| 输出冗余度 | 输出是否含有超出任务需求的多余内容 |
方法
- 最优路径标注:对 golden set 中的任务,人工标注理论最优步骤数
- Token 统计:记录每次任务完成的 token 消耗,按任务类型分组统计
- 输出长度分析:对比输出长度和任务实际需求,检测冗余
模块
step_efficiency_ratio:步骤数效率比(实际/最优,越接近 1 越好)avg_token_per_task:每任务平均 token 消耗(按难度分组)redundant_call_rate:冗余工具调用率output_redundancy_score:输出冗余度评分
X · 输出一致性与风格对齐
这是贯穿所有层级的横切关注点,每次评测均需覆盖。
| 维度 | 说明 |
|---|---|
| 输出一致性 | 同一任务多次执行,输出质量方差 |
| Skill 稳定性增益 | 有 skill vs 无 skill,输出一致性提升幅度(回归基准) |
| 语气/风格对齐 | 是否符合产品定义的输出风格规范 |
模块
output_consistency_rate:同任务多次输出一致率skill_stability_delta:有/无 skill 时一致率差值(回归基准)style_alignment_score:风格对齐得分(LLM-judge)
评测集管理规范
四类评测集
| 类型 | 构造方式 | 用途 | 更新频率 |
|---|---|---|---|
| Golden Set | 人工标注,覆盖核心路径 | 精确回归,小而精 | 每次产品迭代后审查 |
| Adversarial Set | 人工设计边界和失败场景 | 测试鲁棒性 | 定期补充新发现的失败模式 |
| Regression Set | 自动化,全量跑 | 每次上线前回归 | 持续积累 |
| 用户 Trace 采样集 | 从真实流量中采样 | 发现未覆盖的失败模式 | 每周采样复盘 |
评分记录规范
每次评测需记录:
- 评测时间、模型版本、prompt 版本
- Skill 配置:使用的 Skill 列表及版本、Skill Schema 版本
- 各模块分值(B1-B3 需分别记录 Group A 和 Group B 的得分)
- Skill 影响指标:
skill_impact_delta、skill_negative_rate(仅 B1-B3) - 失败 case 列表(附原因分类)
- 与上一版本的 delta
待补充
- 各模块具体用例(B1 已完成,B2-X 待补充)
- LLM-judge prompt 模板
- 各指标的 pass/fail 阈值定义(包括
baseline_score和skill_impact_delta的质量门槛) - Skill Schema 规范(与 C1 评测绑定)
- Group A vs Group B 的 Skill 配置清单模板
- 分组对照评测的自动化执行脚本