【译】轻松评估 AI 应用程序的质量

news/2025/1/30 14:01:32/文章来源:https://www.cnblogs.com/MingsonZheng/p/18693290

原文 | Wendy Breiding

翻译 | 郑子铭

在构建利用 AI 的应用程序时,能够有效地评估 SLM(小型语言模型)或 LLM(大型语言模型)的响应从未如此重要。

评估是指评估 AI 模型(例如 SLM 或 LLM)生成的响应的质量和准确性的过程。这涉及使用各种指标来衡量 AI 生成的响应的相关性、真实性、连贯性和完整性等方面。评估在测试中至关重要,因为它们有助于确保 AI 模型按预期运行,提供可靠和准确的结果,从而增强用户体验和满意度。

介绍 Microsoft.Extensions.AI.Evaluation,现在处于预览阶段

我们很高兴地宣布 Microsoft.Extensions.AI.Evaluation 库的预览版本。.NET 生态系统的这一新增功能旨在为开发人员提供高级工具来评估智能应用程序的有效性。这些库由以下 NuGet 包组成:

  • Microsoft.Extensions.AI.Evaluation – 定义支持评估的核心抽象和类型。
  • Microsoft.Extensions.AI.Evaluation.Quality – 包含可用于评估项目中 LLM 响应质量的评估器,包括相关性、真实性、完整性、流畅性、连贯性、等效性和扎实性。 Microsoft.Extensions.AI.Evaluation.Reporting – 包含对缓存 LLM 响应、存储评估结果和根据该数据生成报告的支持。
  • Microsoft.Extensions.AI.Evaluation.Console – 用于生成报告和管理评估数据的命令行 dotnet 工具。

为什么要使用 Microsoft.Extensions.AI.Evaluation?

Microsoft.Extensions.AI.Evaluation 库建立在最近发布的 Microsoft.Extensions.AI 抽象之上,旨在简化评估 .NET 智能应用程序质量和准确性的过程。

主要功能

无缝集成:这些库旨在与现有的 .NET 应用程序顺利集成,使您能够利用现有的测试基础架构和熟悉的语法来评估您的智能应用程序。使用您最喜欢的测试框架(例如 MSTest、xUnit 或 NUnit)和测试工作流(Test Explorer、dotnet test、CI/CD 管道)来评估您的应用程序。该库还通过将评估分数发布到遥测和监控仪表板,提供了对您的应用程序进行在线评估的简便方法。

全面的评估指标:这些库是与来自 Microsoft 和 GitHub 的数据科学研究人员合作构建的,并在流行的 Microsoft Copilot 体验上进行了测试,它们提供了针对相关性、真实性、完整性、流畅性、连贯性、等效性和扎实性的内置评估。它还为您提供了自定义添加您自己的评估的能力。

节省成本:借助库的响应缓存功能,AI 模型的响应将保留在缓存中。在后续运行中,只要请求参数(例如提示和模型端点)保持不变,响应就会从此缓存中提供,从而实现更快的执行速度和更低的成本。

可扩展且可配置:库在构建时考虑到了灵活性,允许您选择所需的组件。例如,如果您不想要响应缓存,则可以不用,并且可以定制报告以使其在您的环境中发挥最佳作用。库还允许进行广泛的自定义和配置,例如添加自定义指标和报告选项,确保可以根据项目的特定需求进行定制。

入门

  1. 将 Microsoft.Extensions.AI.Evaluation 集成到 .NET 应用程序的测试项目中非常简单。这里有一份快速入门指南。您可以在 eShopSupport 网站上查看此操作的完整示例。

将 Microsoft.Extensions.AI.Evaluation NuGet 包添加到您的测试项目中。

dotnet add package Microsoft.Extensions.AI.Evaluation
dotnet add package Microsoft.Extensions.AI.Evaluation.Quality
dotnet add package Microsoft.Extensions.AI.Evaluation.Reporting
  1. 为您的评估设置报告配置:
  • 报告配置定义了应作为每次评估的一部分包含的评估器集。以下示例包括五个评估器,其中四个(RelevanceTruthAndCompletenessEvaluatorCoherenceEvaluatorFluencyEvaluatorGroundednessEvaluator)在 Microsoft.Extensions.AI.Evaluation.Quality NuGet 包中定义。第五个 AnswerScoringEvaluator 是一个自定义评估器,在测试项目本身中定义。
  • 报告配置还定义了应该用于评估的 LLM 聊天完成端点(即 IChatClient)。
  • 想要获得一份关于所有最新更改如何影响应用程序功效的详细报告吗?报告配置还定义了应如何保留评估结果,以便您可以生成完整的 HTML 报告来查看回归和改进。
  • 最后,为了帮助降低成本,您还可以在报告配置中启用评估缓存。启用响应缓存后,只要请求参数不变,您的评估就会使用来自 LLM 的缓存响应,而不是每次都访问 LLM。

以下示例使用 DiskBasedReportingConfiguration,默认情况下启用响应缓存,并使用磁盘上的目录 (StoragePath) 来保存评估结果以及缓存的 LLM 响应。

static ReportingConfiguration GetReportingConfiguration()
{// Setup and configure the evaluators you would like to utilize for each AI chat.// AnswerScoringEvaluator is an example of a custom evaluator that can be added, while the others// are included in the evaluation library.// Measures the extent to which the model's generated responses are pertinent and directly related to the given queries.IEvaluator rtcEvaluator = new RelevanceTruthAndCompletenessEvaluator(new RelevanceTruthAndCompletenessEvaluator.Options(includeReasoning: true));// Measures how well the language model can produce output that flows smoothly, reads naturally, and resembles human-like language.IEvaluator coherenceEvaluator = new CoherenceEvaluator();// Measures the grammatical proficiency of a generative AI's predicted answer.IEvaluator fluencyEvaluator = new FluencyEvaluator();// Measures how well the model's generated answers align with information from the source dataIEvaluator groundednessEvaluator = new GroundednessEvaluator();// Measures the extent to which the model's retrieved documents are pertinent and directly related to the given queries.IEvaluator answerScoringEvaluator = new AnswerScoringEvaluator();var endpoint = new Uri(AzureOpenAIEndpoint);var oaioptions = new AzureOpenAIClientOptions();var azureClient = new AzureOpenAIClient(endpoint, new DefaultAzureCredential(), oaioptions);// Setup the chat client that is used to perform the evaluationsIChatClient chatClient = azureClient.AsChatClient(AzureOpenAIDeploymentName);Tokenizer tokenizer = TiktokenTokenizer.CreateForModel(AzureOpenAIModelName);var chatConfig = new ChatConfiguration(chatClient, tokenizer.ToTokenCounter(inputTokenLimit: 6000));// The DiskBasedReportingConfiguration caches LLM responses to reduce costs and// increase test run performance.return DiskBasedReportingConfiguration.Create(storageRootPath: StorageRootPath,chatConfiguration: chatConfig,evaluators: [rtcEvaluator,coherenceEvaluator,fluencyEvaluator,groundednessEvaluator,answerScoringEvaluator],executionName: ExecutionName);
}
  1. 您要评估的应用程序中使用的提示由评估库中的场景表示。每个评估都由一个测试方法表示。接下来,您将要评估的场景和测试方法添加到测试项目中。请注意,场景通常会运行多次以从应用程序中收集多个响应的样本。“场景运行”是指这些样本之一。
private static async Task EvaluateQuestion(EvalQuestion question, ReportingConfiguration reportingConfiguration, CancellationToken cancellationToken)
{// Create a new ScenarioRun to represent each evaluation run.await using ScenarioRun scenario = await reportingConfiguration.CreateScenarioRunAsync($"Question_{question.QuestionId}", cancellationToken: cancellationToken);// Run the sample through the assistant to generate a response.var responseItems = await backend!.AssistantChatAsync(new AssistantChatRequest(question.ProductId,null,null,null,[new() { IsAssistant = true, Text = question.Question }]),cancellationToken);var answerBuilder = new StringBuilder();await foreach (var item in responseItems){if (item.Type == AssistantChatReplyItemType.AnswerChunk){answerBuilder.Append(item.Text);}}var finalAnswer = answerBuilder.ToString();// Invoke the evaluatorsEvaluationResult evalResult = await scenario.EvaluateAsync([new ChatMessage(ChatRole.User, question.Question)],new ChatMessage(ChatRole.Assistant, finalAnswer),additionalContext: [new AnswerScoringEvaluator.Context(question.Answer)],cancellationToken);// Assert that the evaluator was able to successfully generate an analysisAssert.False(evalResult.Metrics.Values.Any(m => m.Interpretation?.Rating == EvaluationRating.Inconclusive), "Model response was inconclusive");// Assert that the evaluators did not report any diagnostic errorsAssert.False(evalResult.ContainsDiagnostics(d => d.Severity == EvaluationDiagnosticSeverity.Error), "Evaluation had errors.");}
[Fact]
public async Task EvaluateQuestion_Summit3000TrekkingBackpackStrapAdjustment()
{// This is the example question and answer that will be evaluated.var question = new EvalQuestion{QuestionId = 3,ProductId = 99,Question = "Hi there, I recently purchased the Summit 3000 Trekking Backpack and I\u0027m having issues with the strap adjustment. Can you provide me with the specified torque value for the strap adjustment bolts?",Answer = "15-20 Nm"};// Construct a reporting configuration to support the evaluationvar reportingConfiguration = GetReportingConfiguration();// Run an evaluation pass and record the results to the cache folderawait EvaluateQuestion(question, reportingConfiguration, 0, CancellationToken.None);
}

查看结果

设置完成后,您可以在测试资源管理器中运行测试以查看本地环境中的结果。

您还可以使用 dotnet 工具设置在 CLI 中运行的测试项目。

要为上次评估运行生成报告,请在命令行上使用以下 dotnet 工具。

dotnet tool install Microsoft.Extensions.AI.Evaluation.Console
dotnet aieval report --path <path\to\my\cache\storage> --output report.html

更多示例

要全面了解 Microsoft.Extensions.AI.Evaluation 库中提供的所有功能、概念和 API,请查看 dotnet/ai-samples 存储库中提供的 API 使用示例。这些示例被构建为单元测试的集合。每个单元测试都展示了一个特定的概念或 API,并以之前的单元测试中展示的概念和 API 为基础。

加入预览

我们相信这些库将为将 AI 集成到您的应用程序中、推动创新和提供有影响力的解决方案开辟新的可能性。

我们邀请您探索新的 Microsoft.Extensions.AI.Evaluation 预览库。如果您遇到任何困难或发现体验中缺少某些内容,请分享您的反馈。在我们继续完善和增强这些工具的过程中,您的见解非常宝贵。加入我们这一激动人心的旅程,帮助塑造 .NET 中 AI 的未来。

原文链接

Evaluate the quality of your AI applications with ease

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/876726.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

又在折磨自己

不是吕波是滤波过年好,但我最近真的好想死,听说卡尔曼吕波很重要,为了让自己死得快一点来学学卡尔曼吕波,我对我接下来的半个月充满了绝望。 新年第一天就这么丧可不好,振作起来,人活着总要学会开开心心的,然后少管一些不开心的事情,其实别人也并没有很重要对不对,希望…

Quid faciam?

「先生、人生相談です。 この先どうなら楽ですか。 そんなの誰もわかりはしないよなんて言われますか。 ほら、苦しさなんて欲しいわけない。 何もしないで生きていたい。 青空だけが見たいのは我儘ですか。 」每到这种时候都感觉要撑不住了。 此时此刻眼眶就不禁为黏糊糊的透明…

【牛客训练记录】牛客2025年除夕娱乐赛

训练情况赛后反思 据说是临时准备的,今年好像没啥乐子题,除了两道猜猜题 A题 构造一个字符串使得 jiaran 子串至少出现 114514 次,直接输出 114514 次 jiaran点击查看代码 #include <bits/stdc++.h> // #define int long long #define endl \nusing namespace std;voi…

互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库控制舵机并多方法播放表情

前言 前面两篇文章讲了.NET IoT相关的知识点,以及硬件的GPIO的一些概念,还有点亮两个屏幕的方法,这些让大家对.NET的用途有了新的认识,那我们这回继续讲解.NET IoT的知识点,以及介绍一些好玩的东西,例如让视频通过机器人的屏幕播放起来,还有机器人的身体也能通过我们的代…

数据库物理备份:保障数据完整性和业务连续性的关键策略

title: 数据库物理备份:保障数据完整性和业务连续性的关键策略 date: 2025/1/29 updated: 2025/1/29 author: cmdragon excerpt: 在现代企业中,数据被视为最重要的资产之一。因此,确保数据的安全性、完整性和可用性是每个数据库管理员(DBA)的首要任务。在数据管理的过程…

《Operating System Concepts》阅读笔记:p1-p1

《Operating System Concepts》学习第 1 天,p1-p1 总结,总计 1 页。 一、技术总结 无。 二、英语总结(生词:1) 1.intermediary (1)intermediary: inter-("between, among") + medius("middle") c.intermediary originally referred to something or so…

【持续更新中】线段树全集

引入 一个数列,单点修改(加),区间查询(和)。 上述问题有很多种解法,如树状数组、分块、平衡树等,今天的主题是著名的线段树。 正题 (不确保按难度升序排序,自己看着目录调顺序吧) 线段树基本原理 因为需要区间查询,所以我们希望有一些捷径能将部分的数的和提前算好…

读量子霸权18读后总结与感想兼导读

《量子霸权》读书笔记,读薄率约23.48%,涵盖量子宇宙、量子计算机等读厚方向。笔记详细记录了各章节内容,亮点包括量子计算介绍、与传统计算机比较、与AI关系及平行宇宙探讨。1. 基本信息 量子霸权【美】加来道雄 著中信出版集团股份有限公司,2024年4月出版1.1. 读薄率 书籍总…

C# WinForm 自定义类型转换器重新编译后修改属性提示 InstanceDescriptor 错误的解决方案

当我们编写自定义的类型转换器比如从 TypeConverter、ExpandableObjectConverter 等继承,首次编译后,修改属性值是正常的,当再次编译后,再次修改属性则会提示如下错误: 属性“属性名”的代码生成失败。错误是: “类型转换器类名”无法将“属性名”转换为“System.Componen…

简单的javaweb

在这里我们可以看到springboots的基本结构 controller(控制器) 负责处理HTTP请求,调用相应的服务层方法,并返回视图或数据。 DailyReportController、InternalMessageController、PersonInfoController:这些是具体的控制器类,分别处理与日报、内部消息和个人信息相关的请…

AMD核显运行DeepseekR1-7b:使用mlc-llm框架,利用vulkan推理

任何支持vulkan的显卡都能跑! 本文使用的是Radeon890M核显,内存有多大就等于显存有多大。劲啊 1. 安装mlc-llm 官方文档 windows+vulkan: conda activate your-environment pip install --pre -U -f https://mlc.ai/wheels mlc-llm-nightly-cpu mlc-ai-nightly-cpulinux+vulk…