
企業工商數據API用哪種?
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 是一組由 .NET 生態系統中的開發人員(包括 Semantic Kernel)共同開發的核心 .NET 庫。這些庫提供了一個統一的 C# 抽象層,用于與 AI 服務交互,例如小型和大型語言模型(SLM 和 LLM)、嵌入和中間件。
目前,我們的重點是創建可由各種服務實現的抽象,所有抽象均遵循相同的核心概念。我們不打算發布針對任何特定提供商的服務而量身定制的 API。我們的目標是充當 .NET 生態系統中的統一層,使開發人員能夠選擇他們喜歡的框架和庫,同時確保整個生態系統的無縫集成和協作。
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)
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/
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);
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
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 進行文本嵌入生成場景。
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/
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
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 的發布,我們很高興能夠為 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 預覽版。我們預計該庫將在 11 月 .NET 9 發布之前一直處于預覽狀態,同時我們將繼續收集反饋。
在短期內,我們計劃:
我們期待在您的幫助下塑造 .NET 中 AI 開發的未來。
請試用 Microsoft.Extensions.AI 并分享您的反饋,以便我們能夠構建有助于您和您的團隊蓬勃發展的體驗。
文章轉自微信公眾號@DotNET技術圈