iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
生成式 AI

Semantic Kernel 的魔力-用.NET探索生成式應用系列 第 22

打破迷思:Semantic Kernel 不只有 OpenAI,還能連接 Hugging Face 生成 LLM 應用!

  • 分享至 

  • xImage
  •  

許多開發者在聽到 Semantic Kernel 是 Microsoft 開源的時後,會自然聯想到是不是只能搭配 OpenAI 或 Azure OpenAI,再加上許多教學或官方示範多數使用 OpenAI 或 Azure OpenAI,更加深覺得這工具就是專門為它們設計的。

是的,OpenAI的模型非常厲害,Semantic Kernel 和 Azure OpenAI 搭配起來也很方便,但今天我要帶大家來打破這個「迷思」:Semantic Kernel 不只支援 OpenAI 和 Azure,它還能跟 Hugging Face 一起玩得超級開心!
https://ithelp.ithome.com.tw/upload/images/20241005/201265697KM7cpWTkI.png

嗯?Hugging Face 是什麼?能吃嗎?

也許有部份開發者可能還不認識Hugging Face,會疑惑:「Hugging Face?那是什麼?另一個模型?能吃嗎?」(對不起,中秋節已過)。Hugging Face 是一個專門提供開源 AI 工具和模型的社群平台。在這個平台上有各種你想像得到的模型庫,從自然語言處理(NLP)到電腦視覺(CV),應有盡有。如果你在開發 AI 應用時需要現成的模型來進行訓練、微調或是直接使用,Hugging Face 就像是個超大的「模型超市」,從大模型到小模型裡面應有盡有,而 Hugging Face 本身也提供許多免費的服務。

使用方式也很容易,你只需要上 Hugging Face 官網註冊一個帳號,便能開始使用它。當你找到想要測試或試用的模型時,可以先透過 serverless 服務透過 Serverless Inference API 呼叫,便能開始試用。首先必須先取得 HuggingFace API Tokens,只要登入平台在右上角的個人圖象進入設定頁,便能找到 Access Tokens 選項,點選後便能建立 Token,每一個Token 可以依使用情境給予不同的權限。
https://ithelp.ithome.com.tw/upload/images/20241005/20126569sxbBqqhkMm.jpg

  • 找尋模型
    透過 Model 頁面,可以根據任務、語言、資料集等條件,找尋適合的模型,但是並非所有模型都有 Serverless 服務可以使用。
    https://ithelp.ithome.com.tw/upload/images/20241005/20126569liPRT3xjTg.png

Semantic Kernel 連接 Hugging Face

首先專案除了原本必要安裝的 Semantic Kernel 套件外,為了連接 Hugging Face,所以需要再加上 Microsoft.SemanticKernel.Connectors.HuggingFace 套件,它是 Semantic Kernel 內建包含的 Hugging Face 連接器。

  • Chat Completion
    進行這個範例使用了 mistralai/Mistral-Nemo-Instruct-2407 模型, 建立 ChatCompletion 模型的應用。同樣從建立 kernel 物件開始,這裡配置了 HuggingFace 專用的連接服務 AddHuggingFaceChatCompletion,必須給予端點、API_kEY、模型名稱參數值,其中模型名稱在Hugging Face上的模型頁面就有顥示,直接取用就可以。

接者下來取得 IChatCompletionService 實作的類別,也是 Semantic Kernel 內建針對 HuggingFace Chat Completion 服務所提供的實作類別。接下來的程式碼就與先前使用 Azure OpenAI 完全一樣。

string model = "mistralai/Mistral-Nemo-Instruct-2407";

var kernel = Kernel.CreateBuilder()
.AddHuggingFaceChatCompletion(
    endpoint: new Uri(Config.huggingface_endpoint), //https://api-inference.huggingface.co/
    model: model,
    apiKey: Config.huggingface_apiKey)
.Build();

var chatCompletion = kernel.GetRequiredService<IChatCompletionService>();
var chatHistory = new ChatHistory("You are a helpful assistant. respond to the user's questions with zh-tw language.");
chatHistory.AddUserMessage("世界最大的動物是什麼?");
Console.WriteLine(await chatCompletion.GetChatMessageContentAsync(chatHistory) + "\n\n");

/*生成結果

地球上最大的動物是藍鲸(Bystaurus),它们身長可達30公尺,重量超過180噸。

*/
  • Image To Text
    進行這個範例使用了 Salesforce/blip-image-captioning-base 模型, 建立圖片到文本的應用。首先準備好一張圖片,然後建立 kernel 物件,並配置了 HuggingFace 專用的連接服務 AddHuggingFaceImageToText

接者下來取得 IImageToTextService 實作的類別,也是 Semantic Kernel 內建針對 HuggingFace ImageToText 服務所提供的實作類別。並且設定了 Prompt 執行參數,配置 MaxTokens 數為 500。

string imageToTextModel = "Salesforce/blip-image-captioning-base";
string imagePath = Path.Combine(Directory.GetCurrentDirectory(), "testimg.png"); //實驗圖

var kernel = Kernel.CreateBuilder()
.AddHuggingFaceImageToText(
    model: imageToTextModel,
    apiKey: Config.huggingface_apiKey)
.Build();

var imageToTextService = kernel.GetRequiredService<IImageToTextService>();

HuggingFacePromptExecutionSettings executionSettings = new()
{
    MaxTokens = 500
};

接著將圖片以 byte[] 型式讀取進來,轉換成 ImageContent 類型,這是 Semantic Kernel 所定義的型別。就緒後,便可以呼叫 ImageToTextService 的 GetTextContentAsync方法,將圖片資料送給模型去分析,最後取得分析結果。

// Read image content from a file
ReadOnlyMemory<byte> imageData = await File.ReadAllBytesAsync(imagePath);
ImageContent imageContent = new(new BinaryData(imageData), "image/jpeg");


// Convert image to text
var textContent = await imageToTextService.GetTextContentAsync(
            imageContent,
            new HuggingFacePromptExecutionSettings() { MaxTokens = 500 });

// Output image description
Console.WriteLine(textContent.Text);

/* 
生成結果
a robot standing in front of a network
*/

結語

與 Hugging Face 搭配的最大好處就是靈活性。Hugging Face 上有數不清的開源模型,這表示你能夠輕鬆選擇最適合自己應用的模型。而且,這裡的模型有些可能比商業模型更具特定領域的專業性,例如醫療文本分析、法律文本生成等等。這樣的多樣性,可以讓你的應用更加專業化、個性化,而不僅僅依賴於特定的商業平台。

但別誤會,這並不代表取代或放棄 OpenAI 或 Azure OpenAI。有了 Hugging Face,這兩者完全可以並行!Semantic Kernel 支援多種模型來源,所以你可以根據需求選擇最適合的工具。今天想用 OpenAI 的 GPT-4,那就連接 OpenAI;明天想切換到 Hugging Face 上的 LLama 模型,也完全沒問題。就像選擇你今天要喝哪一杯咖啡,都是看心情的事。


上一篇
AI Agent:Multi AI Agents 依目標任務委派 Agent
下一篇
打破迷思:Semantic Kernel 不只有 OpenAI,連接 Google AI 也大丈夫滴!
系列文
Semantic Kernel 的魔力-用.NET探索生成式應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言