推出 Microsoft.Extensions.AI 预览版 – .NET 的统一 AI 构建块

我们很高兴推出 Microsoft.Extensions.AI.Abstractions 和 Microsoft.Extensions.AI 库,它们今天已提供预览版。这些软件包为 .NET 生态系统提供了将 AI 服务集成到 .NET 应用程序和库中的基本抽象,以及用于添加关键功能的中间件。

为了支持 .NET 生态系统,.NET 团队使用这些抽象或“交换类型”增强了 .NET 生成式 AI 应用程序和库的核心 Microsoft.Extensions 库。

人工智能功能正在快速发展,诸如“聊天”、嵌入和工具调用等功能的常见模式正在涌现。统一的抽象对于开发人员跨不同来源有效工作至关重要。中间件可以添加有价值的功能而不会给生产者带来负担,从而立即使消费者受益。

例如,该IChatClient接口允许使用语言模型,无论是远程托管还是本地运行。任何提供 AI 客户端的 .NET 包都可以实现此接口,从而实现与使用 .NET 代码的无缝集成。

IChatClient client =
    environment.IsDevelopment ?  
    new OllamaChatClient(...) : 
    new AzureAIInferenceChatClient(...); 

然后,无论您使用哪个提供商,您都可以按如下方式发送请求:

var response = await chatClient.CompleteAsync( 
      "Translate the following text into Pig Latin: I love .NET and AI"); 

Console.WriteLine(response.Message);  

什么是 Microsoft.Extensions.AI?

Microsoft.Extensions.AI 是一组核心 .NET 库,由 .NET 生态系统中的开发人员共同开发,包括 Semantic Kernel。这些库提供了一个统一的 C# 抽象层,用于与 AI 服务交互,例如小型和大型语言模型(SLM 和 LLM)、嵌入和中间件。

在这里插入图片描述
目前,我们的重点是创建可由各种服务实现的抽象,所有抽象均遵循相同的核心概念。我们不打算发布针对任何特定提供商的服务量身定制的 API。我们的目标是充当 .NET 生态系统中的统一层,使开发人员能够选择他们喜欢的框架和库,同时确保整个生态系统的无缝集成和协作。

Microsoft.Extensions.AI 的优势

Microsoft.Extensions.AI 为 AI 服务提供了统一的 API 抽象,类似于我们成功的日志记录和依赖项注入 (DI) 抽象。我们的目标是为缓存、遥测、工具调用和其他可与任何提供商配合使用的常见任务提供标准实现。

核心优势

  • 统一 API:提供一组一致的 API 和约定,用于将 AI 服务集成到 .NET 应用程序中。
  • 灵活性:允许.NET 库作者使用 AI 服务而不依赖于特定提供商,从而使其能够适应任何提供商。
  • 易于使用:使 .NET 开发人员能够使用相同的底层抽象尝试不同的包,并在整个应用程序中维护单个 API。
  • 组件化:简化添加新功能并促进应用程序的组件化和测试。

人工智能服务的通用抽象

这些抽象让您可以轻松地在各种场景中使用惯用的 C# 代码,并且只需进行最少的代码更改,无论您是使用不同的服务进行开发或生产、解决混合场景还是探索其他服务提供商。

实现这些抽象的库作者将使他们的客户端能够与更广泛的 Microsoft.Extensions.AI 生态系统互操作。服务特定的 API 仍可在需要时访问,从而允许消费者根据标准抽象进行编码,并仅在需要时才传递到专有 API。

public interface IChatClient : IDisposable 
{ 
    Task<ChatCompletion> CompleteAsync(...); 
    IAsyncEnumerable<StreamingChatCompletionUpdate> CompleteStreamingAsync(...); 
    ChatClientMetadata Metadata { get; } 
    TService? GetService<TService>(object? key = null) where TService : class; 
} 

从此预览版开始,我们为以下服务提供了参考实现:

  • OpenAI
  • Azure AI Inference
  • Ollama

但是,我们打算与 .NET 生态系统中的软件包作者合作,以便这些 Microsoft.Extensions.AI 抽象的实现最终成为相应客户端库的一部分,而不需要安装其他软件包。如果您有针对特定 AI 服务的 .NET 客户端库,我们很乐意在您的库中看到这些抽象的实现。

标准中间件实现

连接和使用 AI 服务只是构建强大应用程序的一个方面。可用于生产的应用程序需要遥测、日志记录和工具调用功能等附加功能。Microsoft.Extensions.AI 抽象使开发人员能够使用熟悉的模式轻松地将这些组件集成到他们的应用程序中。

以下示例演示了如何注册 OpenAI IChatClient。IChatClient允许您以一致的方式在不同的提供商之间附加功能。

app.Services.AddChatClient(builder => builder 
    .UseLogging()
    .UseFunctionInvocation() 
    .UseDistributedCache()    
    .UseOpenTelemetry()  
    .Use(new OpenAIClient(...)).AsChatClient(...)); 

上面演示的功能包含在 Microsoft.Extensions.AI 库中,但它们只是使用此方法可以分层添加的功能的一小部分。我们很高兴看到 .NET 开发人员的创造力随着各种类型的中间件的出现而闪耀,这些中间件可用于创建强大、可靠的 AI 相关功能。

如何开始

Microsoft.Extensions.AI 从今天开始提供预览版。

首先,您可以创建一个控制台应用程序并为您正在使用的相应 AI 服务安装 Microsoft.Extensions.AI 包。

聊天

以下示例展示了如何在聊天场景中使用 Microsoft.Extensions.AI。

Azure AI 推理(GitHub 模型)

安装Microsoft.Extensions.AI.AzureAIInference NuGet 包,该包可与来自GitHub Models以及Azure AI Model Catalog 的模型一起使用。将以下代码添加到您的应用程序。 替换GH_TOKEN为您的 GitHub 个人访问令牌。

using Azure; 
using Azure.AI.Inference;
using Microsoft.Extensions.AI;

IChatClient client =
    new ChatCompletionsClient(
        endpoint: new Uri("https://models.inference.ai.azure.com"), 
        new AzureKeyCredential(Environment.GetEnvironmentVariable("GH_TOKEN")))
        .AsChatClient("Phi-3.5-MoE-instruct");

var response = await client.CompleteAsync("What is AI?");

Console.WriteLine(response.Message);

OpenAI

安装Microsoft.Extensions.AI.OpenAI NuGet 包。将以下代码添加到您的应用程序。OPENAI_API_KEY用您的 OpenAI 密钥替换。

using OpenAI;
using Microsoft.Extensions.AI;

IChatClient client =
    new OpenAIClient(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
        .AsChatClient(modelId: "gpt-4o-mini");

var response = await client.CompleteAsync("What is AI?");

Console.WriteLine(response.Message);

Azure OpenAI

安装Microsoft.Extensions.AI.OpenAI、Azure.AI.OpenAI和Azure.Identity NuGet 包。将以下代码添加到您的应用程序。将其替换AZURE_OPENAI_ENDPOINT为您的 Azure OpenAI 端点和modelId您的部署名称。

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Extensions.AI;

IChatClient client =
    new AzureOpenAIClient(
        new Uri(Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")), 
        new DefaultAzureCredential())
            .AsChatClient(modelId: "gpt-4o-mini");

var response = await client.CompleteAsync("What is AI?");

Console.WriteLine(response.Message);

Ollama

安装Microsoft.Extensions.AI.Ollama NuGet 包。将以下代码添加到您的应用程序。

using Microsoft.Extensions.AI;

IChatClient client = 
    new OllamaChatClient(new Uri("http://localhost:11434/"), "llama3.1");

var response = await client.CompleteAsync("What is AI?");

Console.WriteLine(response.Message);

嵌入

与聊天类似,您也可以使用 Microsoft.Extensions.AI 进行文本嵌入生成场景。

OpenAI

安装Microsoft.Extensions.AI.OpenAI NuGet 包。将以下代码添加到您的应用程序。OPENAI_API_KEY用您的 OpenAI 密钥替换。

using OpenAI;
using Microsoft.Extensions.AI;

IEmbeddingGenerator<string,Embedding<float>> generator =
    new OpenAIClient(Environment.GetEnvironmentVariable("OPENAI_API_KEY"))
        .AsEmbeddingGenerator(modelId: "text-embedding-3-small");

var embedding = await generator.GenerateAsync("What is AI?");

Console.WriteLine(string.Join(", ", embedding[0].Vector.ToArray()));

Azure OpenAI

安装Microsoft.Extensions.AI.OpenAI、Azure.AI.OpenAI和Azure.Identity NuGet 包。将以下代码添加到您的应用程序。将其替换AZURE_OPENAI_ENDPOINT为您的 Azure OpenAI 端点和modelId您的部署名称。

using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Extensions.AI;

IEmbeddingGenerator<string,Embedding<float>> generator =
    new AzureOpenAIClient(
        new Uri(Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")), 
        new DefaultAzureCredential())
            .AsEmbeddingGenerator(modelId: "text-embedding-3-small");

var embeddings = await generator.GenerateAsync("What is AI?");

Console.WriteLine(string.Join(", ", embeddings[0].Vector.ToArray()));

Ollama

安装Microsoft.Extensions.AI.Ollama NuGet 包。将以下代码添加到您的应用程序。

using Microsoft.Extensions.AI;

IEmbeddingGenerator<string,Embedding<float>> generator = 
    new OllamaEmbeddingGenerator(new Uri("http://localhost:11434/"), "all-minilm");

var embedding = await generator.GenerateAsync("What is AI?");

Console.WriteLine(string.Join(", ", embedding[0].Vector.ToArray()));

开始使用 Microsoft.Extensions.AI 进行构建

随着 Microsoft.Extensions.AI 的发布,我们很高兴能够为 AI 应用程序开发构建生态系统。您可以通过以下方式参与并开始使用 Microsoft.Extensions.AI 进行构建:

  • 库开发人员:如果您拥有为 AI 服务提供客户端的库,请考虑在库中实现接口。这样用户就可以通过抽象轻松集成您的 NuGet 包。
  • 服务消费者:如果您正在开发使用 AI 服务的库,请使用抽象,而不是硬编码到特定的 AI 服务。这种方法让您的消费者可以灵活地选择他们喜欢的服务。
  • 应用程序开发人员:尝试抽象来简化与应用程序的集成。这样可以实现跨模型和服务的可移植性,促进测试和模拟,利用生态系统提供的中间件,并在整个应用程序中保持一致的 API,即使您在应用程序的不同部分使用不同的服务(即本地和托管模型混合场景)。
  • 生态系统贡献者:如果您有兴趣为生态系统做出贡献,请考虑编写自定义中间件组件。

我们在dotnet/ai-samples GitHub 存储库中提供了一组示例来帮助您入门。有关使用 Microsoft.Extensions.AI 的端到端示例,请参阅eShopSupport。

Microsoft.Extensions.AI 的下一步是什么?

如上所述,我们目前正在发布 Microsoft.Extensions.AI 预览版。我们预计该库将在 11 月 .NET 9 发布之前一直处于预览状态,同时我们将继续收集反馈。

近期,我们计划:

  • 继续与 Semantic Kernel 合作,将 Microsoft.Extensions.AI 集成为其基础层。有关更多详细信息,请查看Semantic Kernel 博客上的以下帖子。
  • 更新现有示例(如 eShop)以使用 Microsoft.Extensions.AI。
  • 与 .NET 生态系统中的每个人合作采用 Microsoft.Extensions.AI。实现抽象的提供商越多,使用它的消费者就越多,
  • 构建的中间件组件越多,所有组件的功能就越强大。

我们期待在您的帮助下塑造 .NET 中 AI 开发的未来。

请试用 Microsoft.Extensions.AI 并分享您的反馈,以便我们能够构建有助于您和您的团队蓬勃发展的体验。

文章翻译于作者 | Luis Quintanilla

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值