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 生態系統中的開發人員(包括 Semantic Kernel)共同開發的核心 .NET 庫。這些庫提供了一個統一的 C# 抽象層,用于與 AI 服務交互,例如小型和大型語言模型(SLM 和 LLM)、嵌入和中間件。

目前,我們的重點是創建可由各種服務實現的抽象,所有抽象均遵循相同的核心概念。我們不打算發布針對任何特定提供商的服務而量身定制的 API。我們的目標是充當 .NET 生態系統中的統一層,使開發人員能夠選擇他們喜歡的框架和庫,同時確保整個生態系統的無縫集成和協作。

Microsoft.Extensions.AI 的優勢

Microsoft.Extensions.AI 為 AI 服務提供了統一的 API 抽象,類似于我們成功的日志記錄和依賴項注入 (DI) 抽象。我們的目標是為緩存、遙測、工具調用和其他可與任何提供商配合使用的常見任務提供標準實現。

核心優勢

人工智能服務的通用抽象

這些抽象讓您可以輕松地在各種場景中使用慣用的 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;
}

在這個預覽版中,我們為以下服務提供了參考實現:

但是,我們打算與 .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 Inference (GitHub Models)

  1. 安裝 Microsoft.Extensions.AI.AzureAIInference NuGet 包,該包可與 GitHub Models 和 Azure AI Model Catalog 中的模型配合使用。
  2. 將以下代碼添加到您的應用程序中。將 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);

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

  1. 安裝 Microsoft.Extensions.AI.OpenAI NuGet 包。
  2. 將以下代碼添加到您的應用程序中。將 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

  1. 安裝?Microsoft.Extensions.AI.OpenAI、Azure.AI.OpenAI?和?Azure.Identity NuGet?包。
  2. 將以下代碼添加到您的應用程序。將 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);

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

  1. 安裝?Microsoft.Extensions.AI.Ollama NuGet 包。
  2. 將以下代碼添加到您的應用程序中。
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.Ollama NuGet 包

https://www.nuget.org/packages/Microsoft.Extensions.AI.Ollama/

嵌入

與聊天類似,您也可以使用 Microsoft.Extensions.AI 進行文本嵌入生成場景。

OpenAI

  1. 安裝 Microsoft.Extensions.AI.OpenAI NuGet 包。
  2. 將以下代碼添加到您的應用程序中。將 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()));

Microsoft.Extensions.AI.OpenAI NuGet 包

https://www.nuget.org/packages/Microsoft.Extensions.AI.OpenAI/

Azure OpenAI

  1. 安裝 Microsoft.Extensions.AI.OpenAI、Azure.AI.OpenAI 和 Azure.Identity NuGet 包。
  2. 將以下代碼添加到您的應用程序中。將 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()));


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

  1. 安裝 Microsoft.Extensions.AI.Ollama NuGet 包。
  2. 將以下代碼添加到您的應用程序中。
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.Ollama NuGet 包

https://www.nuget.org/packages/Microsoft.Extensions.AI.Ollama/

開始使用 Microsoft.Extensions.AI 進行構建

隨著 Microsoft.Extensions.AI 的發布,我們很高興能夠為 AI 應用程序開發構建生態系統的基礎。以下是您可以參與其中并開始使用 Microsoft.Extensions.AI 的一些方法:

我們在 dotnet/ai-samples GitHub 存儲庫中提供了一組示例來幫助您入門。

有關使用 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 并分享您的反饋,以便我們能夠構建有助于您和您的團隊蓬勃發展的體驗。

文章轉自微信公眾號@DotNET技術圈

上一篇:

最新LangChain+GLM4開發AI應用程序系列(一):快速入門篇

下一篇:

如何用 AI 問答 API 徹底改變用戶體驗!
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費