使用 Microsoft.Extensions.AI 的 .NET 的统一 AI 构建基块
.NET 生态系统提供抽象,用于使用 Microsoft.Extensions.AI 和 Microsoft.Extensions.AI.Abstractions
库将 AI 服务集成到 .NET 应用程序和库。 .NET 团队还通过这些抽象为.NET 生成式 AI 应用程序和库增强了核心 Microsoft.Extensions.*
库。 在前面的部分中,你已了解:
- 库的核心概念和功能
Microsoft.Extensions.AI
。 - 如何在应用中使用 AI 抽象及其提供的优势。
- 基本 AI 中间件概念。
有关详细信息,请参阅 Microsoft.Extensions.AI 简介。
什么是 Microsoft.Extensions.AI 库?
Microsoft.Extensions.AI 是一组核心 .NET 库,是在与整个 .NET 生态系统(包括语义内核)的开发人员协作中创建的。 这些库提供统一的 C# 抽象层,用于与 AI 服务交互,例如小型和大型语言模型(SLA 和 LLM)、嵌入和中间件。
Microsoft.Extensions.AI
提供可由各种服务实现的抽象,所有这些概念都遵循相同的核心概念。 此库不旨在提供针对任何特定提供商服务定制的 API。 Microsoft.Extensions.AI
目标是在 .NET 生态系统中充当一个统一层,使开发人员能够选择他们的首选框架和库,同时确保整个生态系统之间的无缝集成和协作。
使用常见 AI 服务的抽象
AI 功能正在迅速演变,常见功能的模式正在出现:
- 聊天功能以对话方式提示 AI 进行信息或数据分析。
- 嵌入生成以与矢量搜索功能集成。
- 调用以与其他服务、平台或代码集成的工具。
该 Microsoft.Extensions.AI
库为这些类型的任务提供抽象,因此开发人员可以专注于针对概念 AI 功能(而不是特定平台或提供程序实现)进行编码。 统一抽象对于开发人员在不同源中有效工作至关重要。
例如, IChatClient
该接口允许从各种提供程序使用语言模型,无论是连接到 Azure OpenAI 服务还是运行本地 Ollama 安装。 提供 AI 客户端的任何 .NET 包都可以实现 IChatClient
接口,从而与使用 .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);
这些抽象允许对各种方案使用惯用的 C# 代码,只需对代码更改进行最少更改,无论是使用不同的服务进行开发和生产、解决混合方案还是探索其他服务提供商。
实现这些抽象的库作者使其客户端与更广泛的 Microsoft.Extensions.AI
生态系统互操作。 如果需要,服务特定的 API 仍可访问,允许使用者根据标准抽象编写代码,并仅在需要时传递到专有 API。
Microsoft.Extensions.AI
通过其他包提供以下服务的实现:
将来,这些 Microsoft.Extensions.AI
抽象的实现将是相应客户端库的一部分,而无需安装其他包。
AI 服务的中间件实现
连接到和使用 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 进行生成
可以通过以下方式开始构建 Microsoft.Extensions.AI
:
- 库开发人员:如果你拥有为 AI 服务提供客户端的库,请考虑在库中实现接口。 这允许用户通过抽象轻松集成 NuGet 包。
- 服务使用者:如果要开发使用 AI 服务的库,请使用抽象,而不是对特定 AI 服务进行硬编码。 此方法使使用者能够灵活地选择其首选服务。
- 应用程序开发人员:使用抽象来简化应用中的集成。 这可实现模型和服务之间的可移植性,促进测试和模拟,利用生态系统提供的中间件,并在整个应用中维护一致的 API,即使你在应用程序的不同部分中使用不同的服务也是如此。
- 生态系统参与者:如果你有兴趣参与生态系统,请考虑编写自定义中间件组件。
若要开始,请参阅 dotnet/ai-samples GitHub 存储库中的示例。
有关使用 Microsoft.Extensions.AI
端到端示例,请参阅 eShopSupport。