站点图标 高效码农

DeepEval框架实战指南:大模型评估的终极解决方案

大模型评估利器:DeepEval 框架全解析

在大模型应用飞速发展的当下,如何精准评估大模型的表现成为众多开发者关心的问题。今天,就给大家详细介绍一个简单易用、开源的大模型评估框架 ——DeepEval。

一、DeepEval 简介

DeepEval 是一个专注于评估和测试大型语言模型(LLM)系统的框架,类似于 Pytest,但专门为大模型输出的单元测试量身打造。它融合了前沿研究成果,能够基于诸如 G – Eval、幻觉检测(hallucination)、回答相关性、RAGAS 等指标来评估大模型输出。

无论是 RAG 管道、聊天机器人、AI 代理等应用,还是通过 LangChain 或 LlamaIndex 实现的模型,DeepEval 都能全面覆盖。借助它,你可以轻松确定最优的模型、提示词和架构,从而改进 RAG 管道、代理工作流,预防提示词漂移,甚至能让你从 OpenAI 迁移到自己的 Deepseek R1 时充满信心。

二、核心优势

  1. 多场景评估支持 :既支持对大模型整个系统的端到端评估,也能针对系统中的各个组件进行细致入微的评估,全方位把脉模型表现。

  2. 丰富且强大的评估指标

    • G – Eval :凭借严谨的评估标准,精准衡量模型输出质量。
    • DAG(深度无环图) :独特视角剖析模型输出逻辑关系。
    • RAG 指标 :涵盖回答相关性、忠实度、上下文召回率、上下文精确度、上下文相关性以及 RAGAS 等,针对依托数据检索的大模型应用,全方位评估输出与检索信息契合度。
    • 代理指标 :通过任务完成度、工具正确性评估,精准分析 AI 代理在执行任务时的表现。
    • 其他指标 :幻觉检测、摘要能力、偏差、毒性等一应俱全,多维度保障模型输出的安全性与合理性。
    • 对话指标 :知识留存度、对话完整性、对话相关性、角色依从性等,守护对话类大模型应用的连贯与精准。
  3. 高度定制化 :你可以轻松构建自己的自定义指标,并且这些指标能够无缝融入 DeepEval 的生态系统,让评估工作更加贴合实际需求。

  4. 合成数据集生成 :方便快捷地生成用于评估的合成数据集,为模型评估提供丰富多样的素材。

  5. 与 CI/CD 环境完美融合 :无论是哪种 CI/CD 流水线,DeepEval 都能轻松适配,助力持续集成与持续交付过程中对模型质量的把控。

  6. 红队攻防测试 :只需几行代码,便能针对 40 多种安全漏洞(包括毒性、偏差、SQL 注入等)对大模型应用发起 “进攻”,运用 10 多种增强型攻击策略(如提示词注入),全方位检测模型的安全防线。

  7. 基准测试便利性 :在不到 10 行代码内,就能对任意的大模型进行基准测试,涵盖 MMLU、HellaSwag、DROP、BIG – Bench Hard、TruthfulQA、HumanEval、GSM8K 等热门基准测试,快速定位模型在不同维度的优劣。

  8. 与 Confident AI 深度集成 :Confident AI 作为 DeepEval 的平台,提供从数据集创建、标注,到模型评估、迭代对比、指标微调、结果调试以及实际应用中的模型响应监测与数据改进等一系列功能,陪伴你走过完整的模型评估生命周期,直至达到理想效果。

三、安装与平台接入

安装 DeepEval 可通过 pip 命令轻松实现,直接在终端输入 pip install -U deepeval,即可完成安装过程。

为了将测试数据妥善存放,并借助 Confident AI 平台获取更多高级功能,建议创建平台账号。你可以运行 deepeval login 命令,按照提示创建账号,复制 API 密钥并粘贴至命令行,后续所有测试案例都将自动记录,并且平台对数据隐私有着严格的保障措施。

四、编写首个测试用例

设想你开发了一个基于 RAG 的客户支持聊天机器人,下面将手把手教你用 DeepEval 编写测试用例。

首先创建一个名为 test_chatbot.py 的文件,然后在文件里撰写如下代码:

import pytest
from deepeval import assert_test
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCase, LLMTestCaseParams

def test_case():
    correctness_metric = GEval(
        name="Correctness",
        criteria="Determine if the 'actual output' is correct based on the 'expected output'.",
        evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT, LLMTestCaseParams.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.",
        retrieval_context=["All customers are eligible for a 30 day full refund at no extra costs."]
    )
    assert_test(test_case, [correctness_metric])

别忘了设置 OPENAI_API_KEY 环境变量,如果你打算使用自己的定制模型进行评估,可以参考官方文档相关部分获取详细指导。完成设置后,在命令行运行 deepeval test run test_chatbot.py 命令,就能看到你的测试案例成功执行,系统会自动判断测试是否通过。

五、深入探索评估功能

  1. 组件级别评估 :要是想单独评估大模型应用中的各个组件,可以采用组件级别评估。例如,借助 @observe 装饰器,对诸如大模型调用、检索器、工具调用和代理等 “组件” 进行追踪,并应用指标,而且这种追踪方式不会对现有代码造成侵入,无需你大动干戈重写代码。
from deepeval.tracing import observe, update_current_span
from deepeval.test_case import LLMTestCase
from deepeval.dataset import Golden
from deepeval.metrics import GEval
from deepeval import evaluate

correctness = GEval(name="Correctness", criteria="Determine if the 'actual output' is correct based on the 'expected output'.", evaluation_params=[LLMTestCaseParams.ACTUAL_OUTPUT, LLMTestCaseParams.EXPECTED_OUTPUT])

@observe(metrics=[correctness])
def inner_component():
    update_current_span(test_case=LLMTestCase(input="...", actual_output="..."))
    return

@observe
def llm_app(input: str):
    inner_component()
    return

evaluate(observed_callback=llm_app, goldens=[Golden(input="Hi!")])
  1. 脱离 Pytest 集成评估 :对于喜欢在笔记本环境中工作的情况,DeepEval 也支持不依赖 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])
  1. 独立使用指标 :DeepEval 的模块化设计,让你轻松调用任意指标。以下以继续前面的对话相关性评估为例:
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."]
)

answer_relevancy_metric.measure(test_case)
print(answer_relevancy_metric.score)
print(answer_relevancy_metric.reason)

不过要留意,部分指标针对的是 RAG 管道,有的则适用于微调场景,所以一定要结合官方文档选择契合实际的指标。

  1. 批量评估数据集 / 测试用例 :在 DeepEval 中,数据集就是测试用例的集合,批量评估代码如下:
import pytest
from deepeval import assert_test
from deepeval.metrics import HallucinationMetric, AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
from deepeval.dataset import EvaluationDataset

first_test_case = LLMTestCase(input="...", actual_output="...", context=["..."])
second_test_case = LLMTestCase(input="...", actual_output="...", context=["..."])

dataset = EvaluationDataset(test_cases=[first_test_case, second_test_case])

@pytest.mark.parametrize(
    "test_case",
    dataset,
)
def test_customer_chatbot(test_case: LLMTestCase):
    hallucination_metric = HallucinationMetric(threshold=0.3)
    answer_relevancy_metric = AnswerRelevancyMetric(threshold=0.5)
    assert_test(test_case, [hallucination_metric, answer_relevancy_metric])

在命令行运行 deepeval test run test_<filename>.py 命令,还可添加 -n 标志实现并行测试,提升评估效率。

当然,也可以不依赖 Pytest 集成,直接使用 evaluate(dataset, [answer_relevancy_metric])dataset.evaluate([answer_relevancy_metric]) 进行评估。

六、与 Confident AI 协同发力

借助 Confident AI 平台,你能开启完整的模型评估生命周期:

  1. 在云端精心策划和标注评估数据集,确保数据质量。
  2. 利用数据集对大模型应用进行基准测试,纵向对比不同迭代版本,精准定位最佳的模型与提示词组合。
  3. 针对特定需求,对指标进行细致微调,获取高度契合业务场景的评估结果。
  4. 借助模型调用追踪功能,对评估结果进行深度调试,洞察模型运行的每一处细节。
  5. 在产品实际应用中,持续监测和评估大模型响应,利用真实世界数据反哺数据集优化,不断雕琢模型表现,直至达到完美境地。

当你登录 Confident AI 平台后,运行测试文件,测试完成后,命令行会显示一个链接,打开就能查看详细的评估结果。

七、贡献与规划

DeepEval 欢迎大家积极贡献代码,关于贡献准则和拉取请求的提交流程,可查阅 CONTRIBUTING.md 文件。

目前,DeepEval 已完成与 Confident AI 的集成、实现 G – Eval、RAG 指标、对话指标、评估数据集创建、红队攻防测试等功能,后续还计划实现 DAG 自定义指标、防护栏等功能,持续为大模型评估领域注入新活力。

DeepEval 由 Confident AI 的创始人打造,有相关问题可以联系 jeffreyip@confident – ai.com,其遵循 Apache 2.0 开源协议,更多详情可查看 LICENSE.md 文件。

在大模型蓬勃发展的浪潮下,DeepEval 如同一盏明灯,照亮模型评估的前行之路,助力开发者打磨出一个又一个高质量的大模型应用,为人工智能领域的繁荣添砖加瓦。

不知道这篇文章是否符合你的预期,如果你对内容的深度、示例的丰富程度或者其他方面有任何建议,欢迎随时提出,我来帮你进一步优化完善,让它达到你满意的水平。

退出移动版