Loading...

文章背景图

confident-ai/deepeval:Pytest风格的LLM应用评估框架

2026-10-15
0
- 字
- 分钟
|

一、官方信息

项目名称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

六、使用方法

  1. pip 安装后用 deepeval test run 或 pytest 跑测试。
  2. 每条测试用 LLMTestCase 描述输入、实际输出、检索上下文、期望输出。
  3. 选指标并设 threshold(及格线),低于阈值则测试失败。
  4. 可把测试文件提交进 Git,接入 CI 让每次改动自动回归。
  5. 无账号密码;默认用 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。

八、跳转链接

评论交流

文章目录