DeepEval 做什么
DeepEval 用测试用例的方式组织评测:把问题、检索上下文、模型输出与期望答案写成一个用例,再对各指标设置阈值断言,接进 CI 后每次改动自动跑回归。它把评测从「一次性报告」变成「持续门禁」,让质量回归像单元测试一样被自动拦截,而不是等上线后由用户发现。
基本信息
| 组织方式 | 以测试用例为单位,一道题一个用例 |
|---|---|
| 常用指标 | 忠实度、答案相关性等 RAG 专用指标 |
| 接入方式 | 在 CI 中运行,指标低于阈值即判定失败 |
| 阈值策略 | 以当前基线为准,允许约定范围内的小幅波动 |
典型使用场景
- 发布门禁:改动提示词或模型后自动跑评测,低于阈值阻断合并
- 重构保护:改检索参数时确认没有引入质量回退
- 多模型对比:同一套用例跑不同模型,输出统一格式的对比报告
- 历史问题固化:把线上出现过的坏例子补进用例集,防止再次出现
- 团队协作:用例集入库,评审时以用例结果为共同依据
用例与断言
用例与断言
from deepeval import evaluate
from deepeval.metrics import FaithfulnessMetric, AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
tc = LLMTestCase(input="如何评估召回?", actual_output=answer,
retrieval_context=chunks, expected_output=gold)
# 阈值按当前基线设定,先宽松后逐步收紧
evaluate([tc], metrics=[FaithfulnessMetric(threshold=0.7),
AnswerRelevancyMetric(threshold=0.7)])
CI 门禁要点
| 要点 | 做法 | 常见问题 |
|---|---|---|
| 阈值 | 以当前基线为准,允许小幅波动 | 照抄默认值,与业务实际不符 |
| 用例集 | 覆盖高风险与高频问题 | 只放简单题,门禁形同虚设 |
| 运行时间 | 控制用例规模,避免拖慢流水线 | 全量评测导致 CI 频繁超时 |
| 失败处理 | 门禁失败必须阻断合并 | 只发告警,没人处理 |
CI 门禁阈值先按当前基线设定(例如允许小幅波动而不是一刀切),避免一次性拉高导致无人愿意合代码,指标反而被绕开。
评测指标本身依赖模型调用,要注意费用与耗时:把用例集按优先级分层,高频用例每次跑,完整集在夜间或发版前运行。