iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
生成式 AI

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

打破迷思:Semantic Kernel 飛天接地,實現地端模型連接!

  • 分享至 

  • xImage
  •  

隨著生成式 AI 的爆炸式發展,越來越多的開發者或企業希望可以在地端執行大語言模型(LLM),不僅能確保資料隱私,更能減少對雲端服務的依賴,當然這裡也涉及到企業內部的規範。在這篇文章中,將介紹如何使用 Semantic Kernel 搭配 Ollama,讓你可以在本地輕鬆執行 LLM 模型。
https://ithelp.ithome.com.tw/upload/images/20241007/20126569k5sz1NSgbl.png

什麼是 Ollama?

Ollama 是一個能夠在地端環境執行的 AI 模型管理的平台,可以實現輕鬆部署和執行許多開源 LLM 模型。Ollama 的最大亮點在於其「本地運行」的特性,特別適合那些對資料隱私有高需求的應用場景。與雲端 LLM 服務相比,使用 Ollama 能讓你完全掌控自己的模型,資料與模型間的流通完全實現在本地環境,避免了潛在的安全風險。

要在本地環境執行 Ollama,最簡單的方法之一是通過 Docker 實現容器化安裝。首先你必須先確保主機安裝 Docker,這部份可以自行上 Docker 官方參考。使用容器的好處就是不會汙染了實體本機,另一方面環境配置也都包裝好了,省事不少,想要怎麼測怎麼搞都行。

  • 安裝完 Docker 後,拉取並執行 Ollama 容器
    成功執行的話,Ollama 會在本機監聽 Port 11434 ,開啟瀏覽器查看 localhost:1434,如果有顯示 Ollama is running ,就代表 Ollama 已經成功啟動。這是使用 CPU only 環境,當然效能也會比較差。
docker run --name ollama -v ollama:/root/.ollama -p 11434:11434 ollama/ollama

如果有GPU,則可以改用以下指令

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
  • 下載模型並執行,以 Meta 的 llama3:8b 模型為例
    所有已上架的模型可以在library (ollama.com)找到。安裝完成後會顯示 success 訊息。
docker exec -it ollama ollama run llama3:8b

管理與連接 Ollama 的好幫手 - Open WebUI

有時候我們希望有更方便的方式來管理和控制這些模型,這就是 Open WebUI 上場的時候了。Open WebUI 是一個開源的 Web 界面,可以讓你更輕鬆的在本地監控、執行和調整 LLM 模型。

安裝 Open WebUI 時可依不同情境進行安裝,完裝完成後會監聽 3000 port,開啟瀏覽器進入3000 port,順利的話應該會看到註冊管理員帳號的畫面 (http://localhost:3000):

  • 安裝 Open WebUI (與 Ollama 在同一台主機)
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
  • 安裝 Open WebUI (與 Ollama 在不同主機)
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
  • 安裝 Open WebUI (與 Ollama 在不同主機)並且啟用 Nvidia GPU 支援
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda
  • Open WebUI 畫面
    如果 Ollama 在其它位置,可以進入設定頁面進行修改
    https://ithelp.ithome.com.tw/upload/images/20241007/20126569O2WD55SMp5.png

  • 對話介面
    一旦連接成功後在對話介面中就可以看到已部署的 LLM 模型,當然也可以進行對話
    https://ithelp.ithome.com.tw/upload/images/20241007/20126569QsGYo9WePZ.png

Semantic Kernel 地端模型連接

ollama 的環境採取與 OpenAI 相同連接方式,因此 Semantic Kernel 可以直接使用 AddOpenAIChatCompletion 建立模型連接服務。

  • 建立 kernel
    如果是執行在CPU環境,效能相對會比較慢,這時候會很容易遇到 timeout 情況,解決的方式可以把 HttpClient Timeout 拉長。當然如果是在生產環境的話,就是要升級硬體啦。
var kernel = Kernel.CreateBuilder()
            .AddOpenAIChatCompletion(
                modelId: "Llama-3-TW-8B-Instruct",
                apiKey: string.Empty,
                endpoint: new Uri("http://172.16.3.105:11434"), //ollama endpoint
                httpClient: new HttpClient() { Timeout = TimeSpan.FromSeconds(600) }
                )
            .Build();

  • 建立對話歷史記錄物件
    同時賦予 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 方法,調用 LLM 模型進行回覆。而回覆的生成內容同樣再加入對話歷史記錄。
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

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,
        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 > 我非常了解台灣。台灣是一個美麗且充滿活力的國家,擁有豐富的文化和歷史。在這裡,我可以回答您的任何問題,並提供您最準確、全面的資訊。請隨時向我提問關於台灣或其他主題的問題!
User >

結語

透過 Semantic Kernel 搭配 Ollama,可以很輕鬆的實現在本地運行 LLM 模型。不僅可以利用 Docker 快速部署 Ollama,還能透過 Open WebUI 管理模型。這樣的組合讓有地端需求的企業或開發者得快速搭建本地 LLM 執行環境。當然前題還是要有足夠的硬體才能得以支撐,至於雲端與地端的成本效益評估,還是得加計其它綜合條件來評估,例如同時使用人數、頻率、模型Token數等。


上一篇
打破迷思:Semantic Kernel 不只有 OpenAI,連接 Google AI 也大丈夫滴!
下一篇
LLM 別再亂來!收服 Prompt 和 Plugin Function
系列文
Semantic Kernel 的魔力-用.NET探索生成式應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言