DeepEval黄金标准:Golden数据创建方法

【免费下载链接】deepeval The Evaluation Framework for LLMs 【免费下载链接】deepeval 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval

引言:为什么需要高质量的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数据与测试用例的区别至关重要:

mermaid

四种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数据创建方法,你可以:

  1. 快速启动:即使没有现成数据,也能快速生成评估数据集

【免费下载链接】deepeval The Evaluation Framework for LLMs 【免费下载链接】deepeval 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐