LLM 回归测试:把评估集、阈值和基线接入 CI,防止提示词/模型升级悄悄变差
LLM 应用的回归测试和传统软件不同:输出不是精确字符串,评分有方差,模型/提示词/检索库/工具都可能变化。回归测试的目标不是“每次输出一样”,而是“关键指标不低于基线”。需要固定评估集、评分方法、基线版本和阈值,并把结果接入 CI。
典型触发:提示词修改、模型升级、RAG 分块/embedding 变更、工具 schema 变更、依赖升级。测试分层:单元(格式/JSON schema)、离线评估(准确率/召回/安全)、在线金丝雀(真实流量指标)。
# promptfoo 配置示例
prompts:
- file://prompts/support.txt
providers:
- openai:gpt-4o-mini
tests:
- vars:
question: "如何重置密码?"
assert:
- type: contains
value: "重置"
- type: llm-rubric
value: "回答包含具体步骤,且不承诺未经验证的处理时限"
# pytest + DeepEval:把评估变成测试用例
import pytest
from deepeval import assert_test
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric
from deepeval.test_case import LLMTestCase
@pytest.mark.parametrize("case", load_cases("eval/support.jsonl"))
def test_answer_quality(case):
output = app.answer(case["question"])
test_case = LLMTestCase(
input=case["question"], actual_output=output,
expected_output=case["reference"], retrieval_context=case["context"],
)
assert_test(test_case, [AnswerRelevancyMetric(threshold=0.7),
FaithfulnessMetric(threshold=0.8)])
CI 门禁:
- 评估集版本固定,结果和基线对比
- 阈值按指标设定(准确率、召回、faithfulness、安全)
- 报告差异样本,失败的用例可复现
- 模型/提示词变更必须跑;失败阻止合并或触发人工复核
- 线上金丝雀观察延迟、错误率、用户反馈
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令