跳到主要内容

回归测试

1. 定义与边界

回归测试是把历史失败、线上事故、边界样本和高风险路径固化为长期评测集,用来防止新版本重新犯旧错误。它不是一次性的离线评测,而是发布流程中的持续门禁。

2. 为什么重要

Agent 系统改动频繁:模型、提示词、工具 schema、检索索引、权限策略、业务规则都会变化。没有回归测试,团队很容易修好一个问题又破坏另一个场景。

3. 核心机制

回归样本应记录:

  • 原始问题摘要。
  • 脱敏后的输入和初始状态。
  • 失败原因标签。
  • 期望行为。
  • 关联事故或工单 id。
  • 最早修复版本。

4. 工程实现

case_id: reg_20260509_014
source: prod_incident
incident_id: inc_778
failure_reason: tool_args_wrong
fixed_in: refund_agent_2.8.0
tags: [refund, payment, high_risk]
input:
user_message: "退差价,不是全额退款"
expected:
must_call:
- tool: issue_partial_refund
must_not_call:
- refund_payment_full

CI 门禁示例:

smoke_set_pass_rate == 100%
high_risk_regression_pass_rate == 100%
overall_regression_delta >= -0.5%
unsafe_action_count == 0

5. 生产实践

  • 高风险回归集与普通回归集分开,前者不允许失败。
  • 定期清理过时样本,但要保留删除原因和替代样本。
  • 每个线上 P0/P1 事故必须沉淀至少一个回归样本。
  • 对 flaky 样本记录多次运行结果,不要直接删除。

6. 常见反模式

  • 回归集只增不管,最后慢到没人运行。
  • 样本没有版本,数据或业务规则变了却继续比较旧分数。
  • 只保存用户输入,不保存当时工具状态和上下文。
  • 修复后没有把失败案例加入门禁。

7. 评测方法

指标解释
Regression Pass Rate回归样本通过率
High-risk Pass Rate高风险样本通过率
Reintroduced Bug Count重新出现的历史问题数量
Flaky Case Rate多次运行结果不稳定比例
Time to Add Regression从事故发现到纳入回归集的时间

8. 安全与治理

回归集经常来自线上日志,必须脱敏并控制访问。安全事故样本要保留攻击结构,但替换真实秘密和个人信息。高风险样本的评审规则要由安全或业务负责人确认。

9. 权威资料

10. 二次精修:回归集分层

回归测试的目标不是覆盖所有任务,而是防止已知能力和已知事故复发。

回归层触发时机样本规模门禁
Smoke每个 PR快速发现硬失败
Coreprompt/model/tool 变更核心 TSR 不退化
Safety高危工具或策略变更一票否决
Incident事故修复后小而精准复发为 0
Full大版本或发布前综合报告

11. 回归流水线

12. 回归配置示例

regression:
baseline: "release_2026_05_08"
suites:
smoke:
max_runtime_minutes: 10
required_on: ["pull_request"]
core:
min_task_success: 0.86
max_cost_delta: 0.15
safety:
max_unsafe_action_rate: 0
required_on_changes: ["tools/**", "safety/**", "prompts/**"]
fail_report:
include_trace: true
include_cost: true
include_judge_reason: true

13. 失败分诊标签

标签含义后续动作
prompt_regression指令变化导致退化修改 prompt 并补样本
tool_contracttool schema 或返回变化更新契约测试
model_behavior模型升级导致差异重新定阈值或路由
data_dependency知识库/检索变化固定数据版本
judge_drift评审器变化重跑基线
safety_policy策略变更影响安全复审

14. 指标与治理

  • Regression Delta 要按 suite 和 slice 报告,不能只给总体平均。
  • 失败样本进入回归集前要去重、脱敏、标注来源和 owner。
  • 回归集也会老化,定期清理不再代表生产风险的样本。
  • 不要为了通过门禁降低样本难度;确需改阈值必须记录理由。
  • 对随机性强的 Agent,要固定温度、工具 fixture 和数据版本,或报告置信区间。

15. 补充权威资料

16. 主控验收清单

  • 是否区分 smoke、core、safety、incident、full suite。
  • 是否根据变更影响自动选择回归范围。
  • 是否有清晰基线,且基线未被候选版本污染。
  • 是否报告失败样本的 trace、成本、judge reason。
  • 是否把线上事故转成 incident regression case。
  • 是否有 judge drift 检测。
  • 是否固定工具 fixture、检索数据和 prompt 版本。
  • 是否允许人工标注覆盖明显误判,并记录原因。
  • 是否有定期样本老化清理机制。
  • 是否防止“为了过门禁”降低样本难度。
  • 是否让安全 suite 对高危变更一票否决。
  • 是否保留历史报告用于趋势分析。
  • 是否把回归结果接入发布审批。
  • 是否对随机性强的样本报告多次运行稳定性。
  • 是否把失败原因回流到工程 backlog。
  • 是否明确哪些失败可以豁免,豁免由谁批准。
  • 是否在发布后抽样验证回归结论仍成立。