AI Agent Skill 测评方案及落地实践(中)

📅 2026/7/29 16:12:11 👁️ 阅读次数 📝 编程学习
AI Agent  Skill 测评方案及落地实践(中)

AI Agent & Skill 测评方案及落地实践(中)

本文为《AI Agent & Skill 测评方案及落地实践》系列第 2 篇(共 3 篇),建议连续阅读。

三、测评实施:怎么做?

第二章回答了"谁来评"和"评什么"的理论问题,本章进入实操层面——从设计用例、制定评分规则、建立基线,到执行测评、维护用例集,形成一个完整的实施闭环。每一步都给出具体的模板和示例,确保读者可以直接复用到自己的 Agent 项目中。

[图片:测评实施闭环示意]

3.1 设计测评用例集

用例集需要从触发 → 核心逻辑 → 产物质量 → 异常容错四个场景层层递进,每个场景都包含正向负向用例。

用例设计四大场景 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ ① 触发 │ → │ ② 核心逻辑 │ → │ ③ 产物质量 │ → │ ④ 异常容错 │ │ 该触发吗? │ │ 过程对吗? │ │ 产物好吗? │ │ 出错扛得住?│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
场景关注点正向用例负向用例
触发Skill 是否在正确场景被激活各种合法表述都能触发相似但不相关的 prompt 不误触发
核心逻辑执行过程是否按预期步骤进行工具调用序列、参数、顺序正确缺少关键步骤、调用错误工具、参数错误
产物质量最终产物是否完整、准确、可用响应内容准确、文件完整、格式正确内容缺失、格式错误、幻觉/编造
异常容错异常输入/环境下能否合理处理优雅降级、明确提示崩溃、死循环、静默失败、泄露信息
场景一:触发条件用例

验证 Skill 是否在正确的场景被触发/不被触发。

用例 ID类型Prompt 示例预期行为设计意图
trigger-pos-01正向"分析用例134263"skill_triggered标准表述
trigger-pos-02正向"帮我看看用例134263的性能数据"skill_triggered口语化表述
trigger-neg-01负向"CPU高负载应该如何排查?"skill_not_triggered通用问答,非分析任务
trigger-neg-02负向"用例134263是谁创建的?"skill_not_triggered涉及用例但非性能分析

为什么需要负向触发用例?只测正例,Agent 可能学会"什么都触发"——过度触发比不触发更难发现。

场景二:核心逻辑用例

验证 Skill 触发后的执行过程是否按预期步骤进行——调用了哪些工具、顺序是否正确、参数是否合理。

这是用例量最大的场景。需要根据 Skill 的实际业务逻辑,梳理出所有核心分支,逐一覆盖。理论上,Skill 内部的每一条核心分支路径都应该有对应的测评用例。

设计方法:三步法

第一步:梳理分支流程图— 画出 Skill 的所有核心分支路径(如:单用例分析/多用例对比/各类结论分支/决策树分支等)。

第二步:每条分支至少 1 个用例— 示例(以性能分析 Skill 为例):

分支路径用例 ID触发方式核心检查点
单用例-仅CPUlogic-cpu-01输入仅含 CPU 数据的用例只获取 CPU 数据,不获取无关指标
单用例-多指标logic-multi-01输入含多类指标的用例并行获取多类数据,全部进入分析
多用例对比logic-compare-01"对比用例A和用例B"两个用例数据都获取,输出对比结论
结论-存在瓶颈logic-bottleneck-01输入有明显瓶颈的用例识别瓶颈并输出优化建议
结论-无瓶颈logic-normal-01输入指标正常的用例输出"测试有效",不编造问题
决策树-压测无效logic-invalid-01QPS 未达预期的用例识别压测无效,建议调整参数
负向-过程异常logic-neg-01标准分析请求不调用无关工具、无无效重试循环

第三步:补充组合和边界— 关注分支间组合(如多维度同时指定)、阈值边缘(如瓶颈临界值)、跨分支冲突(如对比用例指标类型不一致)。

经验法则:核心逻辑用例的数量通常是其他三类场景用例之和的2–3 倍。如果一个 Skill 有 N 条核心分支路径,至少需要 N 个正向用例 + 关键分支的负向用例。分支过多时,优先覆盖高频分支易出错分支

场景三:产物质量用例

验证 Skill 的最终产物——响应内容、输出文件、报告等是否完整、准确、可用。

用例 ID类型Prompt 示例检查规则设计意图
output-pos-01正向"分析用例1434534"file_exists+response_contains+response_format_check产物文件存在、关键结论完整、包含结构化内容
output-pos-02正向"分析用例1434534,输出JSON格式报告"file_valid_json+file_json_has_keys格式合规、必填字段齐全
output-neg-01负向"分析用例1434534"response_not_contains: "GPU使用率"/"api_key"不编造指标(幻觉)、不泄露敏感信息
场景四:异常容错用例

验证 Skill 在异常输入、边界条件、环境故障下能否合理处理,而非崩溃或静默失败。

子类用例 IDPrompt / 条件预期行为设计意图
异常输入error-input-01"分析用例23457778888"(不存在)告知"不存在",不编造结果ID 无效时明确提示
异常输入error-input-02"分析用例abc"(非法格式)提示格式错误输入校验
异常输入error-input-03"分析用例"(缺少 ID)主动追问用例 ID信息不足时追问而非瞎猜
边界条件error-boundary-01"分析用例999001"(数据量极大)正常完成,不超时大数据量承压
边界条件error-boundary-02"分析用例100002"(数据为空)告知"无数据",不编造空数据处理
环境故障error-env-01标准请求 +mock_tool_failure优雅降级提示,不无限重试工具故障兜底

3.2 设计评分规则

用例集定义了"测哪些场景",评分规则则定义了"怎么判对错、怎么算分"。一个好的评分规则需要兼顾可解释性(为什么扣分)和区分度(好坏能拉开差距)。以下是评分规则的设计示例

评分规则
  • 评分按负分制进行计算,初始总分 100 分
  • 每有一个不符合预期的轨迹或结果,扣除对应的分数,扣至 0 分
  • 达标的标准为80 分(推荐值,团队可根据 Agent 类型和业务风险等级调整),低于 80 分认为本次试验结果不通过
评分维度与计分项
评分维度计分项描述
结果任务结果任务结果和预期不符合,扣除 100 分
过程步骤遵循性是否按照预设的工作流一致,每有一步不符合预期,就扣 10 分
过程步骤输出结果中间步骤的输出结果是否和预设的一致,每有一步不符合预期,就扣 10 分
过程调用工具/知识库是否按照预设的调用工具链,每有一项不符合预期,就扣 10 分
效率分析耗时基准时长 5 分钟,5 分钟内未输出结果,每多 1 分钟,就扣 10 分
稳定性一致性对同一个任务进行 N 次试验(建议 N=5),统计每次的分数。具体容忍阈值根据 Agent 使用类型调整(详见第四章"稳定性评估"),若均达标则取 N 次分数的平均值
评分输出

每执行一个用例,会将每次评分的扣分结果和原因以 JSON 的形式输出,并渲染成 HTML 报告,归档用于回溯、专家介入。

3.3 建立用例基线

设计完用例后,我们只定义了 prompt 和检查规则,但并不确定 Agent 实际的执行过程和结果是什么样的。因此需要先跑一轮,看到真实的过程和结果,由人工评估是否可接受——如果 OK,就将这轮的过程和结果保留下来,作为该用例的预期基线

什么是用例基线?

用例基线是单个用例执行 1 次后,经人工确认的预期过程预期结果的快照。它回答的是:"这个用例,正确的执行应该长什么样?"

预期过程——Agent 应该"怎么做":

过程内容说明
思维链(CoT)Agent 的推理过程、决策依据、步骤规划
工具调用序列调用了哪些工具、调用顺序、每次调用的入参和返回值
中间产物执行过程中产生的临时文件、中间数据、API 响应
完整 Trace以上所有内容的结构化记录,可回放完整执行轨迹

预期结果——Agent 应该"产出什么":

结果内容说明
最终响应Agent 返回给用户的文本回答
输出文件生成的代码文件、配置文件、数据文件等
输出报告生成的分析报告、图表、结构化数据(如 JSON/CSV)
基线建立流程

[图片:基线建立流程图]

核心思路:先跑出来,再确认,确认后就是预期。

  • 用例设计阶段只需定义 prompt 和检查规则,不需要手写预期过程和结果
  • 执行 1 次后,人工审核该次执行的过程(工具调用是否合理、思维链是否正确)和结果(响应是否准确、产物是否完整)
  • 如果不可接受,则调整 Skill / 修复问题后重新执行
  • 确认 OK 后,这次执行的完整快照就成为该用例的基线——后续每次执行都参考它来评分

完整的带细节流程图见第五章实战案例(5.3 节),展示了具体落地时每一步的详细操作。

基线在评分中的作用

后续每次测评执行时,将本次执行的过程和结果与用例基线做对比。基线同时服务于确定性评分器Rubric 评分器两种评分方式:

  • 确定性评分器使用基线进行可程序化的客观判定(如工具调用序列是否一致、产物文件是否存在、token 数是否超标);
  • Rubric 评分器使用基线作为参考答案(Reference Answer),由模型对比本次产出与基线的语义差异,按评分维度给出打分。
对比维度对比内容确定性判定(程序化)Rubric 判定(模型评估)
过程对比本次工具调用序列 vs 基线关键步骤缺失或顺序偏离 → 过程退化思维链合理性、步骤选择是否最优
结果对比本次响应/产物 vs 基线关键内容缺失或产物不一致 → 结果退化结论准确性、表述完整性、建议质量
效率对比本次 token/步骤数 vs 基线超出基线一定比例(如 >50%)→ 效率退化
基线更新时机
场景操作
Agent/Skill 逻辑变更预期过程/结果可能变化,需重新执行 1 次并确认新基线
模型版本升级执行行为可能变化,需重新执行 1 次并确认新基线
用例本身修改prompt 或检查规则变了,需重新执行 1 次并确认新基线

3.4 执行测评

用例设计完毕、评分规则就位、基线确认通过后,就可以正式执行测评了。执行阶段的核心是将上述准备工作串联成一个可自动化运行的流水线——加载用例 → 逐个执行 → 评分 → 汇总报告。

用例集执行流程

[图片:用例集执行流程图]

完整的带细节流程图见第五章实战案例(5.4 节),展示了并发执行、多评分器并行等具体实现。

触发时机
场景触发方式说明
Agent/Skill 提示词变更自动触发每次 PR 合入前执行回归测评,验证更新后的表现,必要时重建基线
模型版本升级手动触发验证新模型对现有 skill 的兼容性
定期巡检定时触发周期性全量回归,发现潜在退化

3.5 用例集维护

测评体系不是"搭完就完"的一次性工程。随着 Agent/Skill 能力迭代、线上 Bad Case 积累、模型版本升级,用例集需要持续演进。一个长期不更新的用例集要么覆盖不足(新能力没测到),要么过时失效(旧用例不再适用)。以下是维护的关键场景:

能力测评 vs 回归测评

测评的目标会随 Agent 生命周期变化,必须区分两种套件:

类型核心问题期望通过率作用维护频率
能力测评(Capability)"Agent 能把什么做好?"起步 20–50%,逐步提升目标山峰,指导优化方向主动拓展、频繁迭代
回归测评(Regression)"原有能力是否还在?"接近 100%防御漂移、保住既有阵地只增不减,CI 每次运行

与传统的测试流程不同,能力测评是和Skill开发同步启动的,Skill开发人员需要在设计之初就确定测评集,在开发过程中不断测评,通过测评结果优化Skill

生命周期转化

┌──────────────┐ 持续优化 ┌──────────────┐ │ 能力测评 │ 通过率 = 100% ─────────────▶│ 回归测评 │ │ (新能力) │ │ (已掌握能力)│ └──────────────┘ └──────────────┘ ▲ │ │ │ 持续监控 │ 发现新失败模式(来自线上) │ └────────────────────────────────────────────────┘
  • 能力测评通过率稳定 = 100% 后,把用例"毕业"到回归套件,从此每次 CI 都跑。
  • 回归用例集只加不减(除非用例真的过时)。

根据Anthropic的推荐,对于确定性的任务,用例集整体通过率(即所有用例中通过的占比)需要达到100%,对于非确定性的任务,推荐通过率≥ 95%

Agent/Skill 调整时

当 Agent/Skill 的提示词、步骤、触发条件发生变更时,需要同步调整相关用例:

  • 新增覆盖变更点的用例
  • 更新受影响用例的预期行为
  • 确认变更未破坏已有用例(回归验证)
新增 Bad Case 时

生产/线下环境发现的 Bad Case 是最有价值的测评素材

  1. 复现 Bad Case,记录完整轨迹
  2. 分析根因,确定预期行为
  3. 修复 Agent/Skill
  4. 将 Bad Case 纳入用例集,防止下次回归出现一样的问题
  5. 该 Bad Case 用例进入能力测评集,通过率稳定后毕业到回归测评集

四、工程落地:如何自动化?

前三章完成了方法论层面的设计——评什么、怎么评、用例怎么组织。但方法论只有嵌入工程流程才能真正发挥价值:每次 PR 合入自动跑、每次模型升级自动比较、每次上线前自动门禁。本章聚焦将测评流程工程化的关键问题:Trace 从哪来、环境怎么隔离、稳定性怎么评估、报告需要包含什么

[图片:工程落地总体示意]

4.1 前置依赖:被测 Agent/Skill 的 Trace 输出能力

过程评测的前提是能拿到结构化的执行轨迹。如果被测 Agent 只输出最终回答,没有可解析的中间过程,那么"工具调用检查"、"过程对比"、"基线对比"等评分器就无从下手。

对被测 Agent/Skill 的要求
要求说明
输出结构化 Trace执行过程需以可解析的格式(如 JSONL、JSON)输出,包含工具调用、思维链、中间产物等
Trace 内容完整至少包含:每步的工具名称、入参、返回值、时间戳;理想情况还包含思维链和决策依据
Trace 格式稳定字段命名和结构在版本间保持一致,避免评分器因格式变更而失效
示例:CodeBuddy-Code 的-p模式

CodeBuddy-Code 支持-p(pipe)模式,以 JSONL 格式逐行输出完整的执行轨迹:

{"type":"tool_call","name":"read_file","params":{"path":"src/main.ts"},"timestamp":"2026-04-26T10:00:01Z"} {"type":"tool_result","name":"read_file","result":"...","timestamp":"2026-04-26T10:00:02Z"} {"type":"thinking","content":"文件结构清晰,需要修改 handleRequest 函数...","timestamp":"2026-04-26T10:00:03Z"} {"type":"tool_call","name":"edit_file","params":{"path":"src/main.ts","changes":"..."},"timestamp":"2026-04-26T10:00:04Z"}

这种格式天然适合过程评测:每行独立解析、可按type过滤工具调用或思维链、可与基线逐步对比。

如果被测 Agent/Skill 不支持结构化 Trace?
情况应对策略
有日志但非结构化编写解析器从日志中提取关键信息(成本高、易碎)
仅有最终输出只能做结果评测,放弃过程评测维度
可改造推动 Agent/Skill 侧增加 Trace 输出能力(推荐)

建议:在 Agent/Skill 设计阶段就将结构化 Trace 输出作为标准能力纳入,而非事后补救。这不仅服务于测评,也有利于线上问题排查和可观测性建设。

4.2 环境隔离

每次测评在隔离环境中执行,避免状态污染:

  • Clone 仓库到临时目录
  • 每个用例执行前重置环境(git checkout . && git clean -fd
  • 测评产物(Trace、日志、报告)统一归档

4.3 稳定性评估

通过多轮执行(N 次)检测 AI 的幻觉和非确定性。核心原则:只要 N 次中有 1 次不通过,就说明该用例存在稳定性风险,需根据 Agent 类型判断是否可接受。

不通过比例的容忍阈值取决于 Agent/Skill 的使用类型:

Agent/Skill 使用类型容忍阈值说明
关键决策类(如问题定位、故障诊断)0%(N/N 全部通过)任何一次失败都可能导致误判(无论是幻觉、步骤遗漏还是逻辑错误),不可容忍
辅助分析类(如性能分析、报告生成)≤ 10%(如 10 次最多 1 次失败)偶发偏差可接受,但需持续观察
创意生成类(如代码建议、文案撰写)≤ 40%输出多样性本身是特性,关注核心逻辑正确性

以下是 N=5 时不同执行结果的解读和对应行动:

执行结果含义行动
✓ ✓ ✓ ✓ ✓全部通过稳定可信赖
✓ ✓ ✓ ✓ ✗存在幻觉(1/5 失败)根据 Agent/Skill 类型判断是否可接受,需分析失败原因
✓ ✗ ✓ ✗ ✓高幻觉率(2/5 失败)需深入排查 prompt/评分器/Agent/Skill 逻辑
✗ ✗ ✗ ✗ ✗稳定失败先检查任务定义或基线是否有问题

调试技巧:0% pass^N(即 N 次试验无一通过)通常说明任务定义有问题,而不是 Agent/Skill 能力不行。先检查用例描述是否有歧义、评分器是否配置错误、成功标准是否不合理。

4.4 测评报告

输出结构化的测评报告,报告应包含以下核心数据:

报告头部(全局概览):

  • 生成时间、用例总数
  • 通过率(≥80分的用例占比)、平均分
  • 模型版本及费用区间
  • 总 Token 消耗、总费用(估算)
  • 平均费用 / Trial

用例列表:

  • 按任务分组展示,每组显示用例数量和均分
  • 每条用例显示:名称、模型、执行次数(Trial 数)、得分
  • Trial 分数分布图(直方图),直观展示稳定性

单用例详情:

  • 任务分组、模型、测试记录 ID、基线耗时、基线 Token、基线费用、基线步骤数
  • 提示词(Prompt)

用例汇总(多 Trial 聚合):

  • Token 总开销、总费用、平均费用、最终得分
  • 每次执行的明细:分数、耗时、Token、费用、步骤扣分、效率扣分、结果扣分、对话详情入口

稳定性评分:

  • 回归稳定性评分 = N 次执行全部达标后取平均分
  • 显示执行次数、达标标准、达标情况

执行记录(逐 Trial 详情):

  • 每次 Trial 的 ID、Token、费用、耗时
  • 步骤评分明细(各维度扣分及上限)