DeepEval入门示例:快速开始代码解析
还在为LLM应用的质量评估而烦恼吗?DeepEval作为专为大型语言模型设计的评估框架,能够帮助你像使用Pytest一样轻松地对LLM输出进行单元测试。本文将深入解析DeepEval的快速入门示例,带你一步步掌握核心概念和代码实现。
快速开始:安装与环境配置
安装DeepEval
首先通过pip安装DeepEval:
pip install -U deepeval
创建账户(推荐)
使用DeepEval平台可以生成可分享的云端测试报告,完全免费且无需额外代码配置:
deepeval login
按照CLI提示创建账户、复制API密钥并粘贴到CLI中,所有测试用例将自动记录。
第一个测试用例解析
测试文件结构
创建测试文件 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():
# 创建G-Eval评估指标
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
)
# 创建LLM测试用例
test_case = LLMTestCase(
input="What if these shoes don't fit?",
# 替换为你的LLM应用实际输出
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密钥:
export OPENAI_API_KEY="your_api_key_here"
运行测试
在CLI中执行测试:
deepeval test run test_chatbot.py
核心组件深度解析
LLMTestCase结构
LLMTestCase是DeepEval的核心数据结构,包含以下关键字段:
| 字段名 | 类型 | 描述 | 必填 |
|---|---|---|---|
| input | str | 用户输入 | ✅ |
| actual_output | str | LLM实际输出 | ✅ |
| expected_output | str | 期望输出 | ❌ |
| retrieval_context | List[str] | 检索上下文 | ❌ |
| context | List[str] | 上下文信息 | ❌ |
| tools_called | List[ToolCall] | 调用的工具 | ❌ |
GEval评估指标
GEval是基于研究的评估指标,支持自定义评估标准:
correctness_metric = GEval(
name="Correctness", # 指标名称
criteria="Determine if the actual output is correct...", # 评估标准
evaluation_params=[ # 评估参数
LLMTestCaseParams.ACTUAL_OUTPUT,
LLMTestCaseParams.EXPECTED_OUTPUT
],
threshold=0.5 # 通过阈值
)
评估参数类型
DeepEval支持多种评估参数类型:
class LLMTestCaseParams(Enum):
INPUT = "input" # 用户输入
ACTUAL_OUTPUT = "actual_output" # 实际输出
EXPECTED_OUTPUT = "expected_output" # 期望输出
CONTEXT = "context" # 上下文
RETRIEVAL_CONTEXT = "retrieval_context" # 检索上下文
TOOLS_CALLED = "tools_called" # 调用工具
进阶使用模式
批量评估数据集
DeepEval支持批量评估多个测试用例:
from deepeval.dataset import EvaluationDataset, Golden
dataset = EvaluationDataset(goldens=[
Golden(input="What's the weather like today?"),
Golden(input="How do I return an item?")
])
@pytest.mark.parametrize("test_case", dataset)
def test_customer_chatbot(test_case: LLMTestCase):
answer_relevancy_metric = AnswerRelevancyMetric(threshold=0.5)
assert_test(test_case, [answer_relevancy_metric])
组件级评估
对于复杂的LLM应用,可以进行组件级评估:
from deepeval.tracing import observe, update_current_span
@observe(metrics=[correctness])
def inner_component():
update_current_span(test_case=LLMTestCase(
input="...",
actual_output="..."
))
return
评估指标详解
常用评估指标对比
| 指标名称 | 适用场景 | 阈值范围 | 核心功能 |
|---|---|---|---|
| GEval | 通用评估 | 0-1 | 基于自定义标准的综合评估 |
| AnswerRelevancy | RAG系统 | 0-1 | 答案相关性评估 |
| Faithfulness | 事实一致性 | 0-1 | 输出与上下文一致性 |
| Hallucination | 幻觉检测 | 0-1 | 检测虚构内容 |
指标评分机制
所有指标的评分范围都是0-1,通过threshold参数设置通过阈值:
实际应用场景
RAG系统评估
对于检索增强生成(RAG)系统,可以使用专门的评估指标:
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric
# RAG评估组合
rag_metrics = [
AnswerRelevancyMetric(threshold=0.7),
FaithfulnessMetric(threshold=0.6)
]
test_case = LLMTestCase(
input="What is the return policy?",
actual_output=rag_system_response,
retrieval_context=retrieved_documents
)
对话系统评估
对于多轮对话系统,使用对话特定的评估指标:
from deepeval.metrics import ConversationCompletenessMetric
conversation_metric = ConversationCompletenessMetric(
threshold=0.8,
evaluation_steps=[
"Check if all user queries are addressed",
"Verify logical flow of conversation"
]
)
最佳实践指南
测试用例设计原则
- 明确输入输出:每个测试用例应有清晰的输入和期望输出
- 提供充足上下文:为评估指标提供必要的检索上下文
- 设置合理阈值:根据业务需求调整通过阈值
- 多样化测试场景:覆盖边界情况和常见用户查询
性能优化建议
# 并行运行测试
deepeval test run test_file.py -n 4 # 使用4个进程
# 超参数记录
@deepeval.log_hyperparameters(model="gpt-4", prompt_template="...")
def hyperparameters():
return {"temperature": 1, "chunk_size": 500}
常见问题排查
错误处理模式
try:
assert_test(test_case, metrics)
except AssertionError as e:
print(f"Test failed: {e}")
# 查看详细评估原因
for metric in metrics:
print(f"{metric.name}: {metric.reason}")
调试技巧
# 查看评估详情
metric.measure(test_case)
print(f"Score: {metric.score}")
print(f"Reason: {metric.reason}")
总结与展望
DeepEval为LLM应用评估提供了强大而灵活的工具集。通过本文的代码解析,你应该已经掌握了:
✅ 基础安装和配置:快速搭建评估环境
✅ 测试用例创建:理解LLMTestCase的核心结构
✅ 评估指标使用:掌握GEval等关键指标
✅ 批量评估技巧:高效处理多个测试场景
✅ 最佳实践:遵循行业标准的设计模式
DeepEval正在快速发展,未来将支持更多高级功能如DAG自定义指标、防护栏等。现在就开始使用DeepEval,为你的LLM应用质量保驾护航!
下一步行动:
- 尝试运行文中的示例代码
- 根据你的业务场景定制评估指标
- 集成到CI/CD流水线中实现自动化测试
- 使用DeepEval平台分享和对比测试结果
记住:高质量的LLM应用始于严格的评估流程,DeepEval让你的评估工作事半功倍!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



