environment.IsDevelopment ?
new OllamaChatClient(...) :
? ? new AzureAIInferenceChatClient(...);

然后,無論您使用哪個(gè)提供商,您都可以按如下方式發(fā)送請(qǐng)求:

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

目前,我們的重點(diǎn)是創(chuàng)建可由各種服務(wù)實(shí)現(xiàn)的抽象,所有抽象均遵循相同的核心概念。我們不打算發(fā)布針對(duì)任何特定提供商的服務(wù)而量身定制的 API。我們的目標(biāo)是充當(dāng) .NET 生態(tài)系統(tǒng)中的統(tǒng)一層,使開發(fā)人員能夠選擇他們喜歡的框架和庫,同時(shí)確保整個(gè)生態(tài)系統(tǒng)的無縫集成和協(xié)作。

Microsoft.Extensions.AI 的優(yōu)勢

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

核心優(yōu)勢

人工智能服務(wù)的通用抽象

這些抽象讓您可以輕松地在各種場景中使用慣用的 C# 代碼,并且只需進(jìn)行最少的代碼更改,無論您是使用不同的服務(wù)進(jìn)行開發(fā)或生產(chǎn)、解決混合場景還是探索其他服務(wù)提供商。

實(shí)現(xiàn)這些抽象的庫作者將使他們的客戶端能夠與更廣泛的 Microsoft.Extensions.AI 生態(tài)系統(tǒng)互操作。特定服務(wù)的 API 在需要時(shí)仍可訪問,允許用戶使用標(biāo)準(zhǔn)抽象編寫代碼,并僅在需要時(shí)傳遞到專有 API。

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

在這個(gè)預(yù)覽版中,我們?yōu)橐韵路?wù)提供了參考實(shí)現(xiàn):

但是,我們打算與 .NET 生態(tài)系統(tǒng)中的軟件包作者合作,以便這些 Microsoft.Extensions.AI 抽象的實(shí)現(xiàn)最終成為相應(yīng)客戶端庫的一部分,而不需要安裝其他軟件包。如果您有一個(gè)針對(duì)特定 AI 服務(wù)的 .NET 客戶端庫,我們很樂意在您的庫中看到這些抽象的實(shí)現(xiàn)。

標(biāo)準(zhǔn)中間件實(shí)現(xiàn)

連接和使用 AI 服務(wù)只是構(gòu)建強(qiáng)大應(yīng)用程序的一個(gè)方面。生產(chǎn)就緒型應(yīng)用程序需要遙測、日志記錄和工具調(diào)用功能等附加功能。Microsoft.Extensions.AI 抽象使開發(fā)人員能夠使用熟悉的模式輕松地將這些組件集成到他們的應(yīng)用程序中。

以下示例演示了如何注冊(cè) OpenAI IChatClient。IChatClient 允許您以一致的方式在各個(gè)提供商之間附加功能。

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

上面演示的功能包含在 Microsoft.Extensions.AI 庫中,但它們只是使用此方法可以分層添加的功能的一小部分。我們很高興看到 .NET 開發(fā)人員的創(chuàng)造力隨著各種類型的中間件的出現(xiàn)而閃耀,這些中間件可用于創(chuàng)建強(qiáng)大、可靠的 AI 相關(guān)功能。

如何開始

Microsoft.Extensions.AI 從今天開始提供預(yù)覽版。

首先,您可以創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序,并為您正在使用的相應(yīng) AI 服務(wù)安裝 Microsoft.Extensions.AI 包。

聊天

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

Azure AI Inference (GitHub Models)

  1. 安裝 Microsoft.Extensions.AI.AzureAIInference NuGet 包,該包可與 GitHub Models 和 Azure AI Model Catalog 中的模型配合使用。
  2. 將以下代碼添加到您的應(yīng)用程序中。將 GH_TOKEN 替換為您的 GitHub 個(gè)人訪問令牌。
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. 將以下代碼添加到您的應(yīng)用程序中。將 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. 將以下代碼添加到您的應(yīng)用程序。將 AZURE_OPENAI_ENDPOINT 替換為您的 Azure OpenAI 端點(diǎn),將 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. 將以下代碼添加到您的應(yīng)用程序中。
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 進(jìn)行文本嵌入生成場景。

OpenAI

  1. 安裝 Microsoft.Extensions.AI.OpenAI NuGet 包。
  2. 將以下代碼添加到您的應(yīng)用程序中。將 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. 將以下代碼添加到您的應(yīng)用程序中。將 AZURE_OPENAI_ENDPOINT 替換為您的 Azure OpenAI 端點(diǎn),將 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. 將以下代碼添加到您的應(yīng)用程序中。
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 進(jìn)行構(gòu)建

隨著 Microsoft.Extensions.AI 的發(fā)布,我們很高興能夠?yàn)?AI 應(yīng)用程序開發(fā)構(gòu)建生態(tài)系統(tǒng)的基礎(chǔ)。以下是您可以參與其中并開始使用 Microsoft.Extensions.AI 的一些方法:

我們?cè)?nbsp;dotnet/ai-samples GitHub 存儲(chǔ)庫中提供了一組示例來幫助您入門。

有關(guān)使用 Microsoft.Extensions.AI 的端到端示例,請(qǐng)參閱 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 的下一步計(jì)劃?

如上所述,我們目前正在發(fā)布 Microsoft.Extensions.AI 預(yù)覽版。我們預(yù)計(jì)該庫將在 11 月 .NET 9 發(fā)布之前一直處于預(yù)覽狀態(tài),同時(shí)我們將繼續(xù)收集反饋。

在短期內(nèi),我們計(jì)劃:

我們期待在您的幫助下塑造 .NET 中 AI 開發(fā)的未來。

請(qǐng)?jiān)囉?Microsoft.Extensions.AI 并分享您的反饋,以便我們能夠構(gòu)建有助于您和您的團(tuán)隊(duì)蓬勃發(fā)展的體驗(yàn)。

文章轉(zhuǎn)自微信公眾號(hào)@DotNET技術(shù)圈

上一篇:

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

下一篇:

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

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)