简短结论:LLM 回归测试集是一组可重复运行的输入、期望行为、安全案例、评分规则和发布门槛,用来在模型、prompt、RAG、工具或编排逻辑变更进入生产前发现质量、安全、成本和延迟退化。
LLM 应用的失败方式和传统软件不同。代码没变,prompt、模型版本、检索索引、工具 schema 或 memory 策略一改,行为就可能改变。因此,回归测试应该覆盖完整应用路径,而不是只测试一次模型调用。
1. 定义什么不能退化
先从产品风险出发,而不是从测试框架出发。常见目标包括任务成功率、RAG grounding、引用质量、工具调用正确性、拒答行为、提示注入防御、输出格式、延迟、token 用量、成本和隐私边界。
2. 建立版本化测试集
每个测试用例都应该保存输入、上下文、期望行为、标签和加入原因。测试集应包含:
- 正常路径任务。
- 真实工单或生产 trace 中的边界案例。
- 历史失败案例。
- 提示注入和 jailbreak 尝试。
- 应该拒答或升级的问题。
- 工具调用用例和参数约束。
LangSmith 的 evaluation workflow 使用 datasets 和 experiments 比较不同版本行为(LangSmith evaluation docs)。OpenAI Evals 也把评估视为针对模型或应用输出的结构化测试(OpenAI Evals guide)。
3. 区分确定性检查和语义判断
不要所有测试都交给 LLM judge。JSON schema、必填字段、枚举、禁用词、工具名称、参数格式、引用字段、延迟和成本阈值,都应该用确定性断言。
LLM judge 或人工复核更适合判断完整性、groundedness、复杂指令跟随、语气、升级质量和细微安全问题。Promptfoo 支持 exact、contains、regex、JavaScript 和 model-graded 等多种断言方式(Promptfoo expected outputs docs)。
4. 分开测试检索和生成
RAG 系统应先测试检索,再评估最终回答。若正确证据没有进入 top-k,生成模型只是被迫补救检索失败。
- 期望文档是否进入 top-k。
- chunk 是否包含答案证据。
- metadata filter 是否执行租户、产品、语言和权限边界。
- 引用是否指向正确来源。
- 更新后的旧文档是否被排除。
LlamaIndex 提供检索和响应质量评估模块(LlamaIndex evaluating docs)。
5. 加入工具调用和 Agent 路径测试
Agent 需要测试决策过程,而不仅是最终回答。一次运行可能调用了错误工具、传入危险参数,却生成了看起来合理的回复。
- 期望工具选择。
- 允许和禁止的参数。
- 副作用前的审批要求。
- 重试和 fallback 行为。
- 审计日志字段。
6. 把安全和隐私纳入常规回归
提示注入、系统 prompt 泄露、跨租户检索、密钥暴露、未授权工具调用、上传文件中的恶意指令、数据保留策略违规,都应该作为常规发布测试运行。OWASP LLM Top 10 可作为威胁分类来源(OWASP LLM Top 10)。
7. 先定门槛,再看结果
回归测试只有在团队提前同意发布标准时才有价值。例如:不能有 critical 安全/隐私/授权失败;输出不能破坏生产 schema;任务成功率不能低于容忍范围;P95 延迟不能超过目标;平均成本不能超过预算。