DeepEval

面向 LLM 应用的单元测试框架,用 Pytest 风格跑指标评测。

Star 数
★ 19k
最近更新
2 天前
License
Apache-2.0
主语言
Python

30 秒速览

运行形态
命令行工具代码库 / SDK
可在哪里用
通用 · 跨平台OpenAI API · Claude API
费用
软件免费,模型调用费用自付
上手难度
低 · 几分钟可跑通
开始前需要
Python>=3.9pipOPENAI_API_KEY(可选,用于基于模型的指标)Shell / 命令行网络访问本地文件系统
典型场景
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 等基准做模型评测。

  1. AI 应用团队在发布前为客服机器人编写回归测试,确保回答不出现幻觉
  2. RAG 工程团队用 Contextual Recall、Contextual Precision 定位检索环节的问题
  3. Agent 开发者用 TaskCompletionMetric 与 ToolCorrectness 评估多步工具调用轨迹
  4. 多轮对话产品团队用 Knowledge Retention、Role Adherence 验证长对话表现
  5. 在 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?

FollowAgents 源码审查 · FARS-2.1
缺口较多
53/ 100 五分制 2.7 / 5
信任安全 10/29
可靠稳定 8/14
适用触发 14/18
规范维护 11/18
有效结果 7/13
证据核验 3/8
查看各维度的扣分理由
信任安全10 / 29 · 1.7/5

证据显示该框架默认通过 `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。

可靠稳定8 / 14 · 2.9/5

CLI 命令显式传播 pytest 退出码,注释清晰说明各退出码含义,失败信息与自洽性较好(各 2)。但依赖版本大量为 `*`,且 integrations 组注释提到 mistralai 在 PyPI 被隔离导致解析失败,说明依赖可用性存在现实风险,给 1。

适用触发14 / 18 · 3.9/5

README 覆盖 agent、多轮、语音、RAG、MCP、多模态等大量场景与框架集成,audience_and_scenarios 给 3。能力边界有指标清单但未系统说明不适用场景,给 2。触发精度依赖 pytest 插件与 CLI 参数,定义较清楚但未文档化边界,给 2。环境适配声明 Python>=3.9 且部分集成限定 3.10-3.14,属部分覆盖,给 2。

规范维护11 / 18 · 3.1/5

README 结构清晰、安装与快速开始完整、示例丰富(examples_and_faq 给 3),license 为完整 Apache-2.0 文本(给 3)。但仓库内无 CHANGELOG,版本仅见于 pyproject(versioning_changelog 给 1);known_limitations 几乎未提及(给 1);维护责任仅靠作者邮箱与外部平台,发布者身份未经验证,给 1。

有效结果7 / 13 · 2.7/5

输出为指标分数与解释,配合 pytest 报告可用性尚可(给 2)。作为评测框架有明确边际价值(给 2)。但成本方面依赖 LLM-as-a-judge 调用外部模型、遥测与云平台,成本与收益权衡未在仓库内说明,给 1。

证据核验3 / 8 · 1.9/5

README 大量宣称(human-like accuracy、本地运行等)缺少仓库内可追溯的基准或引用,claim_traceability 给 1。仅有 README、LICENSE、pyproject 与少量测试文件,跨源佐证有限,给 1。事实与推断分离不足,营销性表述与事实混排,给 1。

风险与缓解建议
  • 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
  • 默认登录会将测试用例自动记录到 Confident AI 云端,并含 posthog 遥测;使用前应确认数据隐私与关闭方式。
  • 依赖清单大量使用通配版本,且集成组存在 PyPI 隔离导致的解析失败风险,生产使用前应锁定版本并做漏洞扫描。
  • README 的准确性宣称缺少仓库内可追溯基准,不应直接采信。
  • 发布者身份未经验证,维护责任与更新路径需自行核实。
证据充分度:低 评估于 2026年10月21日 审查版本 727203702cdd
查看完整评分方法 →

常见问题

不使用 Pytest 可以吗?
可以。除了 deepeval test run,也可以直接调用 evaluate([test_case], [metric]),或单独执行 metric.measure(test_case) 后读取 score 与 reason,适合 Notebook 环境。
必须登录 Confident AI 才能用吗?
不是必需的。deepeval login 用于生成云端可分享报告与接入生产监控,属于推荐步骤;本地评测只需要安装包和模型 API Key。
没有 OpenAI Key 能评测吗?
README 示例以 OPENAI_API_KEY 为前提,但也说明可以改用自定义模型,部分指标可用统计方法或本地 NLP 模型运行;具体取决于所选指标。
能评测 Agent 的完整执行过程吗?
可以。通过 @observe() 手动埋点或框架集成采集轨迹后,用 dataset.evals_iterator(metrics=[...]) 对完整轨迹运行 TaskCompletionMetric 等轨迹级指标。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents