ragas官方文档中文版(四十七)
操作指南本节中的每个指南都针对您作为有经验的用户在使用 Ragas 时可能遇到的实际问题提供了专注的解决方案。这些指南设计得简洁直接为您的问题提供快速解决方案。我们假设您对 Ragas 的概念有基本了解且能够熟练使用。如果不是请先浏览 快速入门 Get Started部分。如何为您的用例评估新的大语言模型LLM当新的大语言模型LLM发布时您可能想确定它在您的特定用例中是否优于当前模型。本指南展示了如何使用 Ragas 框架在两个模型之间运行准确性比较。您将完成的内容完成本指南后您将设置结构化评估以比较两个 LLM在真实业务任务上评估模型性能生成详细结果以指导模型选择决策获得可重复使用的评估循环可在新模型发布时重新运行评估场景我们将使用折扣计算作为测试用例给定客户资料计算适当的折扣百分比并解释推理过程。此任务需要规则应用和推理能力——这些技能能够区分不同模型的能力。注意 您可以将此方法调整为适用于您的应用程序的任何用例。 完整代码 此示例的完整源代码可在 GitHub 上获取设置您的环境和 API 访问首先安装包含基准 LLM 示例代码的 ragas-examples 包pip install ragas[examples]接下来请确保您已配置好 API 凭证export OPENAI_API_KEYyour_actual_api_keyLLM 应用程序我们已在示例包中为您设置了一个简单的 LLM 应用程序使您可以专注于评估而非构建应用程序本身。该应用程序根据业务规则计算客户折扣。以下是定义折扣计算逻辑的系统提示词SYSTEM_PROMPT You are a discount calculation assistant. I will provide a customer profile and you must calculate their discount percentage and explain your reasoning. Discount rules: - Age 65 OR student status: 15% discount - Annual income $30,000: 20% discount - Premium member for 2 years: 10% discount - New customer ( 6 months): 5% discount Rules can stack up to a maximum of 35% discount. Respond in JSON format only: { discount_percentage: number, reason: clear explanation of which rules apply and calculations, applied_rules: [list, of, applied, rule, names] } 您可以使用示例客户资料测试应用程序fromragas_examples.benchmark_llm.promptimportrun_prompt# Test with a sample customer profilecustomer_profile Customer Profile: - Name: Sarah Johnson - Age: 67 - Student: No - Annual Income: $45,000 - Premium Member: Yes, for 3 years - Account Age: 3 years resultawaitrun_prompt(customer_profile)print(result)输出{discount_percentage:25,reason:Sarah qualifies for a 15% discount due to age (67). She also gets a 10% discount for being a premium member for over 2 years. The total stacking of 15% and 10% discounts results in 25%. No other discounts apply based on income or account age.,applied_rules:[Age 65,Premium member for 2 years]}检查评估数据集本次评估我们构建了一个包含以下测试用例的合成数据集结果明确的简单案例规则边界的边缘案例信息模糊的复杂场景每个案例包含customer_profile 输入数据expected_discount 预期折扣百分比description 案例复杂度指示示例数据集结构添加 id 列以便于比较ID客户资料预期折扣描述1Martha 是一位70岁的退休人员喜欢园艺。她最近从未参加过任何学术课程年薪5万美元九年前注册了我们的服务从未升级到高级会员。15仅符合老年人条件2Arjun19岁是一名全日制计算机科学本科生。他的兼职工作年收入约4.5万美元。他一年前开设了账户没有高级会员资格。15仅符合学生条件3Cynthia40岁的自由艺术家年收入约2.5万美元。她不在任何地方学习五年前订阅了我们的基础计划从未升级到高级会员。20仅符合低收入条件要为您的用例自定义数据集请创建一个 datasets/ 目录并添加您自己的 CSV 文件。更多信息请参考《核心概念 - 评估数据集》。最好从您的应用程序中采样真实数据来创建数据集。如果无法获取真实数据您可以使用大语言模型LLM生成合成数据。由于我们的用例略有复杂我们建议使用 gpt-5-high 等模型它可以生成更准确的数据。务必手动审查和验证您使用的数据。注意虽然这里的示例数据集大约有10个案例以保持指南简洁但实际评估可以从20-30个样本开始然后逐步迭代改进到50-100个样本范围以获得更可靠的评估结果。确保广泛覆盖您的智能体可能面临的不同场景包括边缘案例和复杂问题。初始准确率不需要达到100%——使用结果进行错误分析迭代优化提示词、数据和工具并持续改进。加载数据集defload_dataset():Load the dataset from CSV file. Downloads from GitHub if not found locally.importurllib.request current_diros.path.dirname(os.path.abspath(__file__))dataset_pathos.path.join(current_dir,datasets,discount_benchmark.csv)# Download dataset from GitHub if it doesnt exist locallyifnotos.path.exists(dataset_path):os.makedirs(os.path.dirname(dataset_path),exist_okTrue)urllib.request.urlretrieve(https://raw.githubusercontent.com/vibrantlabsai/ragas/main/examples/ragas_examples/benchmark_llm/datasets/discount_benchmark.csv,dataset_path)returnDataset.load(namediscount_benchmark,backendlocal/csv,root_dircurrent_dir)数据集加载器会检查 CSV 文件是否本地存在。如果未找到它会自动从 GitHub 下载。指标函数通常最好使用简单的指标。您应该使用与您的用例相关的指标。更多关于指标的信息可以在《核心概念 - 指标》中找到。评估使用此准确度指标来评分每个响应discrete_metric(namediscount_accuracy,allowed_values[correct,incorrect])defdiscount_accuracy(prediction:str,expected_discount):Check if the discount prediction is correct.importjson parsed_jsonjson.loads(prediction)predicted_discountparsed_json.get(discount_percentage)expected_discount_intint(expected_discount)ifpredicted_discountexpected_discount_int:returnMetricResult(valuecorrect,reasonfCorrectly calculated discount{expected_discount_int}%)else:returnMetricResult(valueincorrect,reasonfExpected discount{expected_discount_int}%; Got discount{predicted_discount}%)实验结构每个模型评估都遵循以下实验模式experiment()asyncdefbenchmark_experiment(row,model_name:str):# Get model responseresponseawaitrun_prompt(row[customer_profile],modelmodel_name)# Parse response (strict JSON mode expected)try:parsed_jsonjson.loads(response)predicted_discountparsed_json.get(discount_percentage)exceptException:predicted_discountNone# Score the responsescorediscount_accuracy.score(predictionresponse,expected_discountrow[expected_discount])return{**row,model:model_name,response:response,predicted_discount:predicted_discount,score:score.value,score_reason:score.reason}运行实验使用基线模型和候选模型运行评估实验。我们将比较以下示例模型基线模型Baseline gpt-4.1-nano-2025-04-14候选模型Candidate gpt-5-nano-2025-08-07fromragas_examples.benchmark_llm.evalsimportbenchmark_experiment,load_dataset# Load datasetdatasetload_dataset()print(fDataset loaded with{len(dataset)}samples)# Run baseline experimentbaseline_resultsawaitbenchmark_experiment.arun(dataset,namegpt-4.1-nano-2025-04-14,model_namegpt-4.1-nano-2025-04-14)# Calculate and display accuracybaseline_accuracysum(1forrinbaseline_resultsifr[score]correct)/len(baseline_results)print(fBaseline Accuracy:{baseline_accuracy:.2%})# Run candidate experimentcandidate_resultsawaitbenchmark_experiment.arun(dataset,namegpt-5-nano-2025-08-07,model_namegpt-5-nano-2025-08-07)# Calculate and display accuracycandidate_accuracysum(1forrincandidate_resultsifr[score]correct)/len(candidate_results)print(fCandidate Accuracy:{candidate_accuracy:.2%})每个实验会在 experiments/ 目录下保存一个 CSV 文件包含每行的结果包括id 、 model 、 response 、 predicted_discount 、 score 、 score_reason示例实验输出为了可读性只显示少数列注意尽可能固定并记录精确的模型快照/版本例如使用 gpt-4o-2024-08-06 而非仅使用 gpt-4o 。提供商定期更新别名名称不同快照之间性能可能会变化。您可以在提供商的模型文档中找到可用的快照例如参见 OpenAI 的模型目录。在结果中包含快照使未来的比较公平且可重现。比较结果使用不同模型运行实验后并排比较它们的性能fromragas_examples.benchmark_llm.evalsimportcompare_inputs_to_output# Compare the two experiment results# Update these paths to match your actual experiment output filesoutput_pathcompare_inputs_to_output(inputs[experiments/gpt-4.1-nano-2025-04-14.csv,experiments/gpt-5-nano-2025-08-07.csv])print(fComparison saved to:{output_path})此比较过程读取两个实验文件打印每个模型的准确率创建一个新的 CSV 文件包含并排比较的结果比较文件显示测试用例详情客户资料、预期折扣对于每个模型其响应、是否正确以及原因输出gpt-4.1-nano-2025-04-14Accuracy:50.00%gpt-5-nano-2025-08-07Accuracy:90.00%Comparison saved to:experiments/20250820-150548-comparison.csv使用合并的 CSV 文件分析结果在本次示例运行中筛选出一个模型优于另一个模型的案例这些案例包括“老年人且新客户”、“学生且新客户”、“仅学生”、“仅高级会员2年以上”。每个模型响应中的原因字段显示了它给出该输出的原因。比较 CSV 的示例行为了可读性显示有限列新模型发布时重新运行一旦此评估与您的项目共存它就成为一个可重复的检查。当新的 LLM 发布时如今通常每周发布将其作为候选模型插入重新运行相同的评估以与当前基线进行比较。解读结果并做出决策需要关注的内容基线准确率与候选模型准确率及其差异。本次运行示例基线 50%5/10候选模型 90%9/10差异 40%。如何读取行浏览两个模型意见不一致的行。使用每行的 score_reason 查看为何被标记为正确/不正确。寻找模式例如遗漏的规则叠加、像接近65岁这样的边缘案例、精确的收入阈值。超越准确率检查成本和延迟。如果对于您的用例来说太慢或太昂贵更高的准确率可能不值得。做出决策如果新模型在您的重要案例上明显更准确且符合您的成本/延迟需求则切换。如果增益很小、失败影响关键案例或者成本/延迟不可接受则保持现状。在本示例中我们会切换到 gpt-5-nano-2025-08-07 。它将准确率从 50% 提高到 90%40%并修复了关键的失败模式遗漏的规则叠加、边界条件。如果其延迟/成本符合您的约束它是更好的默认选择。适应您的用例要为您特定的应用程序评估模型您可以使用 GitHub 代码作为模板并将其调整为您的用例。Ragas 框架会自动处理编排、并行执行和结果聚合帮助您专注于评估和您的用例