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_<filename>.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应用!