DeepEval黄金标准:Golden数据创建方法
在LLM(Large Language Model,大语言模型)评估生态系统中,Golden数据(黄金标准数据)是评估LLM应用性能的基石。你是否曾面临以下困境:- 缺乏足够的测试数据来全面评估LLM应用?- 手动创建测试用例耗时耗力且难以保证质量?- 测试数据覆盖不全,无法发现LLM应用的潜在问题?- 评估结果缺乏一致性和可重复性?DeepEval的Golden数据创建方法正是为解...
DeepEval黄金标准:Golden数据创建方法
引言:为什么需要高质量的Golden数据?
在LLM(Large Language Model,大语言模型)评估生态系统中,Golden数据(黄金标准数据)是评估LLM应用性能的基石。你是否曾面临以下困境:
- 缺乏足够的测试数据来全面评估LLM应用?
- 手动创建测试用例耗时耗力且难以保证质量?
- 测试数据覆盖不全,无法发现LLM应用的潜在问题?
- 评估结果缺乏一致性和可重复性?
DeepEval的Golden数据创建方法正是为解决这些问题而生。本文将深入探讨如何利用DeepEval框架创建高质量的Golden数据,为你的LLM评估提供坚实的数据基础。
Golden数据核心概念
什么是Golden数据?
在DeepEval中,Golden数据是评估数据集的构建块,包含以下核心元素:
class Golden(BaseModel):
input: str # 用户输入/查询
expected_output: Optional[str] = None # 期望的理想输出
context: Optional[List[str]] = None # 相关上下文信息
retrieval_context: Optional[List[str]] = None # 检索上下文
# 其他元数据字段...
Golden vs Test Case的区别
理解Golden数据与测试用例的区别至关重要:
四种Golden数据创建方法
DeepEval提供了四种灵活的Golden数据生成策略,满足不同场景需求。
方法一:从文档生成(generate_goldens_from_docs)
这是最常用的方法,直接从知识库文档中提取信息生成Golden数据:
from deepeval.synthesizer import Synthesizer
from deepeval.dataset import EvaluationDataset
# 初始化合成器
synthesizer = Synthesizer(model="gpt-4.1")
# 从多种文档格式生成Golden数据
goldens = synthesizer.generate_goldens_from_docs(
document_paths=[
'产品手册.pdf',
'知识库.docx',
'FAQ.txt',
'技术文档.md'
],
include_expected_output=True, # 包含期望输出
max_goldens_per_context=2 # 每个上下文最多生成2个Golden
)
# 创建评估数据集
dataset = EvaluationDataset(goldens=goldens)
print(f"成功生成 {len(dataset.goldens)} 个Golden数据")
方法二:从上下文生成(generate_goldens_from_contexts)
当你已有预处理好的上下文时,可以使用此方法:
# 预定义的上下文列表
contexts = [
["我们的产品提供30天无条件退款政策", "所有客户均可享受此政策"],
["技术支持工作时间为工作日9:00-18:00", "紧急问题可联系值班工程师"],
["最新版本v2.1.0修复了登录安全问题", "建议所有用户尽快升级"]
]
# 从上下文生成Golden数据
goldens = synthesizer.generate_goldens_from_contexts(
contexts=contexts,
include_expected_output=True,
max_goldens_per_context=3
)
方法三:从零生成(generate_goldens_from_scratch)
当没有现有知识库时,可以从零开始生成:
# 生成100个全新的Golden数据
goldens = synthesizer.generate_goldens_from_scratch(
num_goldens=100 # 生成数量
)
方法四:从现有Golden生成(generate_goldens_from_goldens)
基于现有Golden数据进行扩展和增强:
# 假设已有一些基础Golden数据
base_goldens = [Golden(input="如何申请退款?", expected_output="您可以在账户设置中提交退款申请")]
# 基于现有Golden生成变体
augmented_goldens = synthesizer.generate_goldens_from_goldens(
goldens=base_goldens,
max_goldens_per_golden=5, # 每个基础Golden生成5个变体
include_expected_output=True
)
Golden数据质量优化策略
进化配置(EvolutionConfig)
通过进化技术提升Golden数据的复杂度和真实性:
from deepeval.synthesizer.config import EvolutionConfig, Evolution
evolution_config = EvolutionConfig(
evolutions={
Evolution.REASONING: 0.3, # 推理进化:30%
Evolution.MULTICONTEXT: 0.2, # 多上下文进化:20%
Evolution.CONCRETIZING: 0.2, # 具体化进化:20%
Evolution.CONSTRAINED: 0.2, # 约束进化:20%
Evolution.COMPARATIVE: 0.1 # 比较进化:10%
},
num_evolutions=3 # 每个Golden进化3次
)
synthesizer = Synthesizer(evolution_config=evolution_config)
过滤配置(FiltrationConfig)
确保生成的Golden数据达到质量阈值:
from deepeval.synthesizer.config import FiltrationConfig
filtration_config = FiltrationConfig(
synthetic_input_quality_threshold=0.7, # 质量阈值0.7
max_quality_retries=5, # 最多重试5次
critic_model="gpt-4.1" # 使用GPT-4.1进行质量评估
)
synthesizer = Synthesizer(filtration_config=filtration_config)
样式配置(StylingConfig)
定制Golden数据的格式和风格:
from deepeval.synthesizer.config import StylingConfig
styling_config = StylingConfig(
scenario="电商客服机器人场景",
task="处理用户咨询和售后服务请求",
input_format="用户使用中文提出的自然语言问题",
expected_output_format="专业、友好、准确的中文回复"
)
synthesizer = Synthesizer(styling_config=styling_config)
实战:创建电商客服Golden数据集
步骤1:准备知识库文档
收集以下文档作为知识源:
- 产品目录和说明书
- 售后服务政策文档
- 常见问题解答(FAQ)
- 用户手册和指南
步骤2:配置合成器
from deepeval.synthesizer import Synthesizer
from deepeval.synthesizer.config import EvolutionConfig, FiltrationConfig, StylingConfig
from deepeval import Evolution
# 综合配置
evolution_config = EvolutionConfig(
evolutions={
Evolution.REASONING: 0.25,
Evolution.MULTICONTEXT: 0.25,
Evolution.CONCRETIZING: 0.25,
Evolution.CONSTRAINED: 0.25
},
num_evolutions=2
)
filtration_config = FiltrationConfig(
synthetic_input_quality_threshold=0.6,
max_quality_retries=3
)
styling_config = StylingConfig(
scenario="电商平台在线客服",
task="解答产品咨询、处理售后问题、提供购物建议",
input_format="中文自然语言问题,包含具体情境和需求",
expected_output_format="专业、准确、友好的中文回复,包含解决方案"
)
synthesizer = Synthesizer(
model="gpt-4.1",
evolution_config=evolution_config,
filtration_config=filtration_config,
styling_config=styling_config,
max_concurrent=20
)
步骤3:生成Golden数据
# 从文档生成Golden数据
document_paths = [
"产品知识库/手机产品手册.pdf",
"政策文档/退款退货政策.docx",
"常见问题/电商FAQ.txt",
"用户指南/购物流程指南.md"
]
goldens = synthesizer.generate_goldens_from_docs(
document_paths=document_paths,
include_expected_output=True,
max_goldens_per_context=2
)
print(f"生成成功!共创建 {len(goldens)} 个高质量Golden数据")
步骤4:质量检查和优化
# 查看生成的数据质量
import pandas as pd
df = synthesizer.to_pandas()
print(df[['input', 'expected_output', 'context', 'synthetic_input_quality']].head())
# 筛选高质量Golden
high_quality_goldens = [
golden for golden in goldens
if golden.additional_metadata.get('synthetic_input_quality', 0) > 0.7
]
print(f"高质量Golden数量: {len(high_quality_goldens)}")
Golden数据管理最佳实践
数据版本控制
from deepeval.dataset import EvaluationDataset
import datetime
# 创建带版本信息的数据集
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
dataset = EvaluationDataset(goldens=high_quality_goldens)
# 保存到本地
dataset.save_as(
file_type="json",
directory="./datasets",
file_name=f"ecommerce_customer_service_{timestamp}"
)
# 推送到Confident AI平台
dataset.push(alias="电商客服评估数据集_v1.0")
数据分布分析
确保Golden数据覆盖各种场景和难度级别:
# 分析Golden数据分布
def analyze_golden_distribution(goldens):
analysis = {
"total_count": len(goldens),
"quality_scores": [],
"input_lengths": [],
"context_counts": []
}
for golden in goldens:
analysis["quality_scores"].append(
golden.additional_metadata.get('synthetic_input_quality', 0)
)
analysis["input_lengths"].append(len(golden.input))
analysis["context_counts"].append(len(golden.context) if golden.context else 0)
return analysis
distribution = analyze_golden_distribution(high_quality_goldens)
print(f"平均质量分数: {sum(distribution['quality_scores'])/len(distribution['quality_scores']):.2f}")
高级技巧:多轮对话Golden数据
对于对话型应用,需要使用ConversationalGolden:
from deepeval.dataset import ConversationalGolden
conversational_goldens = [
ConversationalGolden(
scenario="用户咨询产品价格和库存",
expected_outcome="用户获得准确的价格信息和库存状态",
user_description="潜在买家,对产品感兴趣但犹豫不决",
context=["产品A售价299元,库存充足", "产品B售价499元,库存紧张"]
),
ConversationalGolden(
scenario="用户申请退货退款",
expected_outcome="用户成功提交退货申请并获得退款指引",
user_description="不满意产品的用户,希望退货",
context=["7天无理由退货政策", "退款处理需要3-5个工作日"]
)
]
multi_turn_dataset = EvaluationDataset(goldens=conversational_goldens)
常见问题与解决方案
问题1:生成质量不稳定
解决方案:调整过滤阈值和进化配置
# 提高质量要求
filtration_config = FiltrationConfig(
synthetic_input_quality_threshold=0.8,
max_quality_retries=5
)
# 减少进化复杂度
evolution_config = EvolutionConfig(num_evolutions=1)
问题2:生成速度慢
解决方案:优化并发设置
synthesizer = Synthesizer(
max_concurrent=50, # 增加并发数
async_mode=True # 确保异步模式开启
)
问题3:上下文相关性不足
解决方案:调整上下文生成参数
from deepeval.synthesizer.config import ContextConstructionConfig
context_config = ContextConstructionConfig(
chunk_size=512, # 减小分块大小
similarity_threshold=0.6, # 提高相似度阈值
max_context_size=2 # 减少上下文数量
)
结语:构建你的Golden数据流水线
通过DeepEval的Golden数据创建方法,你可以:
- 快速启动:即使没有现成数据,也能快速生成评估数据集
更多推荐
所有评论(0)