DeepEval: 开源LLM评估框架的全面解析

DeepEval: 开源LLM评估框架的全面解析

DeepEval简介

DeepEval是一个专门用于评估大型语言模型(LLM)输出的开源框架。它的设计理念类似于Pytest,但专门针对LLM输出进行单元测试。DeepEval集成了最新的研究成果,提供了多种评估指标,如G-Eval、幻觉检测、答案相关性、RAGAS等,这些指标利用LLM和各种NLP模型在本地机器上进行评估。

无论您的应用是基于RAG还是微调,使用LangChain还是LlamaIndex,DeepEval都能满足您的需求。通过DeepEval,您可以轻松确定最佳的超参数来改进RAG管道,防止提示词漂移,甚至自信地从OpenAI过渡到托管自己的Llama2模型。

主要特性与指标

DeepEval提供了丰富的现成LLM评估指标,这些指标都附带详细解释,可以由任何您选择的LLM、统计方法或在本地机器上运行的NLP模型提供支持:

G-Eval

摘要评估

答案相关性

忠实度

上下文召回率

上下文精确度

RAGAS

幻觉检测

毒性检测

偏见检测

等等

除了丰富的评估指标外,DeepEval还具有以下主要特性:

批量评估:只需20行Python代码即可并行评估整个数据集。可以通过CLI以类似Pytest的方式进行,也可以通过evaluate()函数进行。

自定义指标:通过继承DeepEval的基础指标类,创建自定义指标,并自动集成到DeepEval的生态系统中。

CI/CD集成:可以无缝集成到任何CI/CD环境中。

LLM基准测试:只需10行代码即可在流行的LLM基准上对任何LLM进行基准测试,包括MMLU、HellaSwag、DROP、BIG-Bench Hard、TruthfulQA、HumanEval、GSM8K等。

Confident AI集成:自动集成到Confident AI平台,实现LLM应用的持续评估:

记录评估结果并分析指标通过/失败情况

根据评估结果比较和选择最佳超参数(如提示模板、分块大小、使用的模型等)

通过LLM跟踪调试评估结果

在一个地方管理评估测试用例/数据集

追踪事件以识别生产中的实时LLM响应

在生产环境中进行实时评估

将生产事件添加到现有评估数据集以加强评估

快速入门

让我们通过一个简单的例子来了解如何使用DeepEval。假设您的LLM应用是一个基于RAG的客户支持聊天机器人,以下是如何使用DeepEval测试您的应用。

安装

首先,安装DeepEval:

pip install deepeval

创建账户(强烈推荐)

虽然可选,但创建一个账户可以让您记录测试结果,方便跟踪变更和性能迭代。运行以下命令登录:

deepeval login

按照CLI中的说明创建账户,复制API密钥,并将其粘贴到CLI中。

编写第一个测试用例

创建一个测试文件test_chatbot.py,并编写您的第一个DeepEval测试用例:

import pytest

from deepeval import assert_test

from deepeval.metrics import AnswerRelevancyMetric

from deepeval.test_case import LLMTestCase

def test_case():

answer_relevancy_metric = AnswerRelevancyMetric(threshold=0.5)

test_case = LLMTestCase(

input="What if these shoes don't fit?",

# 替换为您的LLM应用的实际输出

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."]

)

assert_test(test_case, [answer_relevancy_metric])

设置OPENAI_API_KEY环境变量(您也可以使用自定义模型进行评估):

export OPENAI_API_KEY="..."

运行测试:

deepeval test run test_chatbot.py

如果一切正常,您的测试应该通过了✅。让我们来分析一下发生了什么:

input变量模拟用户输入,actual_output是您的聊天机器人基于此查询的预期输出。

retrieval_context包含来自您知识库的相关信息。

AnswerRelevancyMetric(threshold=0.5)是DeepEval提供的现成指标,用于根据提供的上下文评估LLM输出的相关性。

指标分数范围从0到1,threshold=0.5阈值最终决定您的测试是否通过。

高级用法

不使用Pytest集成进行评估

对于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的模块化设计使得任何人都可以轻松使用任何指标:

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)

批量评估数据集/测试用例

在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])

# 在CLI中运行,可以添加可选的-n标志以并行运行测试

# deepeval test run test_.py -n 4

或者不使用Pytest集成:

from deepeval import evaluate

...

evaluate(dataset, [answer_relevancy_metric])

# 或

dataset.evaluate([answer_relevancy_metric])

Confident AI上的实时评估

Confident AI是一个免费的Web平台,提供以下功能:

记录和查看DeepEval测试运行的所有测试结果/指标数据。

通过LLM跟踪调试评估结果。

比较和选择最佳超参数(提示模板、模型、分块大小等)。

创建、管理和集中化评估数据集。

在生产中跟踪事件并增强评估数据集以进行持续评估。

在生产中跟踪事件,查看评估结果和历史洞察。

要开始使用,请从CLI登录:

deepeval login

按照说明登录,创建您的账户,并将API密钥粘贴到CLI中。然后,再次运行您的测试文件:

deepeval test run test_chatbot.py

测试运行完成后,您应该会在CLI中看到一个链接。将其粘贴到浏览器中即可查看结果!

结语

DeepEval为LLM应用开发者提供了一个强大而灵活的评估框架。通过其丰富的指标、易用的API和与Confident AI平台的集成,DeepEval可以帮助您持续改进LLM应用的性能,确保输出质量,并在开发过程中做出数据驱动的决策。无论您是构建RAG系统、微调模型,还是探索新的LLM应用,DeepEval都是一个不可或缺的工具,可以帮助您构建更可靠、更高质量的AI应用。

要深入了解DeepEval的更多功能和高级用法,请查阅官方文档。如果您有任何问题或想讨论LLM评估,欢迎加入DeepEval的Discord社区。

通过DeepEval,让我们共同推动LLM技术的发展,构建更智能、更可靠的AI应用!

养生小贴士

牡丹常用的繁殖方法,播种/扦插/嫁接/分株/压条
啟的意思,啟的解释,啟的拼音,啟的部首,啟的笔顺
共享男友/出租男友(共享男友/出租男友)
💡 小知识

共享男友/出租男友(共享男友/出租男友)

📅 09-21 👍 16