AI与.NET技术实操系列(九):总结篇 ── 探讨.NET 开发 AI 生态:工具、库与未来趋势

news/2025/3/27 5:23:26/文章来源:https://www.cnblogs.com/code-daily/p/18779363

1. 引言

本文作为本系列的最后一篇,旨在全面探讨 .NET 生态中与 AI 相关的工具、库、框架和资源,帮助开发者了解如何在 .NET 环境中开发 AI 应用。我们将分析 Microsoft 的 AI 战略、核心工具和库(如 ML.NET、Azure AI SDK 和 Semantic Kernel)、.NET 9 的新特性,以及社区资源和未来趋势,从而在总体上为 .NET 开发者提供一个清晰的 AI 开发路线图。

2. .NET AI 生态概述

.NET AI 生态的现状

Microsoft 长期以来一直是 AI 技术的领导者,其 AI 战略涵盖了从云服务到开发者工具的多个层面。Azure AI 平台提供了丰富的服务,包括机器学习、认知服务和预训练模型,开发者可以通过这些服务快速将 AI 功能集成到应用中。此外,Microsoft 还推出了 ML.NET,这是一个专为 .NET 开发者设计的开源机器学习框架,使开发者能够在熟悉的 .NET 生态中构建和部署机器学习模型,而无需切换到 Python 等其他语言。这种战略布局体现了 Microsoft 将 AI 普及化并融入开发者日常工作的愿景。

.NET AI 生态的组成部分

.NET AI生态由多个核心组件构成,每个组件在 AI 应用的开发过程中都扮演着重要角色:

  • ML.NET:一个跨平台的开源机器学习框架,支持开发者使用 C# 或 F# 构建自定义机器学习模型。
  • Azure AI SDK:提供对 Azure AI 服务的访问,包括 Azure OpenAI、Azure Cognitive Services 等,帮助开发者轻松集成云端 AI 功能。
  • Semantic Kernel:一个开源 SDK,专注于构建基于大型语言模型(LLM)的应用,与 .NET 生态紧密集成。
  • Microsoft.Extensions.AI:一个预览包,提供统一的 AI 服务接口,简化 AI 功能的集成。

这些组件共同构成了一个强大的生态系统,使得 .NET 开发者能够灵活应对从简单预测到复杂深度学习的各种 AI 任务。

3. 核心工具和库

ML.NET

ML.NET是 Microsoft 推出的一款开源机器学习框架,专为 .NET 开发者设计。它降低了机器学习的入门门槛,使开发者无需深厚的数学或 AI 背景即可构建和部署模型。ML.NET 支持多种任务,包括分类、回归、聚类、推荐系统和异常检测等。

功能和特点

  • 易用性:通过高层次的 API,开发者可以快速定义和训练模型。
  • 与 .NET 集成:完全基于 C# 或 F#,无需学习新语言。
  • 灵活的数据处理:支持多种数据源,如 CSV、JSON 和数据库。
  • 模型解释性:内置工具帮助开发者理解模型的预测逻辑。

使用 ML.NET 进行模型训练和部署

以下是一个典型的ML.NET开发流程:

  1. 数据准备:加载数据集并进行预处理,如归一化或缺失值填补。
  2. 模型训练:选择算法(如决策树或神经网络),训练模型。
  3. 模型评估:使用测试数据评估模型的准确性或误差。
  4. 部署:将模型保存并集成到 .NET 应用中,例如 Web API 或桌面程序。

例如,开发者可以使用 ML.NET 构建一个预测房价的模型,只需几行 C# 代码即可完成数据加载、模型训练和预测。

Azure AI SDK

Azure AI SDK是 Microsoft 提供的一组工具和库,用于访问 Azure 的云端 AI 服务。这些服务包括 Azure OpenAI、Azure Cognitive Services 和 Azure Machine Learning,为开发者提供了强大的预构建 AI 功能。

作用和优势

  • 多样化的 AI 服务:涵盖自然语言处理(NLP)、计算机视觉、语音识别等领域。
  • 易于集成:提供 REST API 和 SDK,支持跨语言开发。
  • 企业级支持:具备高可用性、安全性和合规性。

支持的 AI 服务

  • Azure OpenAI:提供对 OpenAI 模型(如 GPT-4)的访问,用于生成文本或回答问题。
  • Azure Cognitive Services:包括文本分析、图像识别、语音转文本等功能。
  • Azure Machine Learning:支持自定义模型的训练和部署。

通过Azure AI SDK,开发者可以在几分钟内为应用添加语音识别或情感分析功能,无需从头构建模型。

Semantic Kernel

Semantic Kernel是一个开源 SDK,旨在帮助开发者构建基于 AI 的应用,尤其是与大型语言模型相关的应用。它由 Microsoft 开发,与 .NET 生态无缝集成。

概念和应用

  • AI 编排:支持将多个 AI 服务组合成复杂的工作流。
  • 插件系统:允许开发者创建自定义插件,扩展功能。
  • 语言支持:使用 C# 编写,适合 .NET 开发者。

例如,开发者可以使用Semantic Kernel构建一个智能客服系统,将用户输入传递给某个模型生成回复,并结合自定义逻辑处理特定需求。

ONNX Runtime:高性能跨平台模型部署

ONNX Runtime是微软开发的高性能推理引擎,用于在多种平台上部署深度学习模型。它通过 ONNX 格式支持 TensorFlow、PyTorch 等框架训练的模型,提供跨平台、高性能的推理能力,适用于云端和边缘设备。

架构与工作原理

ONNX Runtime采用模块化架构,包括模型加载、图优化和执行引擎,支持 CPU、GPU 等多种执行提供者。它加载 ONNX 模型后,优化计算图并高效执行推理,适配不同硬件环境。

在 .NET 中的使用

开发者可通过 Microsoft.ML.OnnxRuntime NuGet 包在 .NET 中使用 ONNX Runtime。步骤包括加载模型、准备输入数据、运行推理和处理输出。例如:

var model = new InferenceSession("model.onnx");
var inputTensor = new DenseTensor<float>(new[] { 1, 3, 224, 224 });
var inputs = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("input", inputTensor) };
var results = model.Run(inputs);
var output = results.First().AsTensor<float>();

性能优化

ONNX Runtime支持图优化、硬件加速(如 GPU)和模型量化,显著提升推理效率,适合资源受限场景。

与其他工具集成

它可与 ML.NET 集成,部署训练模型,或与 Azure AI 服务结合,实现云端推理,增强 .NET AI 应用的灵活性。

ONNX Runtime为 .NET 开发者提供了一个强大工具,加速 AI 模型部署与应用开发。

4. Microsoft.Extensions.AI

Microsoft.Extensions.AI

Microsoft.Extensions.AI为.NET开发者提供了一个统一的抽象层,用于将AI服务集成到应用程序和库中。它构建在.NET的依赖注入和配置模式之上,与现有的.NET应用程序无缝衔接。

设计目标

它的核心目标是简化AI服务的调用过程,使得开发者无需深入了解每个AI服务的具体实现细节即可使用其功能。

  • 统一接口:为不同的AI服务提供一致的API,降低学习和使用成本。
  • 灵活性:支持在不同AI服务之间切换,而无需大幅修改代码。
  • 生态协作:鼓励.NET生态中的包作者将此抽象集成到各自的库中,促进一致性和互操作性。

在.NET AI生态中,Microsoft.Extensions.AI类似于一个桥梁,连接应用程序与多样化的AI服务,成为开发者构建智能应用的得力助手。

主要功能

  • AI服务调用:支持文本生成、图像处理、嵌入生成等常见AI任务。
  • 请求管理:处理AI服务的请求参数和响应数据,包括流式响应。
  • 中间件支持:允许开发者自定义AI请求的处理逻辑,例如日志记录或缓存。

通过这些功能,Microsoft.Extensions.AI使得开发者能够以一致的方式访问本地或云端的AI服务。

主要接口和API

Microsoft.Extensions.AI主要包括Microsoft.Extensions.AI.AbstractionsMicrosoft.Extensions.AI这两个库,其核心在于其抽象层,主要包括以下接口和类:

  • IChatClient:用于与聊天模型交互以实现智能对话和文本生成。
using Microsoft.Extensions.AI;IChatClient client = new SampleChatClient(
    new Uri("http://coolsite.ai"), "target-ai-model");var response = await client.GetResponseAsync("What is AI?");Console.WriteLine(response.Message);
  • IEmbeddingGenerator:用于生成文本的嵌入向量以支持语义搜索和推荐等功能。
using Microsoft.Extensions.AI;IEmbeddingGenerator<string, Embedding<float>> generator =
    new SampleEmbeddingGenerator(
        new Uri("http://xxxxxxx.ai"), "target-ai-model");foreach (var embedding in await generator.GenerateAsync(["What is AI?", "What is .NET?"]))
{
    Console.WriteLine(string.Join(", ", embedding.Vector.ToArray()));
}

如何简化AI服务集成

Microsoft.Extensions.AI通过以下方式简化AI服务的集成:

  • 隐藏实现细节:不同的AI服务(如OpenAI、Azure AI)有各自的API和参数,Microsoft.Extensions.AI通过抽象层屏蔽这些差异。
  • 支持服务切换:开发者只需更改配置即可切换到其他AI服务,无需重写业务逻辑。
  • 中间件灵活性:允许在请求处理中添加自定义逻辑,例如身份验证或错误重试。
  • 与.NET生态兼容:遵循.NET的依赖注入和配置模式,便于集成到现有项目中。

统一抽象层的好处

Microsoft.Extensions.AI的统一抽象层带来了以下好处:

  • 降低学习曲线:开发者只需掌握一组API即可使用多种AI服务,无需深入研究每个AI服务的文档和实现细节。
  • 易于维护:当AI服务更新时,只需更新底层实现,业务逻辑保持不变。
  • 代码可复用:相同的代码逻辑可应用于不同的AI服务,减少重复工作。
  • 灵活切换:在项目中更换AI服务提供商时,只需调整配置而无需重构。
  • 支持混合使用:可以在同一应用中结合多种AI服务,例如本地模型用于低延迟任务,云端模型用于复杂计算。
  • 统一错误处理:通过抽象层集中管理异常和错误。
  • 测试友好:支持模拟和单元测试。

一个使用OpenAI的项目如果需要切换到Azure AI,只需更改服务配置,而核心代码无需修改。

.NET 9 中的 AI 相关新功能

AI 构建模块

.NET 9通过Microsoft.Extensions.AIMicrosoft.Extensions.VectorData包引入了统一的 C# 抽象层,简化了与 AI 服务的交互。这些服务包括小型和大型语言模型(SLMs 和 LLMs)、嵌入、向量存储及中间件,为开发者提供灵活的 AI 集成工具。

TensorPrimitives 与 Tensor

  • TensorPrimitives:方法从 40 个扩展至近 200 个,支持类似 MathINumber<T> 的数值操作,面向跨度(span)数据。新增 SIMD 优化提升性能,泛型重载支持实现特定接口的任意类型 T
  • **Tensor**:基于 TensorPrimitives,提供高效数学运算,支持与 ML.NET、TorchSharp、ONNX Runtime 等 AI 库的无复制互操作。提供索引和切片等高效数据操作,在 .NET 9 中为实验性功能。

ML.NET

ML.NET 4.0 增强了 AI 开发体验:

  • 新增 MLContext 编程配置选项。
  • 支持以流(Stream)加载 ONNX 模型。
  • 改进 DataFrame 功能。
  • 新增 tokenizer 支持。
  • (实验性)TorchSharp 移植 Llama 和 Phi 模型家族。
  • (实验性)CausalLM 管道 API。

Tokenizers

Microsoft.ML.Tokenizers 库为文本编码和解码提供支持,适用于 AI 场景中的上下文管理、成本计算和预处理。新版本支持多种模型:

  • Tiktoken:支持 GPT(3、3.5、4、4o、o1)和 Llama3。
  • Llama:基于 SentencePiece,支持 Llama 和 Mistral。
  • CodeGen:支持代码生成模型如 codegen-350M-mono。
  • Phi2:基于 CodeGen,支持 Microsoft Phi2。
  • WordPiece 及 Bert:支持 Bert 模型如 optimum--all-MiniLM-L6-v2。

6. .NET AI 主要工具和库的比较

以下表格列举了 .NET 中常用的 AI SDK 和库,比较了它们的特点、适用场景和优缺点:

工具/库 特点 适用场景 优缺点
ML.NET 易用,与 .NET 集成紧密 自定义机器学习模型 优点:简单易用;缺点:功能有限
Azure AI SDK 丰富的云端 AI 服务 云端 AI 功能集成 优点:功能强大;缺点:依赖网络
TensorFlow.NET 支持 TensorFlow 模型 深度学习应用 优点:灵活性高;缺点:学习曲线陡峭
CNTK 强大的深度学习工具包 复杂深度学习任务 优点:性能优异;缺点:文档不足
Accord.NET 专注于图像和音频处理 图像识别、音频分析 优点:专业性强;缺点:社区较小

这些工具各有侧重,开发者可根据项目需求选择合适的工具。例如,ML.NET 适合快速原型开发,而 TensorFlow.NET 更适合需要深度学习的高级应用。

7. 开发实践和案例

AI 应用开发流程

在 .NET 中开发 AI 应用通常包括以下步骤:

  1. 需求分析:明确 AI 任务,如预测、分类或生成内容。
  2. 数据准备:收集数据并进行清洗和预处理。
  3. 模型选择和训练:选择算法并训练模型。
  4. 模型评估:测试模型性能并调整参数。
  5. 部署和集成:将模型部署到生产环境并集成到应用中。

应用案例

  • 自然语言处理:使用 Azure Cognitive Services 分析客户评论的情感,帮助企业优化服务。
  • 图像识别:使用 ML.NET 训练一个模型,识别生产线上的缺陷产品。
  • ……

8. 社区和学习资源

学习资源

官方学习资源

  • Microsoft Learn:提供从入门到高级的 AI 教程,如 dotnet-ai-ecosystem。
  • ai-samples:https://github.com/dotnet/ai-samples/tree/main/src/microsoft-extensions-ai-evaluation/api

GitHub

GitHub 上的 dotnet-ai-resources 仓库是一个宝贵的资源集合,包含了与 .NET AI 开发相关的库、工具和示例。

主要内容
  • 推荐库:如 OllamaSharp、AutoGen.NET、Azure AI Inference SDK 等。
  • 示例项目:提供从简单分类到复杂深度学习的代码示例。
  • 学习资源:官方文档和社区教程的链接。

开发者社区

SciSharp Stack

  • 地址https://scisharp.github.io/SciSharp/

.NET AI 社区活跃度高,也会举办技术研讨会,开发者可以通过关注社区动态,积极参加这些活动以获取最新动态和技术支持。

9. 未来趋势和展望

AI 技术的发展趋势

AI 技术正向深度学习、生成式 AI 和强化学习等方向发展。这些趋势要求更高的计算能力和更灵活的开发工具。

.NET 在 AI 领域的机遇

scisharpstack.org 随着 .NET 生态的完善,开发者可以利用其跨平台能力和丰富工具集,在 AI 领域占据一席之地。掌握 .NET AI 技能将为职业发展带来更多机会。

10. 总结

.NET 作为一个强大的开发平台,在 AI 领域提供了丰富的工具和资源。从 ML.NET 的本地机器学习到 Azure AI 的云端能力,到 Semantic Kernel 的创新应用,再到 Microsoft.Extensions.AI 的统一集成,.NET 开发者拥有构建智能应用的全部必要工具。

随着 .NET 9 的发布,其在 AI 开发中的功能将进一步提升。

开发者应该深入探索 .NET AI 生态,积极参与社区活动,并开始构建自己的 AI 项目。

11. 参考文献

  • Microsoft Learn: .NET AI Ecosystem
  • ai-samples
  • Microsoft Learn: AI Extensions
  • GitHub: dotnet-ai-resources
  • What's new in .NET 9
  • Groove Technology: AI for .NET Developers
  • Restack: AI Libraries for C#

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

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

相关文章

windows 查询内存型号

1、通过任务管理器-性能 2、运行-cmd wmic memorychip get Speed,SMBIOSMemoryType根据返回的 SMBIOSMemoryType 值判断:24 表示 DDR3 26 表示 DDR4 34 表示 DDR5。‌2

更换数据库连接池失败

更换数据库连接池失败 将数据库连接池更换为druid,一直无法更换,保持默认的HiKari原因: 配置文件代码错误,在下图中,可以看见一个黄线的警告,这里出现了关键词错误.这个错误是导致出现配置失败的原因. 教训:配置文件的警告需要引起足够的重视.

SANA-Sprint:基于连续时间一致性蒸馏的单步扩散模型,0.1秒即可生成图像

扩散模型已成为现代文本到图像 (T2I) 生成技术的核心,能够生成高质量图像,但其迭代式推理过程导致生成速度缓慢。多数模型通常需要 20–50 个去噪步骤,这严重制约了其在实时应用中的部署。 现有的蒸馏技术旨在加速扩散模型的采样过程,然而,这些方法往往会引入稳定性问题,…

华为无线网络射频调优及WLAN跨VLAN的三层漫游示例

1.业务需求企业用户通过WLAN接入网络,以满足移动办公的最基本需求。 在覆盖区域内移动发生跨VLAN的漫游时,不影响用户的业务使用。2.组网需求AC组网方式:旁挂三层组网。DHCP部署方式:AC作为DHCP服务器为AP分配IP地址。 汇聚交换机SwitchB作为DHCP服务器为STA分配IP地址。业…

大型通用电子制造执行系统(MES)

​简介:系统参考西门子MOM智能制造Opcenter工业软件制造执行系统Camstar电子套件人机料法环数据建模业务对象和车间生产执行事务逻辑,采用面向对象分层设计与C#编程开发:包含电子制造企业人机料法环业务数据建模实体对象,数据实体持久化映射,数据工厂会话配置,车间生产服务…

物料需求波动大、生产计划变化频繁?一文教你用工厂ERP系统MRP精确计算生产物料!

今天咱们来聊一聊一个大多数工厂都会遇到的问题: 物料需求波动大 和 生产计划变化频繁 。 这些问题可能让你在生产过程中经常“踩雷”,比如物料没采购够,生产停工; 或者物料买多了,库存积压,浪费了钱。有没有办法避免这些问题呢? 答案是: 有 !那就是通过工厂的 ERP系统…

docker使用GPU总结

在docker容器中使用显卡 一 docker19.03以前的事情 1.1 指定显卡硬件名 最初的容器中使用显卡,需要指定硬件名。经历了两种方式使用lxc驱动程序运行docker守护进程,以便能够修改配置并让容器访问显卡设备(非常麻烦,参考链接中最久远的回答)Docker 0.9中放弃了lxc作为默认执…

掌握 K8s Pod 基础应用 (二)

Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程:pod创建过程运行初始化容器(init container)过程运行主容器(main container)容器启动后钩子(post start)、容器终止前钩子(pre stop)容器的存活性探测(liveness prob…

叉车人员防撞报警系统

叉车人员防撞报警系统采用机器视觉图像感知技术,通过人工智能深度学习技术,对行人和车辆的精确检测,叉车人员防撞报警系统实现对人体和车辆检测分析识别,在机器视觉图像景中,通过特征识别算法建立人体和车辆图像模型,完成自动识别目标,并能以视觉图像智能分析精确区分干…

课堂在线点名助手

适合老师上课随机提问学生的小工具。前情概要 为提高程序的普适性,学生姓名用学号代替。 在线点卯在线提问点名助手body0 { font-family: Arial, sans-serif; background-image: url(https://img2024.cnblogs.com/blog/992978/202503/992978-20250324092106498-1518746661.jpg…

随堂笔记之Java方法

此内容源自B站狂神说Java基础的课后笔记与总结,用于复习和查看,因此写得比较简陋,不太适合萌新学习 方法定义方法调用 调用方法:对象名.方法名(实参列表)方法返回一个值的时候,方法调用通常被当做一个值 方法返回值是void,方法调用是一条语句*值传递和引用传递: Java全…

3.24

Android Studio 启动模拟器出现“Timed out after 300seconds waiting for emulator to come online“解决方案 问题: Timed out after 300seconds waiting for emulator to come online.**解决方法: 检查自己的Emulator是否是最新版本,如果不是检查更新到最新