一、官方信息
| 项目名称 | DeepEval |
| 仓库地址 | https://github.com/confident-ai/deepeval |
| 官方网站 | https://deepeval.com/ |
| 最新更新 | 2026 年活跃迭代 |
| 项目定位 | Pytest 风格的 LLM 应用与 RAG 评估框架 |
| 开源协议 | Apache-2.0 |
二、项目背景
传统软件用 pytest 写单元测试,函数输入输出明确,断言非黑即白。但 LLM 应用的输出是"自然语言",没法用 assert output == "xxx" 这种硬断言——同样一个问题,模型这次答"退款在设置页",下次答"请到账号安全里修改",语义都对,字面上却不等。怎么给这种"软输出"写单元测试?
DeepEval 由 Confident AI 团队开发,把这件事做得像写 pytest 一样自然:你依然用 @pytest.mark、依然写 test_xxx() 函数,但断言换成了一堆"LLM 专用指标"——回答是否忠实(Faithfulness)、是否有帮助(Answer Relevancy)、是否有毒(Toxicity)、是否有偏见、RAG 的检索是否到位等等。每个指标背后是一个可配置的 LLM 评判器,还能接你的公司数据做自定义。
DeepEval 的最大价值在于把 LLM 评估工程化:测试能进 CI、能版本化、能和 Confident AI 平台联动做在线监控。它内置了 RAG 评测、Agent 评测、幻觉检测、红队安全测试等几十种指标,是目前和 Ragas 齐名、但更贴近"测试工程师"思维的 LLM 评测框架。
三、核心特性
- Pytest 原生风格:用熟悉的 pytest 写 LLM 测试,零学习成本。
- 30+ 内置指标:Faithfulness、Answer Relevancy、Toxicity、Hallucination、Bias、RAGAS 兼容指标等。
- 测试数据集:把一批 (input, actual_output, expected) 组织成可复用数据集批量跑。
- 自定义指标:继承 BaseMetric,用自己的 LLM 评判逻辑。
- 红队测试:内置生成恶意输入,测试 LLM 安全防护。
- CI 集成:测试不达标直接 exit 非零,拦住问题上线。
- Confident AI 平台联动:可上传结果做在线监控与协作。
四、环境要求
- Python 3.9 ~ 3.12。
- 一个 LLM API Key(作为评判器,OpenAI / DeepSeek 等)。
- 操作系统:Linux / macOS / Windows。
- 内存:2GB 以上即可。
五、详细部署步骤
方式一:pip 安装
python -m venv venv
source venv/bin/activate
pip install -U deepeval方式二:写第一个测试用例
新建 test_chatbot.py:
from deepeval import assert_test
from deepeval.test_case import LLMTestCase
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric
def test_customer_refund():
# 构造一个测试用例
test_case = LLMTestCase(
input="怎么退款?",
actual_output="您可以在订单页面点击申请退款。",
retrieval_context=["退款入口位于订单详情页,点击申请退款按钮。"],
)
# 多个指标一起断言
answer_relevancy = AnswerRelevancyMetric(threshold=0.7)
faithfulness = FaithfulnessMetric(threshold=0.8)
assert_test(test_case, [answer_relevancy, faithfulness])运行:
deepeval test run test_chatbot.py
# 或直接用 pytest
pytest test_chatbot.py -v使用数据集批量跑
from deepeval import evaluate
from deepeval.metrics import FaithfulnessMetric
from deepeval.test_case import LLMTestCase
test_cases = [
LLMTestCase(input="问题1", actual_output="回答1", retrieval_context=["上下文1"]),
LLMTestCase(input="问题2", actual_output="回答2", retrieval_context=["上下文2"]),
]
evaluate(
test_cases=test_cases,
metrics=[FaithfulnessMetric(threshold=0.7)],
)接入 DeepSeek / 本地模型作为评判器
from deepeval.models import DeepEvalBaseLLM
from langchain_openai import ChatOpenAI
class DeepSeekJudge(DeepEvalBaseLLM):
def load_model(self):
return ChatOpenAI(
model="deepseek-chat",
base_url="https://api.deepseek.com/v1",
api_key="sk-xxx",
)
def generate(self, prompt: str) -> str:
return self.load_model().invoke(prompt).content
async def a_generate(self, prompt: str) -> str:
return await self.load_model().ainvoke(prompt)
def get_model_name(self):
return "deepseek-chat"
# 把自定义评判器传给指标
from deepeval.metrics import AnswerRelevancyMetric
metric = AnswerRelevancyMetric(threshold=0.7, model=DeepSeekJudge())配置 OpenAI Key(默认评判器)
export OPENAI_API_KEY=sk-xxxx验证安装
deepeval --version
deepeval test run test_chatbot.py六、使用方法
- pip 安装后用
deepeval test run或pytest跑测试。 - 每条测试用
LLMTestCase描述输入、实际输出、检索上下文、期望输出。 - 选指标并设
threshold(及格线),低于阈值则测试失败。 - 可把测试文件提交进 Git,接入 CI 让每次改动自动回归。
- 无账号密码;默认用 OpenAI 当评判器,Key 走环境变量。
七、常见问题 FAQ
Q1:测试一直失败但感觉回答没问题?
A:先看是哪个 metric 挂了、分数多少。阈值设太高会误杀,建议先从 0.5~0.7 开始调;或换更强的评判模型。
Q2:和 Ragas 什么关系?
A:两者都做 RAG 评估。Ragas 偏"数据集跑分",DeepEval 偏"pytest 工程化测试";DeepEval 也兼容 Ragas 指标。
Q3:评判模型一定要 OpenAI 吗?
A:不是,可自定义 DeepEvalBaseLLM 接入 DeepSeek、本地 Ollama 等任意 OpenAI 兼容模型。
Q4:跑一次成本高吗?
A:每个 metric 都要调评判 LLM,样本多时成本明显。建议先小批量调阈值,再全量跑。
Q5:能测 Agent 工具调用吗?
A:可以,DeepEval 提供 Agent 相关指标(如工具调用正确性、任务完成度),适合评估多步 Agent。