M
点击蓝字 / 微软开发者MSDN
关注我们
作者:Luis Quintanilla - 项目经理
排版:Alan Wang
我们很高兴地宣布 Microsoft.Extensions.AI.Abstractions 和 Microsoft.Extensions.AI 库现已推出预览版。这些软件包为 .NET 生态系统提供了将 AI 服务集成到 .NET 应用程序和库中的基本抽象,以及用于添加关键功能的中间件。
为了支持 .NET 生态系统,.NET 团队使用这些抽象或“交换类型”增强了核心 Microsoft.Extensions 库,以用于 .NET 生成式 AI 应用程序和库。
人工智能功能正在快速发展,诸如“聊天”、嵌入和工具调用等功能出现了常见模式。统一的抽象对于开发人员跨不同来源有效工作至关重要。中间件可以在不增加生产者负担的情况下添加有价值的功能,从而立即使消费者受益。
例如,IChatClient 接口允许使用语言模型,无论是远程托管还是本地运行。任何提供 AI 客户端的 .NET 包都可以实现此接口,从而实现与使用 .NET 代码的无缝集成。
然后,无论您使用哪个提供商,您都可以按如下方式发送请求:
Console.WriteLine(response.Message);
什么是 Microsoft.Extensions.AI?
Microsoft.Extensions.AI 是一组由 .NET 生态系统中的开发人员(包括 Semantic Kernel)共同开发的核心 .NET 库。这些库提供了一个统一的 C# 抽象层,用于与 AI 服务交互,例如小型和大型语言模型(SLM 和 LLM)、嵌入和中间件。
目前,我们的重点是创建可由各种服务实现的抽象,所有抽象均遵循相同的核心概念。我们不打算发布针对任何特定提供商的服务而量身定制的 API。我们的目标是充当 .NET 生态系统中的统一层,使开发人员能够选择他们喜欢的框架和库,同时确保整个生态系统的无缝集成和协作。
Microsoft.Extensions.AI 的优势
Microsoft.Extensions.AI 为 AI 服务提供了统一的 API 抽象,类似于我们成功的日志记录和依赖项注入 (DI) 抽象。我们的目标是为缓存、遥测、工具调用和其他可与任何提供商配合使用的常见任务提供标准实现。
核心优势
人工智能服务的通用抽象
这些抽象让您可以轻松地在各种场景中使用惯用的 C# 代码,并且只需进行最少的代码更改,无论您是使用不同的服务进行开发或生产、解决混合场景还是探索其他服务提供商。
实现这些抽象的库作者将使他们的客户端能够与更广泛的 Microsoft.Extensions.AI 生态系统互操作。特定服务的 API 在需要时仍可访问,允许用户使用标准抽象编写代码,并仅在需要时传递到专有 API。
在这个预览版中,我们为以下服务提供了参考实现:
但是,我们打算与 .NET 生态系统中的软件包作者合作,以便这些 Microsoft.Extensions.AI 抽象的实现最终成为相应客户端库的一部分,而不需要安装其他软件包。如果您有一个针对特定 AI 服务的 .NET 客户端库,我们很乐意在您的库中看到这些抽象的实现。
标准中间件实现
连接和使用 AI 服务只是构建强大应用程序的一个方面。生产就绪型应用程序需要遥测、日志记录和工具调用功能等附加功能。Microsoft.Extensions.AI 抽象使开发人员能够使用熟悉的模式轻松地将这些组件集成到他们的应用程序中。
以下示例演示了如何注册 OpenAI IChatClient。IChatClient 允许您以一致的方式在各个提供商之间附加功能。
上面演示的功能包含在 Microsoft.Extensions.AI 库中,但它们只是使用此方法可以分层添加的功能的一小部分。我们很高兴看到 .NET 开发人员的创造力随着各种类型的中间件的出现而闪耀,这些中间件可用于创建强大、可靠的 AI 相关功能。
如何开始
Microsoft.Extensions.AI 从今天开始提供预览版。
首先,您可以创建一个控制台应用程序,并为您正在使用的相应 AI 服务安装 Microsoft.Extensions.AI 包。
聊天
以下示例展示了如何在聊天场景中使用 Microsoft.Extensions.AI。
Azure AI Inference (GitHub Models)
IChatClient client =newChatCompletionsClient( endpoint: newUri( "https://models.inference.ai.azure.com"), newAzureKeyCredential(Environment.GetEnvironmentVariable( "GH_TOKEN"))) .AsChatClient( "Phi-3.5-MoE-instruct");
varresponse = awaitclient.CompleteAsync( "What is AI?");
Console.WriteLine(response.Message);
Microsoft.Extensions.AI.AzureAIInference NuGet 包
https://www.nuget.org/packages/Microsoft.Extensions.AI.AzureAIInference/
GitHub Models
https://devblogs.microsoft.com/dotnet/using-github-models-and-dotnet-to-build-generative-ai-apps/
Azure AI Model Catalog
https://devblogs.microsoft.com/dotnet/azure-ai-model-catalog-dotnet-inference-sdk/
OpenAI
IChatClient client =newOpenAIClient(Environment.GetEnvironmentVariable( "OPENAI_API_KEY")) .AsChatClient(modelId: "gpt-4o-mini");
varresponse = awaitclient.CompleteAsync( "What is AI?");
Console.WriteLine(response.Message);
Microsoft.Extensions.AI.OpenAI NuGet 包
https://aka.ms/meai-openai-nuget
Azure OpenAI
IChatClient client =newAzureOpenAIClient( newUri(Environment.GetEnvironmentVariable( "AZURE_OPENAI_ENDPOINT")), newDefaultAzureCredential) .AsChatClient(modelId: "gpt-4o-mini");
varresponse = awaitclient.CompleteAsync( "What is AI?");
Console.WriteLine(response.Message);
Microsoft.Extensions.AI.OpenAI
https://www.nuget.org/packages/Microsoft.Extensions.AI.OpenAI/
Azure.AI.OpenAI
https://www.nuget.org/packages/Azure.AI.OpenAI
Azure.Identity
https://www.nuget.org/packages/Azure.Identity
Ollama
IChatClient client = newOllamaChatClient( newUri( "http://localhost:11434/"), "llama3.1");
varresponse = awaitclient.CompleteAsync( "What is AI?");
Console.WriteLine(response.Message);
Microsoft.Extensions.AI.Ollama NuGet 包
https://www.nuget.org/packages/Microsoft.Extensions.AI.Ollama/
嵌入
与聊天类似,您也可以使用 Microsoft.Extensions.AI 进行文本嵌入生成场景。
OpenAI
IEmbeddingGenerator< string,Embedding< float>> generator = newOpenAIClient(Environment.GetEnvironmentVariable( "OPENAI_API_KEY")) .AsEmbeddingGenerator(modelId: "text-embedding-3-small");
varembedding = awaitgenerator.GenerateAsync( "What is AI?");
Console.WriteLine( string.Join( ", ", embedding[ 0].Vector.ToArray));
Microsoft.Extensions.AI.OpenAI NuGet 包
https://www.nuget.org/packages/Microsoft.Extensions.AI.OpenAI/
Azure OpenAI
IEmbeddingGenerator< string,Embedding< float>> generator = newAzureOpenAIClient( newUri(Environment.GetEnvironmentVariable( "AZURE_OPENAI_ENDPOINT")), newDefaultAzureCredential) .AsEmbeddingGenerator(modelId: "text-embedding-3-small");
varembeddings = awaitgenerator.GenerateAsync( "What is AI?");
Console.WriteLine( string.Join( ", ", embeddings[ 0].Vector.ToArray));
Microsoft.Extensions.AI.OpenAI
https://www.nuget.org/packages/Microsoft.Extensions.AI.OpenAI/
Azure.AI.OpenAI
https://www.nuget.org/packages/Azure.AI.OpenAI
Azure.Identity
https://www.nuget.org/packages/Azure.Identity
Ollama
IEmbeddingGenerator<string,Embedding< float>> generator = new OllamaEmbeddingGenerator(new Uri( "http://localhost:11434/"), "all-minilm");
var embedding = awaitgenerator.GenerateAsync( "What is AI?");
Console.WriteLine(string.Join( ", ", embedding[ 0].Vector.ToArray));
Microsoft.Extensions.AI.Ollama NuGet 包
https://www.nuget.org/packages/Microsoft.Extensions.AI.Ollama/
开始使用 Microsoft.Extensions.AI 进行构建
随着 Microsoft.Extensions.AI 的发布,我们很高兴能够为 AI 应用程序开发构建生态系统的基础。以下是您可以参与其中并开始使用 Microsoft.Extensions.AI 的一些方法:
我们在 dotnet/ai-samplesGitHub 存储库中提供了一组示例来帮助您入门。
有关使用 Microsoft.Extensions.AI 的端到端示例,请参阅 eShopSupport。
dotnet/ai-samples
https://github.com/dotnet/ai-samples?tab=readme-ov-file#microsoftextensionsai-preview
eShopSupport
https://github.com/dotnet/eShopSupport
Microsoft.Extensions.AI 的下一步计划?
如上所述,我们目前正在发布 Microsoft.Extensions.AI 预览版。我们预计该库将在 11 月 .NET 9 发布之前一直处于预览状态,同时我们将继续收集反馈。
在短期内,我们计划:
我们期待在您的帮助下塑造 .NET 中 AI 开发的未来。
请试用 Microsoft.Extensions.AI 并 分享您的反馈,以便我们能够构建有助于您和您的团队蓬勃发展的体验。
Semantic Kernel 博客
https://devblogs.microsoft.com/semantic-kernel/microsoft-extensions-ai-simplifying-ai-integration-for-net-partners/
分享您的反馈
https://github.com/dotnet/extensions/issues
微信公众号|微软开发者MSDN
新浪微博|微软中国MSDN
·END·