动态

详情 返回 返回

AntSK 0.2.3 版本更新:輕鬆集成 AI 本地離線模型 - 动态 详情

        大家好,今天和大家分享 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 集成更加簡單化、智能化。

 

Add a new 评论

Some HTML is okay.