iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
生成式 AI

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

打破迷思:Semantic Kernel 不只有 OpenAI,連接 Google AI 也大丈夫滴!

  • 分享至 

  • xImage
  •  

上一篇打破迷思示範如何連接 Hugging Face,這一次換成 Google AI 也大丈夫滴。眾所皆知目前除了 OpenAI(Azure OpenAI)之外,另一個強大的 AI 雲平台就是 Google 啦,Semantic Kernel 當然也是理所當然的支援的。Semantic Kernel 就像是總機,可以幫助開發者輕鬆接通各種不同的 AI 服務平台。這次,把它連接到 Google AI,讓你可以利用 Google 的模型來打造屬於你的 AI 應用。
https://ithelp.ithome.com.tw/upload/images/20241006/20126569DTLB4hrgy7.png

如何用 Semantic Kernel 連接 Google AI?
首先,當然是要有一個 Google Cloud 帳戶!你可以從 Google Cloud Console 註冊並啟動 AI API。然後,當你有了 API Key,接下來就可以用 Semantic Kernel 和 Google AI 開始「神仙組合」了(Google AI 註冊方式網路有許多教學相當容易,這裡就不多介紹)。這裡的流程和你連接 OpenAI 或其他平台的方式類似。Semantic Kernel,建立連接的方式非常簡單,框架會幫助你處理 API 呼叫。只要輸入正確的 API 金鑰和參數,就能讓 Google AI 進行文本生成、問答、翻譯等操作。

Semantic Kernel 連接 Google AI

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

  • 建立 kernel 物件
    這裡需要指定模型ID以及你在 Google AI Studio 所建立的 API-Key。
var kernel = Kernel.CreateBuilder()
            .AddGoogleAIGeminiChatCompletion(
                modelId: "gemini-1.5-flash", apiKey: Config.googleai_apiKey)
            .Build();
  • 取得 ChatCompletionService 服務
    Semantic Kernel 會根據 kernel 所設定的服務連結器,產生實作IChatCompletionService的物件。
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
  • 建立 LLM 參數
    使用不同的 LLM 模型會有不同的參數,這裡是搭配使用 Google AI 服務,因此建立 GeminiPromptExecutionSettings 物件並設定了 Temperature 與 MaxTokens 參數值。
GeminiPromptExecutionSettings settings = new()
{
    Temperature = 0.8,
    MaxTokens = 1000
};
  • 建立對話歷史記錄物件
    同時賦予 system prompt,要求使用繁體中文回答。
var chathistory = new ChatHistory("you are a helpful assistant. respond to the user's questions with zh-tw language.");
  • 進行對話
    將使用者的輸入做為 user prompt並加入對話歷史記錄,呼叫 chatCompletionService 的 GetChatMessageContentAsync 方法並把 settings 參數置入,調用 LLM 模型進行回覆。而回覆的生成內容同樣再加入對話歷史記錄。
string? userInput;
while (true)
{
    // Collect user input
    Console.Write("User > ");
    userInput = Console.ReadLine();
    if (userInput.Equals("exit", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }

    // Add user input
    chathistory.AddUserMessage(userInput);

    // Get the response
    var result = await chatCompletionService.GetChatMessageContentAsync(
        chathistory,
        executionSettings: settings,
        kernel: kernel);

    Console.WriteLine("Assistant > " + result);

    // Add the message from the LLM to the chat history
    chathistory.AddMessage(result.Role, result.Content ?? string.Empty);
}
  • 執行結果
User > 颱風是如何生成的
Assistant > 颱風的生成是一個複雜的過程,需要滿足幾個條件:

**1. 溫暖的海水:** 颱風需要從海面吸收大量的熱量和水分,而海水溫度至少要達到攝氏26.5度以上才能提供足夠的能量。

**2. 低氣壓系統:** 在海洋表面形成低氣壓系統,空氣會往低氣壓中心流動,形成旋轉的風。

**3. 濕度高:** 高濕度的空氣會釋放潛熱,進一步提供能量給颱風,使它增強。

**4. 弱垂直風切變:** 垂直風切變是指不同高度的風速和方向的差異,如果風切變太大,會破壞颱風的結構,導致它無法發展。

**5. 科氏力:** 地球自轉會產生科氏力,使北半球的颱風逆時針旋轉,南半球的颱風順時針旋轉。

當這些條件都滿足時,一個低氣壓系統就會逐漸發展成颱風。颱風會隨著海洋上的暖濕空氣移動,並吸取更多能量,逐漸增強,最後形成巨大的風暴。

**颱風的發展階段:**

* **熱帶低氣壓:** 最初的低氣壓系統,風速較弱,沒有明顯的中心。
* **熱帶風暴:** 風速增強,有明顯的中心,開始形成螺旋狀雲系。
* **颱風:** 風速超過每小時119公里,具有明顯的中心和螺旋狀雲系。

**颱風的影響:**

颱風會帶來強風、豪雨、暴潮等災害,嚴重影響人類生活和經濟發展。因此,做好防颱準備非常重要。

結語

由於 Semantic Kernel 支援不同的AI雲平台連接,設計系統時可以不再受限於某一個雲服務供應商!想用 OpenAI 的 GPT 系列就用 GPT,想切換到 Google 也是手起刀落的時間而已。因此能夠在同一個LLM應用中整合多種模型,根據不同的任務性質,選擇專用的模型,甚至是不同AI雲平台的模型服務,這樣的組合彈性,正是發揮了 Semantic Kernel 的價值,想想看過去要自已實作的時候,就必須了解不同平台的API差異,而現在直接使用 Semantic Kernel 用一致性的寫法,就可以對接不同的模型平台,省下了不少的時間。當然使用了框架也並非沒有缺點,例如使用框架都是會有被据限住的情況,所以要不要用,怎麼用,就需要開發者自行依各種條件做綜合評估。畢竟在求快求新的時代,如何投資你的時間創造最大的效益,也是滿重要。就像如果現在要求你寫一個網站,不可以使用任何的前後端框架,你....要做嗎 ?


上一篇
打破迷思:Semantic Kernel 不只有 OpenAI,還能連接 Hugging Face 生成 LLM 應用!
下一篇
打破迷思:Semantic Kernel 飛天接地,實現地端模型連接!
系列文
Semantic Kernel 的魔力-用.NET探索生成式應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
A10866009
iT邦新手 5 級 ‧ 2024-11-18 22:42:38

所以是 git clone sematickernel 再用nuget add semantic kernel. Google 就可以用了嗎?

Ian iT邦新手 4 級 ‧ 2024-11-29 15:04:09 檢舉

semantic kernel 與 SemanticKernel.Connectors.Google 都是從nuget 取得加入

我要留言

立即登入留言