
企業(yè)工商數(shù)據(jù)API用哪種?
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 是一組由 .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 為 AI 服務(wù)提供了統(tǒng)一的 API 抽象,類似于我們成功的日志記錄和依賴項(xiàng)注入 (DI) 抽象。我們的目標(biāo)是為緩存、遙測、工具調(diào)用和其他可與任何提供商配合使用的常見任務(wù)提供標(biāo)準(zhǔn)實(shí)現(xiàn)。
這些抽象讓您可以輕松地在各種場景中使用慣用的 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)。
連接和使用 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)
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 進(jìn)行文本嵌入生成場景。
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 的發(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
如上所述,我們目前正在發(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ù)圈
企業(yè)工商數(shù)據(jù)API用哪種?
2024年創(chuàng)建社交媒體帖子的最佳圖像工具API
2024年小型企業(yè)的7個(gè)最佳短信應(yīng)用API
用gin寫簡單的crud后端API接口
最新LangChain+GLM4開發(fā)AI應(yīng)用程序系列(一):快速入門篇
深度解析:臨床試驗(yàn)數(shù)據(jù)庫CT.gov與API接口指南
2024年您產(chǎn)品必備的10大AI API推薦
GraphRAG:基于PolarDB+通義千問api+LangChain的知識(shí)圖譜定制實(shí)踐
使用Node.js、Express和MySQL構(gòu)建REST API
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)