原文 | 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 库建立在最近发布的 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 data
IEvaluator 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 evaluations
IChatClient 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 evaluators
EvaluationResult 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 analysis
Assert.False(evalResult.Metrics.Values.Any(m => m.Interpretation?.Rating == EvaluationRating.Inconclusive), "Model response was inconclusive"); // Assert that the evaluators did not report any diagnostic errors
Assert.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 evaluation
var reportingConfiguration = GetReportingConfiguration(); // Run an evaluation pass and record the results to the cache folder
await 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)

【译】轻松评估 AI 应用程序的质量的更多相关文章

  1. Microsoft.VisualBasic.dll的妙用and 改善C#公共程序类库质量的10种方法

    Microsoft.VisualBasic.dll的妙用(开发中肯定会用到哦) 前言 做过VB开发的都知道,有一些VB里面的好的函数在.NET里面都没有,而Microsoft.VisualBasic. ...

  2. 在Mac上也能轻松拥有Windows应用程序的简便方法

    一般而言,如果我们想要在Windows的环境下下载一款软件那是件很方便的事情.只要我们登陆软件的官网进行下载即可.但是如果我们使用的是Mac OS系统,很多用户就会发现,许多软件会出现不兼容的情况. ...

  3. (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)

    前言:从上周发布教程的微博反应情况来看,cocos2der们对于游戏的内存问题还是非常关心的.本文是上一篇博文的续,旨在教大家如何减少cocos2d程序的大小. 全文如下: 减少你的程序的大小 把纹理 ...

  4. [置顶] AI大行其道,你准备好了吗?—谨送给徘徊于转行AI的程序员

    前言 近年来,随着 Google 的 AlphaGo 打败韩国围棋棋手李世乭之后,机器学习尤其是深度学习的热潮席卷了整个IT界.所有的互联网公司,尤其是 Google 微软,百度,腾讯等巨头,无不在布 ...

  5. Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...

  6. 自动绘图AI:程序如何画出动漫美少女

    序 全新的图形引擎与AI算法,高效流畅地绘出任何一副美丽的图像. IDE:VisualStudio 2015 Language:VB.NET/C# Graphics:EDGameEngine 第一节 ...

  7. 提高你的C#程序编码质量

    摘自陆敏技之<编写高质量代码:改善C#程序的157个建议>,编写C#程序代码时应考虑代码效率.安全和美观,可参考下述建议.想成为一名合格的搬砖工,牢记吧!! 基本语言要素 1.正确操作字符 ...

  8. AI:**消灭程序员需要一百年吗?

    这篇博文真的很长,不过挺有意思.关于智能机器人的发展前景还是很广的,因为每一步都异常艰难,而什么时候可以终止还无法预料,所以程序员没办法失业啊! 转自于图灵社区:http://www.ituring. ...

  9. ZAO 换脸不安全?用 python 轻松实现 AI

    最近两天一款名为 「ZAO」 的 App 刷爆了朋友圈,它的主打功能是 AI 换脸,宣称「只需一张照片,就能出演天下好戏」 : 现实中不能实现当明星的梦,在这个 App 里你可以,想演谁演谁.新鲜.好 ...

  10. 【译】ASP.NET应用程序和页面生命周期

    为何翻译此文 一.此文是Code Project社区2010年4月ASP.NET板块的最佳文章,说明了此文的份量: 二.锻炼自己的英文技术文章翻译能力,提高英文技术文档阅读能力: 三.了解掌握ASP. ...

随机推荐

  1. Hibernate二级缓存 ---- 最佳实践

    2010年11月7号,立冬,星期天.北京外面风好大,躲在家里整理一下这篇文章,发出来与大家分享,对大家有帮助是我最高兴的事儿. 不要想当然的认为使用了Hibernate的二级缓存就一定能够提高应用程序 ...

  2. java 中的Unsafe

    在阅读AtomicInteger的源码时,看到了这个类:sum.msic.Unsafe,之前从没见过.所以花了点时间google了一下. Unsafe的源码:http://www.docjar.com ...

  3. Java线程:线程的调度-守护线程——Java线程:线程的调度-合并——Java线程:新特征-障碍器——Java线程:大总结

    Java线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.   守护线程使用的情况较少,但并非无用,举例 ...

  4. Vue.js 其他指令

    1.ref标识 通过给HTML标签或者组件标签设定ref属性,根据他的属性值来访问这个HTML元素或者组件 语法:this.$refs.属性值 //为p标签设置ref属性 <div id=&qu ...

  5. windows版 nvm 1.1.7 安装(填坑)

    参考https://www.jianshu.com/p/cbf4f76ba0bb安装,注意事项: 1. 最好下载Setup安装版本,带安装界面,这样可以填写安装路径以及Nodejs路径,省去了改文件的 ...

  6. OpenEuler文件被锁定的解决方法|网卡修改不生效的解决办法

    欧拉系统(含centos等linux系统)修改文件,一直提示readonly,不让改.原因有可能是这个文件给锁定了. 解决方法: 使用以下两个命令: • chattr 改变文件属性 • lsattr ...

  7. Shiro简单入门+个人理解

    身为一个刚刚进入开发行业的学生,进入公司就开始了Shiro框架的应用,特此在这里写下收获. Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权 ...

  8. 数据万象 | AIGC 存储内容安全解决方案

    AIGC(人工智能生产内容) 已经成为与PGC(专业生产内容).UGC(用户生产内容)并驾齐驱的内容生产方式.由于 AI 的特性,AIGC在创意.个性化.生产效率等方面具有独特的优势,这些优势可以使得 ...

  9. 中电金信:GienTech动态|丰收之秋,公司多项目获得荣誉

    ​ 中电金信微电影<妙"笔"生花>获国资委表彰 ​ 近日,国务院国资委在京举行中央企业社会主义核心价值观主题微电影(微视频)展映发布活动.中电金信作品<妙&quo ...

  10. 【MyBatis】学习笔记13:延迟加载(懒加载)

    目录 Mybatis13:延迟加载(懒加载) 测试 测试1 测试2 部分特殊情况处理 Mybatis13:延迟加载(懒加载) 延迟加载是分步查询的好处,默认是不开启延迟加载的,要开启需要在核心配置文件 ...