2024年10月8日,微軟 .NET 官方部落格釋出了一篇博文 Introducing Microsoft.Extensions.AI Preview – Unified AI Building Blocks for .NET,給 .NET 開發者帶來了一個小驚喜,.NET 類庫將增加一個統一的呼叫 AI 服務的抽象介面層。
Microsoft.Extensions.AI is a set of core .NET libraries developed in collaboration with developers across the .NET ecosystem, including Semantic Kernel. These libraries provide a unified layer of C# abstractions for interacting with AI services, such as small and large language models (SLMs and LLMs), embeddings, and middleware.
這個小驚喜對我們的 AI 之旅是場及時雨。
今年3月,我們準備嘗試基於 Semantic Kernel 使用通義千問大模型開發 AI 應用。當時由於阿里雲模型服務靈積 DashScope (後來阿里雲百鍊取代了靈積)沒有提供 .NET SDK,我們自己實現了 DashScope SDK for .NET,詳見之前的博文。
在實現 DashScope .NET SDK 之後,由於 Microsoft.Extensions.AI 還沒出生,為了能在 Semantic Kernel 中使用 DashScope SDK,我們還實現了 SemanticKernel.DashScope 與 KernelMemory.DashScope,詳見之前的博文。
- SemanticKernel.DashScope 實現了3個介面:IChatCompletionService 與 ITextGenerationService 以及 ITextEmbeddingGenerationService
- KernelMemory.DashScope 實現了2個介面:ITextEmbeddingGenerator 與 ITextEmbeddingGenerator
實現這5個介面本身不是什麼問題,問題是我們在實現與 Semantic Kernel 毫無關係的 DashScope SDK 時卻要對 Semantic Kernel 與 Kernel Memory 產生依賴,這種糾纏以後將成為一種苦難。
現在救星出現了,有了 Microsoft.Extensions.AI,DashScope SDK 只需實現 Microsoft.Extensions.AI 的介面,從此與 Semantic Kernel 身處各自的世界,不再有任何牽連。
那如何讓兩個不同世界的 DashScope 與 Semantic Kernel 一起工作呢?第三者登場了,兩情相悅的二人世界不需要第三者,但互不依賴的兩個程式碼元件需要第三者——呼叫它們的應用開發者,但開發者要打通這兩個世界需要有個前提,Semantic Kernel 要透過 Microsoft.Extensions.AI 的抽象介面呼叫 AI 服務,所以在同一天,微軟 Semantic Kernel 官方部落格也釋出了一篇博文 Microsoft.Extensions.AI: Simplifying AI Integration for .NET Partners ,Semantic Kernel 支援 Microsoft.Extensions.AI 已是板上釘釘。
When Microsoft.Extensions.AI moves from preview to general availability (GA), we will enable this package in Semantic Kernel .NET
為了感謝這場及時雨,我們搶在 Semantic Kernel 之前,在 Microsoft.Extensions.AI 還處於預覽版之際,在 DashScope SDK 中實現了對 Microsoft.Extensions.AI 的支援,實現了 IChatClient 與 IEmbeddingGenerator 介面,並且在11月27日釋出了 nuget 包 Cnblogs.DashScope.AI
具體實現程式碼見 github 上的 PR https://github.com/cnblogs/dashscope-sdk/pull/51
接下來透過示例程式碼簡單體驗一下透過 Microsoft.Extensions.AI 的介面與通義千問大模型對話。
準備 .NET 控制檯專案
dotnet new console
dotnet add package Cnblogs.DashScope.AI --prerelease
在下面的 C# 程式碼中呼叫 Microsoft.Extensions.AI 中 IChatClient 介面的 CompleteAsync 方法與通義千問大模型 qwen-coder-turbo 對話
using Cnblogs.DashScope.Core;
using Microsoft.Extensions.AI;
var apiKey = "sk-xxxxxx";
var modelId = "qwen-coder-turbo";
IChatClient client = new DashScopeClient(apiKey).AsChatClient(modelId);
var response = await client.CompleteAsync("請用一兩句話談談你對部落格園AI之旅的看法");
Console.WriteLine(response.Message);
執行結果如下:
部落格園的AI之旅是一次令人興奮的技術探索,它展示了人工智慧如何在內容創作、個性化推薦和使用者互動等方面提升使用者體驗。這次旅程不僅推動了技術的進步,也為內容創作者和讀者帶來了新的可能性和便利。
由於目前 Semantic Kernel 還不支援 Microsoft.Extensions.AI,只能這樣直接呼叫 IChatClient 介面簡單體驗一下。
等 Semantic Kernel 支援 Microsoft.Extensions.AI,就不再需要我們之前實現的 SemanticKernel.DashScope 與 KernelMemory.DashScope。
今天就簡單寫到這,感謝您關注園子的 AI 之旅。