LLM评估框架
文档 | 指标和功能 | 快速入门 | 集成 | Confident AI
DeepEval是一个简单易用的开源LLM评估框架。它类似于Pytest,但专门用于对LLM输出进行单元测试。DeepEval采用最新的研究成果,基于G-Eval、幻觉、答案相关性、RAGAS等指标评估LLM输出,这些指标使用LLM和各种其他NLP模型在本地机器上运行评估。
无论您的应用是通过RAG还是微调实现的,使用LangChain还是LlamaIndex,DeepEval都能满足您的需求。借助它,您可以轻松确定最佳超参数以改进RAG管道,防止提示偏移,甚至可以自信地从OpenAI过渡到托管自己的Llama2。
想讨论LLM评估吗?快来加入我们的Discord。
🔥 指标和功能
- 丰富多样的即用型LLM评估指标(均附带解释),由您选择的任何LLM、统计方法或在本地机器上运行的NLP模型提供支持:
- G-Eval
- 摘要
- 答案相关性
- 忠实度
- 上下文召回率
- 上下文精确度
- RAGAS
- 幻觉
- 毒性
- 偏见
- 等等
- 使用不到20行Python代码并行批量评估整个数据集。可以通过CLI以类似Pytest的方式进行,或者使用我们的
evaluate()
函数。 - 通过继承DeepEval的基础指标类,创建自定义指标,自动与DeepEval生态系统集成。
- 与任何 CI/CD环境无缝集成。
- 轻松使用不到10行代码对任何LLM进行流行的LLM基准测试,包括:
- MMLU
- HellaSwag
- DROP
- BIG-Bench Hard
- TruthfulQA
- HumanEval
- GSM8K
- 自动与Confident AI集成,在LLM(应用)的整个生命周期内进行持续评估:
- 记录评估结果并分析指标通过/失败情况
- 根据评估结果比较和选择最佳超参数(如提示模板、块大小、使用的模型等)
- 通过LLM跟踪调试评估结果
- 在一处管理评估测试用例/数据集
- 跟踪事件以识别生产环境中的实时LLM响应
- 生产环境中的实时评估
- 将生产事件添加到现有评估数据集以加强评估
(请注意,一些指标适用于RAG,而其他指标更适合微调用例。确保查阅我们的文档以选择正确的指标。)
🔌 集成
- 🦄 LlamaIndex,用于在CI/CD中对RAG应用程序进行单元测试
- 🤗 Hugging Face,用于在LLM微调过程中实现实时评估
🚀 快速入门
假设您的LLM应用是一个基于RAG的客户支持聊天机器人;以下是DeepEval如何帮助测试您所构建的内容。
安装
pip install -U deepeval
创建账户(强烈推荐)
虽然可选,但在我们的平台上创建一个账户将允许您记录测试结果,从而轻松跟踪各个迭代过程中的变化和性能。这一步是可选的,即使不登录也可以运行测试用例,但我们强烈建议您尝试一下。
要登录,请运行:
deepeval login
按照CLI中的说明创建账户,复制您的API密钥,并将其粘贴到CLI中。所有测试用例将自动记录(在此处查找有关数据隐私的更多信息)。
编写您的第一个测试用例
创建一个测试文件:
touch test_chatbot.py
打开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="如果这双鞋不合脚怎么办?",
# 将此替换为您的LLM应用程序的实际输出
actual_output="我们提供30天全额退款,无需额外费用。",
retrieval_context=["所有客户都有资格在30天内全额退款,无需额外费用。"]
)
assert_test(test_case, [answer_relevancy_metric])
将您的OPENAI_API_KEY
设置为环境变量(您也可以使用自定义模型进行评估,有关更多详细信息,请访问我们文档的这部分):
export OPENAI_API_KEY="..."
最后,在CLI中运行test_chatbot.py
:
deepeval test run test_chatbot.py
**您的测试应该已通过✅**让我们来分析一下发生了什么。
- 变量
input
模拟用户输入,actual_output
是根据此查询您的聊天机器人的预期输出的占位符。 - 变量
retrieval_context
包含来自您知识库的相关信息,AnswerRelevancyMetric(threshold=0.5)
是DeepEval提供的现成指标。它有助于根据提供的上下文评估LLM输出的相关性。 - 指标分数范围从0到1。
threshold=0.5
阈值最终决定您的测试是否通过。
阅读我们的文档获取有关如何使用其他指标、创建自定义指标以及与LangChain和LlamaIndex等其他工具集成的教程的更多信息。
不使用Pytest集成进行评估
或者,您可以不使用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="如果这双鞋不合脚怎么办?",
# 将此替换为您的LLM应用程序的实际输出
actual_output="我们提供30天全额退款,无需额外费用。",
retrieval_context=["所有客户都有资格在30天内全额退款,无需额外费用。"]
)
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="如果这双鞋不合脚怎么办?",
# 将此替换为您的LLM应用程序的实际输出
actual_output="我们提供30天全额退款,无需额外费用。",
retrieval_context=["所有客户都有资格在30天内全额退款,无需额外费用。"]
)
answer_relevancy_metric.measure(test_case)
print(answer_relevancy_metric.score)
# 大多数指标还提供解释
print(answer_relevancy_metric.reason)
请注意,一些指标适用于RAG管道,而其他指标适用于微调。确保使用我们的文档为您的用例选择正确的指标。
批量评估数据集/测试用例
在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
或者,虽然我们建议使用deepeval test run
,但您也可以不使用我们的Pytest集成来评估数据集/测试用例:
from deepeval import evaluate
...
evaluate(dataset, [answer_relevancy_metric])
# 或
dataset.evaluate([answer_relevancy_metric])
Confident AI上的实时评估
我们提供免费的网络平台供您:
- 记录并查看DeepEval测试运行的所有测试结果/指标数据。
- 通过LLM跟踪调试评估结果。
- 比较并选择最佳超参数(提示模板、模型、块大小等)。
- 创建、管理和集中您的评估数据集。
- 跟踪生产中的事件并扩充您的评估数据集以进行持续评估。
- 跟踪生产中的事件,查看评估结果和历史洞察。
Confident AI上的所有内容,包括如何使用Confident,都可以在此处找到。
首先,从CLI登录:
deepeval login
按照说明登录,创建您的账户,并将API密钥粘贴到CLI中。
现在,再次运行您的测试文件:
deepeval test run test_chatbot.py
测试运行完成后,您应该会在CLI中看到一个链接。将其粘贴到浏览器中以查看结果!
![ok](https://yellow-cdn.veclightyear.com/2b54e442/ba036c9f-f1a4-44e0-aba5-76ec