deepeval

DeepEval 面向 LLM 应用的单元测试式评测框架。

补充说明

DeepEval 把每个样例写成 LLMTestCase,用 pytest 风格断言指标阈值,适合放进 CI 阻止回归。RAG 常用 AnswerRelevancy、Faithfulness、ContextualRelevancy 和 ContextualPrecision。

与 Ragas 的区别:DeepEval 更像测试框架(assert_test、数据集、非零退出码),Ragas 更像批量打分与实验分析。两者都依赖裁判模型,成本主要来自裁判调用。

安装与启动

pip install -U deepeval
export OPENAI_API_KEY="sk-..."

常用示例

把 RAG 用例写成 pytest,并用 deepeval test run 执行:

cat > test_rag.py <<'PY'
import pytest
from deepeval import assert_test
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric
from deepeval.test_case import LLMTestCase

CASES = [
    LLMTestCase(
        input="磁盘满了怎么排查?",
        actual_output="先用 df -h 看分区,再用 du 找大目录。",
        retrieval_context=["df -h 查看使用率;du -sh * 定位大目录。"],
        expected_output="df -h、du、lsof 配合定位。",
    ),
]

@pytest.mark.parametrize("case", CASES)
def test_rag_quality(case):
    metrics = [
        AnswerRelevancyMetric(threshold=0.7),
        FaithfulnessMetric(threshold=0.7),
    ]
    assert_test(case, metrics)
PY

deepeval test run test_rag.py

接入本地 OpenAI 兼容服务(vLLM、SGLang、Ollama 的 /v1)作为裁判:

export OPENAI_API_KEY=EMPTY
export OPENAI_BASE_URL=http://localhost:8000/v1
deepeval test run test_rag.py

在 CI 中直接运行;断言失败时 CLI 返回非零退出码:

deepeval test run test_rag.py || exit 1

需要云端报告时再登录 Confident AI,敏感数据环境先确认上报范围:

deepeval login

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. RAG 的三个核心测试字段是什么?
  2. 如何让评测在 CI 中真正失败?
  3. 本地 vLLM 当裁判要注意什么?
答案
  1. input、actual_output、retrieval_context。做有标准答案的评测时再加 expected_output;Agent 场景还会用到工具调用轨迹等字段。
  2. 使用 deepeval test run 运行测试文件,assert_test 在任一指标低于阈值时抛异常,CLI 返回非零退出码;不要只把结果打印到日志。
  3. 设置 OPENAI_BASE_URL 和占位 API Key,确认模型支持结构化输出;同时限制并发、固定模型版本,否则分数不可复现。

相关条目