DeepEval
面向 LLM 应用的单元测试框架,用 Pytest 风格跑指标评测。
- Star 数
- ★ 19k
- 最近更新
- 2 天前
- License
- Apache-2.0
- 主语言
- Python
- FA 评分
- 53/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台OpenAI API · Claude API
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- AI 应用团队在发布前为客服机器人编写回归测试,确保回答不出现幻觉
- 不适合
- 只想用图形界面做评测、不愿写 Python 代码的团队
这个 Agent 能做什么,适合哪些场景?
DeepEval 是一个开源的 LLM 评测框架,用法类似 Pytest,但专门用于对大语言模型应用做单元测试。它把 G-Eval、答案相关性、幻觉、RAG 指标、Agent 轨迹指标等封装成可直接调用的 Metric 类,通过 LLM-as-a-judge 或本地 NLP 模型在 0-1 区间打分,并给出评分理由。使用时既可以写成 test_ai_agent.py 用 deepeval test run 执行,也可以在 Notebook 中直接调用 evaluate() 或单独调用 metric.measure()。它能对黑盒的端到端应用、完整的 Agent 决策轨迹,以及单步的工具调用与检索做评测,还支持生成单轮与多轮合成数据集。框架本身可接入任意 LLM 后端并集成到 CI/CD;可选的 Confident AI 云平台用于托管测试报告与生产监控。
被测对象是一个 LLMTestCase,包含 input、actual_output、expected_output、retrieval_context 等字段。用户挑选指标类(如 GEval、AnswerRelevancyMetric、TaskCompletionMetric、FaithfulnessMetric),设定 threshold 后调用 assert_test()、evaluate([...], [...]) 或 metric.measure(test_case);指标会调用所选 LLM 或本地模型打分,返回 0-1 的 score 与 reason。对于 Agent 场景,可以用 @observe() 装饰器或 OpenAI/LangChain/CrewAI 等集成采集轨迹,再用 dataset.evals_iterator(metrics=[...]) 对完整的决策与工具调用序列做轨迹级评测。框架还支持通过 deepeval login 把测试结果同步到云端生成可分享报告,并能在十行代码内对 MMLU、HellaSwag、HumanEval 等基准做模型评测。
- AI 应用团队在发布前为客服机器人编写回归测试,确保回答不出现幻觉
- RAG 工程团队用 Contextual Recall、Contextual Precision 定位检索环节的问题
- Agent 开发者用 TaskCompletionMetric 与 ToolCorrectness 评估多步工具调用轨迹
- 多轮对话产品团队用 Knowledge Retention、Role Adherence 验证长对话表现
- 在 CI/CD 流水线中把
deepeval test run作为质量门禁,防止提示词改动导致指标回退
如何安装或部署这个 Agent?
需要 Python>=3.9,用 pip 安装:
pip install -U deepeval若使用基于 LLM 的指标,需要设置模型 API Key,例如:
export OPENAI_API_KEY="..."DeepEval 在 import 时会自动加载当前目录的 .env.local 与 .env,优先级为进程环境变量 > .env.local > .env,可用 DEEPEVAL_DISABLE_DOTENV=1 关闭。
如何使用这个 Agent?
创建一个测试文件并编写第一个端到端用例:
import pytest
from deepeval import assert_test
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCase, SingleTurnParams
def test_case():
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
)
test_case = LLMTestCase(
input="What if these shoes don't fit?",
actual_output="You have 30 days to get a full refund at no extra cost.",
expected_output="We offer a 30-day full refund at no extra costs.",
)
assert_test(test_case, [correctness_metric])随后在命令行执行:
deepeval test run test_ai_agent.py也可以在 Notebook 中不经 Pytest 直接评测:
from deepeval import evaluate
from deepeval.metrics import AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
answer_relevancy_metric = AnswerRelevancyMetric(threshold=0.7)
test_case = LLMTestCase(
input="What if these shoes don't fit?",
actual_output="We offer a 30-day full refund at no extra costs.",
retrieval_context=["All customers are eligible for a 30 day full refund at no extra costs."]
)
evaluate([test_case], [answer_relevancy_metric])如需云端报告,运行 deepeval login 并粘贴 API Key。
这个 Agent 有哪些优点和局限?
- 指标库覆盖面广,涵盖 Agent、多轮、语音、RAG、MCP、多模态与通用指标,且每个指标都输出评分理由
- 延续 Pytest 习惯,现有 Python 测试流程可直接加入
deepeval test run做 CI 门禁 - 模型后端不锁定,支持任意 LLM、统计方法与本地运行的 NLP 模型
- 支持轨迹级评测与 @observe() 手动埋点,并提供 LangChain、LangGraph、CrewAI、OpenAI Agents、LlamaIndex 等集成
- 可生成单轮与多轮合成数据集,并在十行代码内跑 MMLU、HumanEval 等基准
- 基于 LLM-as-a-judge 的指标依赖外部模型 API,会产生额外费用与延迟
- 指标种类繁多,需要按 Agent、RAG、语音等场景自行挑选,选错指标会误判质量
- 路线图中的 DAG 自定义指标与 Guardrails 尚未完成
- 云端报告与生产监控依赖 Confident AI 平台,对纯本地团队是不可用部分
- 中文等非英语项目需要确认评价模型对目标语言的判定是否稳定,文档主要面向英文
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| DeepEval 当前 | 53 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 19k | 2 天前 | Python | OpenAI API · Claude API |
| AI 评测技能集 | 52 · 缺口较多 | Agent 插件 / 技能 | ★ 1.5k | 27 天前 | — | — |
| Giskard | 47 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 5.9k | 1 天前 | Python | OpenAI API · Claude API |
| Oumi 端到端基础模型平台 | 58 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 9.4k | 今天 | Python | Claude Code · OpenAI API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
证据显示该框架默认通过 `deepeval login` 与 Confident AI 云平台交互,README 明确称所有测试用例会自动记录到云端,且 pyproject 依赖 posthog 遥测;数据流透明度仅以一句指向外部文档的链接带过,缺少仓库内隐私说明,故扣分。依赖清单大量使用 `*` 通配版本(pytest、openai、aiohttp、jinja2、setuptools 等),无法静态确认无已知漏洞,dependency_security 仅给 1。CLI 的 `--official` 在缺少 API key 时仅警告并跳过,属较温和的确认处理,但整体缺少显式用户确认与回滚机制,rollback 为 0。source_attribution 有 Apache-2.0 版权声明与作者信息,给 2。
CLI 命令显式传播 pytest 退出码,注释清晰说明各退出码含义,失败信息与自洽性较好(各 2)。但依赖版本大量为 `*`,且 integrations 组注释提到 mistralai 在 PyPI 被隔离导致解析失败,说明依赖可用性存在现实风险,给 1。
README 覆盖 agent、多轮、语音、RAG、MCP、多模态等大量场景与框架集成,audience_and_scenarios 给 3。能力边界有指标清单但未系统说明不适用场景,给 2。触发精度依赖 pytest 插件与 CLI 参数,定义较清楚但未文档化边界,给 2。环境适配声明 Python>=3.9 且部分集成限定 3.10-3.14,属部分覆盖,给 2。
README 结构清晰、安装与快速开始完整、示例丰富(examples_and_faq 给 3),license 为完整 Apache-2.0 文本(给 3)。但仓库内无 CHANGELOG,版本仅见于 pyproject(versioning_changelog 给 1);known_limitations 几乎未提及(给 1);维护责任仅靠作者邮箱与外部平台,发布者身份未经验证,给 1。
输出为指标分数与解释,配合 pytest 报告可用性尚可(给 2)。作为评测框架有明确边际价值(给 2)。但成本方面依赖 LLM-as-a-judge 调用外部模型、遥测与云平台,成本与收益权衡未在仓库内说明,给 1。
README 大量宣称(human-like accuracy、本地运行等)缺少仓库内可追溯的基准或引用,claim_traceability 给 1。仅有 README、LICENSE、pyproject 与少量测试文件,跨源佐证有限,给 1。事实与推断分离不足,营销性表述与事实混排,给 1。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 默认登录会将测试用例自动记录到 Confident AI 云端,并含 posthog 遥测;使用前应确认数据隐私与关闭方式。
- 依赖清单大量使用通配版本,且集成组存在 PyPI 隔离导致的解析失败风险,生产使用前应锁定版本并做漏洞扫描。
- README 的准确性宣称缺少仓库内可追溯基准,不应直接采信。
- 发布者身份未经验证,维护责任与更新路径需自行核实。
常见问题
不使用 Pytest 可以吗?
deepeval test run,也可以直接调用 evaluate([test_case], [metric]),或单独执行 metric.measure(test_case) 后读取 score 与 reason,适合 Notebook 环境。必须登录 Confident AI 才能用吗?
deepeval login 用于生成云端可分享报告与接入生产监控,属于推荐步骤;本地评测只需要安装包和模型 API Key。没有 OpenAI Key 能评测吗?
能评测 Agent 的完整执行过程吗?
dataset.evals_iterator(metrics=[...]) 对完整轨迹运行 TaskCompletionMetric 等轨迹级指标。