ragas官方文档中文版(四十)
操作指南本节中的每个指南都针对您作为有经验的用户在使用 Ragas 时可能遇到的实际问题提供了专注的解决方案。这些指南设计得简洁直接为您的问题提供快速解决方案。我们假设您对 Ragas 的概念有基本了解且能够熟练使用。如果不是请先浏览 快速入门 Get Started部分。DSPy 优化器高级提示词优化DSPyOptimizer 使用 DSPy 的 MIPROv2 算法为 Ragas 指标提供最先进的提示词优化。它结合了指令优化和示例优化能够找到比简单进化方法更好的提示词。概述DSPyOptimizer 使用 MIPROv2带排序结果的多提示词指令提议通过以下方式优化指标提示词指令优化 生成并测试多个提示词变体示例优化 自动选择有效的少样本示例组合搜索 同时探索指令和示例空间这通常会产生比简单的 GeneticOptimizer 更好的结果尤其是当您拥有高质量的标注数据时。安装DSPy 是一个可选依赖项。使用以下命令安装# Using uv (recommended)uv addragas[dspy]# Using pippip installragas[dspy]基本用法前提条件您需要标注数据集 指标的真实分数ground truth带提示词的指标 使用 PydanticPrompt 的指标大多数 Ragas 指标LLM 用于优化的 LLM建议使用 gpt-4o-mini 以节省成本快速开始fromopenaiimportOpenAIfromragas.llmsimportllm_factoryfromragas.metrics.collectionsimportFaithfulnessfromragas.optimizersimportDSPyOptimizerfromragas.configimportInstructionConfig# Setup LLM for optimizationclientOpenAI()llmllm_factory(gpt-4o-mini,clientclient)# Initialize metricmetricFaithfulness(llmllm)# Create annotated dataset (see below for format)datasetcreate_annotated_dataset()# Configure DSPy optimizerconfigInstructionConfig(llmllm,optimizerDSPyOptimizer(num_candidates10,# Try 10 prompt variationsmax_bootstrapped_demos5,# Generate up to 5 examplesmax_labeled_demos5,# Use up to 5 human annotations))# Optimize the metrics promptsmetric.optimize_prompts(dataset,config)# Save optimized prompts for reusemetric.save_prompts(optimized_faithfulness.json)标注数据集格式DSPy 优化器需要真实标注ground truthfromragas.dataset_schemaimport(PromptAnnotation,SampleAnnotation,SingleMetricAnnotation)# Create prompt annotationsprompt_annotationPromptAnnotation(prompt_input{user_input:...,response:...},prompt_output{score:0.9},# Actual metric outputedited_outputNone,# Or corrected output if needed)# Create sample with annotationssampleSampleAnnotation(metric_input{user_input:...,response:...},metric_output0.9,# Ground truth scoreprompts{faithfulness_prompt:prompt_annotation},is_acceptedTrue,# Whether to use in optimization)# Create datasetdatasetSingleMetricAnnotation(namefaithfulness,samples[sample,...]# Need 20-50 samples for best results)高级配置优化参数控制 MIPROv2 行为optimizerDSPyOptimizer(num_candidates20,# More candidates better prompts, higher costmax_bootstrapped_demos10,# Auto-generated few-shot examplesmax_labeled_demos10,# Human-annotated examples to useinit_temperature1.0,# Exploration temperature (0.0-2.0))参数指南参数默认值描述成本影响num_candidates10要尝试的提示词变体数量高 - 线性扩展max_bootstrapped_demos5自动生成的示例数量中 - 增加 LLM 调用max_labeled_demos5使用的人工标注数量低 - 使用现有数据init_temperature1.0探索随机性无 - 仅算法层面成本优化MIPROv2 优化的成本可能很高。可通过以下方式降低成本# Budget-conscious configurationbudget_optimizerDSPyOptimizer(num_candidates5,# Fewer candidatesmax_bootstrapped_demos2,# Fewer generated examplesmax_labeled_demos3,# More reliance on annotationsinit_temperature0.5,# Less exploration)# Use cheaper LLM for optimizationcheap_llmllm_factory(gpt-4o-mini,clientclient)configInstructionConfig(llmcheap_llm,optimizerbudget_optimizer)成本估算每个候选提示词约 10-50 次 LLM 调用每个自举示例约 5-10 次调用总计 num_candidates * 30 max_bootstrapped_demos * 7 次调用近似值与 GeneticOptimizer 比较何时使用 DSPyOptimizer✅ 使用 DSPyOptimizer 的情况您拥有 50 高质量标注示例您需要最佳的指标准确性您可以承担 100-500 次 LLM 调用来进行优化您正在优化关键的生产指标何时使用 GeneticOptimizer✅ 使用 GeneticOptimizer 的情况您的标注数据有限20 个示例您需要更快、更便宜的优化您正在进行初始原型开发简单的指令优化已足够并排比较fromragas.optimizersimportGeneticOptimizer,DSPyOptimizer# Genetic optimizer - simpler, faster, cheapergenetic_configInstructionConfig(llmllm,optimizerGeneticOptimizer(max_steps50,# Evolution stepspopulation_size10,# Population per generation))# DSPy optimizer - advanced, better results, more expensivedspy_configInstructionConfig(llmllm,optimizerDSPyOptimizer(num_candidates10,max_bootstrapped_demos5,max_labeled_demos5,))# Compare resultsmetric_geneticFaithfulness(llmllm)metric_genetic.optimize_prompts(dataset,genetic_config)metric_dspyFaithfulness(llmllm)metric_dspy.optimize_prompts(dataset,dspy_config)# Evaluate on holdout settest_scores_geneticmetric_genetic.batch_score(test_set)test_scores_dspymetric_dspy.batch_score(test_set)典型结果:指标GeneticOptimizerDSPyOptimizer改进幅度忠实度Faithfulness0.820.898.5%答案相关性Answer Relevancy0.750.8412%上下文精确度Context Precision0.780.8610%处理多个指标使用相同方法优化多个指标fromragas.metrics.collectionsimport(Faithfulness,AnswerRelevancy,ContextPrecision)metrics{faithfulness:Faithfulness(llmllm),answer_relevancy:AnswerRelevancy(llmllm),context_precision:ContextPrecision(llmllm),}# Optimize each metricforname,metricinmetrics.items():print(fOptimizing{name}...)# Load metric-specific datasetdatasetload_annotated_dataset(name)# Optimizemetric.optimize_prompts(dataset,dspy_config)# Savemetric.save_prompts(foptimized_{name}.json)故障排除导入错误如果您遇到 ImportError: DSPy optimizer requires dspy-ai # Install the DSPy extrauv addragas[dspy]# orpip installragas[dspy]优化耗时过长减少 LLM 调用次数fast_optimizerDSPyOptimizer(num_candidates3,# Minimum viablemax_bootstrapped_demos1,max_labeled_demos3,)结果不佳常见原因数据不足 需要 20 高质量标注标注质量低 确保真实分数ground truth准确LLM 选择错误 使用 gpt-4o 或更好的模型进行优化配置不当 先尝试默认参数内存问题MIPROv2 在处理大型数据集时可能会占用大量内存# Process in smaller batchesfromragas.dataset_schemaimportSingleMetricAnnotationdefoptimize_in_batches(dataset,batch_size20):# Split datasetbatches[dataset.select(range(i,min(ibatch_size,len(dataset.samples))))foriinrange(0,len(dataset.samples),batch_size)]# Optimize on first batch for speedbest_batchbatches[0]metric.optimize_prompts(best_batch,dspy_config)最佳实践数据质量多样化示例 覆盖边缘情况和常见场景准确标注 仔细检查真实分数ground truth足够数量 生产指标需要 50 示例优化策略从小规模开始 先使用 3-5 个候选提示词测试迭代优化 根据需要逐步增加参数验证 始终在保留集holdout set上测试缓存 保存优化后的提示词以避免重新运行生产部署# 1. Optimize offlinemetricFaithfulness(llmoptimization_llm)metric.optimize_prompts(training_dataset,dspy_config)metric.save_prompts(production_faithfulness.json)# 2. Load in productionproduction_metricFaithfulness(llmproduction_llm)production_metric.load_prompts(production_faithfulness.json)# 3. Use for evaluationresultsproduction_metric.batch_score(production_samples)另请参阅优化器 API 参考 - 完整的 API 文档指标自定义 - 创建自定义指标DSPy 文档 - 了解更多关于 DSPy 的信息