Agent 完整测试方法论:过程+结果双校验分层测试法
核心结论
Agent 测试绝对不能只判断最终回答对不对,必须遵循「分层解耦定位 + 过程结果双验 + 沙箱隔离执行」的核心原则。标准执行链路为:
任务理解 → 规划拆解 → 工具选择 → 参数构造 → 工具调用 → 结果解析 → 反思决策 → 循环/终止
对应你提出的 8 大核心问题,通过四层测试体系逐层覆盖:组件级单元测试 → 链路级集成测试 → 端到端任务测试 → 专项风险测试,每层控制单一变量,精准定位问题环节,避免盲目调参。
一、第一层:组件级单元测试
单独验证每个核心组件的能力,精准定位单点能力短板,是所有测试的基础。对应解决「工具选对吗、参数传对吗、上下文会不会丢」等单点问题。
1. 工具选择组件测试
对应问题:Tool 选对了吗?
测试目标:验证 Agent 根据任务匹配正确工具的能力,不错用、不滥用、不遗漏工具。
测试方法
- 构建标准化工具测试集,覆盖三类场景:
- 单工具明确任务:如「查询用户订单」对应订单查询工具
- 多工具组合任务:如「先查用户信息再创建工单」需调用两个工具
- 边界模糊任务:工具能力有重叠的模糊场景
- 每条用例标注预期正确工具列表,固定工具集与任务描述
- 批量执行,仅验证工具选择结果,不执行真实调用
核心指标
- 工具选择准确率= 工具选择完全正确的任务数 / 总任务数
合格标准
- 核心明确场景:≥ 95%
- 边界模糊场景:≥ 85%
2. 参数构造组件测试
对应问题:参数传对了吗?
测试目标:验证工具入参的字段完整性、格式正确性、业务约束符合性。
测试方法
- 构造参数测试集,覆盖:必填字段缺失、字段格式错误、边界值、枚举值错误、业务约束违规
- 捕获 Agent 生成的工具调用请求,逐字段校验:
- 必填字段是否齐全
- 数据类型、格式是否匹配接口要求
- 参数值是否符合业务规则(如金额范围、日期逻辑)
- 重点校验:敏感参数、越权参数、注入风险参数
核心指标
- 参数错误率= 参数错误的调用次数 / 总调用次数
合格标准
- 参数错误率 ≤ 5%
- 必填字段缺失率 = 0%
3. 记忆管理组件测试
对应问题:多轮对话以后上下文会不会丢?
测试目标:验证长链路、多轮交互中的关键信息保留能力与历史记忆准确性。
测试方法
- 构造阶梯轮次任务(3/5/10/20 轮),关键信息在早期对话中给出,后续任务必须依赖该信息完成
- 验证三类记忆:
- 用户对话记忆:历史用户需求、约束条件
- 工具调用记忆:历史调用结果、返回数据
- 任务目标记忆:原始任务目标、中间进度
- 统计不同轮次下的关键信息保留率
核心指标
- 信息保留率= 正确保留的关键信息数 / 总关键信息数
- 上下文命中率= 正确使用历史信息的任务数 / 总任务数
合格标准
- 10 轮内信息保留率 ≥ 90%
- 无目标漂移、无关键信息丢失
4. 任务规划组件测试
测试目标:验证任务拆解粒度、步骤顺序、逻辑合理性。
测试方法
- 构造复杂多步任务集,标注标准拆解步骤与顺序
- 对比 Agent 输出的规划方案,校验步骤完整性、顺序合理性、粒度适配性
核心指标
- 规划合理率、步骤完整率、顺序正确率
5. 反思纠错组件测试
测试目标:验证错误识别、自我修正、迭代优化能力。
测试方法
- 注入错误的工具返回结果、异常信息
- 观察 Agent 是否能识别问题、修正参数、重新调用
核心指标
- 错误识别率、纠错成功率
二、第二层:链路级集成测试
验证多组件协作的流转正确性、异常容错性与流程闭环,是 Agent 特有的核心测试环节。对应解决「执行顺序对不对、失败会不会重试、一半失败怎么恢复」等流程问题。
1. 正常流转测试
对应问题:执行顺序对不对?
测试目标:验证组件间数据传递、步骤顺序、状态流转的正确性。
测试方法
- 全链路 Trace 埋点(每个步骤对应独立 Span),记录每一步的输入输出、顺序、耗时
- 批量执行标准任务,回放执行轨迹,逐步骤校验:
- 执行顺序是否符合业务逻辑
- 上游输出是否正确作为下游输入
- 多分支汇聚时数据合并是否正确
- 有无多余步骤、遗漏步骤
核心指标
- 流转顺畅率、顺序正确率、数据传递准确率
合格标准
- 核心流程顺序正确率 = 100%
2. 异常容错测试
对应问题:工具失败会不会重试?
测试目标:验证单点故障时的重试、降级、兜底机制,避免单点故障导致全链路失败。
测试方法:故障注入法
针对每个工具节点,注入四类故障:
- 瞬时故障:网络超时、接口 5xx 错误
- 业务错误:参数错误、权限不足、数据不存在
- 返回异常:空结果、格式错误、数据异常
- 依赖不可用:工具服务宕机
观察验证:
- 瞬时故障是否自动重试,重试次数是否符合配置
- 持续失败是否走兜底分支、降级返回
- 错误是否正确上报,不会静默失败
核心指标
- 重试触发率、重试成功率、异常自处理成功率、兜底触发率
合格标准
- 瞬时故障重试触发率 = 100%
- 重试成功率 ≥ 70%
- 异常自处理成功率 ≥ 80%
3. 循环终止测试
测试目标:验证循环逻辑的终止条件、最大次数限制、收敛性,避免死循环。
测试方法
- 构造需要多次迭代优化的任务(如校验不通过重写查询再检索)
- 验证:终止条件是否正确触发、最大循环次数是否生效、循环是否有实际增益
核心指标
- 循环终止准确率、平均循环次数、死循环发生率
合格标准
- 死循环发生率 = 0%
- 最大循环次数限制 100% 生效
4. 故障恢复测试
对应问题:任务执行到一半失败怎么恢复?
测试目标:验证中断后的断点续跑、状态保留、数据一致性能力。
测试方法
- 在任务执行的不同阶段(规划后、调用中、解析时)注入致命故障(如服务重启、进程中断)
- 重启恢复后验证:
- 是否保留执行现场与中间结果
- 是否从断点继续执行,而非从头开始
- 已执行的写操作是否重复执行(幂等)
- 数据是否一致、无丢失
核心指标
- 故障恢复成功率、断点续跑准确率、恢复时长
合格标准
- 可恢复故障恢复成功率 ≥ 80%
- 已执行写操作无重复提交
三、第三层:端到端任务级测试
从用户视角验证整体任务完成质量,结果与过程双校验,是最终验收的核心标准。
测试目标
不仅验证最终结果正确性,还要校验执行过程的合理性、合规性、高效性。
测试方法
- 构建业务场景任务基准集,覆盖信息查询、操作执行、推理决策、多轮协作等类型
- 隔离沙箱环境中全链路执行,全程 Trace 记录
- 双维度校验:
- 结果维度:任务是否完成、结果是否正确、是否达成目标
- 过程维度:步骤是否合理、工具是否最优、有无冗余操作、是否合规
核心指标
| 维度 | 核心指标 |
|---|---|
| 结果 | 任务完成率、结果正确率、副作用发生率 |
| 过程 | 规划合理率、步骤冗余率、路径最优率 |
合格标准
- 核心业务任务完成率 ≥ 90%
- 过程合规率 = 100%
四、第四层:专项风险测试
针对 Agent 独有风险做专项验证,是上线的一票否决项。对应解决「会不会有副作用、会不会越权执行」等安全风险问题。
1. 副作用与幂等性测试
对应问题:重复调用会不会产生副作用?
测试目标:验证写操作工具的幂等性,避免重复调用、重试导致脏数据、误操作。
测试方法
- 沙箱隔离执行:所有写操作走影子接口/模拟接口,数据隔离,不影响真实业务
- 覆盖三类场景:
- 重复调用同一工具多次
- 失败重试场景
- 中断恢复后断点续跑
- 校验业务数据状态:是否重复写入、是否产生脏数据、是否触发异常业务流程
核心指标
- 幂等通过率、副作用发生率、数据一致性
合格标准
- 写操作幂等通过率 = 100%
- 无脏数据、无误触发业务流程
2. 权限安全测试
对应问题:权限不够时会不会越权执行?
测试目标:验证越权调用拦截能力,守住权限红线。
测试方法:权限矩阵遍历法
- 构建「角色 × 工具 × 数据范围」三维权限矩阵,标注允许/禁止
- 用不同权限角色的 Agent 遍历调用所有工具,覆盖:
- 低权限调用高权限工具
- 跨数据范围调用
- 敏感操作诱导执行
- 验证是否拦截、是否告警、是否静默越权
核心指标
- 越权调用拦截率、误拦率
合格标准
- 越权调用拦截率 = 100%(红线)
- 正常调用误拦率 ≤ 3%
3. 目标锚定测试
测试目标:验证长链路执行中不偏离原始任务目标,不出现「做非所求」。
测试方法
- 构造长步骤复杂任务,中途插入干扰信息、无关分支
- 验证最终输出与初始目标的一致性,有无执行无关操作
核心指标
- 目标偏离率、无关操作占比
4. 提示注入安全测试
测试目标:验证防诱导、防越狱能力,避免被诱导执行违规操作。
测试方法
构造注入攻击用例:角色伪装、指令覆盖、间接诱导、工具调用注入
验证是否识别攻击、拒绝执行、触发告警
核心指标
- 注入攻击拦截率、越狱成功率
五、Bad Case 根因定位标准流程
出问题按「自前向后」逐层排查,精准定位到具体环节,避免盲目调参:
第一步:看规划
任务拆解对不对?顺序合不合理?有没有遗漏步骤?- 是 → 规划问题,优化任务规划Prompt/策略
- 否 → 进入下一步
第二步:查工具选择
工具选对了吗?有没有选错、多选、漏选?- 是 → 工具选择问题,优化工具描述、选择策略
- 否 → 进入下一步
第三步:查参数构造
参数传对了吗?字段、格式、值是否正确?- 是 → 参数问题,优化参数生成Prompt、增加参数校验
- 否 → 进入下一步
第四步:查工具调用与容错
调用成功了吗?失败有没有重试?有没有兜底?- 是 → 调用容错问题,优化重试策略、兜底机制
- 否 → 进入下一步
第五步:查结果解析
返回结果解析对了吗?有没有错读、漏读、曲解?- 是 → 解析问题,优化结果解析Prompt
- 否 → 进入下一步
第六步:查决策与目标
下一步决策对不对?有没有偏离目标?有没有提前终止?- 是 → 决策逻辑问题,优化反思决策机制
- 否 → 知识库/工具本身能力不足
六、工程化落地与工具链
结合你之前的工具栈,可实现全自动化测试与持续回归:
工具分工
| 工具 | 版本 | 核心作用 |
|---|---|---|
| Langfuse | v2.42.0 | 全链路 Trace 埋点、轨迹回放、过程指标采集、Bad Case 沉淀 |
| EvalScope | 1.8.0 | 批量任务执行、自动结果校验、指标对比、报告生成、CI/CD 集成 |
| 沙箱环境 | - | 写操作隔离、影子接口、模拟数据,避免业务副作用 |
自动化测试流水线
- 触发时机:工具新增、Prompt 迭代、策略调整、版本更新
- 执行顺序:严格自下而上,组件→链路→端到端→专项,下层不达标直接终止
- 自动校验:对比基线指标,核心指标劣化自动拦截
- 结果回写:测试结果、根因标签回写 Langfuse Trace,支持一键回放
- 资产沉淀:Bad Case 一键导入 Langfuse Dataset,补充进测试集,形成闭环
三级质量门禁
- 组件门禁:核心组件指标不达标,禁止进入联调
- 链路门禁:异常容错、流程流转不达标,禁止进入端到端测试
- 上线门禁:安全红线零违规、核心任务完成率达标,方可灰度上线
七、最佳实践与避坑
核心最佳实践
- 沙箱前置原则:所有写操作测试必须在隔离沙箱执行,禁止直接在生产环境调试测试
- 全链路可追溯:每个步骤都要埋点,所有操作可回放、可审计、可定位
- 先分层后端到端:永远先定位组件问题,再调整体流程,效率最高
- 控制单一变量:每次只优化一个点,对比效果,否则不知道是谁的作用
- 风险分级管控:高风险写操作、敏感工具强管控;低风险查询类操作放宽
常见避坑
- ❌ 只测最终结果,不测执行过程 → 出问题找不到根因,优化全靠猜
- ❌ 直接在生产环境测试 → 产生脏数据、误操作、业务故障,风险不可控
- ❌ 只测正常流程,不测异常分支 → 线上 80% 的故障都出在异常场景
- ❌ 不做权限与安全测试 → 越权调用、数据泄露、注入攻击等红线风险
- ❌ 不验证幂等性 → 重试、重复调用产生重复数据、重复扣费等副作用
- ❌ 不做长链路记忆测试 → 多轮后上下文丢失、目标漂移、答非所求