Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AI与.NET技术实操系列(九):总结篇 ── 探讨.NET 开发 AI 生态:工具、库与未来趋势

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

作者头像
AI.NET 极客圈
发布于 2025-03-24 11:00:27
发布于 2025-03-24 11:00:27
14300
代码可运行
举报
文章被收录于专栏:AI.NET极客圈AI.NET极客圈
运行总次数:0
代码可运行

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。步骤包括加载模型、准备输入数据、运行推理和处理输出。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:用于与聊天模型交互以实现智能对话和文本生成。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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:用于生成文本的嵌入向量以支持语义搜索和推荐等功能。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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: https://learn.microsoft.com/zh-cn/dotnet/ai/dotnet-ai-ecosystem
  • ai-samples:https://github.com/dotnet/ai-samples
  • Microsoft Learn: AI Extensions: https://learn.microsoft.com/zh-cn/dotnet/ai/ai-extensions
  • GitHub: dotnet-ai-resources: https://github.com/jmatthiesen/dotnet-ai-resources
  • What's new in .NET 9: https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview
  • Groove Technology: AI for .NET Developers: https://groovetechnology.com/blog/technologies/ai-for-net-developers/
  • Restack: AI Libraries for C#: https://www.restack.io/p/ai-libraries-knowledge-answer-ai-libraries-csharp-cat-ai
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI.NET极客圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVA多线程详解
分为两种:一类是守护线程,典型是垃圾回收GC;第二类是用户线程,当JVM中都是JVM守护线程,那么当前的JVM将退出。
阮键
2019/08/07
4320
十五、多线程【黑马JavaSE笔记】
假如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的
啵啵鱼
2022/11/23
2900
十五、多线程【黑马JavaSE笔记】
Java之多线程-------入门
是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。
楠羽
2022/11/18
3760
Java之多线程-------入门
Java 线程与多线程
一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也是性能最高的。
Mirror王宇阳
2020/11/12
1.9K0
java线程详解(史上最全)
根据本人多年从业以及学习经验,录制了一套最新的Java精讲视频教程,如果你现在也在学习Java,在入门学习Java的过程当中缺乏系统的学习教程,你可以加QQ群654631948领取下学习资料,面试题,开发工具等,群里有资深java老师做答疑,每天也会有基础部分及架构的直播课,也可以加我的微信renlliang2013做深入沟通,只要是真心想学习Java的人都欢迎。
全栈程序员站长
2022/09/08
2690
java线程详解(史上最全)
多线程详解
假如计算机只有一个CPU,那么CPU在某一时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性的。
秋落雨微凉
2022/10/25
4510
多线程
线程类 Java使用 java.lang.Thread 类代表线程,所有的线程对象都必须是Thread类或其子类的实例 每个线程的作用是 完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码 Java使用线程执行体来代表这段程序流。
JokerDJ
2023/11/27
1950
多线程
JUC 多线程基础
如果一个线程对共享变量的修改,能够被其它线程看到,那么就能说明共享变量在线程之间是可见的。如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。
万能青年
2019/08/30
5300
JUC 多线程基础
第二十四天 多线程-多线程&线程安全【悟空教程】
进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
Java帮帮
2018/07/26
6540
第二十四天 多线程-多线程&线程安全【悟空教程】
Java多线程(全知识点)
概述:本文为Java多线程的基础知识点的第一部分,主要包括,通过继承Thread来实现进程,线程调度,线程控制,run(),start(),join(),sleep(),setDaemon()方法的使用,获取线程名字currentThread(),线程同步,非静态锁,静态方法的锁,Lock锁,生产者与消费者问题,卖票问题。
GeekLiHua
2025/01/21
1410
Java多线程(全知识点)
Java 多线程之 Runnable VS Thread 及其资源共享问题
对于 Java 多线程编程中的 implements Runnable 与 extends Thread,部分同学可能会比较疑惑,它们之间究竟有啥区别和联系呢?他们是不是没啥区别随便选呢?实际中究竟该
用户1177713
2018/02/24
9200
Java 多线程之 Runnable VS Thread 及其资源共享问题
第二十五天 多线程-常用方法&线程池【悟空教程】
System.out.println(getName() + " ==== " + i );
Java帮帮
2018/07/26
3900
第二十五天 多线程-常用方法&线程池【悟空教程】
java_线程、同步、线程池
Java使用 java.lang.Thread 类代表线程,所有的线程对象都必须是Thread类或其子类的实例
咕咕星
2020/08/19
8570
java_线程、同步、线程池
Java-多线程(下)
    线程的同步与死锁是多线程里面最需要重点理解的概念。这种操作的核心问题在于:每一个线程对象轮番强占资源
Java架构师必看
2021/11/11
2500
day18-多线程&线程同步&死锁
在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。
张哥编程
2024/12/13
900
java基础第十六篇之多线程
1:线程的概念 进程(任务):一个正在运行的程序 进程的调度:CPU来决定什么时候该运行哪个进程 (时间片轮流法) 线程在一个应用程序中,同时,有多个不同的执行路径,是进程中的实际运作单位。 好处是提高程序效率。
海仔
2019/08/05
2900
Android多线程:继承Thread类、实现Runnable接口使用教程(含实例讲解)
前言 在Android开发中,多线程的使用十分常见 今天,我将全面解析多线程中最常见的2种用法:继承Thread类 & 实现Runnable接口 Carson带你学多线程系列 基础汇总 Android多线程:基础知识汇总 基础使用 Android多线程:继承Thread类使用(含实例教程) Android多线程:实现Runnable接口使用(含实例教程) 复合使用 Android多线程:AsyncTask使用教程(含实例讲解) Android多线程:AsyncTask的原理及源码分析 A
Carson.Ho
2022/03/25
8290
Android多线程:继承Thread类、实现Runnable接口使用教程(含实例讲解)
【19】JAVASE-多线程专题【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
1350
【19】JAVASE-多线程专题【从零开始学JAVA】
Java多线程总结(超详细总结)
— JDK 5.0新增 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? 1. call()可以有返回值的。 2. call()可以抛出异常,被外面的操作捕获,获取异常的信息 3. Callable是支持泛型的
小尘要自信
2023/10/10
3140
Java学习笔记之多线程 生产者 消费者
        所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
Jetpropelledsnake21
2022/03/07
6050
Java学习笔记之多线程 生产者 消费者
相关推荐
JAVA多线程详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验