AntSK 0.2.3 版本更新:輕鬆整合 AI 本地離線模型

许泽宇發表於2024-03-23

大家好,今天和大家分享 AntSK 知識庫/智慧體專案的最新進展。

AntSK 是一個基於 .Net 8、Blazor SemanticKernel 開發的 AI 專案,旨在為開發者提供一個強大的 AI 知識庫與智慧體平臺。最新版本的專案可以在 GitHub 上找到:

https://github.com/AIDotNet/AntSK

在 AntSK 之前的版本中,我們已經成功地整合了使用 LLamaSharp 載入本地模型的 gguf 型別,但我們並沒有就此止步。為了進一步支援更多型別的本地模型,並便於測試不同模型的表現,我們更新了專案,加入了 llamafactory 的整合,並且著手準備接下來的模型微調功能。

下面是我們對 llamafactory 整合工作的一個概述:

我們知道,.Net 平臺在執行 AI 模型推理和訓練方面的元件庫並不如 Python 那樣豐富(雖然博主也是主技能.Net )。因此,我們這次選擇了一個工程上的簡化方案:直接將 llamafactory 的核心檔案整合到 AntSK 專案中,並透過使用 llamafactory 的 API 來完成整合,而非直接使用 python.net。這樣做的主要目的是降低使用門檻,即便是對 Python 不夠熟悉的開發者也能夠輕鬆上手。

首先,我們將 llamafactory 核心檔案整合到了專案中,見下圖:

我們原先考慮透過 python.net 來完成整合,但後來發現那樣會增加很多工作量。因此轉而採用了一個間接的方法:自動透過 AntSK 安裝依賴並啟動 llamafactory

程式碼例項 1:安裝python環境以及安裝 llamafactory 所需的依賴包

 public async Task PipInstall()
 {

     var cmdTask = Task.Factory.StartNew(() =>
     {

         var isProcessComplete = false;

         process = new Process
         {
             StartInfo = new ProcessStartInfo
             {
                 FileName = "pip",
                 Arguments = "install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple",
                 UseShellExecute = false,
                 RedirectStandardOutput = true,
                 RedirectStandardError = true,
                 WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory,
             }
         };  
         process.OutputDataReceived += (sender, eventArgs) =>
         {
             Console.WriteLine($"{eventArgs.Data}");
             OnLogMessageReceived(eventArgs.Data);
         };
         process.ErrorDataReceived += (sender, eventArgs) =>
         {
             Console.WriteLine($"{eventArgs.Data}");
             OnLogMessageReceived(eventArgs.Data);
         };
         process.Start();
         process.BeginOutputReadLine();
         process.BeginErrorReadLine();
         process.WaitForExit();
     }, TaskCreationOptions.LongRunning);
 }

  程式碼例項 2:啟動 llamafactory 並指定模型及模板

public async Task StartLLamaFactory(string modelName, string templateName)
 {
     var cmdTask = Task.Factory.StartNew(() =>
     {

         var isProcessComplete = false;

         process = new Process
         {
             StartInfo = new ProcessStartInfo
             {
                 FileName = "python",
                 Arguments = "api_demo.py --model_name_or_path " + modelName + " --template " + templateName + " ",
                 UseShellExecute = false,
                 RedirectStandardOutput = true,
                 RedirectStandardError=true,
                 WorkingDirectory = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "llamafactory"),
             }
         };
         process.StartInfo.Environment["CUDA_VISIBLE_DEVICES"] = "0";
         process.StartInfo.Environment["API_PORT"] = "8000";
         process.StartInfo.EnvironmentVariables["USE_MODELSCOPE_HUB"] = "1";
         process.OutputDataReceived += (sender, eventArgs) =>
         {
             Console.WriteLine($"{eventArgs.Data}");
             OnLogMessageReceived(eventArgs.Data);
         };
         process.ErrorDataReceived += (sender, eventArgs) =>
         {
             Console.WriteLine($"{eventArgs.Data}");
             OnLogMessageReceived(eventArgs.Data);
         };
         process.Start();
         process.BeginOutputReadLine();
         process.BeginErrorReadLine();
         process.WaitForExit();
     }, TaskCreationOptions.LongRunning);
 }

  

隨後,我們將模型的 API 地址設定為了 llamafactory 的代理地址。這個簡化的流程使得我們能夠迅速使用 llamafactory

效果展示:

  在建立模型時,選擇LLamaFactory,然後我們就可以選擇很多魔塔的本地模型

選擇好後我們點選啟動。

為了更容易看到安裝依賴和執行llamafactory的日誌,我們加入了類似控制檯的顯示元件:

等待模型下載結束後,我們在請求地址中設定llamafactory的服務地址(這裡預設配置的是8000埠

然後我們就可以開始聊天了!!

透過AntSK可以非常容易整合各種本地模型進行使用。

我們下一步將會整合bgeembedding模型,以及如何在AntSK中實現rerank

更進一步,我們的下一步計劃是整合模型微調功能,為此,我們已經在佈局相關工作。希望大家繼續關注我的公眾號,持續跟進我們的最新動態!未來,讓我們共同見證 AntSK 如何使 AI 整合更加簡單化、智慧化。

相關文章