.NET 开发人员需要在其应用中集成和与越来越多的人工智能(AI)服务进行交互。 这些 Microsoft.Extensions.AI 库提供了一种统一的方法来表示生成 AI 组件,并实现与各种 AI 服务的无缝集成和互作性。 本文介绍这些库,并提供深入的用法示例来帮助你入门。
包
📦 Microsoft.Extensions.AI.Abstractions 包提供核心交换类型,包括IChatClient和 IEmbeddingGenerator<TInput,TEmbedding>。 提供 LLM 客户端的任何 .NET 库都可以实现 IChatClient 接口,以实现与使用代码的无缝集成。
📦 Microsoft.Extensions.AI 包对 Microsoft.Extensions.AI.Abstractions 包具有隐式依赖项。 通过此包,可以使用熟悉的依赖项注入和中间件模式轻松地将自动函数工具调用、遥测和缓存等组件集成到应用程序中。 例如,它提供了 UseOpenTelemetry(ChatClientBuilder, ILoggerFactory, String, Action<OpenTelemetryChatClient>) 扩展方法,该方法将 OpenTelemetry 支持添加到聊天客户端管道中。
要引用的包
要使用用于生成式 AI 模块的更高级实用工具,请参考 Microsoft.Extensions.AI 包(它本身引用 Microsoft.Extensions.AI.Abstractions)。 大多数消耗的应用程序和服务应引用 Microsoft.Extensions.AI 包以及一个或多个库,这些库提供抽象的具体实现。
提供抽象实现的库通常仅引用Microsoft.Extensions.AI.Abstractions。
安装软件包
有关如何安装 NuGet 包的信息,请参阅 .NET 应用程序中 的 dotnet 包添加 或 管理包依赖项。
API 和功能
IChatClient 接口
IChatClient 接口定义一个客户端抽象,负责与提供聊天功能的 AI 服务交互。 它包括发送和接收具有多模式内容(如文本、图像和音频)的消息的方法,无论是作为一个完整的集合还是增量流式传输。
有关详细信息和详细的用法示例,请参阅 “使用 IChatClient 接口”。
IEmbeddingGenerator 接口
IEmbeddingGenerator 接口表示嵌入的泛型生成器。 对于泛型类型参数, TInput 是嵌入的输入值的类型,是 TEmbedding 生成的嵌入类型,它继承自 Embedding 类。
有关详细信息和详细的用法示例,请参阅 使用 IEmbeddingGenerator 接口。
IImageGenerator 接口(实验性)
该 IImageGenerator 接口表示用于从文本提示或其他输入创建图像的生成器。 此接口使应用程序能够通过一致的 API 集成来自各种 AI 服务的图像生成功能。 该接口支持文本到图像生成(通过调用 GenerateAsync(ImageGenerationRequest, ImageGenerationOptions, CancellationToken))和图像大小和格式 的配置选项 。 与库中的其他接口一样,它可以与中间件组成,用于缓存、遥测和其他交叉问题。
有关详细信息,请参阅 使用 AI 从文本生成图像。
使用 Microsoft.Extensions.AI 进行构建
可以通过以下方式使用 Microsoft.Extensions.AI 开始构建:
- 库开发人员:如果你拥有为 AI 服务提供客户端的库,请考虑在你的库中实现相关接口。 这使用户能够通过抽象概念轻松集成你的 NuGet 包。 有关示例,请参阅 IChatClient 实现示例 和 IEmbeddingGenerator 实现示例。
- 服务使用者:如果要开发使用 AI 服务的库,请使用抽象,而不是硬编码到特定的 AI 服务。 此方法使使用者能够灵活地选择首选提供商。
- 应用程序开发人员:使用这些抽象概念来简化与你的应用程序的集成。 这使得应用程序能够在不同模型和服务之间实现可移植性,便于进行测试和模拟,利用生态系统提供的中间件,并且即使在应用程序的不同部分使用不同的服务,也能在整个应用程序中保持一致的 API。
- 生态系统贡献者:如果你有兴趣为生态系统做出贡献,请考虑编写自定义中间件组件。
有关更多示例,请参阅 dotnet/ai-samples GitHub 存储库。 有关端到端示例,请参阅 eShopSupport。