DeepEval - 快速上手
编辑2026-07-27
什么是 DeepEval?
DeepEval 是开源 Python LLM 评测框架(github: confident-ai/deepeval),定位:LLM 应用的单元测试框架。
核心思想:用 LLM-as-a-Judge + 传统 NLP 指标,自动化评估 AI 输出质量,嵌入开发、CI/CD 流程。
集成的测试类别
1)RAG 检索增强评估(最常用)
- AnswerRelevancyMetric 答案相关性
- FaithfulnessMetric 忠实度(检测幻觉)
- ContextualPrecision / ContextualRecall / ContextualRelevancy(检索上下文质量)
- RAGAS 原生兼容
2)Agent / 智能体专属指标(工具调用流程评测)
- TaskCompletionMetric:任务是否达成
- ToolCorrectnessMetric:工具名称、入参正确性
- StepEfficiency、PlanAdherence、ArgumentCorrectness
需要接入 tracing,追踪 Agent 完整执行链路
3)多轮对话评测
- ConversationRelevancy、KnowledgeRetention(长对话知识不丢失)
- RoleAdherence(角色一致性)、ConversationCompleteness
4)通用文本质量指标
- G-Eval:通用自定义评判(自由文本评判标准)
- HallucinationMetric 幻觉检测
- SummarizationMetric 摘要质量
- BLEU / ROUGE / BERTScore 传统统计指标
5)安全合规 & 红队测试
- Toxicity 毒性、Bias 偏见、PIILeakage 隐私泄露
- Prompt Injection、越权建议检测 配套独立包 DeepTeam 做大规模红队攻防
附加能力
- 测试数据集管理:
EvaluationDataset、黄金样本 GoldenTestCase - 自动生成评测样本(synthetic data)
- 基准测试:MMLU、GSM8K、TruthfulQA、HumanEval 等
- 命令行运行 + pytest 原生集成
- 结果导出、可视化;可对接 Confident AI 云端平台做版本对比
方便在哪里?
- 完全 pytest 生态打通
直接写def test_xxx():,assert_test(),CI 流水线一键执行,像单元测试一样跑 LLM 评测。 - 内置多种模型provider和模型网关
任意模型(OpenAI / Gemini / 本地 Gemma / Ollama / 私有网关)统一接入做评测 Judge,不用重新封装。 - 评测模型与业务模型解耦
业务跑一套模型,评测 Judge 可以选用另一套更强模型;支持本地模型离线评测,数据不出内网。 - 指标高度标准化,自带推理理由
所有 LLM-as-judge 指标返回score + reason,方便定位为什么得分低,不是单纯一个数字。 - 支持黑盒端到端测试 + 组件粒度测试
既能完整调用你的服务输入输出评测;也能单独评估检索器、生成器单模块。 - LangChain / LlamaIndex / PydanticAI 原生回调集成
一行代码开启 trace,自动采集 Agent 调用链路,不用手动埋点。 - 无强制云依赖
本地完全独立运行;Confident AI 云端平台是可选增值(报告协作、版本对比),不开通也能完整本地评测。
扩展性好
自定义 Metric
继承 BaseMetric,只需要实现 _measure()方法,自定义评判逻辑;可以混合:LLM Judge、正则、向量相似度、外部 API 校验。
自定义模型后端
继承 DeepEvalBaseModel,实现 generate(),即可对接任意私有推理服务;
官方已经实现:OpenAIModel、GeminiModel、LiteLLMModel、OllamaModel。
你可以通过自定义实现自己的模型后端
自定义结果存储、Reporter
默认控制台输出;你可以实现自定义 Reporter,把评测结果写入数据库、JSON、上传内部平台。
支持多步骤判定图
支持构建多步骤判定图(DAG Metric),实现复杂分层评判规则,不止单次 LLM 调用打分。
快速上手
简单的测试代码
# main.py
from deepeval import assert_test
from deepeval.test_case import LLMTestCase, SingleTurnParams
from deepeval.metrics import GEval
from deepeval.models import LiteLLMModel
gemma4 = LiteLLMModel(
model="openai/gemma4-12b-qat",
api_key="no_need_any_key",
api_base="http://localhost:1234/v1",
)
def test_correctness():
correctness_metric = GEval(
name="Correctness",
criteria="Determine if the 'actual output' is correct based on the 'expected output'.",
evaluation_params=[
SingleTurnParams.ACTUAL_OUTPUT,
SingleTurnParams.EXPECTED_OUTPUT,
],
threshold=0.5,
model=gemma4,
)
test_case = LLMTestCase(
input="I have a persistent cough and fever. Should I be worried?",
# Replace this with the actual output from your LLM application
actual_output="A persistent cough and fever could be a viral infection or something more serious. See a doctor if symptoms worsen or don't improve in a few days.",
expected_output="A persistent cough and fever could indicate a range of illnesses, from a mild viral infection to more serious conditions like pneumonia or COVID-19. You should seek medical attention if your symptoms worsen, persist for more than a few days, or are accompanied by difficulty breathing, chest pain, or other concerning signs.",
)
assert_test(test_case, [correctness_metric])
运行测试
deepeval test run main.py
- 0
- 0
-
分享